<?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>134261</bug_id>
          
          <creation_ts>2014-06-24 12:05:41 -0700</creation_ts>
          <short_desc>use references instead of pointers in RenderTheme</short_desc>
          <delta_ts>2014-06-25 14:05:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>134106</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>peavo</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1018039</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-24 12:05:41 -0700</bug_when>
    <thetext>There is inconsistent use of references, and I don&apos;t see any reason why there shouldn&apos;t be references.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018041</commentid>
    <comment_count>1</comment_count>
      <attachid>233727</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-24 12:06:54 -0700</bug_when>
    <thetext>Created attachment 233727
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018060</commentid>
    <comment_count>2</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-06-24 12:48:45 -0700</bug_when>
    <thetext>wait for the elf/gtk bots. they both have dependencies on the theme signature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018140</commentid>
    <comment_count>3</comment_count>
      <attachid>233754</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-24 15:38:37 -0700</bug_when>
    <thetext>Created attachment 233754
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018155</commentid>
    <comment_count>4</comment_count>
      <attachid>233758</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-24 16:14:13 -0700</bug_when>
    <thetext>Created attachment 233758
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018173</commentid>
    <comment_count>5</comment_count>
      <attachid>233764</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-24 16:46:41 -0700</bug_when>
    <thetext>Created attachment 233764
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018177</commentid>
    <comment_count>6</comment_count>
      <attachid>233766</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-24 16:59:40 -0700</bug_when>
    <thetext>Created attachment 233766
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018194</commentid>
    <comment_count>7</comment_count>
      <attachid>233769</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-24 17:36:39 -0700</bug_when>
    <thetext>Created attachment 233769
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018222</commentid>
    <comment_count>8</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-06-24 19:01:55 -0700</bug_when>
    <thetext>one more to go :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018257</commentid>
    <comment_count>9</comment_count>
      <attachid>233787</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-24 22:11:02 -0700</bug_when>
    <thetext>Created attachment 233787
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018353</commentid>
    <comment_count>10</comment_count>
      <attachid>233820</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-25 09:48:01 -0700</bug_when>
    <thetext>Created attachment 233820
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018360</commentid>
    <comment_count>11</comment_count>
      <attachid>233822</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-25 10:00:26 -0700</bug_when>
    <thetext>Created attachment 233822
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018377</commentid>
    <comment_count>12</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-25 11:28:34 -0700</bug_when>
    <thetext>*** Bug 134106 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018405</commentid>
    <comment_count>13</comment_count>
      <attachid>233822</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-25 14:00:08 -0700</bug_when>
    <thetext>Comment on attachment 233822
Patch

Rejecting attachment 233822 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 233822, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

/Volumes/Data/EWS/WebKit/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://webkit-queues.appspot.com/results/5171847423328256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018407</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-25 14:05:31 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/170435</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233727</attachid>
            <date>2014-06-24 12:06:54 -0700</date>
            <delta_ts>2014-06-24 15:38:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134261-20140624120633.patch</filename>
            <type>text/plain</type>
            <size>91157</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNCBAQAorMjAxNC0wNi0yNCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSByZWZl
cmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMgaW4gUmVuZGVyVGhlbWUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQyNjEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKToK
KyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVTcGluQnV0dG9uKToKKyAgICAgICAgKiBo
dG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU2xpZGVyVGh1bWI6OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpwYWludE91
dGxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhQ29udHJvbHM6OmFkanVzdE1lZGlhU2xpZGVyVGh1
bWJTaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSk6CisgICAgICAgIChSZW5kZXJNZW51TGlz
dDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoUmVuZGVyTWVudUxp
c3Q6Om1lbnVTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1ldGVyOjp1cGRhdGVMb2dpY2FsV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWV0ZXI6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6cGFpbnRPdXRsaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJvZ3Jlc3M6OnVwZGF0ZUFuaW1hdGlvblN0
YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjppc0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnN1cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzdGF0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFRleHRBcmVhU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TWV0ZXJTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6bWV0ZXJTaXplRm9yQm91bmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dy
ZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphbmltYXRpb25EdXJhdGlv
bkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RQ
cm9ncmVzc0JhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzaG91bGRI
YXZlU3BpbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TWVk
aWFDb250cm9sU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNs
aWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNs
aWRlclRodW1iU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNs
aWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2Vh
cmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c3VwcG9ydHNIb3Zlcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6bWluaW11bU1lbnVMaXN0U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBvcHVwTWVudVNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjpzZXRCdXR0b25TaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Q2hlY2tib3hTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUlPUzo6aXNDb250cm9sU3R5bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lSU9TOjphZGp1c3RSYWRpb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lSU9TOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSU9TOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGp1c3RTbGlkZXJUaHVtYlNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJv
Z3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OmFkanVzdFNlYXJj
aEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1
dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpzZXRCdXR0b25T
aXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6aXNDb250cm9sU3R5bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFj
Ojpjb250cm9sU2l6ZUZvckZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnNpemVGb3JGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzaXplRm9y
U3lzdGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0U2l6ZUZy
b21Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNv
bnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6
ZUZvclN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVz
dFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1
c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWlu
dE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjptZXRlclNpemVG
b3JCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWV0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmxldmVsSW5kaWNhdG9yRm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0JhclJlY3RGb3JCb3Vu
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6Om1pbmltdW1Qcm9ncmVzc0Jh
ckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YW5pbWF0aW9uUmVw
ZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0
b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBvcHVwTWVudVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaENlbGxTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoRmllbGRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjph
ZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjph
ZGp1c3RTbGlkZXJUaHVtYlNpemUpOgorICAgICAgICBVc2UgcmVmZXJlbmNlcyBpbnN0ZWFkIG9m
IHBvaW50ZXJzLgorCiAyMDE0LTA2LTI0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZW1vdmUgcmVmZXJlbmNlcyB0byAiU2hhZGVyLmgiIHdoaWNoIGRvZXNu
J3QgY3VycmVudGx5IGV4aXN0IGluIHRoZSBwcm9qZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMyLDggKzEzMzIsMTAgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZQogICAgIH0KIAogICAgIC8v
IExldCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4K
LSAgICBpZiAoc3R5bGUuaGFzQXBwZWFyYW5jZSgpKQotICAgICAgICBSZW5kZXJUaGVtZTo6ZGVm
YXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKCp0aGlzLCBzdHlsZSwgZSwgbV9zdGF0ZS5oYXNVQUFw
cGVhcmFuY2UoKSwgbV9zdGF0ZS5ib3JkZXJEYXRhKCksIG1fc3RhdGUuYmFja2dyb3VuZERhdGEo
KSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgaWYgKHN0eWxlLmhhc0FwcGVhcmFu
Y2UoKSkgeworICAgICAgICBBU1NFUlQoZSk7CisgICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0
VGhlbWUoKS0+YWRqdXN0U3R5bGUoKnRoaXMsIHN0eWxlLCAqZSwgbV9zdGF0ZS5oYXNVQUFwcGVh
cmFuY2UoKSwgbV9zdGF0ZS5ib3JkZXJEYXRhKCksIG1fc3RhdGUuYmFja2dyb3VuZERhdGEoKSwg
bV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZSBm
aXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHlsZS4KICAgICBp
ZiAoc3R5bGUuaGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRIYXZlU3Bp
bkIKIHsKICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50KCkuZG9jdW1lbnQoKTsKICAg
ICBSZWZQdHI8UmVuZGVyVGhlbWU+IHRoZW1lID0gZG9jdW1lbnQucGFnZSgpID8gJmRvY3VtZW50
LnBhZ2UoKS0+dGhlbWUoKSA6IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKTsKLSAgICByZXR1
cm4gdGhlbWUtPnNob3VsZEhhdmVTcGluQnV0dG9uKCZlbGVtZW50KCkpOworICAgIHJldHVybiB0
aGVtZS0+c2hvdWxkSGF2ZVNwaW5CdXR0b24oZWxlbWVudCgpKTsKIH0KIAogdm9pZCBUZXh0Rmll
bGRJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzAz
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NCw4ICs5NCwxMCBAQCB2b2lkIFJlbmRlclNsaWRlclRodW1i
Ojp1cGRhdGVBcHBlYXJhbmNlCiAgICAgICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYVZv
bHVtZVNsaWRlclRodW1iUGFydCk7CiAgICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFu
Y2UoKSA9PSBNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJQYXJ0KQogICAgICAgICBzdHlsZSgp
LnNldEFwcGVhcmFuY2UoTWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLSAg
ICBpZiAoc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIHRoZW1lKCkuYWRqdXN0U2xp
ZGVyVGh1bWJTaXplKCZzdHlsZSgpLCBlbGVtZW50KCkpOworICAgIGlmIChzdHlsZSgpLmhhc0Fw
cGVhcmFuY2UoKSkgeworICAgICAgICBBU1NFUlQoZWxlbWVudCgpKTsKKyAgICAgICAgdGhlbWUo
KS5hZGp1c3RTbGlkZXJUaHVtYlNpemUoc3R5bGUoKSwgKmVsZW1lbnQoKSk7CisgICAgfQogfQog
CiBib29sIFJlbmRlclNsaWRlclRodW1iOjppc1NsaWRlclRodW1iKCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxNzAzNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ5MSwxMCArMTQ5MSwxMCBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRs
aW5lKFBhaW50SW5mCiAKICAgICBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAg
ICAgLy8gT25seSBwYWludCB0aGUgZm9jdXMgcmluZyBieSBoYW5kIGlmIHRoZSB0aGVtZSBpc24n
dCBhYmxlIHRvIGRyYXcgaXQuCi0gICAgaWYgKHN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRv
KCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1c1JpbmcoJnN0eWxlVG9Vc2UpKQorICAgIGlmIChz
dHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNS
aW5nKHN0eWxlVG9Vc2UpKQogICAgICAgICBwYWludEZvY3VzUmluZyhwYWludEluZm8sIHBhaW50
T2Zmc2V0LCAmc3R5bGVUb1VzZSk7CiAKLSAgICBpZiAoaGFzT3V0bGluZUFubm90YXRpb24oKSAm
JiAhc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0Zv
Y3VzUmluZygmc3R5bGVUb1VzZSkpCisgICAgaWYgKGhhc091dGxpbmVBbm5vdGF0aW9uKCkgJiYg
IXN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1
c1Jpbmcoc3R5bGVUb1VzZSkpCiAgICAgICAgIGFkZFBERlVSTFJlY3QocGFpbnRJbmZvLCBwYWlu
dE9mZnNldCk7CiAKICAgICBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCA9IHBhaW50
SW5mby5jb250ZXh0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlh
Q29udHJvbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZWRpYUNvbnRyb2xzLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEs
MTAgKzEwMSwxMCBAQCBzdGF0aWMgRmxvYXRSZWN0IGdldFVuem9vbWVkUmVjdEFuZEFkanVzCiBz
dGF0aWMgY29uc3QgaW50IG1lZGlhU2xpZGVyVGh1bWJXaWR0aCA9IDEzOwogc3RhdGljIGNvbnN0
IGludCBtZWRpYVNsaWRlclRodW1iSGVpZ2h0ID0gMTQ7CiAKLXZvaWQgUmVuZGVyTWVkaWFDb250
cm9sczo6YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKQordm9p
ZCBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSYgc3R5bGUpCiB7CiAgICAgaW50IHBhcnQ7Ci0gICAgc3dpdGNoIChzdHlsZS0+YXBwZWFy
YW5jZSgpKSB7CisgICAgc3dpdGNoIChzdHlsZS5hcHBlYXJhbmNlKCkpIHsKICAgICBjYXNlIE1l
ZGlhU2xpZGVyVGh1bWJQYXJ0OgogICAgICAgICBwYXJ0ID0gTWVkaWFTbGlkZXJUaHVtYjsKICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFD
b250cm9scy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xzLmgJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcg
QEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHN0YXRpYyBib29sIHBhaW50TWVk
aWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUsIGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICBzdGF0aWMgdm9pZCBh
ZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSopOworICAgIHN0YXRpYyB2b2lk
IGFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJik7CiAjZW5kaWYKICAgICBz
dGF0aWMgSW50UG9pbnQgdm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24oUmVuZGVyQm94
KiwgY29uc3QgSW50U2l6ZSYpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDEwICsx
MjUsMTAgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSgpCiAgICAgICAg
IGlubmVyU3R5bGUuc2V0QWxpZ25TZWxmKEFsaWduRmxleFN0YXJ0KTsKICAgICB9CiAKLSAgICBp
bm5lclN0eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRk
aW5nTGVmdCgmc3R5bGUoKSksIEZpeGVkKSk7Ci0gICAgaW5uZXJTdHlsZS5zZXRQYWRkaW5nUmln
aHQoTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCgmc3R5bGUoKSksIEZp
eGVkKSk7Ci0gICAgaW5uZXJTdHlsZS5zZXRQYWRkaW5nVG9wKExlbmd0aCh0aGVtZSgpLnBvcHVw
SW50ZXJuYWxQYWRkaW5nVG9wKCZzdHlsZSgpKSwgRml4ZWQpKTsKLSAgICBpbm5lclN0eWxlLnNl
dFBhZGRpbmdCb3R0b20oTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20o
JnN0eWxlKCkpLCBGaXhlZCkpOworICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ0xlZnQoTGVuZ3Ro
KHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KHN0eWxlKCkpLCBGaXhlZCkpOworICAg
IGlubmVyU3R5bGUuc2V0UGFkZGluZ1JpZ2h0KExlbmd0aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQ
YWRkaW5nUmlnaHQoc3R5bGUoKSksIEZpeGVkKSk7CisgICAgaW5uZXJTdHlsZS5zZXRQYWRkaW5n
VG9wKExlbmd0aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKHN0eWxlKCkpLCBGaXhl
ZCkpOworICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ0JvdHRvbShMZW5ndGgodGhlbWUoKS5wb3B1
cEludGVybmFsUGFkZGluZ0JvdHRvbShzdHlsZSgpKSwgRml4ZWQpKTsKIAogICAgIGlmIChkb2N1
bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuc2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVy
YWwoKSkgewogICAgICAgICAvLyBJdGVtcyBpbiB0aGUgcG9wdXAgd2lsbCBub3QgcmVzcGVjdCB0
aGUgQ1NTIHRleHQtYWxpZ24gYW5kIGRpcmVjdGlvbiBwcm9wZXJ0aWVzLApAQCAtMzI2LDcgKzMy
Niw3IEBAIExheW91dFJlY3QgUmVuZGVyTWVudUxpc3Q6OmNvbnRyb2xDbGlwUmUKIAogdm9pZCBS
ZW5kZXJNZW51TGlzdDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYg
bWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0CiB7Ci0g
ICAgbWF4TG9naWNhbFdpZHRoID0gc3RkOjptYXgobV9vcHRpb25zV2lkdGgsIHRoZW1lKCkubWlu
aW11bU1lbnVMaXN0U2l6ZSgmc3R5bGUoKSkpICsgbV9pbm5lckJsb2NrLT5wYWRkaW5nTGVmdCgp
ICsgbV9pbm5lckJsb2NrLT5wYWRkaW5nUmlnaHQoKTsKKyAgICBtYXhMb2dpY2FsV2lkdGggPSBz
dGQ6Om1heChtX29wdGlvbnNXaWR0aCwgdGhlbWUoKS5taW5pbXVtTWVudUxpc3RTaXplKHN0eWxl
KCkpKSArIG1faW5uZXJCbG9jay0+cGFkZGluZ0xlZnQoKSArIG1faW5uZXJCbG9jay0+cGFkZGlu
Z1JpZ2h0KCk7CiAgICAgaWYgKCFzdHlsZSgpLndpZHRoKCkuaXNQZXJjZW50KCkpCiAgICAgICAg
IG1pbkxvZ2ljYWxXaWR0aCA9IG1heExvZ2ljYWxXaWR0aDsKIH0KQEAgLTU2OSw3ICs1NjksNyBA
QCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6bWVudVN0eWxlCiAgICAgcmV0dXJuIFBv
cHVwTWVudVN0eWxlKHN0eWxlVG9Vc2UudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpLCBzdHlsZVRvVXNlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvciksCiAgICAgICAgIHN0eWxlVG9Vc2UuZm9udCgpLCBzdHlsZVRvVXNlLnZpc2li
aWxpdHkoKSA9PSBWSVNJQkxFLCBzdHlsZVRvVXNlLmRpc3BsYXkoKSA9PSBOT05FLCBzdHlsZSgp
Lmhhc0FwcGVhcmFuY2UoKSwgc3R5bGVUb1VzZS50ZXh0SW5kZW50KCksCiAgICAgICAgIHN0eWxl
KCkuZGlyZWN0aW9uKCksIGlzT3ZlcnJpZGUoc3R5bGUoKS51bmljb2RlQmlkaSgpKSwgUG9wdXBN
ZW51U3R5bGU6OkRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IsCi0gICAgICAgIFBvcHVwTWVudVN0eWxl
OjpTZWxlY3RQb3B1cCwgdGhlbWUoKS5wb3B1cE1lbnVTaXplKCZzdHlsZVRvVXNlLCBhYnNCb3Vu
ZHMpKTsKKyAgICAgICAgUG9wdXBNZW51U3R5bGU6OlNlbGVjdFBvcHVwLCB0aGVtZSgpLnBvcHVw
TWVudVNpemUoc3R5bGVUb1VzZSwgYWJzQm91bmRzKSk7CiB9CiAKIEhvc3RXaW5kb3cqIFJlbmRl
ck1lbnVMaXN0Ojpob3N0V2luZG93KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1ldGVyLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBA
QCB2b2lkIFJlbmRlck1ldGVyOjp1cGRhdGVMb2dpY2FsV2lkdGgoKQogewogICAgIFJlbmRlckJv
eDo6dXBkYXRlTG9naWNhbFdpZHRoKCk7CiAKLSAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IHRoZW1l
KCkubWV0ZXJTaXplRm9yQm91bmRzKHRoaXMsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhbWVSZWN0
KCkpKTsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IHRoZW1lKCkubWV0ZXJTaXplRm9yQm91bmRz
KCp0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYW1lUmVjdCgpKSk7CiAgICAgc2V0TG9naWNh
bFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFtZVNpemUud2lkdGgoKSA6IGZy
YW1lU2l6ZS5oZWlnaHQoKSk7CiB9CiAKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBSZW5kZXJNZXRl
cjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTAogICAgICAgICBmcmFtZS5zZXRIZWlnaHQoY29tcHV0
ZWRWYWx1ZXMubV9leHRlbnQpOwogICAgIGVsc2UKICAgICAgICAgZnJhbWUuc2V0V2lkdGgoY29t
cHV0ZWRWYWx1ZXMubV9leHRlbnQpOwotICAgIEludFNpemUgZnJhbWVTaXplID0gdGhlbWUoKS5t
ZXRlclNpemVGb3JCb3VuZHModGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFtZSkpOworICAg
IEludFNpemUgZnJhbWVTaXplID0gdGhlbWUoKS5tZXRlclNpemVGb3JCb3VuZHMoKnRoaXMsIHBp
eGVsU25hcHBlZEludFJlY3QoZnJhbWUpKTsKICAgICBjb21wdXRlZFZhbHVlcy5tX2V4dGVudCA9
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFtZVNpemUuaGVpZ2h0KCkgOiBmcmFtZVNp
emUud2lkdGgoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUzLDEwICsxMDUzLDEwIEBAIHZv
aWQgUmVuZGVyT2JqZWN0OjpwYWludE91dGxpbmUoUGFpbnRJbmYKICAgICBpbnQgb3V0bGluZU9m
ZnNldCA9IHN0eWxlVG9Vc2Uub3V0bGluZU9mZnNldCgpOwogCiAgICAgLy8gT25seSBwYWludCB0
aGUgZm9jdXMgcmluZyBieSBoYW5kIGlmIHRoZSB0aGVtZSBpc24ndCBhYmxlIHRvIGRyYXcgaXQu
Ci0gICAgaWYgKHN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3Vw
cG9ydHNGb2N1c1JpbmcoJnN0eWxlVG9Vc2UpKQorICAgIGlmIChzdHlsZVRvVXNlLm91dGxpbmVT
dHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKHN0eWxlVG9Vc2UpKQog
ICAgICAgICBwYWludEZvY3VzUmluZyhwYWludEluZm8sIHBhaW50UmVjdC5sb2NhdGlvbigpLCAm
c3R5bGVUb1VzZSk7CiAKLSAgICBpZiAoaGFzT3V0bGluZUFubm90YXRpb24oKSAmJiAhc3R5bGVU
b1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZygm
c3R5bGVUb1VzZSkpCisgICAgaWYgKGhhc091dGxpbmVBbm5vdGF0aW9uKCkgJiYgIXN0eWxlVG9V
c2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1c1Jpbmcoc3R5
bGVUb1VzZSkpCiAgICAgICAgIGFkZFBERlVSTFJlY3QocGFpbnRJbmZvLCBwYWludFJlY3QubG9j
YXRpb24oKSk7CiAKICAgICBpZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSB8fCBz
dHlsZVRvVXNlLm91dGxpbmVTdHlsZSgpID09IEJOT05FKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MSw4ICs5MSw4IEBAIHZvaWQgUmVuZGVyUHJvZ3Jlc3M6OmFuaW1hdGlvblRpbWVyRmlyZWQK
IAogdm9pZCBSZW5kZXJQcm9ncmVzczo6dXBkYXRlQW5pbWF0aW9uU3RhdGUoKQogewotICAgIG1f
YW5pbWF0aW9uRHVyYXRpb24gPSB0aGVtZSgpLmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NC
YXIodGhpcyk7Ci0gICAgbV9hbmltYXRpb25SZXBlYXRJbnRlcnZhbCA9IHRoZW1lKCkuYW5pbWF0
aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcih0aGlzKTsKKyAgICBtX2FuaW1hdGlvbkR1
cmF0aW9uID0gdGhlbWUoKS5hbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKCp0aGlzKTsK
KyAgICBtX2FuaW1hdGlvblJlcGVhdEludGVydmFsID0gdGhlbWUoKS5hbmltYXRpb25SZXBlYXRJ
bnRlcnZhbEZvclByb2dyZXNzQmFyKCp0aGlzKTsKIAogICAgIGJvb2wgYW5pbWF0aW5nID0gc3R5
bGUoKS5oYXNBcHBlYXJhbmNlKCkgJiYgbV9hbmltYXRpb25EdXJhdGlvbiA+IDA7CiAgICAgaWYg
KGFuaW1hdGluZyA9PSBtX2FuaW1hdGluZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBS
ZW5kZXJUaGVtZTo6UmVuZGVyVGhlbWUoKQogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUs
IEVsZW1lbnQqIGUsIGJvb2wgVUFIYXNBcHBlYXJhbmNlLCBjb25zdCBCb3JkZXJEYXRhJiBib3Jk
ZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcikKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSwgYm9vbCBVQUhhc0FwcGVh
cmFuY2UsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3Jv
dW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQogewogICAgIC8vIEZvcmNlIGlubGlu
ZSBhbmQgdGFibGUgZGlzcGxheSBzdHlsZXMgdG8gYmUgaW5saW5lLWJsb2NrIChleGNlcHQgZm9y
IHRhYmxlLSB3aGljaCBpcyBibG9jaykKICAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBw
ZWFyYW5jZSgpOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHls
ZShTdHlsZVJlc29sCiAgICAgZWxzZSBpZiAoc3R5bGUuZGlzcGxheSgpID09IENPTVBBQ1QgfHwg
c3R5bGUuZGlzcGxheSgpID09IExJU1RfSVRFTSB8fCBzdHlsZS5kaXNwbGF5KCkgPT0gVEFCTEUp
CiAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoQkxPQ0spOwogCi0gICAgaWYgKFVBSGFzQXBwZWFy
YW5jZSAmJiBpc0NvbnRyb2xTdHlsZWQoJnN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tn
cm91bmRDb2xvcikpIHsKKyAgICBpZiAoVUFIYXNBcHBlYXJhbmNlICYmIGlzQ29udHJvbFN0eWxl
ZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpKSB7CiAgICAgICAg
IGlmIChwYXJ0ID09IE1lbnVsaXN0UGFydCkgewogICAgICAgICAgICAgc3R5bGUuc2V0QXBwZWFy
YW5jZShNZW51bGlzdEJ1dHRvblBhcnQpOwogICAgICAgICAgICAgcGFydCA9IE1lbnVsaXN0QnV0
dG9uUGFydDsKQEAgLTE5MiwyNSArMTkyLDI1IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0
eWxlKFN0eWxlUmVzb2wKICAgICBzd2l0Y2ggKHN0eWxlLmFwcGVhcmFuY2UoKSkgewogI2lmICFV
U0UoTkVXX1RIRU1FKQogICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgICAgICByZXR1cm4gYWRq
dXN0Q2hlY2tib3hTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0
dXJuIGFkanVzdENoZWNrYm94U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNh
c2UgUmFkaW9QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0UmFkaW9TdHlsZSgmc3R5bGVSZXNv
bHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFJhZGlvU3R5bGUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBT
cXVhcmVCdXR0b25QYXJ0OgogICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBC
dXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0QnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2
ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RCdXR0b25TdHlsZShzdHlsZVJl
c29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0OgotICAgICAg
ICByZXR1cm4gYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHls
ZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShzdHlsZVJl
c29sdmVyLCBzdHlsZSwgZSk7CiAjZW5kaWYKICAgICBjYXNlIFRleHRGaWVsZFBhcnQ6Ci0gICAg
ICAgIHJldHVybiBhZGp1c3RUZXh0RmllbGRTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBl
KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlKTsKICAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFRl
eHRBcmVhU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBh
ZGp1c3RUZXh0QXJlYVN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIE1l
bnVsaXN0UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0U3R5bGUoJnN0eWxlUmVz
b2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RNZW51TGlzdFN0eWxlKHN0
eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKLSAg
ICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5
bGUsICplKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgTWVkaWFQbGF5QnV0dG9uUGFydDoKICAgICBj
YXNlIE1lZGlhQ3VycmVudFRpbWVQYXJ0OgogICAgIGNhc2UgTWVkaWFUaW1lUmVtYWluaW5nUGFy
dDoKQEAgLTIxOCwyOSArMjE4LDI5IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0
eWxlUmVzb2wKICAgICBjYXNlIE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b25QYXJ0OgogICAgIGNh
c2UgTWVkaWFNdXRlQnV0dG9uUGFydDoKICAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyQ29udGFp
bmVyUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lZGlhQ29udHJvbFN0eWxlKCZzdHlsZVJl
c29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0TWVkaWFDb250cm9sU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgTWVkaWFTbGlkZXJQYXJ0Ogog
ICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJQYXJ0OgogICAgIGNhc2UgTWVkaWFGdWxsU2NyZWVu
Vm9sdW1lU2xpZGVyUGFydDoKICAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0OgogICAgIGNh
c2UgU2xpZGVyVmVydGljYWxQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2xpZGVyVHJhY2tT
dHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNs
aWRlclRyYWNrU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2xpZGVy
VGh1bWJIb3Jpem9udGFsUGFydDoKICAgICBjYXNlIFNsaWRlclRodW1iVmVydGljYWxQYXJ0Ogot
ICAgICAgICByZXR1cm4gYWRqdXN0U2xpZGVyVGh1bWJTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0
eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNv
bHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgotICAgICAgICByZXR1
cm4gYWRqdXN0U2VhcmNoRmllbGRTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAg
ICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUs
IGUpOwogICAgIGNhc2UgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25QYXJ0OgotICAgICAgICByZXR1
cm4gYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0
eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmllbGREZWNvcmF0
aW9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRT
dHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNl
YXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAg
ICAgY2FzZSBTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydDoKLSAgICAgICAgcmV0dXJu
IGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoJnN0eWxlUmVzb2x2
ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25TdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAg
ICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKHN0eWxlUmVzb2x2
ZXIsIHN0eWxlLCBlKTsKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICBjYXNlIFBy
b2dyZXNzQmFyUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFByb2dyZXNzQmFyU3R5bGUoJnN0
eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RQcm9ncmVzc0Jh
clN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICNlbmRpZgogI2lmIEVOQUJMRShNRVRF
Ul9FTEVNRU5UKQogICAgIGNhc2UgTWV0ZXJQYXJ0OgpAQCAtMjQ4LDExICsyNDgsMTEgQEAgdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgIGNhc2UgQ29udGludW91
c0NhcGFjaXR5TGV2ZWxJbmRpY2F0b3JQYXJ0OgogICAgIGNhc2UgRGlzY3JldGVDYXBhY2l0eUxl
dmVsSW5kaWNhdG9yUGFydDoKICAgICBjYXNlIFJhdGluZ0xldmVsSW5kaWNhdG9yUGFydDoKLSAg
ICAgICAgcmV0dXJuIGFkanVzdE1ldGVyU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7
CisgICAgICAgIHJldHVybiBhZGp1c3RNZXRlclN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBl
KTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgY2FzZSBJbnB1dFNwZWVj
aEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9u
U3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RJ
bnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgY2FzZSBJbWFnZUNvbnRyb2xz
QnV0dG9uUGFydDoKQEAgLTY5Myw5ICs2OTMsOSBAQCBib29sIFJlbmRlclRoZW1lOjppc0NvbnRy
b2xDb250YWluZXIoQ29uCiAgICAgcmV0dXJuIGFwcGVhcmFuY2UgIT0gQ2hlY2tib3hQYXJ0ICYm
IGFwcGVhcmFuY2UgIT0gUmFkaW9QYXJ0OwogfQogCi1ib29sIFJlbmRlclRoZW1lOjppc0NvbnRy
b2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBib3Jk
ZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVy
JiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAogewotICAg
IHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIHN3aXRjaCAoc3R5bGUuYXBwZWFy
YW5jZSgpKSB7CiAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKICAgICBjYXNlIFNxdWFyZUJ1dHRv
blBhcnQ6CiAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKQEAgLTcxMiw5ICs3MTIsOSBAQCBi
b29sIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgCiAgICAgY2FzZSBUZXh0Rmll
bGRQYXJ0OgogICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgogICAgICAgICAvLyBUZXN0IHRoZSBzdHls
ZSB0byBzZWUgaWYgdGhlIFVBIGJvcmRlciBhbmQgYmFja2dyb3VuZCBtYXRjaC4KLSAgICAgICAg
cmV0dXJuIChzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVyCi0gICAgICAgICAgICB8fCAqc3R5bGUt
PmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNrZ3JvdW5kCi0gICAgICAgICAgICB8fCBzdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSAhPSBiYWNr
Z3JvdW5kQ29sb3IpOworICAgICAgICByZXR1cm4gKHN0eWxlLmJvcmRlcigpICE9IGJvcmRlcgor
ICAgICAgICAgICAgfHwgKnN0eWxlLmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNrZ3JvdW5kCisg
ICAgICAgICAgICB8fCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3IpICE9IGJhY2tncm91bmRDb2xvcik7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTczMSwxNSArNzMxLDE1IEBAIHZvaWQgUmVuZGVyVGhl
bWU6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnMKICNlbmRpZgogfQogCi1ib29sIFJlbmRlclRoZW1l
OjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citib29s
IFJlbmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpICYmIHN0eWxlLT5h
cHBlYXJhbmNlKCkgIT0gVGV4dEZpZWxkUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFRl
eHRBcmVhUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IE1lbnVsaXN0QnV0dG9uUGFydCAm
JiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IExpc3Rib3hQYXJ0KTsKKyAgICByZXR1cm4gKHN0eWxl
Lmhhc0FwcGVhcmFuY2UoKSAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gVGV4dEZpZWxkUGFydCAm
JiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gVGV4dEFyZWFQYXJ0ICYmIHN0eWxlLmFwcGVhcmFuY2Uo
KSAhPSBNZW51bGlzdEJ1dHRvblBhcnQgJiYgc3R5bGUuYXBwZWFyYW5jZSgpICE9IExpc3Rib3hQ
YXJ0KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKGNvbnN0IFJlbmRlck9i
amVjdCYgbywgQ29udHJvbFN0YXRlczo6U3RhdGVzIHN0YXRlKSBjb25zdAogewogICAgIC8vIERl
ZmF1bHQgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGUgY29udHJvbHMgZG9uJ3QgcmVzcG9uZCB0
byBjaGFuZ2VzIGluIDpob3ZlciBzdGF0ZQotICAgIGlmIChzdGF0ZSA9PSBDb250cm9sU3RhdGVz
OjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVyKCZvLnN0eWxlKCkpKQorICAgIGlmIChzdGF0
ZSA9PSBDb250cm9sU3RhdGVzOjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVyKG8uc3R5bGUo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEFzc3VtZSBwcmVzc2VkIHN0YXRl
IGlzIG9ubHkgcmVzcG9uZGVkIHRvIGlmIHRoZSBjb250cm9sIGlzIGVuYWJsZWQuCkBAIC05MTAs
NyArOTEwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNEZWZhdWx0KGNvbnN0IFJlbmRlcgogCiAj
aWYgIVVTRShORVdfVEhFTUUpCiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94U3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIEEgc3VtbWFyeSBvZiB0
aGUgcnVsZXMgZm9yIGNoZWNrYm94IGRlc2lnbmVkIHRvIG1hdGNoIFdpbklFOgogICAgIC8vIHdp
ZHRoL2hlaWdodCAtIGhvbm9yZWQgKFdpbklFIGFjdHVhbGx5IHNjYWxlcyBpdHMgY29udHJvbCBm
b3Igc21hbGwgd2lkdGhzLCBidXQgbGV0cyBpdCBvdmVyZmxvdyBmb3Igc21hbGwgaGVpZ2h0cy4p
CkBAIC05MTgsMTYgKzkxOCwxNiBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0
eWxlKFN0CiAgICAgc2V0Q2hlY2tib3hTaXplKHN0eWxlKTsKIAogICAgIC8vIHBhZGRpbmcgLSBu
b3QgaG9ub3JlZCBieSBXaW5JRSwgbmVlZHMgdG8gYmUgcmVtb3ZlZC4KLSAgICBzdHlsZS0+cmVz
ZXRQYWRkaW5nKCk7CisgICAgc3R5bGUucmVzZXRQYWRkaW5nKCk7CiAKICAgICAvLyBib3JkZXIg
LSBob25vcmVkIGJ5IFdpbklFLCBidXQgbG9va3MgdGVycmlibGUgKGp1c3QgcGFpbnRzIGluIHRo
ZSBjb250cm9sIGJveCBhbmQgdHVybnMgb2ZmIHRoZSBXaW5kb3dzIFhQIHRoZW1lKQogICAgIC8v
IGZvciBub3csIHdlIHdpbGwgbm90IGhvbm9yIGl0LgotICAgIHN0eWxlLT5yZXNldEJvcmRlcigp
OworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51
bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAg
ICAgLy8gQSBzdW1tYXJ5IG9mIHRoZSBydWxlcyBmb3IgY2hlY2tib3ggZGVzaWduZWQgdG8gbWF0
Y2ggV2luSUU6CiAgICAgLy8gd2lkdGgvaGVpZ2h0IC0gaG9ub3JlZCAoV2luSUUgYWN0dWFsbHkg
c2NhbGVzIGl0cyBjb250cm9sIGZvciBzbWFsbCB3aWR0aHMsIGJ1dCBsZXRzIGl0IG92ZXJmbG93
IGZvciBzbWFsbCBoZWlnaHRzLikKQEAgLTkzNSwxNiArOTM1LDE2IEBAIHZvaWQgUmVuZGVyVGhl
bWU6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGUKICAgICBzZXRSYWRpb1NpemUoc3R5bGUpOwogCiAg
ICAgLy8gcGFkZGluZyAtIG5vdCBob25vcmVkIGJ5IFdpbklFLCBuZWVkcyB0byBiZSByZW1vdmVk
LgotICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBzdHlsZS5yZXNldFBhZGRpbmcoKTsK
IAogICAgIC8vIGJvcmRlciAtIGhvbm9yZWQgYnkgV2luSUUsIGJ1dCBsb29rcyB0ZXJyaWJsZSAo
anVzdCBwYWludHMgaW4gdGhlIGNvbnRyb2wgYm94IGFuZCB0dXJucyBvZmYgdGhlIFdpbmRvd3Mg
WFAgdGhlbWUpCiAgICAgLy8gZm9yIG5vdywgd2Ugd2lsbCBub3QgaG9ub3IgaXQuCi0gICAgc3R5
bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKIAotICAgIHN0eWxl
LT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIp
OwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6
OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVs
ZW1lbnQmKSBjb25zdAogewogICAgIC8vIE1vc3QgcGxhdGZvcm1zIHdpbGwgY29tcGxldGVseSBo
b25vciBhbGwgQ1NTLCBhbmQgc28gd2UgaGF2ZSBubyBuZWVkIHRvCiAgICAgLy8gYWRqdXN0IHRo
ZSBzdHlsZSBhdCBhbGwgYnkgZGVmYXVsdC4gV2Ugd2lsbCBzdGlsbCBhbGxvdyB0aGUgdGhlbWUg
YSBjcmFjawpAQCAtOTUyLDI1ICs5NTIsMjUgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0QnV0
dG9uU3R5bGUoU3R5bAogICAgIHNldEJ1dHRvblNpemUoc3R5bGUpOwogfQogCi12b2lkIFJlbmRl
clRoZW1lOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdElubmVyU3Bp
bkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25z
dAogewogfQogI2VuZGlmCiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRGaWVsZFN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRB
cmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAogI2lmIEVOQUJMRShJTlBV
VF9TUEVFQ0gpCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0SW5wdXRGaWVs
ZFNwZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0
eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJJbnB1dFNw
ZWVjaDo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlbGVtZW50KTsKIH0KQEAgLTk4MiwxMiArOTgyLDEyIEBAIGJvb2wgUmVuZGVyVGhlbWU6
OnBhaW50SW5wdXRGaWVsZFNwZWVjaEIKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1F
TlQpCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
JikgY29uc3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxl
LnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotSW50U2l6ZSBSZW5kZXJUaGVtZTo6bWV0ZXJT
aXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBj
b25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZTo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRl
ck1ldGVyJiwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAogewogICAgIHJldHVybiBib3Vu
ZHMuc2l6ZSgpOwogfQpAQCAtMTA5NCwxNyArMTA5NCwxNyBAQCB2b2lkIFJlbmRlclRoZW1lOjpw
YWludFNsaWRlclRpY2tzKGNvbnN0CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVN
RU5UKQotZG91YmxlIFJlbmRlclRoZW1lOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dy
ZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVtZTo6YW5pbWF0
aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZTo6YW5pbWF0aW9uRHVyYXRp
b25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citkb3VibGUgUmVuZGVyVGhl
bWU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25z
dAogewogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RQcm9ncmVz
c0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAtMTExNCw0OSArMTExNCw0
OSBAQCBJbnRSZWN0IFJlbmRlclRoZW1lOjpwcm9ncmVzc0JhclJlY3RGb3JCCiB9CiAjZW5kaWYK
IAotYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVu
dCogaW5wdXRFbGVtZW50KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxkSGF2ZVNwaW5C
dXR0b24oSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50KSBjb25zdAogewotICAgIHJldHVy
biBpbnB1dEVsZW1lbnQtPmlzU3RlcHBhYmxlKCkgJiYgIWlucHV0RWxlbWVudC0+aXNSYW5nZUNv
bnRyb2woKTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50LmlzU3RlcHBhYmxlKCkgJiYgIWlucHV0
RWxlbWVudC5pc1JhbmdlQ29udHJvbCgpOwogfQogCiB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RN
ZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZWRpYUNvbnRyb2xTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RT
bGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVt
ZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGFkanVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSwg
ZWxlbWVudCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU2l6ZShS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xp
ZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hG
aWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAog
ewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QK
IHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHJldmlz
aW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICAvLyBtZXRyaWNzIGFu
ZCBkZWZhdWx0cyBnaXZlbiB0aGUgY29udGVudHMgb2YgdGhlIHN0eWxlLiAgVGhpcyBpbmNsdWRl
cyBzb3BoaXN0aWNhdGVkIG9wZXJhdGlvbnMgbGlrZQogICAgIC8vIHNlbGVjdGlvbiBvZiBjb250
cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LCB0aGUgZGlzYWJsaW5nIG9mIGFwcGVhcmFuY2Ug
d2hlbiBjZXJ0YWluIG90aGVyIHByb3BlcnRpZXMgbGlrZQogICAgIC8vICJib3JkZXIiIGFyZSBz
ZXQsIG9yIGlmIHRoZSBhcHBlYXJhbmNlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRoZW1lLgot
ICAgIHZvaWQgYWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCosICBib29sIFVBSGFzQXBwZWFyYW5jZSwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxM
YXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpOworICAgIHZvaWQgYWRqdXN0U3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYsICBib29sIFVBSGFzQXBw
ZWFyYW5jZSwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9y
JiBiYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHBh
aW50IHRoZSB3aWRnZXQgYXMgYSBiYWNrZ3JvdW5kIG9mIHRoZSBSZW5kZXJPYmplY3QuICBBIHdp
ZGdldCdzIGZvcmVncm91bmQsIGUuZy4sIHRoZQogICAgIC8vIHRleHQgb2YgYSBidXR0b24sIGlz
IGFsd2F5cyByZW5kZXJlZCBieSB0aGUgZW5naW5lIGl0c2VsZi4gIFRoZSBib29sZWFuIHJldHVy
biB2YWx1ZSBpbmRpY2F0ZXMKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgY29udHJvbCBoYXMg
YmVlbiBzdHlsZWQgZW5vdWdoIGJ5IHRoZSBhdXRob3IgdG8gZGlzYWJsZSB0aGUgbmF0aXZlIGFw
cGVhcmFuY2UuCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJT
dHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYg
YmFja2dyb3VuZENvbG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVk
KGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYs
IGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0OwogCiAgICAgLy8gQSBnZW5lcmFs
IG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxs
LgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CkBAIC0xMzUsMTAgKzEzNSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHRoZW1lQ2hhbmdlZCgpIHsgfQogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVt
ZSBpcyBhYmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCi0gICAgdmlydHVhbCBib29sIHN1cHBv
cnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7CiAKICAgICAvLyBB
IG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91
dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVy
KGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHBsYXRmb3JtIGlzIGFibGUg
dG8gc2hvdyBkYXRhbGlzdCBzdWdnZXN0aW9ucyBmb3IgYSBnaXZlbiBpbnB1dCB0eXBlLgogICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RhdGFMaXN0VUkoY29uc3QgQXRvbWljU3RyaW5nJikgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3NywxNiArMTc3LDE2IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqKSBjb25z
dCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5k
ZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
bGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHls
ZSopIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFk
ZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwg
aW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4g
MDsgfQotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0
eWxlKikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQ
YWRkaW5nTGVmdChSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1
cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0
eWxlJikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQ
YWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1
YWwgYm9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBwb3B1cE1l
bnVTaXplKGNvbnN0IFJlbmRlclN0eWxlKiwgSW50UmVjdCYpIGNvbnN0IHsgcmV0dXJuIFBvcHVw
TWVudVN0eWxlOjpQb3B1cE1lbnVTaXplTm9ybWFsOyB9CisgICAgdmlydHVhbCBQb3B1cE1lbnVT
dHlsZTo6UG9wdXBNZW51U2l6ZSBwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0eWxlJiwgSW50
UmVjdCYpIGNvbnN0IHsgcmV0dXJuIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXplTm9ybWFs
OyB9CiAKICAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9sbGJhckNvbnRyb2xT
aXplRm9yUGFydChDb250cm9sUGFydCkgeyByZXR1cm4gUmVndWxhclNjcm9sbGJhcjsgfQogCkBA
IC0xOTUsOSArMTk1LDkgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQp
CiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmltYXRpb24gZm9y
IHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50
ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OworICAgIHZpcnR1YWwg
ZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jl
c3MmKSBjb25zdDsKICAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9u
IGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0
aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGRv
dWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29u
c3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0IHByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAjZW5kaWYKIApAQCAtMjE5LDcg
KzIxOSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCi0g
ICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlcios
IGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFNpemUgbWV0ZXJTaXplRm9y
Qm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0KSBjb25zdDsKICNlbmRpZgogCkBA
IC0yMzUsNyArMjM1LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRFbGVtZW50Kikg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZEhhdmVTcGluQnV0dG9uKEhUTUxJbnB1dEVs
ZW1lbnQmKSBjb25zdDsKIAogICAgIC8vIEZ1bmN0aW9ucyBmb3IgPHNlbGVjdD4gZWxlbWVudHMu
CiAgICAgdmlydHVhbCBib29sIGRlbGVnYXRlc01lbnVMaXN0UmVuZGVyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KQEAgLTI3MCwxOSArMjcwLDE5IEBAIHByb3RlY3RlZDoKIAogI2lmICFV
U0UoTkVXX1RIRU1FKQogICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4K
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNr
Ym94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQorICAgIHZpcnR1
YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUmKSBjb25zdCB7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9T
aXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6
ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKikg
Y29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUmKSBj
b25zdCB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5C
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCkBAIC0yOTAsMTUgKzI5MCwxNSBAQCBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW9EZWNvcmF0aW9ucyhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50Jikg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVu
dUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lbnVMaXN0RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIApAQCAt
MzA5LDQ0ICszMDksNDQgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBwYWludFNxdWFy
ZUJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICNpZiBFTkFCTEUoTUVURVJfRUxF
TUVOVCkKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1l
dGVyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBST0dSRVNT
X0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVs
ZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
dHJ1ZTsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbnB1
dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludElucHV0RmllbGRTcGVlY2hCdXR0
b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVy
biB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlv
bnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZWRp
YUNvbnRyb2xTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYVBsYXlCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYU92ZXJsYXlQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAkocmV2aXNpb24gMTcwMzcxKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDE2ICs1MiwxNiBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBpbnQgYmFz
ZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBC
b3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFj
a2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9s
U3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxM
YXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICAvLyBNZXRob2RzIGZvciBlYWNoIGFwcGVhcmFuY2UgdmFsdWUuCi0gICAg
dmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RD
aGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveERlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW9EZWNvcmF0aW9u
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBF
bGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uRGVj
b3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFB1c2hCdXR0b25EZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUq
KSBjb25zdCBvdmVycmlkZTsKQEAgLTc0LDE3ICs3NCwxNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNr
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTbGlkZXJUaHVtYkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShQUk9HUkVT
U19FTEVNRU5UKQogICAgIC8vIFJldHVybnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5p
bWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlv
blJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dy
ZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgLy8gUmV0dXJucyB0
aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2
aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dy
ZXNzKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRp
b25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
dmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCkBAIC05NCw3ICs5
NCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGludCBzbGlkZXJUaWNrT2Zmc2V0RnJvbVRy
YWNrQ2VudGVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
CiAKICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMDUsNyArMTA1LDcgQEAgcHJvdGVjdGVkOgogI2Vu
ZGlmCiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQo
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGF2ZVNwaW5CdXR0b24o
SFRNTElucHV0RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICNp
ZiBFTkFCTEUoVklERU8pCiAgICAgdmlydHVhbCBTdHJpbmcgbWVkaWFDb250cm9sc1N0eWxlU2hl
ZXQoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVJT1MubW0JKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUzLDE1ICszNTMsMTUgQEAgRmxv
YXRSZWN0IFJlbmRlclRoZW1lSU9TOjphZGRSb3VuZGVkQm9yZAogICAgIHJldHVybiBib3JkZXIu
cmVjdCgpOwogfQogCi12b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RDaGVja2JveFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZUlPUzo6YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBpZiAoIXN0eWxlLT53aWR0aCgp
LmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBp
ZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCku
aXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExlbmd0aCBsZW5ndGggPSBMZW5ndGgo
c3RhdGljX2Nhc3Q8aW50PihjZWlsZihzdGQ6Om1heChzdHlsZS0+Zm9udFNpemUoKSwgMTApKSks
IEZpeGVkKTsKKyAgICBMZW5ndGggbGVuZ3RoID0gTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oY2Vp
bGYoc3RkOjptYXgoc3R5bGUuZm9udFNpemUoKSwgMTApKSksIEZpeGVkKTsKICAgICAKLSAgICBz
dHlsZS0+c2V0V2lkdGgobGVuZ3RoKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KGxlbmd0aCk7Cisg
ICAgc3R5bGUuc2V0V2lkdGgobGVuZ3RoKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQobGVuZ3RoKTsK
IH0KIAogc3RhdGljIENHUG9pbnQgc2hvcnRlbmVkKENHUG9pbnQgc3RhcnQsIENHUG9pbnQgZW5k
LCBmbG9hdCB3aWR0aCkKQEAgLTQzNywyNyArNDM3LDI3IEBAIGludCBSZW5kZXJUaGVtZUlPUzo6
YmFzZWxpbmVQb3NpdGlvbihjb24KICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9z
aXRpb24oYm94KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6aXNDb250cm9sU3R5bGVkKGNv
bnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBG
aWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0
Citib29sIFJlbmRlclRoZW1lSU9TOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dy
b3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKIHsKICAgICAvLyBCdXR0
b25zIGFuZCBNZW51bGlzdEJ1dHRvbnMgYXJlIHN0eWxlZCBpZiB0aGV5IGNvbnRhaW4gYSBiYWNr
Z3JvdW5kIGltYWdlLgotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25Q
YXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQotICAgICAg
ICByZXR1cm4gIXN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpLmFscGhhKCkgfHwgc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKS0+aGFzSW1hZ2Uo
KTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0IHx8IHN0eWxl
LmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisgICAgICAgIHJldHVybiAhc3R5
bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5hbHBo
YSgpIHx8IHN0eWxlLmJhY2tncm91bmRMYXllcnMoKS0+aGFzSW1hZ2UoKTsKIAotICAgIGlmIChz
dHlsZS0+YXBwZWFyYW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2Uo
KSA9PSBUZXh0QXJlYVBhcnQpCi0gICAgICAgIHJldHVybiAqc3R5bGUtPmJhY2tncm91bmRMYXll
cnMoKSAhPSBiYWNrZ3JvdW5kOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gVGV4dEZp
ZWxkUGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gVGV4dEFyZWFQYXJ0KQorICAgICAgICBy
ZXR1cm4gKnN0eWxlLmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNrZ3JvdW5kOwogCiAgICAgcmV0
dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgYmFja2dyb3Vu
ZCwgYmFja2dyb3VuZENvbG9yKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0UmFk
aW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgaWYgKCFzdHlsZS0+
d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkp
CisgICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhl
aWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMZW5ndGggbGVuZ3RoID0g
TGVuZ3RoKHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3RkOjptYXgoc3R5bGUtPmZvbnRTaXplKCks
IDEwKSkpLCBGaXhlZCk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKGxlbmd0aCk7Ci0gICAgc3R5bGUt
PnNldEhlaWdodChsZW5ndGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSYWRpdXMoSW50U2l6ZShs
ZW5ndGgudmFsdWUoKSAvIDIuMGYsIGxlbmd0aC52YWx1ZSgpIC8gMi4wZikpOworICAgIExlbmd0
aCBsZW5ndGggPSBMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihjZWlsZihzdGQ6Om1heChzdHlsZS5m
b250U2l6ZSgpLCAxMCkpKSwgRml4ZWQpOworICAgIHN0eWxlLnNldFdpZHRoKGxlbmd0aCk7Cisg
ICAgc3R5bGUuc2V0SGVpZ2h0KGxlbmd0aCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmFkaXVzKElu
dFNpemUobGVuZ3RoLnZhbHVlKCkgLyAyLjBmLCBsZW5ndGgudmFsdWUoKSAvIDIuMGYpKTsKIH0K
IAogYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRSYWRpb0RlY29yYXRpb25zKGNvbnN0IFJlbmRl
ck9iamVjdCYgYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKQEAgLTUxOSwxMCArNTE5LDEwIEBAIGNvbnN0IGZsb2F0IE1lbnVMaXN0QXJyb3dXaWR0
aCA9IDc7CiBjb25zdCBmbG9hdCBNZW51TGlzdEFycm93SGVpZ2h0ID0gNjsKIGNvbnN0IGZsb2F0
IE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0ID0gMTk7CiAKLWludCBSZW5kZXJUaGVtZUlPUzo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQg
UmVuZGVyVGhlbWVJT1M6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUmIHN0
eWxlKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0
dG9uUGFydCkKLSAgICAgICAgcmV0dXJuIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0ICsgc3R5
bGUtPmJvcmRlclRvcFdpZHRoKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51
bGlzdEJ1dHRvblBhcnQpCisgICAgICAgIHJldHVybiBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdo
dCArIHN0eWxlLmJvcmRlclRvcFdpZHRoKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTYxOSwx
MCArNjE5LDggQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0bwogICAg
IC8vICItd2Via2l0LWFwcGVhcmFuY2U6IG1lbnVsaXN0LWJ1dHRvbiIuCiAgICAgaWYgKGVsZW1l
bnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdFRhZykgJiYgIWVsZW1lbnQuaGFzQXR0cmli
dXRlKEhUTUxOYW1lczo6bXVsdGlwbGVBdHRyKSkKICAgICAgICAgYWRqdXN0U2VsZWN0TGlzdEJ1
dHRvblN0eWxlKHN0eWxlLCBlbGVtZW50KTsKLSAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjppbnB1dFRhZykpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KCZlbGVtZW50KTsKLSAg
ICAgICAgYWRqdXN0SW5wdXRFbGVtZW50QnV0dG9uU3R5bGUoc3R5bGUsICppbnB1dEVsZW1lbnQp
OwotICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1
dFRhZykpCisgICAgICAgIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWxlKHN0eWxlLCBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Jj4oaW5wdXRFbGVtZW50KSk7CiB9CiAKIGJvb2wgUmVu
ZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJP
YmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKQEAgLTcxNywxNCArNzE1LDE0IEBAIGNvbnN0IENHRmxvYXQga1RyYWNrVGhpY2tuZXNz
ID0gNC4wOwogY29uc3QgQ0dGbG9hdCBrVHJhY2tSYWRpdXMgPSBrVHJhY2tUaGlja25lc3MgLyAy
LjA7CiBjb25zdCBpbnQga0RlZmF1bHRTbGlkZXJUaHVtYlNpemUgPSAxNjsKIAotdm9pZCBSZW5k
ZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIFJl
bmRlclRoZW1lOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVu
dCk7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBiZSByZWx5aW5nIG9uIGJvcmRlciBy
YWRpdXMgZm9yIHRoZSBhcHBlYXJhbmNlIG9mIG91ciBjb250cm9scyA8cmRhcjovL3Byb2JsZW0v
NzY3NTQ5Mz4KICAgICBMZW5ndGggcmFkaXVzV2lkdGgoc3RhdGljX2Nhc3Q8aW50PihrVHJhY2tS
YWRpdXMpLCBGaXhlZCk7CiAgICAgTGVuZ3RoIHJhZGl1c0hlaWdodChzdGF0aWNfY2FzdDxpbnQ+
KGtUcmFja1JhZGl1cyksIEZpeGVkKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVzKExlbmd0
aFNpemUocmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCkpOworICAgIHN0eWxlLnNldEJvcmRlclJh
ZGl1cyhMZW5ndGhTaXplKHJhZGl1c1dpZHRoLCByYWRpdXNIZWlnaHQpKTsKIH0KIAogYm9vbCBS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC04MDUs
MjAgKzgwMywyMCBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNrKGNvCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVJT1M6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1l
bnQmKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFNsaWRlclRodW1i
SG9yaXpvbnRhbFBhcnQgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBTbGlkZXJUaHVtYlZlcnRp
Y2FsUGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpICE9IFNsaWRlclRodW1iSG9yaXpv
bnRhbFBhcnQgJiYgc3R5bGUuYXBwZWFyYW5jZSgpICE9IFNsaWRlclRodW1iVmVydGljYWxQYXJ0
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBFbmZvcmNlICJib3JkZXItcmFkaXVzOiA1MCUi
LgogICAgIExlbmd0aCBsZW5ndGgoNTAuMGYsIFBlcmNlbnQpOwotICAgIHN0eWxlLT5zZXRCb3Jk
ZXJSYWRpdXMoTGVuZ3RoU2l6ZShsZW5ndGgsIGxlbmd0aCkpOworICAgIHN0eWxlLnNldEJvcmRl
clJhZGl1cyhMZW5ndGhTaXplKGxlbmd0aCwgbGVuZ3RoKSk7CiAKICAgICAvLyBFbmZvcmNlIGEg
MTZ4MTYgc2l6ZSBpZiBubyBzaXplIGlzIHByb3ZpZGVkLgotICAgIGlmIChzdHlsZS0+d2lkdGgo
KS5pc0ludHJpbnNpY09yQXV0bygpIHx8IHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkgeworICAg
IGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgfHwgc3R5bGUuaGVpZ2h0KCku
aXNBdXRvKCkpIHsKICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IExlbmd0aChrRGVmYXVsdFNsaWRl
clRodW1iU2l6ZSwgRml4ZWQpOwotICAgICAgICBzdHlsZS0+c2V0V2lkdGgobGVuZ3RoKTsKLSAg
ICAgICAgc3R5bGUtPnNldEhlaWdodChsZW5ndGgpOworICAgICAgICBzdHlsZS5zZXRXaWR0aChs
ZW5ndGgpOworICAgICAgICBzdHlsZS5zZXRIZWlnaHQobGVuZ3RoKTsKICAgICB9CiB9CiAKQEAg
LTg0MCw3ICs4MzgsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRodW1iRGVj
CiB9CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLWRvdWJsZSBSZW5kZXJUaGVtZUlP
Uzo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyop
IGNvbnN0Citkb3VibGUgUmVuZGVyVGhlbWVJT1M6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9y
UHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQpA
QCAtOTQ3LDE0ICs5NDUsMTQgQEAgaW50IFJlbmRlclRoZW1lSU9TOjpzbGlkZXJUaWNrT2Zmc2V0
RnJvbQogfQogI2VuZGlmCiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNlYXJjaEZpZWxk
U3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNlYXJjaEZpZWxk
U3R5bGUoU3R5bGVSZXNvbHZlciYgc2VsZWN0b3IsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVu
dCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRT
dHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwogCiAgICAgaWYgKCFlbGVtZW50KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIXN0eWxlLT5oYXNCb3JkZXIoKSkKKyAgICBpZiAoIXN0
eWxlLmhhc0JvcmRlcigpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJCb3gqIGJveCA9
IGVsZW1lbnQtPnJlbmRlckJveCgpOwpAQCAtOTY5LDcgKzk2Nyw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWMKICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGREZWNv
cmF0aW9ucyhib3gsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6
OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1
c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzZWxlY3RvciwgUmVuZGVyU3R5bGUmIHN0eWxl
LCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0
b25TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwogCkBAIC05NzksNyArOTc3LDcgQEAg
dm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0QnV0dG9uU3R5bGUoUwogICAgIC8vIGFuZCB0aGUg
cmVuZGVyIHZpZXcuCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBlbVNpemUgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDEuMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpOwog
ICAgIGludCBwaXhlbHMgPSBlbVNpemUtPmNvbXB1dGVMZW5ndGg8aW50PihDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKHN0eWxlLCBudWxscHRyLCBudWxscHRyLCAxLjAsIGZhbHNlKSk7Ci0gICAg
c3R5bGUtPnNldFBhZGRpbmdCb3goTGVuZ3RoQm94KDAsIHBpeGVscywgMCwgcGl4ZWxzKSk7Cisg
ICAgc3R5bGUuc2V0UGFkZGluZ0JveChMZW5ndGhCb3goMCwgcGl4ZWxzLCAwLCBwaXhlbHMpKTsK
IAogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAxMSwxNCArMTAwOSwx
NCBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFB1c2hCdXR0b25EZWNvCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lSU9TOjpzZXRCdXR0b25TaXplKFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OnNldEJ1dHRvblNpemUoUmVu
ZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0
IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYg
KCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCku
aXNBdXRvKCkpCisgICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYg
IXN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBVc2Ug
dGhlIGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29u
dHJvbC4KLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KENvbnRy
b2xCYXNlSGVpZ2h0IC8gQ29udHJvbEJhc2VGb250U2l6ZSAqIHN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5jb21wdXRlZFNpemUoKSksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0
aChzdGF0aWNfY2FzdDxpbnQ+KENvbnRyb2xCYXNlSGVpZ2h0IC8gQ29udHJvbEJhc2VGb250U2l6
ZSAqIHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpKSwgRml4ZWQpKTsKIH0K
IAogY29uc3QgaW50IGtUaHVtYm5haWxCb3JkZXJTdHJva2VXaWR0aCA9IDE7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkocmV2aXNpb24gMTcwMzcxKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFJl
cGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0g
ICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENv
bG9yKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNv
bnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVh
bCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNjksMzYgKzY5LDM2IEBAIHB1YmxpYzoK
ICAgICAvLyBTeXN0ZW0gZm9udHMuCiAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoQ1NTVmFs
dWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGlu
dCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xp
ZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAj
aWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgdmlydHVhbCBJbnRTaXplIHNsaWRlclRp
Y2tTaXplKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBpbnQgc2xpZGVyVGlja09mZnNl
dEZyb21UcmFja0NlbnRlcigpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFs
IGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxl
KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdU
b3AoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGludCBwb3B1cElu
dGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNpemUgcG9wdXBNZW51U2l6ZShjb25zdCBS
ZW5kZXJTdHlsZSosIEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBw
b3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVu
ZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFs
UGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
UG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNpemUgcG9wdXBNZW51U2l6ZShjb25zdCBSZW5kZXJT
dHlsZSYsIEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwb3BzTWVudUJ5
QXJyb3dLZXlzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxF
KE1FVEVSX0VMRU1FTlQpCi0gICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhj
b25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29u
c3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVy
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihDb250cm9sUGFydCkgY29u
c3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQogICAg
IC8vIFJldHVybnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUg
cHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFs
Rm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclBy
b2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgLy8gUmV0dXJucyB0aGUgZHVyYXRpb24gb2Yg
dGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBh
bmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jh
cihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgSW50UmVjdCBw
cm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgSW50UmVj
dCYpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKQEAgLTEyNSw0MSArMTI1LDQxIEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Jz
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBw
YWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxk
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4
dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmly
dHVhbCBib29sIHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVz
dE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFBS
T0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
bGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwog
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25Q
YXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMTc2LDE0ICsxNzYsMTQgQEAgcHJpdmF0ZToK
ICAgICBGbG9hdFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYg
aW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0JiBwYXJ0UmVuZGVyZXIsIGNvbnN0IEZs
b2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKICAgICAvLyBHZXQg
dGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIGZvbnQuIFVzZWQgYnkgc29tZSBvZiB0aGUg
Y29udHJvbHMgKGxpa2UgYnV0dG9ucykuCi0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZv
ckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXpl
Rm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIE5TQ29udHJvbFNpemUgY29u
dHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgTlNDb250cm9sU2l6ZSBj
b250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmKSBjb25zdDsKICAgICBOU0NvbnRy
b2xTaXplIGNvbnRyb2xTaXplRm9yQ2VsbChOU0NlbGwqLCBjb25zdCBJbnRTaXplKiBzaXplcywg
Y29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0gMS4wZikgY29uc3Q7CiAg
ICAgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBjb25zdCBJbnRTaXplKiBzaXplcywgY29u
c3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0gMS4wZik7Ci0gICAgdm9pZCBz
ZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7
Ci0gICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNp
emVzKSBjb25zdDsKLSAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKiwg
Y29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAgIHZvaWQgc2V0Rm9udEZyb21Db250cm9s
U2l6ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBOU0NvbnRyb2xTaXplKSBjb25zdDsK
KyAgICB2b2lkIHNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSYsIGNvbnN0IEludFNpemUqIHNp
emVzKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVGb3JGb250KFJlbmRlclN0eWxlJiwgY29uc3Qg
SW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAgIEludFNpemUgc2l6ZUZvclN5c3RlbUZvbnQoUmVu
ZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7CisgICAgdm9pZCBzZXRGb250
RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIE5TQ29udHJvbFNp
emUpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxsKiwgY29uc3Qg
UmVuZGVyT2JqZWN0Jik7CiAgICAgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxsKiwgY29u
c3QgUmVuZGVyT2JqZWN0Jik7CkBAIC0yMDMsNyArMjAzLDcgQEAgcHJpdmF0ZToKICAgICBjb25z
dCBJbnRTaXplKiBjYW5jZWxCdXR0b25TaXplcygpIGNvbnN0OwogICAgIGNvbnN0IEludFNpemUq
IHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VhcmNoQ2VsbFN0YXRl
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIHNldFNlYXJj
aEZpZWxkU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZvaWQgc2V0U2VhcmNoRmllbGRT
aXplKFJlbmRlclN0eWxlJikgY29uc3Q7CiAKICAgICBOU1BvcFVwQnV0dG9uQ2VsbCAqcG9wdXBC
dXR0b24oKSBjb25zdDsKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCAqc2VhcmNoKCkgY29uc3Q7CkBA
IC0yMTQsMTEgKzIxNCwxMSBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQp
CiAgICAgTlNMZXZlbEluZGljYXRvclN0eWxlIGxldmVsSW5kaWNhdG9yU3R5bGVGb3IoQ29udHJv
bFBhcnQpIGNvbnN0OwotICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsICpsZXZlbEluZGljYXRvckZv
cihjb25zdCBSZW5kZXJNZXRlciopIGNvbnN0OworICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsICps
ZXZlbEluZGljYXRvckZvcihjb25zdCBSZW5kZXJNZXRlciYpIGNvbnN0OwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICBpbnQgbWluaW11bVByb2dyZXNzQmFySGVp
Z2h0KFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgaW50IG1pbmltdW1Qcm9ncmVzc0JhckhlaWdo
dChSZW5kZXJTdHlsZSYpIGNvbnN0OwogICAgIGNvbnN0IEludFNpemUqIHByb2dyZXNzQmFyU2l6
ZXMoKSBjb25zdDsKICAgICBjb25zdCBpbnQqIHByb2dyZXNzQmFyTWFyZ2lucyhOU0NvbnRyb2xT
aXplKSBjb25zdDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OTksMTcgKzU5OSwxNyBA
QCBib29sIFJlbmRlclRoZW1lTWFjOjp1c2VzVGVzdE1vZGVGb2N1c1JpCiAgICAgcmV0dXJuIFdl
YkNvcmU6OnVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVNYWM6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJv
cmRlckRhdGEmIGJvcmRlciwKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OmlzQ29udHJvbFN0eWxlZChj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91
bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxl
LT5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09
IFRleHRBcmVhUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAg
ICAgICByZXR1cm4gc3R5bGUtPmJvcmRlcigpICE9IGJvcmRlcjsKKyAgICBpZiAoc3R5bGUuYXBw
ZWFyYW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IFRleHRB
cmVhUGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJl
dHVybiBzdHlsZS5ib3JkZXIoKSAhPSBib3JkZXI7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBo
b3JyaWJsZSwgYnV0IHRoZXJlIGlzIG5vdCBtdWNoIGVsc2UgdGhhdCBjYW4gYmUgZG9uZS4gIE1l
bnUgbGlzdHMgY2Fubm90IGRyYXcgcHJvcGVybHkgd2hlbgogICAgIC8vIHNjYWxlZC4gIFRoZXkg
Y2FuJ3QgcmVhbGx5IGRyYXcgcHJvcGVybHkgd2hlbiB0cmFuc2Zvcm1lZCBlaXRoZXIuICBXZSBj
YW4ndCBkZXRlY3QgdGhlIHRyYW5zZm9ybSBjYXNlIGF0IHN0eWxlCiAgICAgLy8gYWRqdXN0bWVu
dCB0aW1lIHNvIHRoYXQgd2lsbCBqdXN0IGhhdmUgdG8gc3RheSBicm9rZW4uICBXZSBjYW4gaG93
ZXZlciBkZXRlY3QgdGhhdCB3ZSdyZSB6b29taW5nLiAgSWYgem9vbWluZwogICAgIC8vIGlzIGlu
IGVmZmVjdCB3ZSB0cmVhdCBpdCBsaWtlIHRoZSBjb250cm9sIGlzIHN0eWxlZC4KLSAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQgJiYgc3R5bGUtPmVmZmVjdGl2ZVpv
b20oKSAhPSAxLjBmKQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0
ICYmIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSAhPSAxLjBmKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIs
IGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CkBAIC03NDMsOSArNzQzLDkgQEAgYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6Y29udHJvbFN1cHBvcnRzVGludAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1OU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAorTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJv
bFNpemVGb3JGb250KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBpbnQgZm9udFNp
emUgPSBzdHlsZS0+Zm9udFNpemUoKTsKKyAgICBpbnQgZm9udFNpemUgPSBzdHlsZS5mb250U2l6
ZSgpOwogICAgIGlmIChmb250U2l6ZSA+PSAxNikKICAgICAgICAgcmV0dXJuIE5TUmVndWxhckNv
bnRyb2xTaXplOwogICAgIGlmIChmb250U2l6ZSA+PSAxMSkKQEAgLTc3MywzNSArNzczLDM1IEBA
IHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldENvbnRyb2xTaXplKE5TQ2UKICAgICAgICAgW2NlbGwg
c2V0Q29udHJvbFNpemU6c2l6ZV07CiB9CiAKLUludFNpemUgUmVuZGVyVGhlbWVNYWM6OnNpemVG
b3JGb250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0CitJ
bnRTaXplIFJlbmRlclRoZW1lTWFjOjpzaXplRm9yRm9udChSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IEludFNpemUqIHNpemVzKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpICE9IDEuMGYpIHsKKyAgICBpZiAoc3R5bGUuZWZmZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsK
ICAgICAgICAgSW50U2l6ZSByZXN1bHQgPSBzaXplc1tjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUp
XTsKLSAgICAgICAgcmV0dXJuIEludFNpemUocmVzdWx0LndpZHRoKCkgKiBzdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpLCByZXN1bHQuaGVpZ2h0KCkgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAg
ICAgICAgcmV0dXJuIEludFNpemUocmVzdWx0LndpZHRoKCkgKiBzdHlsZS5lZmZlY3RpdmVab29t
KCksIHJlc3VsdC5oZWlnaHQoKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgfQogICAg
IHJldHVybiBzaXplc1tjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpXTsKIH0KIAotSW50U2l6ZSBS
ZW5kZXJUaGVtZU1hYzo6c2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBJbnRTaXplKiBzaXplcykgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVNYWM6OnNpemVGb3JT
eXN0ZW1Gb250KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0
CiB7Ci0gICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikgeworICAgIGlmIChz
dHlsZS5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikgewogICAgICAgICBJbnRTaXplIHJlc3VsdCA9
IHNpemVzW2NvbnRyb2xTaXplRm9yU3lzdGVtRm9udChzdHlsZSldOwotICAgICAgICByZXR1cm4g
SW50U2l6ZShyZXN1bHQud2lkdGgoKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCksIHJlc3VsdC5o
ZWlnaHQoKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICByZXR1cm4gSW50U2l6
ZShyZXN1bHQud2lkdGgoKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSwgcmVzdWx0LmhlaWdodCgp
ICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHNpemVzW2NvbnRy
b2xTaXplRm9yU3lzdGVtRm9udChzdHlsZSldOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpz
ZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBDaGVj
ayBpcyBmbGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRoIGlu
dG8gYWNjb3VudC4KICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yRm9udChzdHlsZSwgc2l6ZXMp
OwotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmIHNpemUud2lk
dGgoKSA+IDApCi0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBG
aXhlZCkpOwotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQo
KSA+IDApCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZp
eGVkKSk7CisgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBzaXpl
LndpZHRoKCkgPiAwKQorICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgp
LCBGaXhlZCkpOworICAgIGlmIChzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXplLmhlaWdo
dCgpID4gMCkKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBG
aXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXpl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNpemUgY29udHJv
bFNpemUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXpl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIE5TQ29udHJvbFNpemUgY29udHJv
bFNpemUpIGNvbnN0CiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAg
ICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CkBAIC04MDksMTkgKzgw
OSwxOSBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTCiAKICAgICBO
U0ZvbnQqIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250
U2l6ZUZvckNvbnRyb2xTaXplOmNvbnRyb2xTaXplXV07CiAgICAgZm9udERlc2NyaXB0aW9uLnNl
dE9uZUZhbWlseShbZm9udCB3ZWJDb3JlRmFtaWx5TmFtZV0pOwotICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoW2ZvbnQgcG9pbnRTaXplXSAqIHN0eWxlLT5lZmZlY3RpdmVab29t
KCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKFtmb250IHBvaW50U2l6
ZV0gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHls
ZS5lZmZlY3RpdmVab29tKCkpOwogCiAgICAgLy8gUmVzZXQgbGluZSBoZWlnaHQKLSAgICBzdHls
ZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAg
c3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAK
LSAgICBpZiAoc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKQotICAg
ICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICBpZiAoc3R5bGUuc2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCisgICAgICAgIHN0eWxlLmZvbnQoKS51cGRhdGUoMCk7
CiB9CiAKLU5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTaXplRm9yU3lzdGVt
Rm9udChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1l
TWFjOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAog
ewotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGludCBmb250U2l6
ZSA9IHN0eWxlLmZvbnRTaXplKCk7CiAgICAgaWYgKGZvbnRTaXplID49IFtOU0ZvbnQgc3lzdGVt
Rm9udFNpemVGb3JDb250cm9sU2l6ZTpOU1JlZ3VsYXJDb250cm9sU2l6ZV0pCiAgICAgICAgIHJl
dHVybiBOU1JlZ3VsYXJDb250cm9sU2l6ZTsKICAgICBpZiAoZm9udFNpemUgPj0gW05TRm9udCBz
eXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOk5TU21hbGxDb250cm9sU2l6ZV0pCkBAIC04NDUs
NyArODQ1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQoY29ucwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEZpZWxk
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAtODY3LDcgKzg2Nyw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEoY29uc3QKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFj
OjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1l
bnQmKSBjb25zdAogewogfQogCkBAIC05MTMsNyArOTEzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRNZW51TGlzdChjb25zdAogCiAgICAgLy8gTm93IGluZmxhdGUgaXQgdG8gYWNjb3Vu
dCBmb3IgdGhlIHNoYWRvdy4KICAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0ID0gcmVjdDsKLSAg
ICBpZiAocmVjdC53aWR0aCgpID49IG1pbmltdW1NZW51TGlzdFNpemUoJnJlbmRlcmVyLnN0eWxl
KCkpKQorICAgIGlmIChyZWN0LndpZHRoKCkgPj0gbWluaW11bU1lbnVMaXN0U2l6ZShyZW5kZXJl
ci5zdHlsZSgpKSkKICAgICAgICAgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZVJlY3QocmVjdCwgc2l6
ZSwgcG9wdXBCdXR0b25NYXJnaW5zKCksIHpvb21MZXZlbCk7CiAKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKQEAgLTk0Myw5ICs5
NDMsOSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KGNvbnN0CiAKICNpZiBF
TkFCTEUoTUVURVJfRUxFTUVOVCkKIAotSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXpl
Rm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiByZW5kZXJNZXRlciwgY29uc3QgSW50UmVjdCYg
Ym91bmRzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXplRm9yQm91bmRz
KGNvbnN0IFJlbmRlck1ldGVyJiByZW5kZXJNZXRlciwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBj
b25zdAogewotICAgIGlmIChOb0NvbnRyb2xQYXJ0ID09IHJlbmRlck1ldGVyLT5zdHlsZSgpLmFw
cGVhcmFuY2UoKSkKKyAgICBpZiAoTm9Db250cm9sUGFydCA9PSByZW5kZXJNZXRlci5zdHlsZSgp
LmFwcGVhcmFuY2UoKSkKICAgICAgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7CiAKICAgICBOU0xl
dmVsSW5kaWNhdG9yQ2VsbCogY2VsbCA9IGxldmVsSW5kaWNhdG9yRm9yKHJlbmRlck1ldGVyKTsK
QEAgLTk2Miw3ICs5NjIsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1ldGVyKGNvbnN0
IFJlCiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50
SW5mby5jb250ZXh0KTsKIAotICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJ
bmRpY2F0b3JGb3IodG9SZW5kZXJNZXRlcigmcmVuZGVyT2JqZWN0KSk7CisgICAgTlNMZXZlbElu
ZGljYXRvckNlbGwqIGNlbGwgPSBsZXZlbEluZGljYXRvckZvcih0b1JlbmRlck1ldGVyKHJlbmRl
ck9iamVjdCkpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFp
bnRJbmZvLmNvbnRleHQpOwogCiAgICAgW2NlbGwgZHJhd1dpdGhGcmFtZTpyZWN0IGluVmlldzpk
b2N1bWVudFZpZXdGb3IocmVuZGVyT2JqZWN0KV07CkBAIC0xMDAxLDE2ICsxMDAxLDE2IEBAIE5T
TGV2ZWxJbmRpY2F0b3JTdHlsZSBSZW5kZXJUaGVtZU1hYzo6bGUKIAogfQogCi1OU0xldmVsSW5k
aWNhdG9yQ2VsbCogUmVuZGVyVGhlbWVNYWM6OmxldmVsSW5kaWNhdG9yRm9yKGNvbnN0IFJlbmRl
ck1ldGVyKiByZW5kZXJNZXRlcikgY29uc3QKK05TTGV2ZWxJbmRpY2F0b3JDZWxsKiBSZW5kZXJU
aGVtZU1hYzo6bGV2ZWxJbmRpY2F0b3JGb3IoY29uc3QgUmVuZGVyTWV0ZXImIHJlbmRlck1ldGVy
KSBjb25zdAogewotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlck1ldGVyLT5z
dHlsZSgpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlck1ldGVyLnN0eWxl
KCk7CiAgICAgQVNTRVJUKHN0eWxlLmFwcGVhcmFuY2UoKSAhPSBOb0NvbnRyb2xQYXJ0KTsKIAog
ICAgIGlmICghbV9sZXZlbEluZGljYXRvcikKICAgICAgICAgbV9sZXZlbEluZGljYXRvciA9IGFk
b3B0TlMoW1tOU0xldmVsSW5kaWNhdG9yQ2VsbCBhbGxvY10gaW5pdFdpdGhMZXZlbEluZGljYXRv
clN0eWxlOk5TQ29udGludW91c0NhcGFjaXR5TGV2ZWxJbmRpY2F0b3JTdHlsZV0pOwogICAgIE5T
TGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbV9sZXZlbEluZGljYXRvci5nZXQoKTsKIAotICAg
IEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJNZXRlci0+bWV0ZXJFbGVtZW50KCk7
CisgICAgSFRNTE1ldGVyRWxlbWVudCogZWxlbWVudCA9IHJlbmRlck1ldGVyLm1ldGVyRWxlbWVu
dCgpOwogICAgIGRvdWJsZSB2YWx1ZSA9IGVsZW1lbnQtPnZhbHVlKCk7CiAKICAgICAvLyBCZWNh
dXNlIE5TTGV2ZWxJbmRpY2F0b3JDZWxsIGRvZXMgbm90IHN1cHBvcnQgb3B0aW11bS1pbi10aGUt
bWlkZGxlIHR5cGUgY29sb3JpbmcsCkBAIC0xMDcyLDM1ICsxMDcyLDM1IEBAIEludFJlY3QgUmVu
ZGVyVGhlbWVNYWM6OnByb2dyZXNzQmFyUmVjdEYKICAgICAgICAgcmV0dXJuIHByb2dyZXNzQmFy
Qm91bmRzOwogCiAgICAgZmxvYXQgem9vbUxldmVsID0gcmVuZGVyT2JqZWN0LnN0eWxlKCkuZWZm
ZWN0aXZlWm9vbSgpOwotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6
ZUZvckZvbnQoJnJlbmRlck9iamVjdC5zdHlsZSgpKTsKKyAgICBOU0NvbnRyb2xTaXplIGNvbnRy
b2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHJlbmRlck9iamVjdC5zdHlsZSgpKTsKICAgICBJ
bnRTaXplIHNpemUgPSBwcm9ncmVzc0JhclNpemVzKClbY29udHJvbFNpemVdOwogICAgIHNpemUu
c2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwogICAgIHNpemUuc2V0V2lkdGgo
cHJvZ3Jlc3NCYXJCb3VuZHMud2lkdGgoKSk7CiAKICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBh
Y2NvdW50IGZvciB0aGUgc2hhZG93LgogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcHJvZ3Jl
c3NCYXJCb3VuZHM7Ci0gICAgaWYgKHByb2dyZXNzQmFyQm91bmRzLmhlaWdodCgpIDw9IG1pbmlt
dW1Qcm9ncmVzc0JhckhlaWdodCgmcmVuZGVyT2JqZWN0LnN0eWxlKCkpKQorICAgIGlmIChwcm9n
cmVzc0JhckJvdW5kcy5oZWlnaHQoKSA8PSBtaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQocmVuZGVy
T2JqZWN0LnN0eWxlKCkpKQogICAgICAgICBpbmZsYXRlZFJlY3QgPSBJbnRSZWN0KGluZmxhdGVS
ZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcHJvZ3Jlc3NCYXJNYXJnaW5zKGNvbnRyb2xTaXplKSwg
em9vbUxldmVsKSk7CiAKICAgICByZXR1cm4gaW5mbGF0ZWRSZWN0OwogfQogCi1pbnQgUmVuZGVy
VGhlbWVNYWM6Om1pbmltdW1Qcm9ncmVzc0JhckhlaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1Qcm9ncmVzc0JhckhlaWdodChSZW5kZXJT
dHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNpemVGb3JTeXN0ZW1Gb250KHN0eWxl
LCBwcm9ncmVzc0JhclNpemVzKCkpLmhlaWdodCgpOwogfQogCi1kb3VibGUgUmVuZGVyVGhlbWVN
YWM6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mq
KSBjb25zdAorZG91YmxlIFJlbmRlclRoZW1lTWFjOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1cm4gcHJvZ3Jl
c3NBbmltYXRpb25GcmFtZVJhdGU7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZU1hYzo6YW5pbWF0
aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citkb3VibGUg
UmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MmKSBjb25zdAogewogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbk51bUZyYW1lcyAq
IHByb2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRlOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAt
MTExMCw3ICsxMTEwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0Jhcihj
bwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcHJv
Z3Jlc3NCYXJSZWN0Rm9yQm91bmRzKHJlbmRlck9iamVjdCwgcmVjdCk7Ci0gICAgTlNDb250cm9s
U2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udCgmcmVuZGVyT2JqZWN0LnN0eWxl
KCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQo
cmVuZGVyT2JqZWN0LnN0eWxlKCkpOwogCiAgICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3MmIHJlbmRl
clByb2dyZXNzID0gKnRvUmVuZGVyUHJvZ3Jlc3MoJnJlbmRlck9iamVjdCk7CiAgICAgSElUaGVt
ZVRyYWNrRHJhd0luZm8gdHJhY2tJbmZvOwpAQCAtMTMzNywyMiArMTMzNywyMiBAQCBzdGF0aWMg
Y29uc3QgSW50U2l6ZSogbWVudUxpc3RCdXR0b25TaXplCiAgICAgcmV0dXJuIHNpemVzOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewogICAg
IE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpOwog
Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5bGUtPnJlc2V0UGFkZGluZygpOwor
ICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRQYWRkaW5nKCk7CiAKICAg
ICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5n
dGgoQXV0bykpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoQXV0bykpOwogCiAgICAgLy8g
V2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBS
RSk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCiAgICAgLy8gU2V0IHRoZSBmb3Jl
Z3JvdW5kIGNvbG9yIHRvIGJsYWNrIG9yIGdyYXkgd2hlbiB3ZSBoYXZlIHRoZSBhcXVhIGxvb2su
CiAgICAgLy8gQ2FzdCB0byBSR0IzMiBpcyB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGVyIGJ1Zy4K
LSAgICBzdHlsZS0+c2V0Q29sb3IoZSAmJiAhZS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkgPyBz
dGF0aWNfY2FzdDxSR0JBMzI+KENvbG9yOjpibGFjaykgOiBDb2xvcjo6ZGFya0dyYXkpOworICAg
IHN0eWxlLnNldENvbG9yKCFlLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpID8gc3RhdGljX2Nhc3Q8
UkdCQTMyPihDb2xvcjo6YmxhY2spIDogQ29sb3I6OmRhcmtHcmF5KTsKIAogICAgIC8vIFNldCB0
aGUgYnV0dG9uJ3MgdmVydGljYWwgc2l6ZS4KICAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIG1l
bnVMaXN0QnV0dG9uU2l6ZXMoKSk7CkBAIC0xMzYyLDUyICsxMzYyLDUyIEBAIHZvaWQgUmVuZGVy
VGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUKICAgICAvLyBzeXN0ZW0gZm9udCBmb3IgdGhl
IGNvbnRyb2wgc2l6ZSBpbnN0ZWFkLgogICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGNvbnRyb2xTaXplKTsKIAotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3co
bnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1pbnQgUmVu
ZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5k
ZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0g
TWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xT
aXplRm9yRm9udChzdHlsZSkpW2xlZnRQYWRkaW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7
Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQotICAg
ICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCAqIHN0eWxlLT5lZmZlY3RpdmVab29t
KCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCisgICAgICAg
IHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbbGVm
dFBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJh
bmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQ
YWRkaW5nTGVmdCAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKICAgICByZXR1cm4gMDsKIH0KIAot
aW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdS
aWdodChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5n
KGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW3JpZ2h0UGFkZGluZ10gKiBzdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9u
UGFydCkgewotICAgICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGJh
c2VGb250U2l6ZTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkK
KyAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5
bGUpKVtyaWdodFBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHls
ZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KSB7CisgICAgICAgIGZsb2F0IGZv
bnRTY2FsZSA9IHN0eWxlLmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemU7CiAgICAgICAgIGZsb2F0
IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRTY2FsZTsKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4oY2VpbGYoYXJyb3dXaWR0aCArIChhcnJvd1BhZGRpbmdMZWZ0ICsg
YXJyb3dQYWRkaW5nUmlnaHQgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAqIHN0eWxlLT5lZmZl
Y3RpdmVab29tKCkpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY2VpbGYoYXJy
b3dXaWR0aCArIChhcnJvd1BhZGRpbmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQgKyBwYWRkaW5n
QmVmb3JlU2VwYXJhdG9yKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSkpOwogICAgIH0KICAgICBy
ZXR1cm4gMDsKIH0KIAotaW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1Rv
cChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCi0gICAgICAgIHJldHVybiBwb3B1cEJ1
dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbdG9wUGFkZGluZ10gKiBzdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVs
aXN0QnV0dG9uUGFydCkKLSAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ1RvcCAqIHN0
eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51
bGlzdFBhcnQpCisgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVG
b3JGb250KHN0eWxlKSlbdG9wUGFkZGluZ10gKiBzdHlsZS5lZmZlY3RpdmVab29tKCk7CisgICAg
aWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisgICAgICAgIHJl
dHVybiBzdHlsZWRQb3B1cFBhZGRpbmdUb3AgKiBzdHlsZS5lZmZlY3RpdmVab29tKCk7CiAgICAg
cmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdC
b3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lTWFjOjpwb3B1
cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAg
aWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4g
cG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2JvdHRvbVBhZGRp
bmddICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCi0gICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRp
bmdCb3R0b20gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJh
bmNlKCkgPT0gTWVudWxpc3RQYXJ0KQorICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5n
KGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2JvdHRvbVBhZGRpbmddICogc3R5bGUuZWZmZWN0
aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25Q
YXJ0KQorICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nQm90dG9tICogc3R5bGUuZWZm
ZWN0aXZlWm9vbSgpOwogICAgIHJldHVybiAwOwogfQogCi1Qb3B1cE1lbnVTdHlsZTo6UG9wdXBN
ZW51U2l6ZSBSZW5kZXJUaGVtZU1hYzo6cG9wdXBNZW51U2l6ZShjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIEludFJlY3QmIHJlY3QpIGNvbnN0CitQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6
ZSBSZW5kZXJUaGVtZU1hYzo6cG9wdXBNZW51U2l6ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgTlNQb3BVcEJ1dHRvbkNlbGwqIHBvcHVwQnV0
dG9uID0gdGhpcy0+cG9wdXBCdXR0b24oKTsKLSAgICBOU0NvbnRyb2xTaXplIHNpemUgPSBjb250
cm9sU2l6ZUZvckNlbGwocG9wdXBCdXR0b24sIHBvcHVwQnV0dG9uU2l6ZXMoKSwgcmVjdC5zaXpl
KCksIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOworICAgIE5TQ29udHJvbFNpemUgc2l6ZSA9IGNv
bnRyb2xTaXplRm9yQ2VsbChwb3B1cEJ1dHRvbiwgcG9wdXBCdXR0b25TaXplcygpLCByZWN0LnNp
emUoKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICBzd2l0Y2ggKHNpemUpIHsKICAgICBj
YXNlIE5TUmVndWxhckNvbnRyb2xTaXplOgogICAgICAgICByZXR1cm4gUG9wdXBNZW51U3R5bGU6
OlBvcHVwTWVudVNpemVOb3JtYWw7CkBAIC0xNDUyLDcgKzE0NTIsNyBAQCBjb25zdCBJbnRTaXpl
KiBSZW5kZXJUaGVtZU1hYzo6bWVudUxpc3RTCiAgICAgcmV0dXJuIHNpemVzOwogfQogCi1pbnQg
UmVuZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAoraW50IFJlbmRlclRoZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxl
JiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIG1l
bnVMaXN0U2l6ZXMoKSkud2lkdGgoKTsKIH0KQEAgLTE0NjAsOSArMTQ2MCw5IEBAIGludCBSZW5k
ZXJUaGVtZU1hYzo6bWluaW11bU1lbnVMaXN0U2l6ZSgKIGNvbnN0IGludCB0cmFja1dpZHRoID0g
NTsKIGNvbnN0IGludCB0cmFja1JhZGl1cyA9IDI7CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFk
anVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUcmFja1N0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAog
ewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hh
ZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRyYWNr
KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCkBAIC0xNTA2LDEwICsxNTA2LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6
OnBhaW50U2xpZGVyVHJhY2soY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7
CiAgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZlciwg
c3R5bGUsIGVsZW1lbnQpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAg
c3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBjb25zdCBmbG9hdCB2ZXJ0aWNhbFNs
aWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwpAQCAtMTYwOCw3ICsxNjA4LDcgQEAgdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6c2V0U2VhcmNoQ2VsbFN0YXRlKAogewogICAgIE5TU2VhcmNoRmllbGRDZWxs
KiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIAotICAgIFtzZWFyY2ggc2V0Q29udHJvbFNpemU6
Y29udHJvbFNpemVGb3JGb250KCZvLnN0eWxlKCkpXTsKKyAgICBbc2VhcmNoIHNldENvbnRyb2xT
aXplOmNvbnRyb2xTaXplRm9yRm9udChvLnN0eWxlKCkpXTsKIAogICAgIC8vIFVwZGF0ZSB0aGUg
dmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1cGRhdGVFbmFibGVkU3RhdGUoc2Vh
cmNoLCBvKTsKQEAgLTE2MjEsNDUgKzE2MjEsNDUgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhl
bWVNYWM6OnNlYXJjaEZpZQogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNv
bnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVk
LCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlz
SW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAo
IXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNB
dXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRl
dGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgogICAgIHNldFNpemVG
cm9tRm9udChzdHlsZSwgc2VhcmNoRmllbGRTaXplcygpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIE92ZXJyaWRlIGJv
cmRlci4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBjb25zdCBzaG9ydCBib3JkZXJX
aWR0aCA9IDIgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJM
ZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0U3R5bGUoSU5T
RVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSaWdodFdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBz
dHlsZS0+c2V0Qm9yZGVyUmlnaHRTdHlsZShJTlNFVCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlckJv
dHRvbVdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyQm90dG9tU3R5bGUo
SU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJXaWR0aCk7Ci0gICAg
c3R5bGUtPnNldEJvcmRlclRvcFN0eWxlKElOU0VUKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigp
OworICAgIGNvbnN0IHNob3J0IGJvcmRlcldpZHRoID0gMiAqIHN0eWxlLmVmZmVjdGl2ZVpvb20o
KTsKKyAgICBzdHlsZS5zZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxl
LnNldEJvcmRlckxlZnRTdHlsZShJTlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmlnaHRXaWR0
aChib3JkZXJXaWR0aCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmlnaHRTdHlsZShJTlNFVCk7Cisg
ICAgc3R5bGUuc2V0Qm9yZGVyQm90dG9tV2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNl
dEJvcmRlckJvdHRvbVN0eWxlKElOU0VUKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJUb3BXaWR0aChi
b3JkZXJXaWR0aCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyVG9wU3R5bGUoSU5TRVQpOwogCiAgICAg
Ly8gT3ZlcnJpZGUgaGVpZ2h0LgotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsK
KyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKICAgICBzZXRTZWFyY2hGaWVsZFNp
emUoc3R5bGUpOwogCiAgICAgLy8gT3ZlcnJpZGUgcGFkZGluZyBzaXplIHRvIG1hdGNoIEFwcEtp
dCB0ZXh0IHBvc2l0aW9uaW5nLgotICAgIGNvbnN0IGludCBwYWRkaW5nID0gMSAqIHN0eWxlLT5l
ZmZlY3RpdmVab29tKCk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5n
LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZp
eGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7
Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Cisg
ICAgY29uc3QgaW50IHBhZGRpbmcgPSAxICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIHN0
eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNl
dFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRk
aW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdCb3R0
b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CiAKICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xT
aXplID0gY29udHJvbFNpemVGb3JGb250KHN0eWxlKTsKICAgICBzZXRGb250RnJvbUNvbnRyb2xT
aXplKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBjb250cm9sU2l6ZSk7CiAKLSAgICBzdHlsZS0+c2V0
Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0K
IAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByKQpAQCAtMTcxOCwxMiArMTcxOCwxMiBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVt
ZU1hYzo6Y2FuY2VsQnV0CiAgICAgcmV0dXJuIHNpemVzOwogfQogCi12b2lkIFJlbmRlclRoZW1l
TWFjOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXpl
Rm9yU3lzdGVtRm9udChzdHlsZSwgY2FuY2VsQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNl
dFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdo
dChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93
KG51bGxwdHIpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVk
KSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwor
ICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogY29uc3QgSW50U2l6ZSogUmVu
ZGVyVGhlbWVNYWM6OnJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0CkBAIC0xNzMzLDEyICsxNzMz
LDEyIEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lTWFjOjpyZXN1bHRzQnUKIH0KIAogY29u
c3QgaW50IGVtcHR5UmVzdWx0c09mZnNldCA9IDk7Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RT
ZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5
c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKLSAgICBzdHlsZS0+c2V0V2lk
dGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKLSAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotICAgIHN0
eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNp
emUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRI
ZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0Qm94U2hh
ZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxk
RGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpCkBAIC0xNzQ2LDEyICsxNzQ2LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6
OnBhaW50U2VhcmNoRmllbGREZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewog
ICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9u
U2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsK
LSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldFdpZHRoKExl
bmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChz
aXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsK
IH0KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQpAQCAtMTc3OSwxMiArMTc3OSwxMiBAQCBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzCiB9CiAKIGNvbnN0IGludCByZXN1bHRzQXJyb3dX
aWR0aCA9IDU7Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25z
dAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRz
QnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkg
KyByZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0
aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0
cik7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSArIHJlc3VsdHNBcnJv
d1dpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQo
KSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKIGJvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
CkBAIC0xOTE2LDEyICsxOTE2LDEyIEBAIGludCBSZW5kZXJUaGVtZU1hYzo6c2xpZGVyVGlja09m
ZnNldEZyb20KIGNvbnN0IGludCBzbGlkZXJUaHVtYldpZHRoID0gMTU7CiBjb25zdCBpbnQgc2xp
ZGVyVGh1bWJIZWlnaHQgPSAxNTsKIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVy
VGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVt
ZW50JikgY29uc3QKIHsKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBzdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRh
bFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkg
ewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVy
VGh1bWJXaWR0aCAqIHpvb21MZXZlbCksIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWln
aHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6b29tTGV2ZWwp
LCBGaXhlZCkpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsK
KyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQg
fHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7CisgICAg
ICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRlclRodW1iV2lk
dGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3Ro
KHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkp
OwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233754</attachid>
            <date>2014-06-24 15:38:37 -0700</date>
            <delta_ts>2014-06-24 16:14:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134261-20140624153816.patch</filename>
            <type>text/plain</type>
            <size>154537</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDM5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4OSBAQAorMjAxNC0wNi0yNCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSByZWZl
cmVuY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMgaW4gUmVuZGVyVGhlbWUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQyNjEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKToK
KyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVTcGluQnV0dG9uKToKKyAgICAgICAgKiBo
dG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU2xpZGVyVGh1bWI6OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2Vm
bC9SZW5kZXJUaGVtZUVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0U2l6ZUNvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZs
Ojppc0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OnN1
cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjphZGp1
c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZs
OjphZGp1c3RTbGlkZXJUaHVtYlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVF
Zmw6OmFkanVzdENoZWNrYm94U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVF
Zmw6OmFkanVzdFJhZGlvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RUZXh0RmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0VGV4dEFyZWFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFk
anVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lRWZsOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwv
UmVuZGVyVGhlbWVFZmwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnN1cHBvcnRzRm9jdXNSaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RCdXR0b25TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxpc3RTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0U2VhcmNoRmllbGRJY29u
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFNdXRlQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OmJvcmRlclJhZGlpRnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUaHVtYik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphbmlt
YXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lR3RrOjpjYWxjdWxhdGVQcm9ncmVzc1JlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0ay5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0VG9nZ2xlU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVHdGs6OmNvbWJvQm94QXJyb3dTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
R3RrOjpnZXRDb21ib0JveFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVH
dGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnNldFRvZ2dsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnNldENo
ZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9T
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OmdldENvbWJvQm94TWV0cmljcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1Rv
cCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRp
bmdCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRl
clRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5u
ZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpwYWludE91dGxpbmUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1lZGlhQ29udHJvbHM6OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6
YWRqdXN0SW5uZXJTdHlsZSk6CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6Y29tcHV0ZUludHJp
bnNpY0xvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6Om1lbnVTdHlsZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1ldGVyOjp1cGRhdGVMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWV0ZXI6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cGFpbnRPdXRs
aW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUHJvZ3Jlc3M6OnVwZGF0ZUFuaW1hdGlvblN0YXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OmFkanVzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0NvbnRy
b2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnN1cHBvcnRzRm9jdXNS
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzdGF0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OmFkanVzdFRleHRBcmVhU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OmFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TWV0ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6bWV0ZXJTaXplRm9yQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RQcm9ncmVzc0JhclN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzaG91bGRIYXZlU3BpbkJ1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TWVkaWFDb250cm9sU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNo
RmllbGREZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHls
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmg6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6c3VwcG9ydHNIb3Zlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6bWluaW11bU1lbnVMaXN0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBvcHVwTWVudVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2V0
UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzZXRCdXR0b25TaXpl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlP
Uzo6YWRqdXN0Q2hlY2tib3hTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlP
Uzo6aXNDb250cm9sU3R5bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjph
ZGp1c3RSYWRpb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwb3B1
cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9T
OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lSU9TOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lSU9TOjphZGp1c3RTbGlkZXJUaHVtYlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVJT1M6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpzZXRCdXR0b25TaXplKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6aXNDb250cm9s
U3R5bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZv
ckZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNpemVGb3JGb250KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzaXplRm9yU3lzdGVtRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0U2l6ZUZyb21Gb250KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRGaWVsZFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0QXJlYVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjptZXRlclNpemVGb3JCb3VuZHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWV0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OmxldmVsSW5kaWNhdG9yRm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6Om1pbmltdW1Qcm9ncmVzc0JhckhlaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQ
cm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YW5pbWF0aW9u
RHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1h
Yzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBvcHVwTWVudVNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaENlbGxTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoRmllbGRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVs
ZERlY29yYXRpb25QYXJ0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVt
YlNpemUpOgorICAgICAgICBDaGFuZ2UgcG9pbnRlcnMgdG8gcmVmZXJlbmNlcy4KKwogMjAxNC0w
Ni0yMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAg
IFVzZSB1bnNpZ25lZHMgaW5zdGVhZCBvZiBpbnRzIGZvciBpbmRleGVzIGludG8gYSBzdHJpbmcg
aW4gdGV4dCBsYXlvdXQgY29kZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMyLDggKzEzMzIsMTAgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZQogICAgIH0KIAogICAgIC8vIExldCB0aGUgdGhlbWUg
YWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KLSAgICBpZiAoc3R5bGUu
aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFk
anVzdFN0eWxlKCp0aGlzLCBzdHlsZSwgZSwgbV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UoKSwgbV9z
dGF0ZS5ib3JkZXJEYXRhKCksIG1fc3RhdGUuYmFja2dyb3VuZERhdGEoKSwgbV9zdGF0ZS5iYWNr
Z3JvdW5kQ29sb3IoKSk7CisgICAgaWYgKHN0eWxlLmhhc0FwcGVhcmFuY2UoKSkgeworICAgICAg
ICBBU1NFUlQoZSk7CisgICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0
U3R5bGUoKnRoaXMsIHN0eWxlLCAqZSwgbV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UoKSwgbV9zdGF0
ZS5ib3JkZXJEYXRhKCksIG1fc3RhdGUuYmFja2dyb3VuZERhdGEoKSwgbV9zdGF0ZS5iYWNrZ3Jv
dW5kQ29sb3IoKSk7CisgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNl
dWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHlsZS4KICAgICBpZiAoc3R5bGUuaGFzUHNl
dWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZp
ZWxkSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRG
aWVsZElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3
IEBAIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRIYXZlU3BpbkIKIHsKICAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50KCkuZG9jdW1lbnQoKTsKICAgICBSZWZQdHI8UmVuZGVy
VGhlbWU+IHRoZW1lID0gZG9jdW1lbnQucGFnZSgpID8gJmRvY3VtZW50LnBhZ2UoKS0+dGhlbWUo
KSA6IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKTsKLSAgICByZXR1cm4gdGhlbWUtPnNob3Vs
ZEhhdmVTcGluQnV0dG9uKCZlbGVtZW50KCkpOworICAgIHJldHVybiB0aGVtZS0+c2hvdWxkSGF2
ZVNwaW5CdXR0b24oZWxlbWVudCgpKTsKIH0KIAogdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmNy
ZWF0ZVNoYWRvd1N1YnRyZWUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xp
ZGVyVGh1bWJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05NCw4ICs5NCwxMCBAQCB2b2lkIFJlbmRlclNsaWRlclRodW1iOjp1cGRhdGVBcHBlYXJh
bmNlCiAgICAgICAgIHN0eWxlKCkuc2V0QXBwZWFyYW5jZShNZWRpYVZvbHVtZVNsaWRlclRodW1i
UGFydCk7CiAgICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYUZ1
bGxTY3JlZW5Wb2x1bWVTbGlkZXJQYXJ0KQogICAgICAgICBzdHlsZSgpLnNldEFwcGVhcmFuY2Uo
TWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLSAgICBpZiAoc3R5bGUoKS5o
YXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIHRoZW1lKCkuYWRqdXN0U2xpZGVyVGh1bWJTaXplKCZz
dHlsZSgpLCBlbGVtZW50KCkpOworICAgIGlmIChzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkgewor
ICAgICAgICBBU1NFUlQoZWxlbWVudCgpKTsKKyAgICAgICAgdGhlbWUoKS5hZGp1c3RTbGlkZXJU
aHVtYlNpemUoc3R5bGUoKSwgKmVsZW1lbnQoKSk7CisgICAgfQogfQogCiBib29sIFJlbmRlclNs
aWRlclRodW1iOjppc1NsaWRlclRodW1iKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI1LDI3ICsxMjUsMjcgQEAgc3RhdGljIGJvb2wgc2V0U291cmNlR3JvdXBGb3JF
ZGplT2JqZWN0KAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTaXplQ29uc3RyYWludHMoUmVuZGVyU3R5bGUqIHN0eWxlLCBGb3JtVHlwZSB0eXBlKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0
eWxlJiBzdHlsZSwgRm9ybVR5cGUgdHlwZSkgY29uc3QKIHsKICAgICBsb2FkVGhlbWVJZk5lZWRl
ZCgpOwogCiAgICAgLy8gVGhlc2UgYXJlIGFsd2F5cyB2YWxpZCwgZXZlbiBpZiBubyB0aGVtZSBj
b3VsZCBiZSBsb2FkZWQuCiAgICAgY29uc3QgVGhlbWVQYXJ0RGVzYyogZGVzYyA9IG1fcGFydERl
c2NzICsgKHNpemVfdCl0eXBlOwogCi0gICAgaWYgKHN0eWxlLT5taW5XaWR0aCgpLmlzSW50cmlu
c2ljKCkpCi0gICAgICAgIHN0eWxlLT5zZXRNaW5XaWR0aChkZXNjLT5taW4ud2lkdGgoKSk7Ci0g
ICAgaWYgKHN0eWxlLT5taW5IZWlnaHQoKS5pc0ludHJpbnNpYygpKQotICAgICAgICBzdHlsZS0+
c2V0TWluSGVpZ2h0KGRlc2MtPm1pbi5oZWlnaHQoKSk7Ci0KLSAgICBpZiAoZGVzYy0+bWF4Lndp
ZHRoKCkudmFsdWUoKSA+IDAgJiYgc3R5bGUtPm1heFdpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KSkKLSAgICAgICAgc3R5bGUtPnNldE1heFdpZHRoKGRlc2MtPm1heC53aWR0aCgpKTsKLSAgICBp
ZiAoZGVzYy0+bWF4LmhlaWdodCgpLnZhbHVlKCkgPiAwICYmIHN0eWxlLT5tYXhIZWlnaHQoKS5p
c0ludHJpbnNpY09yQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0TWF4SGVpZ2h0KGRlc2MtPm1h
eC5oZWlnaHQoKSk7Ci0KLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChkZXNjLT5wYWRkaW5nLnRv
cCgpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShkZXNjLT5wYWRkaW5nLmJvdHRvbSgp
KTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoZGVzYy0+cGFkZGluZy5sZWZ0KCkpOwotICAg
IHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoZGVzYy0+cGFkZGluZy5yaWdodCgpKTsKKyAgICBpZiAo
c3R5bGUubWluV2lkdGgoKS5pc0ludHJpbnNpYygpKQorICAgICAgICBzdHlsZS5zZXRNaW5XaWR0
aChkZXNjLT5taW4ud2lkdGgoKSk7CisgICAgaWYgKHN0eWxlLm1pbkhlaWdodCgpLmlzSW50cmlu
c2ljKCkpCisgICAgICAgIHN0eWxlLnNldE1pbkhlaWdodChkZXNjLT5taW4uaGVpZ2h0KCkpOwor
CisgICAgaWYgKGRlc2MtPm1heC53aWR0aCgpLnZhbHVlKCkgPiAwICYmIHN0eWxlLm1heFdpZHRo
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAgICAgICAgc3R5bGUuc2V0TWF4V2lkdGgoZGVzYy0+
bWF4LndpZHRoKCkpOworICAgIGlmIChkZXNjLT5tYXguaGVpZ2h0KCkudmFsdWUoKSA+IDAgJiYg
c3R5bGUubWF4SGVpZ2h0KCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAgICAgICAgc3R5bGUuc2V0
TWF4SGVpZ2h0KGRlc2MtPm1heC5oZWlnaHQoKSk7CisKKyAgICBzdHlsZS5zZXRQYWRkaW5nVG9w
KGRlc2MtPnBhZGRpbmcudG9wKCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdCb3R0b20oZGVzYy0+
cGFkZGluZy5ib3R0b20oKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0xlZnQoZGVzYy0+cGFkZGlu
Zy5sZWZ0KCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdSaWdodChkZXNjLT5wYWRkaW5nLnJpZ2h0
KCkpOwogfQogCiBzdGF0aWMgYm9vbCBpc0Zvcm1FbGVtZW50VG9vTGFyZ2VUb0Rpc3BsYXkoY29u
c3QgSW50U2l6ZSYgZWxlbWVudFNpemUpCkBAIC0zNDYsOSArMzQ2LDkgQEAgdm9pZCBSZW5kZXJU
aGVtZUVmbDo6YXBwbHlFZGplUlRMU3RhdGUoRQogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZUVmbDo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9y
ZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9y
JiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Citib29sIFJlbmRlclRoZW1lRWZsOjppc0NvbnRyb2xT
dHlsZWQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIs
IGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xv
cikgY29uc3QKIHsKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHls
ZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpIHx8IHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0OworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXND
b250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcikg
fHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydDsKIH0KIAogYm9vbCBS
ZW5kZXJUaGVtZUVmbDo6cGFpbnRUaGVtZVBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3Qs
IEZvcm1UeXBlIHR5cGUsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKQEAgLTYyNyw5ICs2MjcsOSBAQCBzdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQ
YXJ0IGFwCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjpzdXBwb3J0c0ZvY3VzUmlu
Zyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citib29sIFJlbmRlclRoZW1lRWZsOjpz
dXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7CisgICAgcmV0dXJuIHN1
cHBvcnRzRm9jdXMoc3R5bGUuYXBwZWFyYW5jZSgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVm
bDo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpIGNvbnN0
CkBAIC02OTksMjYgKzY5OSwyNiBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNsaWRlclRy
YWNrKGNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1
c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVHJhY2tTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsK
LSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRv
dyhudWxscHRyKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTbGlkZXJU
aHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHls
ZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xp
ZGVyVGh1bWJTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7Ci0gICAgc3R5bGUt
PnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0g
ICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBh
cnQgcGFydCA9IHN0eWxlLmFwcGVhcmFuY2UoKTsKICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVt
YlZlcnRpY2FsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRo
dW1iSGVpZ2h0LCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlk
ZXJUaHVtYldpZHRoLCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xp
ZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgo
c2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKICAgICB9IGVsc2UgaWYgKHBhcnQgPT0gU2xpZGVy
VGh1bWJIb3Jpem9udGFsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNs
aWRlclRodW1iV2lkdGgsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5n
dGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExl
bmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKICAgICB9CiB9CiAKQEAgLTc2Niw3ICs3
NjYsNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNsaWRlclRodW1iKGNvCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RDaGVja2JveFN0eWxl
KFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdENoZWNrYm94U3R5
bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVt
ZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQgJiYgZWxl
bWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhl
bWVFZmwmPihlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0Q2hlY2ti
b3hTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CkBAIC03NzUsMTMgKzc3NSwx
MyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RDaGVja2JveFN0eWxlCiAKICAgICBhZGp1
c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIENoZWNrQm94KTsKIAotICAgIHN0eWxlLT5yZXNldEJv
cmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKICAgICBjb25zdCBUaGVtZVBhcnRE
ZXNjKiBkZXNjID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KUNoZWNrQm94OwotICAgIGlmIChzdHls
ZS0+d2lkdGgoKS52YWx1ZSgpIDwgZGVzYy0+bWluLndpZHRoKCkudmFsdWUoKSkKLSAgICAgICAg
c3R5bGUtPnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdo
dCgpLnZhbHVlKCkgPCBkZXNjLT5taW4uaGVpZ2h0KCkudmFsdWUoKSkKLSAgICAgICAgc3R5bGUt
PnNldEhlaWdodChkZXNjLT5taW4uaGVpZ2h0KCkpOworICAgIGlmIChzdHlsZS53aWR0aCgpLnZh
bHVlKCkgPCBkZXNjLT5taW4ud2lkdGgoKS52YWx1ZSgpKQorICAgICAgICBzdHlsZS5zZXRXaWR0
aChkZXNjLT5taW4ud2lkdGgoKSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLnZhbHVlKCkgPCBk
ZXNjLT5taW4uaGVpZ2h0KCkudmFsdWUoKSkKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KGRlc2Mt
Pm1pbi5oZWlnaHQoKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50Q2hlY2tib3go
Y29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKQEAgLTc4OSw3ICs3ODksNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpw
YWludENoZWNrYm94KGNvbnN0CiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgQ2hl
Y2tCb3gsIGluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RSYWRp
b1N0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFJhZGlv
U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQgJiYg
ZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVy
VGhlbWVFZmwmPihlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0UmFk
aW9TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CkBAIC03OTgsMTMgKzc5OCwx
MyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RSYWRpb1N0eWxlKFN0CiAKICAgICBhZGp1
c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIFJhZGlvQnV0dG9uKTsKIAotICAgIHN0eWxlLT5yZXNl
dEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKICAgICBjb25zdCBUaGVtZVBh
cnREZXNjKiBkZXNjID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KVJhZGlvQnV0dG9uOwotICAgIGlm
IChzdHlsZS0+d2lkdGgoKS52YWx1ZSgpIDwgZGVzYy0+bWluLndpZHRoKCkudmFsdWUoKSkKLSAg
ICAgICAgc3R5bGUtPnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKLSAgICBpZiAoc3R5bGUt
PmhlaWdodCgpLnZhbHVlKCkgPCBkZXNjLT5taW4uaGVpZ2h0KCkudmFsdWUoKSkKLSAgICAgICAg
c3R5bGUtPnNldEhlaWdodChkZXNjLT5taW4uaGVpZ2h0KCkpOworICAgIGlmIChzdHlsZS53aWR0
aCgpLnZhbHVlKCkgPCBkZXNjLT5taW4ud2lkdGgoKS52YWx1ZSgpKQorICAgICAgICBzdHlsZS5z
ZXRXaWR0aChkZXNjLT5taW4ud2lkdGgoKSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLnZhbHVl
KCkgPCBkZXNjLT5taW4uaGVpZ2h0KCkudmFsdWUoKSkKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0
KGRlc2MtPm1pbi5oZWlnaHQoKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50UmFk
aW8oY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKQEAgLTgxMiw3ICs4MTIsNyBAQCBib29sIFJlbmRlclRoZW1lRWZs
OjpwYWludFJhZGlvKGNvbnN0IFJlCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwg
UmFkaW9CdXR0b24sIGluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1
c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1
c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYgZWxl
bWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNfY2Fz
dDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5h
ZGp1c3RCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CkBAIC04MjAs
NyArODIwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0QnV0dG9uU3R5bGUoUwogICAg
IH0KIAogICAgIC8vIGFkanVzdFNpemVDb25zdHJhaW5zIGNhbiBtYWtlIFNxdWFyZUJ1dHRvblBh
cnQncyBzaXplIHdyb25nIChieSBhZGp1c3RpbmcgcGFkZGluZ3MpLCBzbyBjYWxsIGl0IG9ubHkg
Zm9yIFB1c2hCdXR0b25QYXJ0IGFuZCBCdXR0b25QYXJ0Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBCdXR0b25Q
YXJ0KQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQgfHwgc3R5
bGUuYXBwZWFyYW5jZSgpID09IEJ1dHRvblBhcnQpCiAgICAgICAgIGFkanVzdFNpemVDb25zdHJh
aW50cyhzdHlsZSwgQnV0dG9uKTsKIH0KIApAQCAtODI5LDE3ICs4MjksMTcgQEAgYm9vbCBSZW5k
ZXJUaGVtZUVmbDo6cGFpbnRCdXR0b24oY29uc3QgUgogICAgIHJldHVybiBwYWludFRoZW1lUGFy
dChvYmplY3QsIEJ1dHRvbiwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6
OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3Bh
Z2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAgICBz
dGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50
aGVtZSgpKS5hZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5
bGUsIENvbWJvQm94KTsKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+c2V0
V2hpdGVTcGFjZShQUkUpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUuc2V0
V2hpdGVTcGFjZShQUkUpOwogCi0gICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVyU3R5
bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWlu
dE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGlu
Zm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTg2OCwxNCArODY4LDE0IEBAIGJvb2wgUmVu
ZGVyVGhlbWVFZmw6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICByZXR1cm4gcGFpbnRNZW51TGlz
dChvYmplY3QsIGluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RU
ZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1
c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYg
ZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgp
KS5hZGp1c3RUZXh0RmllbGRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBU
ZXh0RmllbGQpOwotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9y
ZGVyKCk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGV4dEZpZWxkKGNvbnN0IFJl
bmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKQEAgLTg4Myw3ICs4ODMsNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRl
eHRGaWVsZChjb25zCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgVGV4dEZpZWxk
LCBpbmZvLCBJbnRSZWN0KHJlY3QpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0
VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKQEAgLTg5MiwyMSArODky
LDIxIEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGV4dEFyZWEoY29uc3QKICAgICByZXR1
cm4gcGFpbnRUZXh0RmllbGQob2JqZWN0LCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQgJiYg
ZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVy
VGhlbWVFZmwmPihlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHls
ZSwgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKTsKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsK
LSAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7
CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCi0gICAgZmxvYXQgZm9udFNjYWxlID0g
c3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Rm9udFNpemU7CisgICAgZmxvYXQgZm9udFNjYWxl
ID0gc3R5bGUuZm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKICAgICBpbnQgZGVjb3JhdGlv
blNpemUgPSBscm91bmRmKHN0ZDo6bWluKHN0ZDo6bWF4KG1pblNlYXJjaERlY29yYXRpb25CdXR0
b25TaXplLCBkZWZhdWx0Rm9udFNpemUgKiBmb250U2NhbGUpLCBtYXhTZWFyY2hEZWNvcmF0aW9u
QnV0dG9uU2l6ZSkpOwogCi0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChkZWNvcmF0aW9uU2l6
ZSArIHNlYXJjaEZpZWxkRGVjb3JhdGlvbkJ1dHRvbk9mZnNldCwgRml4ZWQpKTsKLSAgICBzdHls
ZS0+c2V0SGVpZ2h0KExlbmd0aChkZWNvcmF0aW9uU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS5z
ZXRXaWR0aChMZW5ndGgoZGVjb3JhdGlvblNpemUgKyBzZWFyY2hGaWVsZERlY29yYXRpb25CdXR0
b25PZmZzZXQsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChkZWNvcmF0aW9u
U2l6ZSwgRml4ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTkxNCwyMSArOTE0LDIxIEBAIGJvb2wg
UmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRSZXMKICAgICByZXR1cm4gcGFpbnRUaGVt
ZVBhcnQob2JqZWN0LCBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24sIGluZm8sIHJlY3QpOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewog
ICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkp
IHsKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LT5kb2N1bWVu
dCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBh
cnRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uKTsKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+c2V0
V2hpdGVTcGFjZShQUkUpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUuc2V0
V2hpdGVTcGFjZShQUkUpOwogCi0gICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXpl
KCkgLyBkZWZhdWx0Rm9udFNpemU7CisgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUuZm9udFNp
emUoKSAvIGRlZmF1bHRGb250U2l6ZTsKICAgICBpbnQgZGVjb3JhdGlvblNpemUgPSBscm91bmRm
KHN0ZDo6bWluKHN0ZDo6bWF4KG1pblNlYXJjaERlY29yYXRpb25CdXR0b25TaXplLCBkZWZhdWx0
Rm9udFNpemUgKiBmb250U2NhbGUpLCBtYXhTZWFyY2hEZWNvcmF0aW9uQnV0dG9uU2l6ZSkpOwog
Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChkZWNvcmF0aW9uU2l6ZSArIHNlYXJjaEZpZWxk
RGVjb3JhdGlvbkJ1dHRvbk9mZnNldCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aChkZWNvcmF0aW9uU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgo
ZGVjb3JhdGlvblNpemUgKyBzZWFyY2hGaWVsZERlY29yYXRpb25CdXR0b25PZmZzZXQsIEZpeGVk
KSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChkZWNvcmF0aW9uU2l6ZSwgRml4ZWQpKTsK
IH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtOTM2LDIzICs5MzYsMjMgQEAgYm9vbCBSZW5kZXJU
aGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVsZFJlcwogICAgIHJldHVybiBwYWludFRoZW1lUGFydChv
YmplY3QsIFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24sIGluZm8sIHJlY3QpOwogfQogCi12
b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGlmICghbV9wYWdlICYmIGVs
ZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpIHsKICAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSku
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwg
ZWxlbWVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYWRqdXN0U2l6ZUNvbnN0cmFp
bnRzKHN0eWxlLCBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik7Ci0gICAgc3R5bGUtPnJlc2V0Qm9y
ZGVyKCk7Ci0gICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKyAgICBzdHlsZS5yZXNldEJv
cmRlcigpOworICAgIHN0eWxlLnNldFdoaXRlU3BhY2UoUFJFKTsKIAogICAgIC8vIExvZ2ljIHRh
a2VuIGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bS5jcHAuCiAgICAgLy8gU2NhbGUgdGhlIGJ1dHRv
biBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUuCi0gICAgZmxvYXQgZm9udFNjYWxlID0gc3R5
bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Rm9udFNpemU7CisgICAgZmxvYXQgZm9udFNjYWxlID0g
c3R5bGUuZm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKICAgICBpbnQgY2FuY2VsQnV0dG9u
U2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluQ2FuY2VsQnV0dG9uU2l6ZSwgZGVm
YXVsdEZvbnRTaXplICogZm9udFNjYWxlKSwgbWF4Q2FuY2VsQnV0dG9uU2l6ZSkpOwogCi0gICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOwotICAgIHN0
eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CisgICAgc3R5
bGUuc2V0V2lkdGgoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CisgICAgc3R5bGUu
c2V0SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOwogfQogCiBib29sIFJl
bmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CkBAIC05NjAsMTUgKzk2MCwxNSBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZp
ZWxkQ2FuCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2VhcmNoRmllbGRDYW5j
ZWxCdXR0b24sIGluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RT
ZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFk
anVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGlmICghbV9wYWdl
ICYmIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpIHsKICAgICAgICAgc3Rh
dGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+dGhl
bWUoKSkuYWRqdXN0U2VhcmNoRmllbGRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVu
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0
eWxlLCBTZWFyY2hGaWVsZCk7Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5bGUt
PnNldFdoaXRlU3BhY2UoUFJFKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIHN0eWxl
LnNldFdoaXRlU3BhY2UoUFJFKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFy
Y2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtOTc2LDcgKzk3Niw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVFZmw6OnBhaW50U2VhcmNoRmllbGQoY28KICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQob2Jq
ZWN0LCBTZWFyY2hGaWVsZCwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6
OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVFZmw6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgp
KSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1l
bnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKQEAgLTEwMDgsOSArMTAwOCw5IEBAIHZvaWQgUmVuZGVy
VGhlbWVFZmw6OnN5c3RlbUZvbnQoQ1NTVmFsdWUKIH0KIAogI2lmIEVOQUJMRShQUk9HUkVTU19F
TEVNRU5UKQotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVFZmw6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRv
dyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKIGRvdWJs
ZSBSZW5kZXJUaGVtZUVmbDo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihS
ZW5kZXJQcm9ncmVzcyopIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
UmVuZGVyVGhlbWVFZmwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvUmVuZGVyVGhlbWVFZmwuaAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEzICs2
OCwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0
ZShQYWdlKik7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJv
bHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJl
bmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgLy8gQSBt
ZXRob2QgUmV0dXJuaW5nIHdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgc3R5bGVkIGJ5IGNzcyBvciBu
b3QgZS5nIHNwZWNpZnlpbmcgYmFja2dyb3VuZC1jb2xvci4KLSAgICB2aXJ0dWFsIGJvb2wgaXND
b250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0
IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91
bmRDb2xvcikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhl
IHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0aGUgZm9jdXMgcmluZy4KLSAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFu
Z2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgogICAgIHZpcnR1
YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCBv
dmVycmlkZTsKQEAgLTEwNCw1MCArMTA0LDUwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEVudHJ5
VGV4dENvbG9yKGludCBmb3JlUiwgaW50IGZvcmVHLCBpbnQgZm9yZUIsIGludCBmb3JlQSwgaW50
IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNrQiwgaW50IGJhY2tBKTsKICAgICB2b2lkIHNldFNl
YXJjaFRleHRDb2xvcihpbnQgZm9yZVIsIGludCBmb3JlRywgaW50IGZvcmVCLCBpbnQgZm9yZUEs
IGludCBiYWNrUiwgaW50IGJhY2tHLCBpbnQgYmFja0IsIGludCBiYWNrQSk7CiAKLSAgICB2b2lk
IGFkanVzdFNpemVDb25zdHJhaW50cyhSZW5kZXJTdHlsZSosIEZvcm1UeXBlKSBjb25zdDsKKyAg
ICB2b2lkIGFkanVzdFNpemVDb25zdHJhaW50cyhSZW5kZXJTdHlsZSYsIEZvcm1UeXBlKSBjb25z
dDsKIAogICAgIC8vIFN5c3RlbSBmb250cy4KICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChD
U1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2ti
b3hTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVh
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51
TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAogICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZp
ZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKICAg
ICB2aXJ0dWFsIEludFNpemUgc2xpZGVyVGlja1NpemUoKSBjb25zdCBvdmVycmlkZTsKQEAgLTE1
OSwxMyArMTU5LDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRo
dW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIHZvaWQgc2V0
RGVmYXVsdEZvbnRTaXplKGludCBmb250c2l6ZSk7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxF
TUVOVCkKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dy
ZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVz
cyopIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrMi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrMi5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIsMTggKzE0MiwxOCBAQCBzdGF0aWMgR3RrU3RhdGVUeXBlIGdldEd0a1N0YXRlVHlwZShSZW5k
CiAgICAgcmV0dXJuIEdUS19TVEFURV9OT1JNQUw7CiB9CiAKLXN0YXRpYyB2b2lkIHNldFRvZ2ds
ZVNpemUoY29uc3QgUmVuZGVyVGhlbWVHdGsqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEd0a1dpZGdl
dCogd2lkZ2V0KQorc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0
ayosIFJlbmRlclN0eWxlJiBzdHlsZSwgR3RrV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgLy8gVGhl
IHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCBzbyB3ZSBzaG91bGRuJ3QgY2hh
bmdlIHRoZW0uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYm
ICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50
cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1
cm47CiAKICAgICBnaW50IGluZGljYXRvclNpemU7CiAgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQo
d2lkZ2V0LCAiaW5kaWNhdG9yLXNpemUiLCAmaW5kaWNhdG9yU2l6ZSwgTlVMTCk7Ci0gICAgaWYg
KHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRX
aWR0aChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdo
dCgpLmlzQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChpbmRpY2F0b3JT
aXplLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkp
CisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwor
ICAgIGlmIChzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0
KExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwogfQogCiBzdGF0aWMgdm9pZCBwYWludFRv
Z2dsZShSZW5kZXJUaGVtZUd0ayogdGhlbWUsIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2Jq
ZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdl
dCogd2lkZ2V0KQpAQCAtMTk0LDcgKzE5NCw3IEBAIHN0YXRpYyB2b2lkIHBhaW50VG9nZ2xlKFJl
bmRlclRoZW1lR3RrKiAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNr
Ym94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjpz
ZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIHNldFRvZ2ds
ZVNpemUodGhpcywgc3R5bGUsIGd0a0NoZWNrQnV0dG9uKCkpOwogfQpAQCAtMjA1LDcgKzIwNSw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goY29uc3QKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVy
U3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIHNldFRvZ2dsZVNpemUodGhpcywgc3R5bGUsIGd0
a1JhZGlvQnV0dG9uKCkpOwogfQpAQCAtMjg5LDExICsyODksMTEgQEAgaW50IFJlbmRlclRoZW1l
R3RrOjpnZXRDb21ib0JveFNlcGFyYXRvcgogICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHls
ZShzZXBhcmF0b3IpLT54dGhpY2tuZXNzOwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OmNvbWJv
Qm94QXJyb3dTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0
azo6Y29tYm9Cb3hBcnJvd1NpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIC8v
IFRha2luZyB0aGUgZm9udCBzaXplIGFuZCByZXZlcnNpbmcgdGhlIERQSSBjb252ZXJzaW9uIHNl
ZW1zIHRvIG1hdGNoCiAgICAgLy8gR1RLKyByZW5kZXJpbmcgYXMgY2xvc2VseSBhcyBwb3NzaWJs
ZS4KLSAgICByZXR1cm4gc3R5bGUtPmZvbnQoKS5zaXplKCkgKiAoNzIuMCAvIFJlbmRlclRoZW1l
R3RrOjpnZXRTY3JlZW5EUEkoKSk7CisgICAgcmV0dXJuIHN0eWxlLmZvbnQoKS5zaXplKCkgKiAo
NzIuMCAvIFJlbmRlclRoZW1lR3RrOjpnZXRTY3JlZW5EUEkoKSk7CiB9CiAKIHN0YXRpYyB2b2lk
IGdldEJ1dHRvbklubmVyQm9yZGVyKEd0a1dpZGdldCogYnV0dG9uLCBpbnQmIGxlZnQsIGludCYg
dG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkKQEAgLTMxNiwxMSArMzE2LDExIEBAIHN0YXRp
YyB2b2lkIGdldEJ1dHRvbklubmVyQm9yZGVyKEd0a1dpZGcKIH0KIAogCi12b2lkIFJlbmRlclRo
ZW1lR3RrOjpnZXRDb21ib0JveFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQmIGxlZnQs
IGludCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVHdGs6OmdldENvbWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSYgc3R5bGUsIGludCYgbGVmdCwg
aW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKSBjb25zdAogewogICAgIC8vIElmIHRo
aXMgbWVudSBsaXN0IGJ1dHRvbiBpc24ndCBkcmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3
ZQogICAgIC8vIGRvbid0IGFkZCBhbnkgZXh0cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3Jl
IGFscmVhZHkgdXNlcy4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQ
YXJ0KQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTm9Db250cm9sUGFydCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gQSBjb21ibyBib3ggYnV0dG9uIGlzIGEgYnV0dG9uIHdpdGgg
d2lkZ2V0cyBwYWNrZWQgaW50byBpdC4KQEAgLTMzMiwzNCArMzMyLDM0IEBAIHZvaWQgUmVuZGVy
VGhlbWVHdGs6OmdldENvbWJvQm94UGFkZGluZygKICAgICBpbnQgYXJyb3dBbmRTZXBlcmF0b3JM
ZW5ndGggPSBjb21ib0JveEFycm93U2l6ZShzdHlsZSkgKwogICAgICAgICBnZXRDb21ib0JveFNl
cGFyYXRvcldpZHRoKCkgKyAoMyAqIGJ1dHRvbldpZGdldFN0eWxlLT54dGhpY2tuZXNzKTsKIAot
ICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgIGlmIChzdHlsZS5kaXJlY3Rp
b24oKSA9PSBSVEwpCiAgICAgICAgIGxlZnQgKz0gYXJyb3dBbmRTZXBlcmF0b3JMZW5ndGg7CiAg
ICAgZWxzZQogICAgICAgICByaWdodCArPSBhcnJvd0FuZFNlcGVyYXRvckxlbmd0aDsKIH0KIAot
aW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xl
ZnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIGludCBsZWZ0ID0gMCwgdG9wID0g
MCwgcmlnaHQgPSAwLCBib3R0b20gPSAwOwogICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwg
bGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICByZXR1cm4gbGVmdDsKIH0KIAotaW50IFJl
bmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChS
ZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCBy
aWdodCA9IDAsIGJvdHRvbSA9IDA7CiAgICAgZ2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0
LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIHJldHVybiByaWdodDsKIH0KIAotaW50IFJlbmRl
clRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0
eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0g
MCwgYm90dG9tID0gMDsKICAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwg
cmlnaHQsIGJvdHRvbSk7CiAgICAgcmV0dXJuIHRvcDsKIH0KIAotaW50IFJlbmRlclRoZW1lR3Rr
Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citp
bnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxl
JiBzdHlsZSkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwg
Ym90dG9tID0gMDsKICAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmln
aHQsIGJvdHRvbSk7CkBAIC0zODEsMTIgKzM4MSwxMiBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludE1lbnVMaXN0KGNvbnN0CiAKICAgICBpbnQgbGVmdEJvcmRlciA9IDAsIHJpZ2h0Qm9yZGVy
ID0gMCwgYm90dG9tQm9yZGVyID0gMCwgdG9wQm9yZGVyID0gMDsKICAgICBnZXRCdXR0b25Jbm5l
ckJvcmRlcihndGtDb21ib0JveEJ1dHRvbigpLCBsZWZ0Qm9yZGVyLCB0b3BCb3JkZXIsIHJpZ2h0
Qm9yZGVyLCBib3R0b21Cb3JkZXIpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZvYmplY3Qu
c3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBvYmplY3Quc3R5bGUoKTsKICAgICBp
bnQgYXJyb3dTaXplID0gY29tYm9Cb3hBcnJvd1NpemUoc3R5bGUpOwogICAgIEd0a1N0eWxlKiBi
dXR0b25TdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKGd0a0NvbWJvQm94QnV0dG9uKCkpOwog
CiAgICAgSW50UmVjdCBhcnJvd1JlY3QoMCwgKHJlY3QuaGVpZ2h0KCkgLSBhcnJvd1NpemUpIC8g
MiwgYXJyb3dTaXplLCBhcnJvd1NpemUpOwotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0g
UlRMKQorICAgIGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgIGFycm93UmVj
dC5zZXRYKGxlZnRCb3JkZXIgKyBidXR0b25TdHlsZS0+eHRoaWNrbmVzcyk7CiAgICAgZWxzZQog
ICAgICAgICBhcnJvd1JlY3Quc2V0WChyZWN0LndpZHRoKCkgLSByaWdodEJvcmRlciAtIGJ1dHRv
blN0eWxlLT54dGhpY2tuZXNzIC0gYXJyb3dTaXplKTsKQEAgLTQxMCw3ICs0MTAsNyBAQCBib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KGNvbnN0CiAgICAgYm90dG9tQm9yZGVyICs9
IGZvY3VzUGFkZGluZyArIGZvY3VzV2lkdGg7CiAgICAgaW50IHNlcGFyYXRvcldpZHRoID0gZ2V0
Q29tYm9Cb3hTZXBhcmF0b3JXaWR0aCgpOwogICAgIEludFJlY3Qgc2VwYXJhdG9yUmVjdCgwLCB0
b3BCb3JkZXIsIHNlcGFyYXRvcldpZHRoLCByZWN0LmhlaWdodCgpIC0gdG9wQm9yZGVyIC0gYm90
dG9tQm9yZGVyKTsKLSAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFJUTCkKKyAgICBpZiAo
c3R5bGUuZGlyZWN0aW9uKCkgPT0gUlRMKQogICAgICAgICBzZXBhcmF0b3JSZWN0LnNldFgoYXJy
b3dSZWN0LngoKSArIGFycm93UmVjdC53aWR0aCgpICsgYnV0dG9uU3R5bGUtPnh0aGlja25lc3Mg
KyBzZXBhcmF0b3JXaWR0aCk7CiAgICAgZWxzZQogICAgICAgICBzZXBhcmF0b3JSZWN0LnNldFgo
YXJyb3dSZWN0LngoKSAtIGJ1dHRvblN0eWxlLT54dGhpY2tuZXNzIC0gc2VwYXJhdG9yV2lkdGgp
OwpAQCAtNTI4LDkgKzUyOCw5IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVGh1
bWIoY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHls
ZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBl
YXJhbmNlKCk7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLmFwcGVhcmFuY2UoKTsKICAg
ICBpZiAocGFydCAhPSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ICYmIHBhcnQgIT0gU2xpZGVy
VGh1bWJWZXJ0aWNhbFBhcnQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTQyLDEzICs1NDIsMTMg
QEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaQogICAgICAgICAgICAg
ICAgICAgICAgICAgIE5VTEwpOwogCiAgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9u
dGFsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQp
KTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAg
ICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChsZW5ndGgsIEZpeGVkKSk7CisgICAgICAgIHN0eWxl
LnNldEhlaWdodChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBN
ZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3
aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVk
KSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxl
LnNldEhlaWdodChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOwogfQogCiAjaWYgRU5BQkxFKFBST0dS
RVNTX0VMRU1FTlQpCkBAIC01NzQsNyArNTc0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRQcm9ncmVzc0JhcihjbwogfQogI2VuZGlmCiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNv
bnN0CiB7CiAgICAgR3RrU3R5bGUqIGd0a1N0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3Rr
U3BpbkJ1dHRvbigpKTsKICAgICBjb25zdCBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZm9udERlc2Ny
aXB0aW9uID0gZ3RrU3R5bGUtPmZvbnRfZGVzYzsKQEAgLTU4NSw4ICs1ODUsOCBAQCB2b2lkIFJl
bmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0CiAgICAgaW50IHdpZHRoID0gc3RkOjpt
YXgoUEFOR09fUElYRUxTKGZvbnRTaXplKSwgbWluU3BpbkJ1dHRvbkFycm93U2l6ZSk7CiAgICAg
d2lkdGggKz0gLSgod2lkdGggJSAyKSAtIDEpICsgZ3RrU3R5bGUtPnh0aGlja25lc3M7CiAKLSAg
ICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRN
aW5XaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3Ro
KHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4
ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1JlbmRlclRoZW1lR3RrMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDEsMTAgKzIwMSwxMCBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RSZXBhaW50UmVj
dChjCiAgICAgYWRqdXN0UmVjdEZvckZvY3VzKGNvbnRleHQsIHJlY3QpOwogfQogCi1zdGF0aWMg
dm9pZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUq
IHN0eWxlKQorc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShHdGtTdHlsZUNvbnRleHQqIGNvbnRl
eHQsIFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBh
cmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNob3VsZG4ndCBjaGFuZ2UgdGhlbS4KLSAgICBpZiAo
IXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5p
c0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAh
c3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE90aGVy
IHBvcnRzIGhhcmQtY29kZSB0aGlzIHRvIDEzIHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQgdmFs
dWUgZGVmaW5lZCBieSBHVEsrLgpAQCAtMjEzLDExICsyMTMsMTEgQEAgc3RhdGljIHZvaWQgc2V0
VG9nZ2xlU2l6ZShHdGtTdHlsZUNvbnRleAogICAgIGdpbnQgaW5kaWNhdG9yU2l6ZTsKICAgICBn
dGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImluZGljYXRvci1zaXplIiwgJmlu
ZGljYXRvclNpemUsIE5VTEwpOwogCi0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2lj
T3JBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwg
Rml4ZWQpKTsKKyAgICBpZiAoc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAg
ICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKIAotICAg
IGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLmlz
QXV0bygpKQorICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGluZGljYXRvclNpemUsIEZp
eGVkKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhaW50VG9nZ2xlKGNvbnN0IFJlbmRlclRoZW1lR3Rr
KiB0aGVtZSwgR1R5cGUgd2lkZ2V0VHlwZSwgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBmdWxsUmVjdCkK
QEAgLTI3NSw3ICsyNzUsNyBAQCBzdGF0aWMgdm9pZCBwYWludFRvZ2dsZShjb25zdCBSZW5kZXJU
aGVtCiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUp
IGNvbnN0CiB7CiAgICAgc2V0VG9nZ2xlU2l6ZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ0hF
Q0tfQlVUVE9OKSwgc3R5bGUpOwogfQpAQCAtMjg2LDcgKzI4Niw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50Q2hlY2tib3goY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVHdGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dAogewogICAgIHNldFRvZ2dsZVNpemUoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1JBRElPX0JV
VFRPTiksIHN0eWxlKTsKIH0KQEAgLTM3OCwxOCArMzc4LDE4IEBAIGJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50QnV0dG9uKGNvbnN0IFIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2
b2lkIGdldENvbWJvQm94TWV0cmljcyhSZW5kZXJTdHlsZSogc3R5bGUsIEd0a0JvcmRlciYgYm9y
ZGVyLCBpbnQmIGZvY3VzLCBpbnQmIHNlcGFyYXRvcikKK3N0YXRpYyB2b2lkIGdldENvbWJvQm94
TWV0cmljcyhSZW5kZXJTdHlsZSYgc3R5bGUsIEd0a0JvcmRlciYgYm9yZGVyLCBpbnQmIGZvY3Vz
LCBpbnQmIHNlcGFyYXRvcikKIHsKICAgICAvLyBJZiB0aGlzIG1lbnUgbGlzdCBidXR0b24gaXNu
J3QgZHJhd24gdXNpbmcgdGhlIG5hdGl2ZSB0aGVtZSwgd2UKICAgICAvLyBkb24ndCBhZGQgYW55
IGV4dHJhIHBhZGRpbmcgYmV5b25kIHdoYXQgV2ViQ29yZSBhbHJlYWR5IHVzZXMuCi0gICAgaWYg
KHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTm9Db250cm9sUGFydCkKKyAgICBpZiAoc3R5bGUuYXBw
ZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIEd0a1N0
eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9DT01CT19CT1gp
OwogICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CiAKICAgICBndGtfc3R5bGVf
Y29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtU
ZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLT5kaXJlY3Rpb24oKSkpKTsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0
a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUuZGlyZWN0aW9uKCkpKSk7CiAK
ICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0
a1N0YXRlRmxhZ3M+KDApLCAmYm9yZGVyKTsKIApAQCAtNDA2LDcgKzQwNiw3IEBAIHN0YXRpYyB2
b2lkIGdldENvbWJvQm94TWV0cmljcyhSZW5kZXJTdHkKICAgICBjb250ZXh0ID0gZ2V0U3R5bGVD
b250ZXh0KEdUS19UWVBFX1NFUEFSQVRPUik7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShj
b250ZXh0KTsKIAotICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8
R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS0+ZGlyZWN0aW9uKCkpKTsK
KyAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJl
Y3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUuZGlyZWN0aW9uKCkpKTsKICAgICBndGtfc3R5
bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIGRpcmVjdGlvbik7CiAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsICJzZXBhcmF0b3IiKTsKIApAQCAtNDI2LDI5
ICs0MjYsMjkgQEAgc3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eQogICAg
IGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CiB9CiAKLWludCBSZW5kZXJUaGVt
ZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
K2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxl
JiBzdHlsZSkgY29uc3QKIHsKICAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAs
IDAgfTsKICAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKICAgICBn
ZXRDb21ib0JveE1ldHJpY3Moc3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0
b3JXaWR0aCk7CiAgICAgaW50IGxlZnQgPSBib3JkZXJXaWR0aC5sZWZ0ICsgZm9jdXNXaWR0aDsK
LSAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFJUTCkKKyAgICBpZiAoc3R5bGUuZGlyZWN0
aW9uKCkgPT0gUlRMKQogICAgICAgICBsZWZ0ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJyb3dT
aXplOwogICAgIHJldHVybiBsZWZ0OwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRo
ZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlJiBzdHlsZSkgY29u
c3QKIHsKICAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsKICAgICBp
bnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKICAgICBnZXRDb21ib0JveE1l
dHJpY3Moc3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0b3JXaWR0aCk7CiAg
ICAgaW50IHJpZ2h0ID0gYm9yZGVyV2lkdGgucmlnaHQgKyBmb2N1c1dpZHRoOwotICAgIGlmIChz
dHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgIGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBM
VFIpCiAgICAgICAgIHJpZ2h0ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJyb3dTaXplOwogICAg
IHJldHVybiByaWdodDsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFk
ZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVHdGs6OnBv
cHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBH
dGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsKICAgICBpbnQgZm9jdXNXaWR0
aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKQEAgLTQ1Niw3ICs0NTYsNyBAQCBpbnQgUmVuZGVy
VGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nCiAgICAgcmV0dXJuIGJvcmRlcldpZHRoLnRv
cCArIGZvY3VzV2lkdGg7CiB9CiAKLWludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lR3Rr
Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7
CiAgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07CiAgICAgaW50IGZv
Y3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7CkBAIC03MTAsOSArNzEwLDkgQEAgYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUaHVtYihjbwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RT
bGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAg
ICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9sUGFy
dCBwYXJ0ID0gc3R5bGUuYXBwZWFyYW5jZSgpOwogICAgIGlmIChwYXJ0ICE9IFNsaWRlclRodW1i
SG9yaXpvbnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC03MjIsMTMgKzcyMiwxMyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjph
ZGp1c3RTbGlkZXJUaHVtYlNpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGlk
ZXItbGVuZ3RoIiwgJnNsaWRlckxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCk7CiAgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgewot
ICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQpKTsKLSAg
ICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7CisgICAg
ICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzbGlkZXJMZW5ndGgsIEZpeGVkKSk7CisgICAgICAg
IHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQg
fHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7Ci0gICAgc3R5bGUtPnNldFdp
ZHRoKExlbmd0aChzbGlkZXJXaWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aChzbGlkZXJMZW5ndGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNs
aWRlcldpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2xpZGVyTGVu
Z3RoLCBGaXhlZCkpOwogfQogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCkBAIC03Nzcs
NyArNzc3LDcgQEAgc3RhdGljIGdpbnQgc3BpbkJ1dHRvbkFycm93U2l6ZShHdGtTdHlsZQogICAg
IHJldHVybiBhcnJvd1NpemUgLSBhcnJvd1NpemUgJSAyOyAvLyBGb3JjZSBldmVuLgogfQogCi12
b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEd0a1N0eWxlQ29udGV4dCogY29u
dGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TUElOX0JVVFRPTik7CiAKQEAgLTc4NSw4
ICs3ODUsOCBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0CiAgICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmcoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3Rh
dGVGbGFncz4oMCksICZwYWRkaW5nKTsKIAogICAgIGludCB3aWR0aCA9IHNwaW5CdXR0b25BcnJv
d1NpemUoY29udGV4dCkgKyBwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0OwotICAgIHN0eWxl
LT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldE1pbldpZHRo
KExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgod2lkdGgs
IEZpeGVkKSk7CisgICAgc3R5bGUuc2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwog
fQogCiBzdGF0aWMgdm9pZCBwYWludFNwaW5BcnJvd0J1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUs
IEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtB
cnJvd1R5cGUgYXJyb3dUeXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGsuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgs
OSArMTY4LDkgQEAgc3RhdGljIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcAogICAg
IH0KIH0KIAotYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1
c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIHJldHVybiBzdXBw
b3J0c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOworICAgIHJldHVybiBzdXBwb3J0c0ZvY3Vz
KHN0eWxlLmFwcGVhcmFuY2UoKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OmNvbnRyb2xT
dXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKQEAgLTIyMCwyMCArMjIw
LDIwIEBAIHN0YXRpYyBHdGtTdGF0ZVR5cGUgZ3RrSWNvblN0YXRlKFJlbmRlclQKICAgICByZXR1
cm4gR1RLX1NUQVRFX05PUk1BTDsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxl
bWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50JikgY29uc3QK
IHsKICAgICAvLyBTb21lIGxheW91dCB0ZXN0cyBjaGVjayBleHBsaWNpdGx5IHRoYXQgYnV0dG9u
cyBpZ25vcmUgbGluZS1oZWlnaHQuCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVz
aEJ1dHRvblBhcnQpCi0gICAgICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjpp
bml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFB1c2hC
dXR0b25QYXJ0KQorICAgICAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0
aWFsTGluZUhlaWdodCgpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxp
c3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgLy8gVGhlIHRl
c3RzIGNoZWNrIGV4cGxpY2l0bHkgdGhhdCBzZWxlY3QgbWVudSBidXR0b25zIGlnbm9yZSBsaW5l
IGhlaWdodC4KLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVIZWlnaHQoKSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlh
bExpbmVIZWlnaHQoKSk7CiAKICAgICAvLyBXZSBjYW5ub3QgZ2l2ZSBhIHByb3BlciByZW5kZXJp
bmcgd2hlbiBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwgdW5mb3J0dW5hdGVseS4KLSAgICBzdHls
ZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlclJhZGl1cygpOwog
fQogCiB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSkg
Y29uc3QKQEAgLTI5Myw3ICsyOTMsNyBAQCBzdGF0aWMgR3RrSWNvblNpemUgZ2V0SWNvblNpemVG
b3JQaXhlbFNpCiAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfRElBTE9HOwogfQogCi12b2lkIFJl
bmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVs
ZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHls
ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiB9CkBAIC0zMDMsMjUgKzMwMywyNSBAQCBib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIHBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQobywgaSwgcmVjdCk7CiB9CiAKLXN0YXRpYyB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRp
YyB2b2lkIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSkKIHsK
LSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7Cisg
ICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5yZXNldFBhZGRpbmcoKTsKIAogICAg
IC8vIEdldCB0aGUgaWNvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUuCi0gICAgaW50IGZv
bnRTaXplID0gc3R5bGUtPmZvbnRTaXplKCk7CisgICAgaW50IGZvbnRTaXplID0gc3R5bGUuZm9u
dFNpemUoKTsKICAgICBpZiAoZm9udFNpemUgPCBndGtJY29uU2l6ZU1lbnUpIHsKLSAgICAgICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aChmb250U2l6ZSwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgoZm9udFNpemUsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldFdp
ZHRoKExlbmd0aChmb250U2l6ZSwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExl
bmd0aChmb250U2l6ZSwgRml4ZWQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBnaW50
IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKICAgICBndGtfaWNvbl9zaXplX2xvb2t1cChnZXRJY29u
U2l6ZUZvclBpeGVsU2l6ZShmb250U2l6ZSksICZ3aWR0aCwgJmhlaWdodCk7Ci0gICAgc3R5bGUt
PnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aChoZWlnaHQsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBG
aXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoaGVpZ2h0LCBGaXhlZCkpOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
JikgY29uc3QKIHsKICAgICBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShzdHlsZSk7CiB9CkBA
IC0zNjAsNyArMzYwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJl
cwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwg
RWxlbWVudCYpIGNvbnN0CiB7CiAgICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoc3R5bGUp
OwogfQpAQCAtMzc5LDExICszNzksMTEgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFy
Y2hGaWVsZENhbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6
YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxk
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0
CiB7CiAgICAgLy8gV2UgY2Fubm90IGdpdmUgYSBwcm9wZXIgcmVuZGVyaW5nIHdoZW4gYm9yZGVy
IHJhZGl1cyBpcyBhY3RpdmUsIHVuZm9ydHVuYXRlbHkuCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVy
UmFkaXVzKCk7Ci0gICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxM
aW5lSGVpZ2h0KCkpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyUmFkaXVzKCk7CisgICAgc3R5bGUu
c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKIGJv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC00MTQsMTUgKzQx
NCwxNSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludENhcHNMb2NrSW5kaWNhCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRyYWNrU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIHN0eWxlLT5zZXRC
b3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVt
ZW50KSBjb25zdAogewogICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0
eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51
bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogZG91YmxlIFJl
bmRlclRoZW1lR3RrOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdApAQCAtNTI2LDcgKzUyNiw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFGdWxsc2NyZWUKIAogYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRNZWRpYU11dGVCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IGdldE1lZGlhRWxlbWVu
dEZyb21SZW5kZXJPYmplY3QocmVuZGVyT2JqZWN0KTsKKyAgICBIVE1MTWVkaWFFbGVtZW50JiBt
ZWRpYUVsZW1lbnQgPSBnZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KHJlbmRlck9iamVj
dCk7CiAgICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
NTc2LDE4ICs1NzYsMTggQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVRvZ2dsZUNs
bwogfQogI2VuZGlmCiAKLXN0YXRpYyBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSBib3JkZXJSYWRp
aUZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgRmxvYXRSb3VuZGVkUmVjdDo6
UmFkaWkgYm9yZGVyUmFkaWlGcm9tU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIHJl
dHVybiBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSgKLSAgICAgICAgSW50U2l6ZShzdHlsZS0+Ym9y
ZGVyVG9wTGVmdFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUtPmJvcmRlclRvcExl
ZnRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwKLSAgICAgICAgSW50U2l6ZShzdHlsZS0+
Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLT5ib3JkZXJU
b3BSaWdodFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAotICAgICAgICBJbnRTaXplKHN0
eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS0+
Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAotICAgICAgICBJ
bnRTaXplKHN0eWxlLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUo
KSwgc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSkp
OworICAgICAgICBJbnRTaXplKHN0eWxlLmJvcmRlclRvcExlZnRSYWRpdXMoKS53aWR0aCgpLmlu
dFZhbHVlKCksIHN0eWxlLmJvcmRlclRvcExlZnRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgp
KSwKKyAgICAgICAgSW50U2l6ZShzdHlsZS5ib3JkZXJUb3BSaWdodFJhZGl1cygpLndpZHRoKCku
aW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyVG9wUmlnaHRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1
ZSgpKSwKKyAgICAgICAgSW50U2l6ZShzdHlsZS5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkud2lk
dGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0KCku
aW50VmFsdWUoKSksCisgICAgICAgIEludFNpemUoc3R5bGUuYm9yZGVyQm90dG9tUmlnaHRSYWRp
dXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCku
aGVpZ2h0KCkuaW50VmFsdWUoKSkpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1l
ZGlhU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQobyk7CisgICAgSFRNTE1lZGlhRWxlbWVudCYg
bWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KG8pOwogICAgIGlmICghbWVkaWFFbGVt
ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU5Nyw3ICs1OTcsNyBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJhCiAKICAgICBmbG9hdCBtZWRpYUR1cmF0
aW9uID0gbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpOwogICAgIGZsb2F0IHRvdGFsVHJhY2tXaWR0
aCA9IHIud2lkdGgoKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmby5zdHlsZSgpOworICAg
IFJlbmRlclN0eWxlJiBzdHlsZSA9ICZvLnN0eWxlKCk7CiAgICAgUmVmUHRyPFRpbWVSYW5nZXM+
IHRpbWVSYW5nZXMgPSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVkKCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IDA7IGluZGV4IDwgdGltZVJhbmdlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKICAg
ICAgICAgZmxvYXQgc3RhcnQgPSB0aW1lUmFuZ2VzLT5zdGFydChpbmRleCwgSUdOT1JFX0VYQ0VQ
VElPTik7CkBAIC02MTEsNyArNjExLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRp
YVNsaWRlclRyYQogICAgICAgICByYW5nZVJlY3Quc2V0V2lkdGgobGVuZ3RoUmF0aW8gKiB0b3Rh
bFRyYWNrV2lkdGgpOwogICAgICAgICBpZiAoaW5kZXgpCiAgICAgICAgICAgICByYW5nZVJlY3Qu
bW92ZShzdGFydFJhdGlvICogdG90YWxUcmFja1dpZHRoLCAwKTsKLSAgICAgICAgY29udGV4dC0+
ZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QocmFuZ2VSZWN0LCBib3JkZXJSYWRpaUZy
b21TdHlsZShzdHlsZSkpLCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFJvdW5k
ZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QocmFuZ2VSZWN0LCBib3JkZXJSYWRpaUZyb21TdHlsZShz
dHlsZSkpLCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0
eWxlLmNvbG9yU3BhY2UoKSk7CiAgICAgfQogCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpAQCAt
NjIwLDggKzYyMCw4IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmEK
IAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
CiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gJm8uc3R5bGUoKTsKLSAgICBwYWludEluZm8u
Y29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QociwgYm9yZGVyUmFkaWlG
cm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUNvbG9yKSwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CisgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0g
Jm8uc3R5bGUoKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KEZsb2F0
Um91bmRlZFJlY3QociwgYm9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUudmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS5jb2xvclNwYWNlKCkpOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjMyLDcgKzYzMiw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50TWVkaWFWb2x1bWVTbGkKIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZWRpYVZvbHVtZVNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBI
VE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQocmVuZGVy
T2JqZWN0KTsKKyAgICBIVE1MTWVkaWFFbGVtZW50JiBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRp
YUVsZW1lbnQocmVuZGVyT2JqZWN0KTsKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKQEAgLTY0NiwxMyArNjQ2LDEzIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50TWVkaWFWb2x1bWVTbGkKIAogICAgIGludCByZWN0SGVpZ2h0ID0gcmVjdC5oZWlnaHQo
KTsKICAgICBmbG9hdCB0cmFja0hlaWdodCA9IHJlY3RIZWlnaHQgKiB2b2x1bWU7Ci0gICAgUmVu
ZGVyU3R5bGUqIHN0eWxlID0gJnJlbmRlck9iamVjdC5zdHlsZSgpOworICAgIFJlbmRlclN0eWxl
JiBzdHlsZSA9ICZyZW5kZXJPYmplY3Quc3R5bGUoKTsKICAgICBJbnRSZWN0IHZvbHVtZVJlY3Qo
cmVjdCk7CiAgICAgdm9sdW1lUmVjdC5tb3ZlKDAsIHJlY3RIZWlnaHQgLSB0cmFja0hlaWdodCk7
CiAgICAgdm9sdW1lUmVjdC5zZXRIZWlnaHQoY2VpbCh0cmFja0hlaWdodCkpOwogCiAgICAgY29u
dGV4dC0+ZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3Qodm9sdW1lUmVjdCwgYm9yZGVy
UmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwKLSAgICAgICAgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CisgICAgICAgIHN0
eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUuY29sb3JT
cGFjZSgpKTsKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiAKICAgICByZXR1cm4gZmFsc2U7CkBA
IC02NzUsMjEgKzY3NSwyMSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhQ3VycmVu
dFRpCiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotdm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFBy
b2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVu
dCYpIGNvbnN0CiB7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHls
ZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKIC8vIFRoZXNlIHZhbHVlcyBoYXZlIGJlZW4g
Y29waWVkIGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCiBzdGF0aWMgY29uc3QgaW50
IHByb2dyZXNzQWN0aXZpdHlCbG9ja3MgPSA1Owogc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0Fu
aW1hdGlvbkZyYW1lcyA9IDEwOwogc3RhdGljIGNvbnN0IGRvdWJsZSBwcm9ncmVzc0FuaW1hdGlv
bkludGVydmFsID0gMC4xMjU7Ci1kb3VibGUgUmVuZGVyVGhlbWVHdGs6OmFuaW1hdGlvblJlcGVh
dEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAorZG91YmxlIFJl
bmRlclRoZW1lR3RrOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRl
clByb2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZh
bDsKIH0KIAotZG91YmxlIFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dy
ZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5p
bWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWwgKiBwcm9ncmVzc0FuaW1hdGlvbkZy
YW1lcyAqIDI7IC8vICIyIiBmb3IgYmFjayBhbmQgZm9ydGg7CiB9CkBAIC02OTcsMTYgKzY5Nywx
NiBAQCBkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmFuaW1hdGlvbkR1cmF0aW9uCiBJbnRSZWN0IFJl
bmRlclRoZW1lR3RrOjpjYWxjdWxhdGVQcm9ncmVzc1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiBy
ZW5kZXJPYmplY3QsIGNvbnN0IEludFJlY3QmIGZ1bGxCYXJSZWN0KQogewogICAgIEludFJlY3Qg
cHJvZ3Jlc3NSZWN0KGZ1bGxCYXJSZWN0KTsKLSAgICBjb25zdCBSZW5kZXJQcm9ncmVzcyogcmVu
ZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKCZyZW5kZXJPYmplY3QpOwotICAgIGlmIChy
ZW5kZXJQcm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgpKSB7Ci0gICAgICAgIGludCBwcm9ncmVzc1dp
ZHRoID0gcHJvZ3Jlc3NSZWN0LndpZHRoKCkgKiByZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKTsK
KyAgICBjb25zdCBSZW5kZXJQcm9ncmVzcyYgcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dy
ZXNzKHJlbmRlck9iamVjdCk7CisgICAgaWYgKHJlbmRlclByb2dyZXNzLmlzRGV0ZXJtaW5hdGUo
KSkgeworICAgICAgICBpbnQgcHJvZ3Jlc3NXaWR0aCA9IHByb2dyZXNzUmVjdC53aWR0aCgpICog
cmVuZGVyUHJvZ3Jlc3MucG9zaXRpb24oKTsKICAgICAgICAgaWYgKHJlbmRlck9iamVjdC5zdHls
ZSgpLmRpcmVjdGlvbigpID09IFJUTCkKICAgICAgICAgICAgIHByb2dyZXNzUmVjdC5zZXRYKHBy
b2dyZXNzUmVjdC54KCkgKyBwcm9ncmVzc1JlY3Qud2lkdGgoKSAtIHByb2dyZXNzV2lkdGgpOwog
ICAgICAgICBwcm9ncmVzc1JlY3Quc2V0V2lkdGgocHJvZ3Jlc3NXaWR0aCk7CiAgICAgICAgIHJl
dHVybiBwcm9ncmVzc1JlY3Q7CiAgICAgfQogCi0gICAgZG91YmxlIGFuaW1hdGlvblByb2dyZXNz
ID0gcmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblByb2dyZXNzKCk7CisgICAgZG91YmxlIGFuaW1h
dGlvblByb2dyZXNzID0gcmVuZGVyUHJvZ3Jlc3MuYW5pbWF0aW9uUHJvZ3Jlc3MoKTsKIAogICAg
IC8vIE5ldmVyIGxldCB0aGUgcHJvZ3Jlc3MgcmVjdCBzaHJpbmsgc21hbGxlciB0aGFuIDIgcGl4
ZWxzLgogICAgIGludCBuZXdXaWR0aCA9IHN0ZDo6bWF4KDIsIHByb2dyZXNzUmVjdC53aWR0aCgp
IC8gcHJvZ3Jlc3NBY3Rpdml0eUJsb2Nrcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVuZGVyVGhlbWVHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDEwICs0NCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+
IGNyZWF0ZSgpOwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRy
b2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KLSAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBS
ZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIC8vIEEg
bWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUgaXMgYWJsZSB0byBkcmF3IHRoZSBmb2N1cyByaW5n
LgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSop
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25z
dCBSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5n
IGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1
cyBvciBub3QuCiAgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJl
bmRlck9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTE1LDUwICsxMTUsNTAgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIGludCBwb3B1cEludGVybmFsUGFkZGlu
Z0xlZnQoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKLSAgICBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIGludCBwb3B1
cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIGlu
dCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRl
OworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUmKSBjb25zdCBv
dmVycmlkZTsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSYp
IGNvbnN0IG92ZXJyaWRlOworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJT
dHlsZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRv
bShSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgLy8gVGhlIE1hYyBwb3J0IGRp
ZmZlcmVudGlhdGVzIGJldHdlZW4gdGhlICJtZW51IGxpc3QiIGFuZCB0aGUgIm1lbnUgbGlzdCBi
dXR0b24uIgogICAgIC8vIFRoZSBmb3JtZXIgaXMgdXNlZCB3aGVuIGEgbWVudSBsaXN0IGJ1dHRv
biBoYXMgYmVlbiBzdHlsZWQuIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUKICAgICAvLyBBcXVhIHRo
ZW1lZCBjb250cm9scyB3aGVuZXZlciBwb3NzaWJsZS4gV2UgYWx3YXlzIHdhbnQgdG8gdXNlIEdU
SysgdGhlbWluZywgc28KICAgICAvLyB3ZSBkb24ndCBtYWludGFpbiB0aGlzIGRpZmZlcmVudGlh
dGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFy
dFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJU
cmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1i
U2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
IG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZvaWQgaW5pdE1lZGlhQ29sb3Jz
KCk7CkBAIC0xODEsMjEgKzE4MSwyMSBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
UFJPR1JFU1NfRUxFTUVOVCkKLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRl
cnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0Jh
clN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dy
ZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3Vi
bGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZpcnR1
YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVy
U3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwogCiAgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgRmls
ZUxpc3QqLCBjb25zdCBGb250JiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2Vk
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7Ci0gICAgc3RhdGlj
IHZvaWQgc2V0VGV4dElucHV0Qm9yZGVycyhSZW5kZXJTdHlsZSopOworICAgIHN0YXRpYyB2b2lk
IHNldFRleHRJbnB1dEJvcmRlcnMoUmVuZGVyU3R5bGUmKTsKICAgICBzdGF0aWMgZG91YmxlIGdl
dFNjcmVlbkRQSSgpOwogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMjE1LDkgKzIxNSw5IEBAIHBy
aXZhdGU6CiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKICAgICB2b2lkIHNldHVwV2lkZ2V0QW5k
QWRkVG9Db250YWluZXIoR3RrV2lkZ2V0KiwgR3RrV2lkZ2V0KikgY29uc3Q7CiAgICAgdm9pZCBy
ZWZyZXNoQ29tYm9Cb3hDaGlsZHJlbigpIGNvbnN0OwotICAgIHZvaWQgZ2V0Q29tYm9Cb3hQYWRk
aW5nKFJlbmRlclN0eWxlKiwgaW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBi
b3R0b20pIGNvbnN0OworICAgIHZvaWQgZ2V0Q29tYm9Cb3hQYWRkaW5nKFJlbmRlclN0eWxlJiwg
aW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20pIGNvbnN0OwogICAg
IGludCBnZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCkgY29uc3Q7Ci0gICAgaW50IGNvbWJvQm94
QXJyb3dTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgaW50IGNvbWJvQm94QXJyb3dTaXpl
KFJlbmRlclN0eWxlJikgY29uc3Q7CiAKICAgICBHdGtXaWRnZXQqIGd0a0J1dHRvbigpIGNvbnN0
OwogICAgIEd0a1dpZGdldCogZ3RrVHJlZVZpZXcoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ5MSwxMCArMTQ5MSwxMCBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lKFBhaW50
SW5mCiAKICAgICBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgLy8gT25s
eSBwYWludCB0aGUgZm9jdXMgcmluZyBieSBoYW5kIGlmIHRoZSB0aGVtZSBpc24ndCBhYmxlIHRv
IGRyYXcgaXQuCi0gICAgaWYgKHN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRo
ZW1lKCkuc3VwcG9ydHNGb2N1c1JpbmcoJnN0eWxlVG9Vc2UpKQorICAgIGlmIChzdHlsZVRvVXNl
Lm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKHN0eWxl
VG9Vc2UpKQogICAgICAgICBwYWludEZvY3VzUmluZyhwYWludEluZm8sIHBhaW50T2Zmc2V0LCAm
c3R5bGVUb1VzZSk7CiAKLSAgICBpZiAoaGFzT3V0bGluZUFubm90YXRpb24oKSAmJiAhc3R5bGVU
b1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZygm
c3R5bGVUb1VzZSkpCisgICAgaWYgKGhhc091dGxpbmVBbm5vdGF0aW9uKCkgJiYgIXN0eWxlVG9V
c2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1c1Jpbmcoc3R5
bGVUb1VzZSkpCiAgICAgICAgIGFkZFBERlVSTFJlY3QocGFpbnRJbmZvLCBwYWludE9mZnNldCk7
CiAKICAgICBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCA9IHBhaW50SW5mby5jb250
ZXh0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNv
bnRyb2xzLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTAgKzEwMSwx
MCBAQCBzdGF0aWMgRmxvYXRSZWN0IGdldFVuem9vbWVkUmVjdEFuZEFkanVzCiBzdGF0aWMgY29u
c3QgaW50IG1lZGlhU2xpZGVyVGh1bWJXaWR0aCA9IDEzOwogc3RhdGljIGNvbnN0IGludCBtZWRp
YVNsaWRlclRodW1iSGVpZ2h0ID0gMTQ7CiAKLXZvaWQgUmVuZGVyTWVkaWFDb250cm9sczo6YWRq
dXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKQordm9pZCBSZW5kZXJN
ZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5
bGUpCiB7CiAgICAgaW50IHBhcnQ7Ci0gICAgc3dpdGNoIChzdHlsZS0+YXBwZWFyYW5jZSgpKSB7
CisgICAgc3dpdGNoIChzdHlsZS5hcHBlYXJhbmNlKCkpIHsKICAgICBjYXNlIE1lZGlhU2xpZGVy
VGh1bWJQYXJ0OgogICAgICAgICBwYXJ0ID0gTWVkaWFTbGlkZXJUaHVtYjsKICAgICAgICAgYnJl
YWs7CkBAIC0xMjEsOSArMTIxLDkgQEAgdm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RN
ZWRpYVNsaQogICAgIENHU2l6ZSBzaXplOwogICAgIHdrTWVhc3VyZU1lZGlhVUlQYXJ0KHBhcnQs
IDAsICZzaXplKTsKIAotICAgIGZsb2F0IHpvb21MZXZlbCA9IHN0eWxlLT5lZmZlY3RpdmVab29t
KCk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lk
dGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHN0
YXRpY19jYXN0PGludD4oc2l6ZS5oZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOworICAgIGZs
b2F0IHpvb21MZXZlbCA9IHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBzdHlsZS5zZXRXaWR0
aChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRoICogem9vbUxldmVsKSwgRml4ZWQp
KTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2l6ZS5oZWln
aHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlck1lZGlhQ29udHJvbHM6
OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUgcGFydCwgY29u
c3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRy
b2xzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlh
Q29udHJvbHMuaAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lZGlhQ29udHJvbHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBw
dWJsaWM6CiAKICNpZiBQTEFURk9STShXSU4pCiAgICAgc3RhdGljIGJvb2wgcGFpbnRNZWRpYUNv
bnRyb2xzUGFydChNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSwgY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHN0YXRpYyB2b2lkIGFkanVz
dE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKik7CisgICAgc3RhdGljIHZvaWQgYWRq
dXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmKTsKICNlbmRpZgogICAgIHN0YXRp
YyBJbnRQb2ludCB2b2x1bWVTbGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gqLCBj
b25zdCBJbnRTaXplJik7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMTAgKzEyNSwx
MCBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjphZGp1c3RJbm5lclN0eWxlKCkKICAgICAgICAgaW5u
ZXJTdHlsZS5zZXRBbGlnblNlbGYoQWxpZ25GbGV4U3RhcnQpOwogICAgIH0KIAotICAgIGlubmVy
U3R5bGUuc2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRpbmdM
ZWZ0KCZzdHlsZSgpKSwgRml4ZWQpKTsKLSAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdSaWdodChM
ZW5ndGgodGhlbWUoKS5wb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KCZzdHlsZSgpKSwgRml4ZWQp
KTsKLSAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRl
cm5hbFBhZGRpbmdUb3AoJnN0eWxlKCkpLCBGaXhlZCkpOwotICAgIGlubmVyU3R5bGUuc2V0UGFk
ZGluZ0JvdHRvbShMZW5ndGgodGhlbWUoKS5wb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbSgmc3R5
bGUoKSksIEZpeGVkKSk7CisgICAgaW5uZXJTdHlsZS5zZXRQYWRkaW5nTGVmdChMZW5ndGgodGhl
bWUoKS5wb3B1cEludGVybmFsUGFkZGluZ0xlZnQoc3R5bGUoKSksIEZpeGVkKSk7CisgICAgaW5u
ZXJTdHlsZS5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRp
bmdSaWdodChzdHlsZSgpKSwgRml4ZWQpKTsKKyAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdUb3Ao
TGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRpbmdUb3Aoc3R5bGUoKSksIEZpeGVkKSk7
CisgICAgaW5uZXJTdHlsZS5zZXRQYWRkaW5nQm90dG9tKExlbmd0aCh0aGVtZSgpLnBvcHVwSW50
ZXJuYWxQYWRkaW5nQm90dG9tKHN0eWxlKCkpLCBGaXhlZCkpOwogCiAgICAgaWYgKGRvY3VtZW50
KCkucGFnZSgpLT5jaHJvbWUoKS5zZWxlY3RJdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgp
KSB7CiAgICAgICAgIC8vIEl0ZW1zIGluIHRoZSBwb3B1cCB3aWxsIG5vdCByZXNwZWN0IHRoZSBD
U1MgdGV4dC1hbGlnbiBhbmQgZGlyZWN0aW9uIHByb3BlcnRpZXMsCkBAIC0zMjYsNyArMzI2LDcg
QEAgTGF5b3V0UmVjdCBSZW5kZXJNZW51TGlzdDo6Y29udHJvbENsaXBSZQogCiB2b2lkIFJlbmRl
ck1lbnVMaXN0Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5M
b2dpY2FsV2lkdGgsIExheW91dFVuaXQmIG1heExvZ2ljYWxXaWR0aCkgY29uc3QKIHsKLSAgICBt
YXhMb2dpY2FsV2lkdGggPSBzdGQ6Om1heChtX29wdGlvbnNXaWR0aCwgdGhlbWUoKS5taW5pbXVt
TWVudUxpc3RTaXplKCZzdHlsZSgpKSkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdMZWZ0KCkgKyBt
X2lubmVyQmxvY2stPnBhZGRpbmdSaWdodCgpOworICAgIG1heExvZ2ljYWxXaWR0aCA9IHN0ZDo6
bWF4KG1fb3B0aW9uc1dpZHRoLCB0aGVtZSgpLm1pbmltdW1NZW51TGlzdFNpemUoc3R5bGUoKSkp
ICsgbV9pbm5lckJsb2NrLT5wYWRkaW5nTGVmdCgpICsgbV9pbm5lckJsb2NrLT5wYWRkaW5nUmln
aHQoKTsKICAgICBpZiAoIXN0eWxlKCkud2lkdGgoKS5pc1BlcmNlbnQoKSkKICAgICAgICAgbWlu
TG9naWNhbFdpZHRoID0gbWF4TG9naWNhbFdpZHRoOwogfQpAQCAtNTY5LDcgKzU2OSw3IEBAIFBv
cHVwTWVudVN0eWxlIFJlbmRlck1lbnVMaXN0OjptZW51U3R5bGUKICAgICByZXR1cm4gUG9wdXBN
ZW51U3R5bGUoc3R5bGVUb1VzZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xv
ciksIHN0eWxlVG9Vc2UudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKSwKICAgICAgICAgc3R5bGVUb1VzZS5mb250KCksIHN0eWxlVG9Vc2UudmlzaWJpbGl0
eSgpID09IFZJU0lCTEUsIHN0eWxlVG9Vc2UuZGlzcGxheSgpID09IE5PTkUsIHN0eWxlKCkuaGFz
QXBwZWFyYW5jZSgpLCBzdHlsZVRvVXNlLnRleHRJbmRlbnQoKSwKICAgICAgICAgc3R5bGUoKS5k
aXJlY3Rpb24oKSwgaXNPdmVycmlkZShzdHlsZSgpLnVuaWNvZGVCaWRpKCkpLCBQb3B1cE1lbnVT
dHlsZTo6RGVmYXVsdEJhY2tncm91bmRDb2xvciwKLSAgICAgICAgUG9wdXBNZW51U3R5bGU6OlNl
bGVjdFBvcHVwLCB0aGVtZSgpLnBvcHVwTWVudVNpemUoJnN0eWxlVG9Vc2UsIGFic0JvdW5kcykp
OworICAgICAgICBQb3B1cE1lbnVTdHlsZTo6U2VsZWN0UG9wdXAsIHRoZW1lKCkucG9wdXBNZW51
U2l6ZShzdHlsZVRvVXNlLCBhYnNCb3VuZHMpKTsKIH0KIAogSG9zdFdpbmRvdyogUmVuZGVyTWVu
dUxpc3Q6Omhvc3RXaW5kb3coKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1ldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWV0ZXIuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHZv
aWQgUmVuZGVyTWV0ZXI6OnVwZGF0ZUxvZ2ljYWxXaWR0aCgpCiB7CiAgICAgUmVuZGVyQm94Ojp1
cGRhdGVMb2dpY2FsV2lkdGgoKTsKIAotICAgIEludFNpemUgZnJhbWVTaXplID0gdGhlbWUoKS5t
ZXRlclNpemVGb3JCb3VuZHModGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFtZVJlY3QoKSkp
OworICAgIEludFNpemUgZnJhbWVTaXplID0gdGhlbWUoKS5tZXRlclNpemVGb3JCb3VuZHMoKnRo
aXMsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhbWVSZWN0KCkpKTsKICAgICBzZXRMb2dpY2FsV2lk
dGgoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZyYW1lU2l6ZS53aWR0aCgpIDogZnJhbWVT
aXplLmhlaWdodCgpKTsKIH0KIApAQCAtNjcsNyArNjcsNyBAQCB2b2lkIFJlbmRlck1ldGVyOjpj
b21wdXRlTG9naWNhbEhlaWdodChMCiAgICAgICAgIGZyYW1lLnNldEhlaWdodChjb21wdXRlZFZh
bHVlcy5tX2V4dGVudCk7CiAgICAgZWxzZQogICAgICAgICBmcmFtZS5zZXRXaWR0aChjb21wdXRl
ZFZhbHVlcy5tX2V4dGVudCk7Ci0gICAgSW50U2l6ZSBmcmFtZVNpemUgPSB0aGVtZSgpLm1ldGVy
U2l6ZUZvckJvdW5kcyh0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYW1lKSk7CisgICAgSW50
U2l6ZSBmcmFtZVNpemUgPSB0aGVtZSgpLm1ldGVyU2l6ZUZvckJvdW5kcygqdGhpcywgcGl4ZWxT
bmFwcGVkSW50UmVjdChmcmFtZSkpOwogICAgIGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50ID0gaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZyYW1lU2l6ZS5oZWlnaHQoKSA6IGZyYW1lU2l6ZS53
aWR0aCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTMsMTAgKzEwNTMsMTAgQEAgdm9pZCBS
ZW5kZXJPYmplY3Q6OnBhaW50T3V0bGluZShQYWludEluZgogICAgIGludCBvdXRsaW5lT2Zmc2V0
ID0gc3R5bGVUb1VzZS5vdXRsaW5lT2Zmc2V0KCk7CiAKICAgICAvLyBPbmx5IHBhaW50IHRoZSBm
b2N1cyByaW5nIGJ5IGhhbmQgaWYgdGhlIHRoZW1lIGlzbid0IGFibGUgdG8gZHJhdyBpdC4KLSAg
ICBpZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0
c0ZvY3VzUmluZygmc3R5bGVUb1VzZSkpCisgICAgaWYgKHN0eWxlVG9Vc2Uub3V0bGluZVN0eWxl
SXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1c1Jpbmcoc3R5bGVUb1VzZSkpCiAgICAg
ICAgIHBhaW50Rm9jdXNSaW5nKHBhaW50SW5mbywgcGFpbnRSZWN0LmxvY2F0aW9uKCksICZzdHls
ZVRvVXNlKTsKIAotICAgIGlmIChoYXNPdXRsaW5lQW5ub3RhdGlvbigpICYmICFzdHlsZVRvVXNl
Lm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKCZzdHls
ZVRvVXNlKSkKKyAgICBpZiAoaGFzT3V0bGluZUFubm90YXRpb24oKSAmJiAhc3R5bGVUb1VzZS5v
dXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZyhzdHlsZVRv
VXNlKSkKICAgICAgICAgYWRkUERGVVJMUmVjdChwYWludEluZm8sIHBhaW50UmVjdC5sb2NhdGlv
bigpKTsKIAogICAgIGlmIChzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0bygpIHx8IHN0eWxl
VG9Vc2Uub3V0bGluZVN0eWxlKCkgPT0gQk5PTkUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkx
LDggKzkxLDggQEAgdm9pZCBSZW5kZXJQcm9ncmVzczo6YW5pbWF0aW9uVGltZXJGaXJlZAogCiB2
b2lkIFJlbmRlclByb2dyZXNzOjp1cGRhdGVBbmltYXRpb25TdGF0ZSgpCiB7Ci0gICAgbV9hbmlt
YXRpb25EdXJhdGlvbiA9IHRoZW1lKCkuYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcih0
aGlzKTsKLSAgICBtX2FuaW1hdGlvblJlcGVhdEludGVydmFsID0gdGhlbWUoKS5hbmltYXRpb25S
ZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKHRoaXMpOworICAgIG1fYW5pbWF0aW9uRHVyYXRp
b24gPSB0aGVtZSgpLmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoKnRoaXMpOworICAg
IG1fYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWwgPSB0aGVtZSgpLmFuaW1hdGlvblJlcGVhdEludGVy
dmFsRm9yUHJvZ3Jlc3NCYXIoKnRoaXMpOwogCiAgICAgYm9vbCBhbmltYXRpbmcgPSBzdHlsZSgp
Lmhhc0FwcGVhcmFuY2UoKSAmJiBtX2FuaW1hdGlvbkR1cmF0aW9uID4gMDsKICAgICBpZiAoYW5p
bWF0aW5nID09IG1fYW5pbWF0aW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIFJlbmRl
clRoZW1lOjpSZW5kZXJUaGVtZSgpCiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0
eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxl
bWVudCogZSwgYm9vbCBVQUhhc0FwcGVhcmFuY2UsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwg
Y29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9y
KQordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlLCBib29sIFVBSGFzQXBwZWFyYW5j
ZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQs
IGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCiB7CiAgICAgLy8gRm9yY2UgaW5saW5lIGFu
ZCB0YWJsZSBkaXNwbGF5IHN0eWxlcyB0byBiZSBpbmxpbmUtYmxvY2sgKGV4Y2VwdCBmb3IgdGFi
bGUtIHdoaWNoIGlzIGJsb2NrKQogICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS5hcHBlYXJh
bmNlKCk7CkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0
eWxlUmVzb2wKICAgICBlbHNlIGlmIChzdHlsZS5kaXNwbGF5KCkgPT0gQ09NUEFDVCB8fCBzdHls
ZS5kaXNwbGF5KCkgPT0gTElTVF9JVEVNIHx8IHN0eWxlLmRpc3BsYXkoKSA9PSBUQUJMRSkKICAg
ICAgICAgc3R5bGUuc2V0RGlzcGxheShCTE9DSyk7CiAKLSAgICBpZiAoVUFIYXNBcHBlYXJhbmNl
ICYmIGlzQ29udHJvbFN0eWxlZCgmc3R5bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dyb3Vu
ZENvbG9yKSkgeworICAgIGlmIChVQUhhc0FwcGVhcmFuY2UgJiYgaXNDb250cm9sU3R5bGVkKHN0
eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcikpIHsKICAgICAgICAgaWYg
KHBhcnQgPT0gTWVudWxpc3RQYXJ0KSB7CiAgICAgICAgICAgICBzdHlsZS5zZXRBcHBlYXJhbmNl
KE1lbnVsaXN0QnV0dG9uUGFydCk7CiAgICAgICAgICAgICBwYXJ0ID0gTWVudWxpc3RCdXR0b25Q
YXJ0OwpAQCAtMTkyLDI1ICsxOTIsMjUgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUo
U3R5bGVSZXNvbAogICAgIHN3aXRjaCAoc3R5bGUuYXBwZWFyYW5jZSgpKSB7CiAjaWYgIVVTRShO
RVdfVEhFTUUpCiAgICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RD
aGVja2JveFN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4g
YWRqdXN0Q2hlY2tib3hTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBS
YWRpb1BhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RSYWRpb1N0eWxlKCZzdHlsZVJlc29sdmVy
LCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0UmFkaW9TdHlsZShzdHlsZVJlc29s
dmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKICAgICBjYXNlIFNxdWFy
ZUJ1dHRvblBhcnQ6CiAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKICAgICBjYXNlIEJ1dHRv
blBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RCdXR0b25TdHlsZSgmc3R5bGVSZXNvbHZlciwg
JnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2
ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIElubmVyU3BpbkJ1dHRvblBhcnQ6Ci0gICAgICAgIHJl
dHVybiBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBl
KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2
ZXIsIHN0eWxlLCBlKTsKICNlbmRpZgogICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICAgICAg
cmV0dXJuIGFkanVzdFRleHRGaWVsZFN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOwor
ICAgICAgICByZXR1cm4gYWRqdXN0VGV4dEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUs
IGUpOwogICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0VGV4dEFy
ZWFTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVz
dFRleHRBcmVhU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgTWVudWxp
c3RQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0TWVudUxpc3RTdHlsZSgmc3R5bGVSZXNvbHZl
ciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgotICAgICAg
ICByZXR1cm4gYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwg
KmUpOworICAgICAgICByZXR1cm4gYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShzdHlsZVJlc29s
dmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBNZWRpYVBsYXlCdXR0b25QYXJ0OgogICAgIGNhc2Ug
TWVkaWFDdXJyZW50VGltZVBhcnQ6CiAgICAgY2FzZSBNZWRpYVRpbWVSZW1haW5pbmdQYXJ0OgpA
QCAtMjE4LDI5ICsyMTgsMjkgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVS
ZXNvbAogICAgIGNhc2UgTWVkaWFFeGl0RnVsbHNjcmVlbkJ1dHRvblBhcnQ6CiAgICAgY2FzZSBN
ZWRpYU11dGVCdXR0b25QYXJ0OgogICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJDb250YWluZXJQ
YXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0TWVkaWFDb250cm9sU3R5bGUoJnN0eWxlUmVzb2x2
ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShz
dHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBNZWRpYVNsaWRlclBhcnQ6CiAgICAg
Y2FzZSBNZWRpYVZvbHVtZVNsaWRlclBhcnQ6CiAgICAgY2FzZSBNZWRpYUZ1bGxTY3JlZW5Wb2x1
bWVTbGlkZXJQYXJ0OgogICAgIGNhc2UgU2xpZGVySG9yaXpvbnRhbFBhcnQ6CiAgICAgY2FzZSBT
bGlkZXJWZXJ0aWNhbFBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RTbGlkZXJUcmFja1N0eWxl
KCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0U2xpZGVy
VHJhY2tTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBTbGlkZXJUaHVt
Ykhvcml6b250YWxQYXJ0OgogICAgIGNhc2UgU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQ6Ci0gICAg
ICAgIHJldHVybiBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUs
IGUpOworICAgICAgICByZXR1cm4gYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShzdHlsZVJlc29sdmVy
LCBzdHlsZSwgZSk7CiAgICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6Ci0gICAgICAgIHJldHVybiBh
ZGp1c3RTZWFyY2hGaWVsZFN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAg
ICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7
CiAgICAgY2FzZSBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBh
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUs
IGUpOworICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShz
dHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBTZWFyY2hGaWVsZERlY29yYXRpb25Q
YXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxl
KCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNo
RmllbGREZWNvcmF0aW9uUGFydFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBj
YXNlIFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0OgotICAgICAgICByZXR1cm4gYWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSgmc3R5bGVSZXNvbHZlciwg
JnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25QYXJ0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvblN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICBy
ZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwg
c3R5bGUsIGUpOwogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQogICAgIGNhc2UgUHJvZ3Jl
c3NCYXJQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZSgmc3R5bGVS
ZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFByb2dyZXNzQmFyU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKE1FVEVSX0VM
RU1FTlQpCiAgICAgY2FzZSBNZXRlclBhcnQ6CkBAIC0yNDgsMTEgKzI0OCwxMSBAQCB2b2lkIFJl
bmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sCiAgICAgY2FzZSBDb250aW51b3VzQ2Fw
YWNpdHlMZXZlbEluZGljYXRvclBhcnQ6CiAgICAgY2FzZSBEaXNjcmV0ZUNhcGFjaXR5TGV2ZWxJ
bmRpY2F0b3JQYXJ0OgogICAgIGNhc2UgUmF0aW5nTGV2ZWxJbmRpY2F0b3JQYXJ0OgotICAgICAg
ICByZXR1cm4gYWRqdXN0TWV0ZXJTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAg
ICAgICAgcmV0dXJuIGFkanVzdE1ldGVyU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwog
I2VuZGlmCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICBjYXNlIElucHV0U3BlZWNoQnV0
dG9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHls
ZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdElucHV0
RmllbGRTcGVlY2hCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKICAgICBjYXNlIEltYWdlQ29udHJvbHNCdXR0
b25QYXJ0OgpAQCAtNjkzLDkgKzY5Myw5IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzQ29udHJvbENv
bnRhaW5lcihDb24KICAgICByZXR1cm4gYXBwZWFyYW5jZSAhPSBDaGVja2JveFBhcnQgJiYgYXBw
ZWFyYW5jZSAhPSBSYWRpb1BhcnQ7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwg
Y29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9y
KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5ZXImIGJh
Y2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7Ci0gICAgc3dp
dGNoIChzdHlsZS0+YXBwZWFyYW5jZSgpKSB7CisgICAgc3dpdGNoIChzdHlsZS5hcHBlYXJhbmNl
KCkpIHsKICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgogICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFy
dDoKICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgpAQCAtNzEyLDkgKzcxMiw5IEBAIGJvb2wg
UmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChjb25zdCAKICAgICBjYXNlIFRleHRGaWVsZFBh
cnQ6CiAgICAgY2FzZSBUZXh0QXJlYVBhcnQ6CiAgICAgICAgIC8vIFRlc3QgdGhlIHN0eWxlIHRv
IHNlZSBpZiB0aGUgVUEgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIG1hdGNoLgotICAgICAgICByZXR1
cm4gKHN0eWxlLT5ib3JkZXIoKSAhPSBib3JkZXIKLSAgICAgICAgICAgIHx8ICpzdHlsZS0+YmFj
a2dyb3VuZExheWVycygpICE9IGJhY2tncm91bmQKLSAgICAgICAgICAgIHx8IHN0eWxlLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpICE9IGJhY2tncm91
bmRDb2xvcik7CisgICAgICAgIHJldHVybiAoc3R5bGUuYm9yZGVyKCkgIT0gYm9yZGVyCisgICAg
ICAgICAgICB8fCAqc3R5bGUuYmFja2dyb3VuZExheWVycygpICE9IGJhY2tncm91bmQKKyAgICAg
ICAgICAgIHx8IHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikgIT0gYmFja2dyb3VuZENvbG9yKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQpAQCAtNzMxLDE1ICs3MzEsMTUgQEAgdm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0UmVwYWludFJlY3QoY29ucwogI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OnN1
cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2Jvb2wgUmVu
ZGVyVGhlbWU6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29u
c3QKIHsKLSAgICByZXR1cm4gKHN0eWxlLT5oYXNBcHBlYXJhbmNlKCkgJiYgc3R5bGUtPmFwcGVh
cmFuY2UoKSAhPSBUZXh0RmllbGRQYXJ0ICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gVGV4dEFy
ZWFQYXJ0ICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gTWVudWxpc3RCdXR0b25QYXJ0ICYmIHN0
eWxlLT5hcHBlYXJhbmNlKCkgIT0gTGlzdGJveFBhcnQpOworICAgIHJldHVybiAoc3R5bGUuaGFz
QXBwZWFyYW5jZSgpICYmIHN0eWxlLmFwcGVhcmFuY2UoKSAhPSBUZXh0RmllbGRQYXJ0ICYmIHN0
eWxlLmFwcGVhcmFuY2UoKSAhPSBUZXh0QXJlYVBhcnQgJiYgc3R5bGUuYXBwZWFyYW5jZSgpICE9
IE1lbnVsaXN0QnV0dG9uUGFydCAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gTGlzdGJveFBhcnQp
OwogfQogCiBib29sIFJlbmRlclRoZW1lOjpzdGF0ZUNoYW5nZWQoY29uc3QgUmVuZGVyT2JqZWN0
JiBvLCBDb250cm9sU3RhdGVzOjpTdGF0ZXMgc3RhdGUpIGNvbnN0CiB7CiAgICAgLy8gRGVmYXVs
dCBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoZSBjb250cm9scyBkb24ndCByZXNwb25kIHRvIGNo
YW5nZXMgaW4gOmhvdmVyIHN0YXRlCi0gICAgaWYgKHN0YXRlID09IENvbnRyb2xTdGF0ZXM6Okhv
dmVyU3RhdGUgJiYgIXN1cHBvcnRzSG92ZXIoJm8uc3R5bGUoKSkpCisgICAgaWYgKHN0YXRlID09
IENvbnRyb2xTdGF0ZXM6OkhvdmVyU3RhdGUgJiYgIXN1cHBvcnRzSG92ZXIoby5zdHlsZSgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQXNzdW1lIHByZXNzZWQgc3RhdGUgaXMg
b25seSByZXNwb25kZWQgdG8gaWYgdGhlIGNvbnRyb2wgaXMgZW5hYmxlZC4KQEAgLTkxMCw3ICs5
MTAsNyBAQCBib29sIFJlbmRlclRoZW1lOjppc0RlZmF1bHQoY29uc3QgUmVuZGVyCiAKICNpZiAh
VVNFKE5FV19USEVNRSkKIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0Q2hlY2tib3hTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgLy8gQSBzdW1tYXJ5IG9mIHRoZSBy
dWxlcyBmb3IgY2hlY2tib3ggZGVzaWduZWQgdG8gbWF0Y2ggV2luSUU6CiAgICAgLy8gd2lkdGgv
aGVpZ2h0IC0gaG9ub3JlZCAoV2luSUUgYWN0dWFsbHkgc2NhbGVzIGl0cyBjb250cm9sIGZvciBz
bWFsbCB3aWR0aHMsIGJ1dCBsZXRzIGl0IG92ZXJmbG93IGZvciBzbWFsbCBoZWlnaHRzLikKQEAg
LTkxOCwxNiArOTE4LDE2IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94U3R5bGUo
U3QKICAgICBzZXRDaGVja2JveFNpemUoc3R5bGUpOwogCiAgICAgLy8gcGFkZGluZyAtIG5vdCBo
b25vcmVkIGJ5IFdpbklFLCBuZWVkcyB0byBiZSByZW1vdmVkLgotICAgIHN0eWxlLT5yZXNldFBh
ZGRpbmcoKTsKKyAgICBzdHlsZS5yZXNldFBhZGRpbmcoKTsKIAogICAgIC8vIGJvcmRlciAtIGhv
bm9yZWQgYnkgV2luSUUsIGJ1dCBsb29rcyB0ZXJyaWJsZSAoanVzdCBwYWludHMgaW4gdGhlIGNv
bnRyb2wgYm94IGFuZCB0dXJucyBvZmYgdGhlIFdpbmRvd3MgWFAgdGhlbWUpCiAgICAgLy8gZm9y
IG5vdywgd2Ugd2lsbCBub3QgaG9ub3IgaXQuCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Cisg
ICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKIAotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0
cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lOjphZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAv
LyBBIHN1bW1hcnkgb2YgdGhlIHJ1bGVzIGZvciBjaGVja2JveCBkZXNpZ25lZCB0byBtYXRjaCBX
aW5JRToKICAgICAvLyB3aWR0aC9oZWlnaHQgLSBob25vcmVkIChXaW5JRSBhY3R1YWxseSBzY2Fs
ZXMgaXRzIGNvbnRyb2wgZm9yIHNtYWxsIHdpZHRocywgYnV0IGxldHMgaXQgb3ZlcmZsb3cgZm9y
IHNtYWxsIGhlaWdodHMuKQpAQCAtOTM1LDE2ICs5MzUsMTYgQEAgdm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0UmFkaW9TdHlsZShTdHlsZQogICAgIHNldFJhZGlvU2l6ZShzdHlsZSk7CiAKICAgICAv
LyBwYWRkaW5nIC0gbm90IGhvbm9yZWQgYnkgV2luSUUsIG5lZWRzIHRvIGJlIHJlbW92ZWQuCi0g
ICAgc3R5bGUtPnJlc2V0UGFkZGluZygpOworICAgIHN0eWxlLnJlc2V0UGFkZGluZygpOwogCiAg
ICAgLy8gYm9yZGVyIC0gaG9ub3JlZCBieSBXaW5JRSwgYnV0IGxvb2tzIHRlcnJpYmxlIChqdXN0
IHBhaW50cyBpbiB0aGUgY29udHJvbCBib3ggYW5kIHR1cm5zIG9mZiB0aGUgV2luZG93cyBYUCB0
aGVtZSkKICAgICAvLyBmb3Igbm93LCB3ZSB3aWxsIG5vdCBob25vciBpdC4KLSAgICBzdHlsZS0+
cmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOwogCi0gICAgc3R5bGUtPnNl
dEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVu
dCYpIGNvbnN0CiB7CiAgICAgLy8gTW9zdCBwbGF0Zm9ybXMgd2lsbCBjb21wbGV0ZWx5IGhvbm9y
IGFsbCBDU1MsIGFuZCBzbyB3ZSBoYXZlIG5vIG5lZWQgdG8KICAgICAvLyBhZGp1c3QgdGhlIHN0
eWxlIGF0IGFsbCBieSBkZWZhdWx0LiBXZSB3aWxsIHN0aWxsIGFsbG93IHRoZSB0aGVtZSBhIGNy
YWNrCkBAIC05NTIsMjUgKzk1MiwyNSBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25T
dHlsZShTdHlsCiAgICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWU6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0SW5uZXJTcGluQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7
CiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lOjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBF
bGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEFyZWFT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1l
bnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCiAjaWYgRU5BQkxFKElOUFVUX1NQ
RUVDSCkKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlcklucHV0U3BlZWNo
OjphZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUs
IGVsZW1lbnQpOwogfQpAQCAtOTgyLDEyICs5ODIsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFp
bnRJbnB1dEZpZWxkU3BlZWNoQgogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkK
LXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RN
ZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBj
b25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0
Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1JbnRTaXplIFJlbmRlclRoZW1lOjptZXRlclNpemVG
b3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0
CitJbnRTaXplIFJlbmRlclRoZW1lOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0
ZXImLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGJvdW5kcy5z
aXplKCk7CiB9CkBAIC0xMDk0LDE3ICsxMDk0LDE3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OnBhaW50
U2xpZGVyVGlja3MoY29uc3QKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQp
Ci1kb3VibGUgUmVuZGVyVGhlbWU6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NC
YXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAorZG91YmxlIFJlbmRlclRoZW1lOjphbmltYXRpb25S
ZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKIHsKICAg
ICByZXR1cm4gMDsKIH0KIAotZG91YmxlIFJlbmRlclRoZW1lOjphbmltYXRpb25EdXJhdGlvbkZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVtZTo6
YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFByb2dyZXNzQmFy
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCkBAIC0xMTE0LDQ5ICsxMTE0LDQ5IEBA
IEludFJlY3QgUmVuZGVyVGhlbWU6OnByb2dyZXNzQmFyUmVjdEZvckIKIH0KICNlbmRpZgogCi1i
b29sIFJlbmRlclRoZW1lOjpzaG91bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dEVsZW1lbnQpIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjpzaG91bGRIYXZlU3BpbkJ1dHRv
bihIVE1MSW5wdXRFbGVtZW50JiBpbnB1dEVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlu
cHV0RWxlbWVudC0+aXNTdGVwcGFibGUoKSAmJiAhaW5wdXRFbGVtZW50LT5pc1JhbmdlQ29udHJv
bCgpOworICAgIHJldHVybiBpbnB1dEVsZW1lbnQuaXNTdGVwcGFibGUoKSAmJiAhaW5wdXRFbGVt
ZW50LmlzUmFuZ2VDb250cm9sKCk7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lbnVM
aXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0TWVkaWFDb250cm9sU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRl
clRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTbGlk
ZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQm
IGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgYWRqdXN0U2xpZGVyVGh1bWJTaXplKHN0eWxlLCBlbGVt
ZW50KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxk
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFy
Y2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVs
ZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNpb24g
MTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIC8vIG1ldHJpY3MgYW5kIGRl
ZmF1bHRzIGdpdmVuIHRoZSBjb250ZW50cyBvZiB0aGUgc3R5bGUuICBUaGlzIGluY2x1ZGVzIHNv
cGhpc3RpY2F0ZWQgb3BlcmF0aW9ucyBsaWtlCiAgICAgLy8gc2VsZWN0aW9uIG9mIGNvbnRyb2wg
c2l6ZSBiYXNlZCBvZmYgdGhlIGZvbnQsIHRoZSBkaXNhYmxpbmcgb2YgYXBwZWFyYW5jZSB3aGVu
IGNlcnRhaW4gb3RoZXIgcHJvcGVydGllcyBsaWtlCiAgICAgLy8gImJvcmRlciIgYXJlIHNldCwg
b3IgaWYgdGhlIGFwcGVhcmFuY2UgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdGhlbWUuCi0gICAg
dm9pZCBhZGp1c3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50Kiwg
IGJvb2wgVUFIYXNBcHBlYXJhbmNlLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVy
JiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcik7CisgICAgdm9pZCBhZGp1c3RTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JiwgIGJvb2wgVUFIYXNBcHBlYXJh
bmNlLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvcik7CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcGFpbnQg
dGhlIHdpZGdldCBhcyBhIGJhY2tncm91bmQgb2YgdGhlIFJlbmRlck9iamVjdC4gIEEgd2lkZ2V0
J3MgZm9yZWdyb3VuZCwgZS5nLiwgdGhlCiAgICAgLy8gdGV4dCBvZiBhIGJ1dHRvbiwgaXMgYWx3
YXlzIHJlbmRlcmVkIGJ5IHRoZSBlbmdpbmUgaXRzZWxmLiAgVGhlIGJvb2xlYW4gcmV0dXJuIHZh
bHVlIGluZGljYXRlcwpAQCAtMTE3LDcgKzExNyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KIAogICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBjb250cm9sIGhhcyBiZWVu
IHN0eWxlZCBlbm91Z2ggYnkgdGhlIGF1dGhvciB0byBkaXNhYmxlIHRoZSBuYXRpdmUgYXBwZWFy
YW5jZS4KLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxl
KiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNr
Z3JvdW5kQ29sb3IpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29u
c3QgUmVuZGVyU3R5bGUmLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29u
c3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAKICAgICAvLyBBIGdlbmVyYWwgbWV0
aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBhbGwuCiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KQEAgLTEzNSwxMCArMTM1LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdGhl
bWVDaGFuZ2VkKCkgeyB9CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlz
IGFibGUgdG8gZHJhdyB0aGUgZm9jdXMgcmluZy4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNG
b2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdDsKIAogICAgIC8vIEEgbWV0
aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJl
ZHJhd2luZyB3aGVuIGhvdmVyZWQuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29u
c3QgUmVuZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgcGxhdGZvcm0gaXMgYWJsZSB0byBz
aG93IGRhdGFsaXN0IHN1Z2dlc3Rpb25zIGZvciBhIGdpdmVuIGlucHV0IHR5cGUuCiAgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzRGF0YUxpc3RVSShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQpAQCAtMTc3LDE2ICsxNzcsMTYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzeXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKENTU1ZhbHVlSUQpIGNvbnN0OwogCi0g
ICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0
eWxlJikgY29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRl
clRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0Owog
Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikg
Y29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5n
UmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBpbnQg
cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiAwOyB9
Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUq
KSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRp
bmdMZWZ0KFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50
IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUmKSBjb25zdCB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUm
KSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRp
bmdCb3R0b20oUmVuZGVyU3R5bGUmKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBi
b29sIHBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXplIHBvcHVwTWVudVNp
emUoY29uc3QgUmVuZGVyU3R5bGUqLCBJbnRSZWN0JikgY29uc3QgeyByZXR1cm4gUG9wdXBNZW51
U3R5bGU6OlBvcHVwTWVudVNpemVOb3JtYWw7IH0KKyAgICB2aXJ0dWFsIFBvcHVwTWVudVN0eWxl
OjpQb3B1cE1lbnVTaXplIHBvcHVwTWVudVNpemUoY29uc3QgUmVuZGVyU3R5bGUmLCBJbnRSZWN0
JikgY29uc3QgeyByZXR1cm4gUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNpemVOb3JtYWw7IH0K
IAogICAgIHZpcnR1YWwgU2Nyb2xsYmFyQ29udHJvbFNpemUgc2Nyb2xsYmFyQ29udHJvbFNpemVG
b3JQYXJ0KENvbnRyb2xQYXJ0KSB7IHJldHVybiBSZWd1bGFyU2Nyb2xsYmFyOyB9CiAKQEAgLTE5
NSw5ICsxOTUsOSBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAg
ICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhl
IHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CisgICAgdmlydHVhbCBkb3Vi
bGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYp
IGNvbnN0OwogICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9y
IHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25G
b3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OworICAgIHZpcnR1YWwgZG91Ymxl
IGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdDsK
ICAgICB2aXJ0dWFsIEludFJlY3QgcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IEludFJlY3QmKSBjb25zdDsKICNlbmRpZgogCkBAIC0yMTksNyArMjE5
LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKLSAgICB2
aXJ0dWFsIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29u
c3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNpemVGb3JCb3Vu
ZHMoY29uc3QgUmVuZGVyTWV0ZXImLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNvbnN0OwogI2VuZGlmCiAKQEAgLTIz
NSw3ICsyMzUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRT
aG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIHNob3VsZEhhdmVTcGluQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVu
dCYpIGNvbnN0OwogCiAgICAgLy8gRnVuY3Rpb25zIGZvciA8c2VsZWN0PiBlbGVtZW50cy4KICAg
ICB2aXJ0dWFsIGJvb2wgZGVsZWdhdGVzTWVudUxpc3RSZW5kZXJpbmcoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpAQCAtMjcwLDE5ICsyNzAsMTkgQEAgcHJvdGVjdGVkOgogCiAjaWYgIVVTRShO
RVdfVEhFTUUpCiAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2
b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgfQogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUo
UmVuZGVyU3R5bGUqKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJl
bmRlclN0eWxlJikgY29uc3QgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqKSBjb25z
dCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0
IHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKQEAgLTI5MCwxNSArMjkwLDE1IEBAIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CiAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRl
eHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4
dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRBcmVhRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlz
dFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVh
bCBib29sIHBhaW50TWVudUxpc3REZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC0zMDks
NDQgKzMwOSw0NCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50U3F1YXJlQnV0
dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5U
KQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxF
TUVOVCkKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0gICAgdmlydHVhbCB2b2lk
IGFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdElucHV0Rmll
bGRTcGVlY2hCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAj
ZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYkRlY29yYXRpb25zKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVy
biB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGREZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lZGlhQ29u
dHJvbFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVkaWFDb250cm9sU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhRnVsbHNjcmVlbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhUGxheUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhT3ZlcmxheVBsYXlCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
MTYgKzUyLDE2IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGludCBiYXNlbGlu
ZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmly
dHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRl
ckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3Jv
dW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHls
ZWQoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVy
JiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNr
Ym94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94RGVjb3JhdGlvbnMoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRl
OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1l
bnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b25EZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25z
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNv
bnN0IG92ZXJyaWRlOwpAQCAtNzQsMTcgKzc0LDE3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVu
dUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNsaWRlclRodW1iRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VM
RU1FTlQpCiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmltYXRp
b24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVw
ZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NC
YXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdCBvdmVycmlkZTsKICAgICAvLyBSZXR1cm5zIHRoZSBk
dXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1
YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mq
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYKQEAgLTk0LDcgKzk0LDcg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgaW50IHNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tD
ZW50ZXIoKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCi0gICAgdmlydHVhbCB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25zKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAog
ICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdCBvdmVycmlkZTsKQEAgLTEwNSw3ICsxMDUsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYK
IAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlU3BpbkJ1dHRvbihIVE1M
SW5wdXRFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHNob3VsZEhh
dmVTcGluQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVO
QUJMRShWSURFTykKICAgICB2aXJ0dWFsIFN0cmluZyBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgp
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsMTUgKzM1MywxNSBAQCBGbG9hdFJl
Y3QgUmVuZGVyVGhlbWVJT1M6OmFkZFJvdW5kZWRCb3JkCiAgICAgcmV0dXJuIGJvcmRlci5yZWN0
KCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lSU9TOjphZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICgh
c3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1
dG8oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGVuZ3RoIGxlbmd0aCA9IExlbmd0aChzdGF0
aWNfY2FzdDxpbnQ+KGNlaWxmKHN0ZDo6bWF4KHN0eWxlLT5mb250U2l6ZSgpLCAxMCkpKSwgRml4
ZWQpOworICAgIExlbmd0aCBsZW5ndGggPSBMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihjZWlsZihz
dGQ6Om1heChzdHlsZS5mb250U2l6ZSgpLCAxMCkpKSwgRml4ZWQpOwogICAgIAotICAgIHN0eWxl
LT5zZXRXaWR0aChsZW5ndGgpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQobGVuZ3RoKTsKKyAgICBz
dHlsZS5zZXRXaWR0aChsZW5ndGgpOworICAgIHN0eWxlLnNldEhlaWdodChsZW5ndGgpOwogfQog
CiBzdGF0aWMgQ0dQb2ludCBzaG9ydGVuZWQoQ0dQb2ludCBzdGFydCwgQ0dQb2ludCBlbmQsIGZs
b2F0IHdpZHRoKQpAQCAtNDM3LDI3ICs0MzcsMjcgQEAgaW50IFJlbmRlclRoZW1lSU9TOjpiYXNl
bGluZVBvc2l0aW9uKGNvbgogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlv
bihib3gpOwogfQogCi1ib29sIFJlbmRlclRoZW1lSU9TOjppc0NvbnRyb2xTdHlsZWQoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxM
YXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKK2Jv
b2wgUmVuZGVyVGhlbWVJT1M6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5k
LCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAogewogICAgIC8vIEJ1dHRvbnMg
YW5kIE1lbnVsaXN0QnV0dG9ucyBhcmUgc3R5bGVkIGlmIHRoZXkgY29udGFpbiBhIGJhY2tncm91
bmQgaW1hZ2UuCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQg
fHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCi0gICAgICAgIHJl
dHVybiAhc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcikuYWxwaGEoKSB8fCBzdHlsZS0+YmFja2dyb3VuZExheWVycygpLT5oYXNJbWFnZSgpOwor
ICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQgfHwgc3R5bGUuYXBw
ZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKKyAgICAgICAgcmV0dXJuICFzdHlsZS52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkg
fHwgc3R5bGUuYmFja2dyb3VuZExheWVycygpLT5oYXNJbWFnZSgpOwogCi0gICAgaWYgKHN0eWxl
LT5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09
IFRleHRBcmVhUGFydCkKLSAgICAgICAgcmV0dXJuICpzdHlsZS0+YmFja2dyb3VuZExheWVycygp
ICE9IGJhY2tncm91bmQ7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQ
YXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBUZXh0QXJlYVBhcnQpCisgICAgICAgIHJldHVy
biAqc3R5bGUuYmFja2dyb3VuZExheWVycygpICE9IGJhY2tncm91bmQ7CiAKICAgICByZXR1cm4g
UmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBi
YWNrZ3JvdW5kQ29sb3IpOwogfQogCi12b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSYWRpb1N0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBpZiAoIXN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAg
ICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0
KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExlbmd0aCBsZW5ndGggPSBMZW5n
dGgoc3RhdGljX2Nhc3Q8aW50PihjZWlsZihzdGQ6Om1heChzdHlsZS0+Zm9udFNpemUoKSwgMTAp
KSksIEZpeGVkKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgobGVuZ3RoKTsKLSAgICBzdHlsZS0+c2V0
SGVpZ2h0KGxlbmd0aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclJhZGl1cyhJbnRTaXplKGxlbmd0
aC52YWx1ZSgpIC8gMi4wZiwgbGVuZ3RoLnZhbHVlKCkgLyAyLjBmKSk7CisgICAgTGVuZ3RoIGxl
bmd0aCA9IExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHN0ZDo6bWF4KHN0eWxlLmZvbnRT
aXplKCksIDEwKSkpLCBGaXhlZCk7CisgICAgc3R5bGUuc2V0V2lkdGgobGVuZ3RoKTsKKyAgICBz
dHlsZS5zZXRIZWlnaHQobGVuZ3RoKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJSYWRpdXMoSW50U2l6
ZShsZW5ndGgudmFsdWUoKSAvIDIuMGYsIGxlbmd0aC52YWx1ZSgpIC8gMi4wZikpOwogfQogCiBi
b29sIFJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQpAQCAtNTE5LDEwICs1MTksMTAgQEAgY29uc3QgZmxvYXQgTWVudUxpc3RBcnJvd1dpZHRoID0g
NzsKIGNvbnN0IGZsb2F0IE1lbnVMaXN0QXJyb3dIZWlnaHQgPSA2OwogY29uc3QgZmxvYXQgTWVu
dUxpc3RCdXR0b25QYWRkaW5nUmlnaHQgPSAxOTsKIAotaW50IFJlbmRlclRoZW1lSU9TOjpwb3B1
cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5k
ZXJUaGVtZUlPUzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSYgc3R5bGUp
IGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25Q
YXJ0KQotICAgICAgICByZXR1cm4gTWVudUxpc3RCdXR0b25QYWRkaW5nUmlnaHQgKyBzdHlsZS0+
Ym9yZGVyVG9wV2lkdGgoKTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0
QnV0dG9uUGFydCkKKyAgICAgICAgcmV0dXJuIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0ICsg
c3R5bGUuYm9yZGVyVG9wV2lkdGgoKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjE5LDEwICs2
MTksOCBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RNZW51TGlzdEJ1dHRvCiAgICAgLy8g
Ii13ZWJraXQtYXBwZWFyYW5jZTogbWVudWxpc3QtYnV0dG9uIi4KICAgICBpZiAoZWxlbWVudC5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0VGFnKSAmJiAhZWxlbWVudC5oYXNBdHRyaWJ1dGUo
SFRNTE5hbWVzOjptdWx0aXBsZUF0dHIpKQogICAgICAgICBhZGp1c3RTZWxlY3RMaXN0QnV0dG9u
U3R5bGUoc3R5bGUsIGVsZW1lbnQpOwotICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShI
VE1MTmFtZXM6OmlucHV0VGFnKSkgewotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oJmVsZW1lbnQpOwotICAgICAg
ICBhZGp1c3RJbnB1dEVsZW1lbnRCdXR0b25TdHlsZShzdHlsZSwgKmlucHV0RWxlbWVudCk7Ci0g
ICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFn
KSkKKyAgICAgICAgYWRqdXN0SW5wdXRFbGVtZW50QnV0dG9uU3R5bGUoc3R5bGUsIHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQmPihpbnB1dEVsZW1lbnQpKTsKIH0KIAogYm9vbCBSZW5kZXJU
aGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVj
dCYgYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQpAQCAtNzE3LDE0ICs3MTUsMTQgQEAgY29uc3QgQ0dGbG9hdCBrVHJhY2tUaGlja25lc3MgPSA0
LjA7CiBjb25zdCBDR0Zsb2F0IGtUcmFja1JhZGl1cyA9IGtUcmFja1RoaWNrbmVzcyAvIDIuMDsK
IGNvbnN0IGludCBrRGVmYXVsdFNsaWRlclRodW1iU2l6ZSA9IDE2OwogCi12b2lkIFJlbmRlclRo
ZW1lSU9TOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lSU9TOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVy
VGhlbWU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsK
IAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGJlIHJlbHlpbmcgb24gYm9yZGVyIHJhZGl1
cyBmb3IgdGhlIGFwcGVhcmFuY2Ugb2Ygb3VyIGNvbnRyb2xzIDxyZGFyOi8vcHJvYmxlbS83Njc1
NDkzPgogICAgIExlbmd0aCByYWRpdXNXaWR0aChzdGF0aWNfY2FzdDxpbnQ+KGtUcmFja1JhZGl1
cyksIEZpeGVkKTsKICAgICBMZW5ndGggcmFkaXVzSGVpZ2h0KHN0YXRpY19jYXN0PGludD4oa1Ry
YWNrUmFkaXVzKSwgRml4ZWQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSYWRpdXMoTGVuZ3RoU2l6
ZShyYWRpdXNXaWR0aCwgcmFkaXVzSGVpZ2h0KSk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmFkaXVz
KExlbmd0aFNpemUocmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCkpOwogfQogCiBib29sIFJlbmRl
clRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTgwNSwyMCAr
ODAzLDIwIEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVHJhY2soY28KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNsaWRlclRodW1i
U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUlPUzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYp
IGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJIb3Jp
em9udGFsUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0KQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJIb3Jpem9udGFs
UGFydCAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIEVuZm9yY2UgImJvcmRlci1yYWRpdXM6IDUwJSIuCiAg
ICAgTGVuZ3RoIGxlbmd0aCg1MC4wZiwgUGVyY2VudCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclJh
ZGl1cyhMZW5ndGhTaXplKGxlbmd0aCwgbGVuZ3RoKSk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmFk
aXVzKExlbmd0aFNpemUobGVuZ3RoLCBsZW5ndGgpKTsKIAogICAgIC8vIEVuZm9yY2UgYSAxNngx
NiBzaXplIGlmIG5vIHNpemUgaXMgcHJvdmlkZWQuCi0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlz
SW50cmluc2ljT3JBdXRvKCkgfHwgc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKSB7CisgICAgaWYg
KHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSB8fCBzdHlsZS5oZWlnaHQoKS5pc0F1
dG8oKSkgewogICAgICAgICBMZW5ndGggbGVuZ3RoID0gTGVuZ3RoKGtEZWZhdWx0U2xpZGVyVGh1
bWJTaXplLCBGaXhlZCk7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChsZW5ndGgpOwotICAgICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KGxlbmd0aCk7CisgICAgICAgIHN0eWxlLnNldFdpZHRoKGxlbmd0
aCk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChsZW5ndGgpOwogICAgIH0KIH0KIApAQCAtODQw
LDcgKzgzOCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVGh1bWJEZWMKIH0K
IAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotZG91YmxlIFJlbmRlclRoZW1lSU9TOjph
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29u
c3QKK2RvdWJsZSBSZW5kZXJUaGVtZUlPUzo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC05
NDcsMTQgKzk0NSwxNCBAQCBpbnQgUmVuZGVyVGhlbWVJT1M6OnNsaWRlclRpY2tPZmZzZXRGcm9t
CiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2VhcmNoRmllbGRTdHls
ZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
bGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2VhcmNoRmllbGRTdHls
ZShTdHlsZVJlc29sdmVyJiBzZWxlY3RvciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBl
bGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CiAKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghc3R5bGUtPmhhc0JvcmRlcigpKQorICAgIGlmICghc3R5bGUu
aGFzQm9yZGVyKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlckJveCogYm94ID0gZWxl
bWVudC0+cmVuZGVyQm94KCk7CkBAIC05NjksNyArOTY3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRTZWFyY2hGaWVsZERlYwogICAgIHJldHVybiBwYWludFRleHRGaWVsZERlY29yYXRp
b25zKGJveCwgcGFpbnRJbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRq
dXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVs
ZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0
eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CiAKQEAgLTk3OSw3ICs5NzcsNyBAQCB2b2lk
IFJlbmRlclRoZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZShTCiAgICAgLy8gYW5kIHRoZSByZW5k
ZXIgdmlldy4KICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGVtU2l6ZSA9IENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUoMS4wLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7CiAgICAg
aW50IHBpeGVscyA9IGVtU2l6ZS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoc3R5bGUsIG51bGxwdHIsIG51bGxwdHIsIDEuMCwgZmFsc2UpKTsKLSAgICBzdHls
ZS0+c2V0UGFkZGluZ0JveChMZW5ndGhCb3goMCwgcGl4ZWxzLCAwLCBwaXhlbHMpKTsKKyAgICBz
dHlsZS5zZXRQYWRkaW5nQm94KExlbmd0aEJveCgwLCBwaXhlbHMsIDAsIHBpeGVscykpOwogCiAg
ICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm47CkBAIC0xMDExLDE0ICsxMDA5LDE0IEBA
IGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHVzaEJ1dHRvbkRlY28KICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OnNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUlPUzo6c2V0QnV0dG9uU2l6ZShSZW5kZXJT
dHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJl
IGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0
eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1
dG8oKSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5
bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSB0aGUg
Zm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9s
LgotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oQ29udHJvbEJh
c2VIZWlnaHQgLyBDb250cm9sQmFzZUZvbnRTaXplICogc3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
LmNvbXB1dGVkU2l6ZSgpKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHN0
YXRpY19jYXN0PGludD4oQ29udHJvbEJhc2VIZWlnaHQgLyBDb250cm9sQmFzZUZvbnRTaXplICog
c3R5bGUuZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCkpLCBGaXhlZCkpOwogfQogCiBj
b25zdCBpbnQga1RodW1ibmFpbEJvcmRlclN0cm9rZVdpZHRoID0gMTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCShyZXZpc2lvbiAxNzAzNzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWlu
dFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9y
ZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3Ip
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3Qg
Q29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC02OSwzNiArNjksMzYgQEAgcHVibGljOgogICAg
IC8vIFN5c3RlbSBmb250cy4KICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlE
LCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgaW50IG1p
bmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICNpZiBF
TkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKICAgICB2aXJ0dWFsIEludFNpemUgc2xpZGVyVGlja1Np
emUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGludCBzbGlkZXJUaWNrT2Zmc2V0RnJv
bVRyYWNrQ2VudGVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgaW50
IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChS
ZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJu
YWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRl
clN0eWxlKiwgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgaW50IHBvcHVw
SW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJT
dHlsZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRk
aW5nQm90dG9tKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBQb3B1
cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0eWxl
JiwgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50Q2Fw
c0xvY2tJbmRpY2F0b3IoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHBvcHNNZW51QnlBcnJv
d0tleXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICNpZiBFTkFCTEUoTUVU
RVJfRUxFTUVOVCkKLSAgICB2aXJ0dWFsIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0
IFJlbmRlck1ldGVyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgSW50U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXImLCBjb25zdCBJ
bnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0KSBjb25zdCBv
dmVycmlkZTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCiAgICAgLy8g
UmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9n
cmVzcyBiYXIuCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQ
cm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
ZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jl
c3MmKSBjb25zdCBvdmVycmlkZTsKICAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUg
YW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBJbnRSZWN0IHByb2dy
ZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIApAQCAtMTI1LDQxICsxMjUsNDEgQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NlbGVjdGlvbkZvcmVncm91bmRDb2xvcnMoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBib29sIHBhaW50
VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZs
b2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9v
bCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJl
YVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVu
dUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmly
dHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoUFJPR1JF
U1NfRUxFTUVOVCkKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2xp
ZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRl
clRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxk
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
CiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC0xNzYsMTQgKzE3NiwxNCBAQCBwcml2YXRlOgogICAg
IEZsb2F0UmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0JiBpbnB1
dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QmIHBhcnRSZW5kZXJlciwgY29uc3QgRmxvYXRS
ZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmKSBjb25zdDsKIAogICAgIC8vIEdldCB0aGUg
Y29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgZm9udC4gVXNlZCBieSBzb21lIG9mIHRoZSBjb250
cm9scyAobGlrZSBidXR0b25zKS4KLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yRm9u
dChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JT
eXN0ZW1Gb250KFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgTlNDb250cm9sU2l6ZSBjb250cm9s
U2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmKSBjb25zdDsKKyAgICBOU0NvbnRyb2xTaXplIGNvbnRy
b2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSYpIGNvbnN0OwogICAgIE5TQ29udHJvbFNp
emUgY29udHJvbFNpemVGb3JDZWxsKE5TQ2VsbCosIGNvbnN0IEludFNpemUqIHNpemVzLCBjb25z
dCBJbnRTaXplJiBtaW5TaXplLCBmbG9hdCB6b29tTGV2ZWwgPSAxLjBmKSBjb25zdDsKICAgICB2
b2lkIHNldENvbnRyb2xTaXplKE5TQ2VsbCosIGNvbnN0IEludFNpemUqIHNpemVzLCBjb25zdCBJ
bnRTaXplJiBtaW5TaXplLCBmbG9hdCB6b29tTGV2ZWwgPSAxLjBmKTsKLSAgICB2b2lkIHNldFNp
emVGcm9tRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKLSAg
ICBJbnRTaXplIHNpemVGb3JGb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMp
IGNvbnN0OwotICAgIEludFNpemUgc2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25z
dCBJbnRTaXplKiBzaXplcykgY29uc3Q7Ci0gICAgdm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXpl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIE5TQ29udHJvbFNpemUpIGNvbnN0OworICAg
IHZvaWQgc2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlJiwgY29uc3QgSW50U2l6ZSogc2l6ZXMp
IGNvbnN0OworICAgIEludFNpemUgc2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmLCBjb25zdCBJbnRT
aXplKiBzaXplcykgY29uc3Q7CisgICAgSW50U2l6ZSBzaXplRm9yU3lzdGVtRm9udChSZW5kZXJT
dHlsZSYsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKKyAgICB2b2lkIHNldEZvbnRGcm9t
Q29udHJvbFNpemUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgTlNDb250cm9sU2l6ZSkg
Y29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5k
ZXJPYmplY3QmKTsKICAgICB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBS
ZW5kZXJPYmplY3QmKTsKQEAgLTIwMyw3ICsyMDMsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IElu
dFNpemUqIGNhbmNlbEJ1dHRvblNpemVzKCkgY29uc3Q7CiAgICAgY29uc3QgSW50U2l6ZSogcmVz
dWx0c0J1dHRvblNpemVzKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTZWFyY2hDZWxsU3RhdGUoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgc2V0U2VhcmNoRmll
bGRTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdm9pZCBzZXRTZWFyY2hGaWVsZFNpemUo
UmVuZGVyU3R5bGUmKSBjb25zdDsKIAogICAgIE5TUG9wVXBCdXR0b25DZWxsICpwb3B1cEJ1dHRv
bigpIGNvbnN0OwogICAgIE5TU2VhcmNoRmllbGRDZWxsICpzZWFyY2goKSBjb25zdDsKQEAgLTIx
NCwxMSArMjE0LDExIEBAIHByaXZhdGU6CiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKICAg
ICBOU0xldmVsSW5kaWNhdG9yU3R5bGUgbGV2ZWxJbmRpY2F0b3JTdHlsZUZvcihDb250cm9sUGFy
dCkgY29uc3Q7Ci0gICAgTlNMZXZlbEluZGljYXRvckNlbGwgKmxldmVsSW5kaWNhdG9yRm9yKGNv
bnN0IFJlbmRlck1ldGVyKikgY29uc3Q7CisgICAgTlNMZXZlbEluZGljYXRvckNlbGwgKmxldmVs
SW5kaWNhdG9yRm9yKGNvbnN0IFJlbmRlck1ldGVyJikgY29uc3Q7CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShQUk9HUkVTU19FTEVNRU5UKQotICAgIGludCBtaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQo
UmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBpbnQgbWluaW11bVByb2dyZXNzQmFySGVpZ2h0KFJl
bmRlclN0eWxlJikgY29uc3Q7CiAgICAgY29uc3QgSW50U2l6ZSogcHJvZ3Jlc3NCYXJTaXplcygp
IGNvbnN0OwogICAgIGNvbnN0IGludCogcHJvZ3Jlc3NCYXJNYXJnaW5zKE5TQ29udHJvbFNpemUp
IGNvbnN0OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLm1tCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU5OSwxNyArNTk5LDE3IEBAIGJv
b2wgUmVuZGVyVGhlbWVNYWM6OnVzZXNUZXN0TW9kZUZvY3VzUmkKICAgICByZXR1cm4gV2ViQ29y
ZTo6dXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3IoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVy
RGF0YSYgYm9yZGVyLAorYm9vbCBSZW5kZXJUaGVtZU1hYzo6aXNDb250cm9sU3R5bGVkKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwg
Y29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFw
cGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gVGV4
dEFyZWFQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAg
IHJldHVybiBzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVyOworICAgIGlmIChzdHlsZS5hcHBlYXJh
bmNlKCkgPT0gVGV4dEZpZWxkUGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gVGV4dEFyZWFQ
YXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAgcmV0dXJu
IHN0eWxlLmJvcmRlcigpICE9IGJvcmRlcjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGhvcnJp
YmxlLCBidXQgdGhlcmUgaXMgbm90IG11Y2ggZWxzZSB0aGF0IGNhbiBiZSBkb25lLiAgTWVudSBs
aXN0cyBjYW5ub3QgZHJhdyBwcm9wZXJseSB3aGVuCiAgICAgLy8gc2NhbGVkLiAgVGhleSBjYW4n
dCByZWFsbHkgZHJhdyBwcm9wZXJseSB3aGVuIHRyYW5zZm9ybWVkIGVpdGhlci4gIFdlIGNhbid0
IGRldGVjdCB0aGUgdHJhbnNmb3JtIGNhc2UgYXQgc3R5bGUKICAgICAvLyBhZGp1c3RtZW50IHRp
bWUgc28gdGhhdCB3aWxsIGp1c3QgaGF2ZSB0byBzdGF5IGJyb2tlbi4gIFdlIGNhbiBob3dldmVy
IGRldGVjdCB0aGF0IHdlJ3JlIHpvb21pbmcuICBJZiB6b29taW5nCiAgICAgLy8gaXMgaW4gZWZm
ZWN0IHdlIHRyZWF0IGl0IGxpa2UgdGhlIGNvbnRyb2wgaXMgc3R5bGVkLgotICAgIGlmIChzdHls
ZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCAmJiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
ICE9IDEuMGYpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQgJiYg
c3R5bGUuZWZmZWN0aXZlWm9vbSgpICE9IDEuMGYpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgYmFj
a2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKTsKQEAgLTc0Myw5ICs3NDMsOSBAQCBib29sIFJlbmRl
clRoZW1lTWFjOjpjb250cm9sU3VwcG9ydHNUaW50CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5T
Q29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0CitOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6
ZUZvckZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGludCBmb250U2l6ZSA9
IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGludCBmb250U2l6ZSA9IHN0eWxlLmZvbnRTaXplKCk7
CiAgICAgaWYgKGZvbnRTaXplID49IDE2KQogICAgICAgICByZXR1cm4gTlNSZWd1bGFyQ29udHJv
bFNpemU7CiAgICAgaWYgKGZvbnRTaXplID49IDExKQpAQCAtNzczLDM1ICs3NzMsMzUgQEAgdm9p
ZCBSZW5kZXJUaGVtZU1hYzo6c2V0Q29udHJvbFNpemUoTlNDZQogICAgICAgICBbY2VsbCBzZXRD
b250cm9sU2l6ZTpzaXplXTsKIH0KIAotSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvckZv
bnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK0ludFNp
emUgUmVuZGVyVGhlbWVNYWM6OnNpemVGb3JGb250KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
SW50U2l6ZSogc2l6ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29tKCkg
IT0gMS4wZikgeworICAgIGlmIChzdHlsZS5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikgewogICAg
ICAgICBJbnRTaXplIHJlc3VsdCA9IHNpemVzW2NvbnRyb2xTaXplRm9yRm9udChzdHlsZSldOwot
ICAgICAgICByZXR1cm4gSW50U2l6ZShyZXN1bHQud2lkdGgoKSAqIHN0eWxlLT5lZmZlY3RpdmVa
b29tKCksIHJlc3VsdC5oZWlnaHQoKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOworICAgICAg
ICByZXR1cm4gSW50U2l6ZShyZXN1bHQud2lkdGgoKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSwg
cmVzdWx0LmhlaWdodCgpICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICB9CiAgICAgcmV0
dXJuIHNpemVzW2NvbnRyb2xTaXplRm9yRm9udChzdHlsZSldOwogfQogCi1JbnRTaXplIFJlbmRl
clRoZW1lTWFjOjpzaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IElu
dFNpemUqIHNpemVzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvclN5c3Rl
bUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKIHsK
LSAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSAxLjBmKSB7CisgICAgaWYgKHN0eWxl
LmVmZmVjdGl2ZVpvb20oKSAhPSAxLjBmKSB7CiAgICAgICAgIEludFNpemUgcmVzdWx0ID0gc2l6
ZXNbY29udHJvbFNpemVGb3JTeXN0ZW1Gb250KHN0eWxlKV07Ci0gICAgICAgIHJldHVybiBJbnRT
aXplKHJlc3VsdC53aWR0aCgpICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSwgcmVzdWx0LmhlaWdo
dCgpICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgIHJldHVybiBJbnRTaXplKHJl
c3VsdC53aWR0aCgpICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpLCByZXN1bHQuaGVpZ2h0KCkgKiBz
dHlsZS5lZmZlY3RpdmVab29tKCkpOwogICAgIH0KICAgICByZXR1cm4gc2l6ZXNbY29udHJvbFNp
emVGb3JTeXN0ZW1Gb250KHN0eWxlKV07CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNp
emVGcm9tRm9udChSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IENoZWNrIGlz
IGZsYXdlZCwgc2luY2UgaXQgZG9lc24ndCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBh
Y2NvdW50LgogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JGb250KHN0eWxlLCBzaXplcyk7Ci0g
ICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgp
ID4gMCkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVk
KSk7Ci0gICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4g
MCkKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQp
KTsKKyAgICBpZiAoc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmIHNpemUud2lk
dGgoKSA+IDApCisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZp
eGVkKSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0KCkg
PiAwKQorICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVk
KSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6
ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6
ZSkgY29uc3QKIHsKICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKQEAgLTgwOSwxOSArODA5LDE5
IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJvbFMKIAogICAgIE5TRm9u
dCogZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXpl
Rm9yQ29udHJvbFNpemU6Y29udHJvbFNpemVdXTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0T25l
RmFtaWx5KFtmb250IHdlYkNvcmVGYW1pbHlOYW1lXSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNl
dENvbXB1dGVkU2l6ZShbZm9udCBwb2ludFNpemVdICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7
Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoW2ZvbnQgcG9pbnRTaXplXSAq
IHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoW2ZvbnQgcG9pbnRTaXplXSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CisgICAgZm9u
dERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoW2ZvbnQgcG9pbnRTaXplXSAqIHN0eWxlLmVm
ZmVjdGl2ZVpvb20oKSk7CiAKICAgICAvLyBSZXNldCBsaW5lIGhlaWdodAotICAgIHN0eWxlLT5z
ZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBzdHls
ZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKIAotICAg
IGlmIChzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCi0gICAgICAg
IHN0eWxlLT5mb250KCkudXBkYXRlKDApOworICAgIGlmIChzdHlsZS5zZXRGb250RGVzY3JpcHRp
b24oZm9udERlc2NyaXB0aW9uKSkKKyAgICAgICAgc3R5bGUuZm9udCgpLnVwZGF0ZSgwKTsKIH0K
IAotTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpemVGb3JTeXN0ZW1Gb250
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK05TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6
OmNvbnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0g
ICAgaW50IGZvbnRTaXplID0gc3R5bGUtPmZvbnRTaXplKCk7CisgICAgaW50IGZvbnRTaXplID0g
c3R5bGUuZm9udFNpemUoKTsKICAgICBpZiAoZm9udFNpemUgPj0gW05TRm9udCBzeXN0ZW1Gb250
U2l6ZUZvckNvbnRyb2xTaXplOk5TUmVndWxhckNvbnRyb2xTaXplXSkKICAgICAgICAgcmV0dXJu
IE5TUmVndWxhckNvbnRyb2xTaXplOwogICAgIGlmIChmb250U2l6ZSA+PSBbTlNGb250IHN5c3Rl
bUZvbnRTaXplRm9yQ29udHJvbFNpemU6TlNTbWFsbENvbnRyb2xTaXplXSkKQEAgLTg0NSw3ICs4
NDUsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFRleHRGaWVsZChjb25zCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVNYWM6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCkBAIC04NjcsNyArODY3LDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0QXJlYShjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFk
anVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0CiB7CiB9CiAKQEAgLTkxMyw3ICs5MTMsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludE1lbnVMaXN0KGNvbnN0CiAKICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBhY2NvdW50IGZv
ciB0aGUgc2hhZG93LgogICAgIEZsb2F0UmVjdCBpbmZsYXRlZFJlY3QgPSByZWN0OwotICAgIGlm
IChyZWN0LndpZHRoKCkgPj0gbWluaW11bU1lbnVMaXN0U2l6ZSgmcmVuZGVyZXIuc3R5bGUoKSkp
CisgICAgaWYgKHJlY3Qud2lkdGgoKSA+PSBtaW5pbXVtTWVudUxpc3RTaXplKHJlbmRlcmVyLnN0
eWxlKCkpKQogICAgICAgICBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdChyZWN0LCBzaXplLCBw
b3B1cEJ1dHRvbk1hcmdpbnMoKSwgem9vbUxldmVsKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwpAQCAtOTQzLDkgKzk0Myw5
IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3QoY29uc3QKIAogI2lmIEVOQUJM
RShNRVRFUl9FTEVNRU5UKQogCi1JbnRTaXplIFJlbmRlclRoZW1lTWFjOjptZXRlclNpemVGb3JC
b3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqIHJlbmRlck1ldGVyLCBjb25zdCBJbnRSZWN0JiBib3Vu
ZHMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lTWFjOjptZXRlclNpemVGb3JCb3VuZHMoY29u
c3QgUmVuZGVyTWV0ZXImIHJlbmRlck1ldGVyLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0
CiB7Ci0gICAgaWYgKE5vQ29udHJvbFBhcnQgPT0gcmVuZGVyTWV0ZXItPnN0eWxlKCkuYXBwZWFy
YW5jZSgpKQorICAgIGlmIChOb0NvbnRyb2xQYXJ0ID09IHJlbmRlck1ldGVyLnN0eWxlKCkuYXBw
ZWFyYW5jZSgpKQogICAgICAgICByZXR1cm4gYm91bmRzLnNpemUoKTsKIAogICAgIE5TTGV2ZWxJ
bmRpY2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJbmRpY2F0b3JGb3IocmVuZGVyTWV0ZXIpOwpAQCAt
OTYyLDcgKzk2Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWV0ZXIoY29uc3QgUmUK
IAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZv
LmNvbnRleHQpOwogCi0gICAgTlNMZXZlbEluZGljYXRvckNlbGwqIGNlbGwgPSBsZXZlbEluZGlj
YXRvckZvcih0b1JlbmRlck1ldGVyKCZyZW5kZXJPYmplY3QpKTsKKyAgICBOU0xldmVsSW5kaWNh
dG9yQ2VsbCogY2VsbCA9IGxldmVsSW5kaWNhdG9yRm9yKHRvUmVuZGVyTWV0ZXIocmVuZGVyT2Jq
ZWN0KSk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludElu
Zm8uY29udGV4dCk7CiAKICAgICBbY2VsbCBkcmF3V2l0aEZyYW1lOnJlY3QgaW5WaWV3OmRvY3Vt
ZW50Vmlld0ZvcihyZW5kZXJPYmplY3QpXTsKQEAgLTEwMDEsMTYgKzEwMDEsMTYgQEAgTlNMZXZl
bEluZGljYXRvclN0eWxlIFJlbmRlclRoZW1lTWFjOjpsZQogCiB9CiAKLU5TTGV2ZWxJbmRpY2F0
b3JDZWxsKiBSZW5kZXJUaGVtZU1hYzo6bGV2ZWxJbmRpY2F0b3JGb3IoY29uc3QgUmVuZGVyTWV0
ZXIqIHJlbmRlck1ldGVyKSBjb25zdAorTlNMZXZlbEluZGljYXRvckNlbGwqIFJlbmRlclRoZW1l
TWFjOjpsZXZlbEluZGljYXRvckZvcihjb25zdCBSZW5kZXJNZXRlciYgcmVuZGVyTWV0ZXIpIGNv
bnN0CiB7Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyTWV0ZXItPnN0eWxl
KCk7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyTWV0ZXIuc3R5bGUoKTsK
ICAgICBBU1NFUlQoc3R5bGUuYXBwZWFyYW5jZSgpICE9IE5vQ29udHJvbFBhcnQpOwogCiAgICAg
aWYgKCFtX2xldmVsSW5kaWNhdG9yKQogICAgICAgICBtX2xldmVsSW5kaWNhdG9yID0gYWRvcHRO
UyhbW05TTGV2ZWxJbmRpY2F0b3JDZWxsIGFsbG9jXSBpbml0V2l0aExldmVsSW5kaWNhdG9yU3R5
bGU6TlNDb250aW51b3VzQ2FwYWNpdHlMZXZlbEluZGljYXRvclN0eWxlXSk7CiAgICAgTlNMZXZl
bEluZGljYXRvckNlbGwqIGNlbGwgPSBtX2xldmVsSW5kaWNhdG9yLmdldCgpOwogCi0gICAgSFRN
TE1ldGVyRWxlbWVudCogZWxlbWVudCA9IHJlbmRlck1ldGVyLT5tZXRlckVsZW1lbnQoKTsKKyAg
ICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyTWV0ZXIubWV0ZXJFbGVtZW50KCk7
CiAgICAgZG91YmxlIHZhbHVlID0gZWxlbWVudC0+dmFsdWUoKTsKIAogICAgIC8vIEJlY2F1c2Ug
TlNMZXZlbEluZGljYXRvckNlbGwgZG9lcyBub3Qgc3VwcG9ydCBvcHRpbXVtLWluLXRoZS1taWRk
bGUgdHlwZSBjb2xvcmluZywKQEAgLTEwNzIsMzUgKzEwNzIsMzUgQEAgSW50UmVjdCBSZW5kZXJU
aGVtZU1hYzo6cHJvZ3Jlc3NCYXJSZWN0RgogICAgICAgICByZXR1cm4gcHJvZ3Jlc3NCYXJCb3Vu
ZHM7CiAKICAgICBmbG9hdCB6b29tTGV2ZWwgPSByZW5kZXJPYmplY3Quc3R5bGUoKS5lZmZlY3Rp
dmVab29tKCk7Ci0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9y
Rm9udCgmcmVuZGVyT2JqZWN0LnN0eWxlKCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNp
emUgPSBjb250cm9sU2l6ZUZvckZvbnQocmVuZGVyT2JqZWN0LnN0eWxlKCkpOwogICAgIEludFNp
emUgc2l6ZSA9IHByb2dyZXNzQmFyU2l6ZXMoKVtjb250cm9sU2l6ZV07CiAgICAgc2l6ZS5zZXRI
ZWlnaHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21MZXZlbCk7CiAgICAgc2l6ZS5zZXRXaWR0aChwcm9n
cmVzc0JhckJvdW5kcy53aWR0aCgpKTsKIAogICAgIC8vIE5vdyBpbmZsYXRlIGl0IHRvIGFjY291
bnQgZm9yIHRoZSBzaGFkb3cuCiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBwcm9ncmVzc0Jh
ckJvdW5kczsKLSAgICBpZiAocHJvZ3Jlc3NCYXJCb3VuZHMuaGVpZ2h0KCkgPD0gbWluaW11bVBy
b2dyZXNzQmFySGVpZ2h0KCZyZW5kZXJPYmplY3Quc3R5bGUoKSkpCisgICAgaWYgKHByb2dyZXNz
QmFyQm91bmRzLmhlaWdodCgpIDw9IG1pbmltdW1Qcm9ncmVzc0JhckhlaWdodChyZW5kZXJPYmpl
Y3Quc3R5bGUoKSkpCiAgICAgICAgIGluZmxhdGVkUmVjdCA9IEludFJlY3QoaW5mbGF0ZVJlY3Qo
aW5mbGF0ZWRSZWN0LCBzaXplLCBwcm9ncmVzc0Jhck1hcmdpbnMoY29udHJvbFNpemUpLCB6b29t
TGV2ZWwpKTsKIAogICAgIHJldHVybiBpbmZsYXRlZFJlY3Q7CiB9CiAKLWludCBSZW5kZXJUaGVt
ZU1hYzo6bWluaW11bVByb2dyZXNzQmFySGVpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
K2ludCBSZW5kZXJUaGVtZU1hYzo6bWluaW11bVByb2dyZXNzQmFySGVpZ2h0KFJlbmRlclN0eWxl
JiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHBy
b2dyZXNzQmFyU2l6ZXMoKSkuaGVpZ2h0KCk7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZU1hYzo6
YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNv
bnN0Citkb3VibGUgUmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJv
Z3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogewogICAgIHJldHVybiBwcm9ncmVzc0Fu
aW1hdGlvbkZyYW1lUmF0ZTsKIH0KIAotZG91YmxlIFJlbmRlclRoZW1lTWFjOjphbmltYXRpb25E
dXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK2RvdWJsZSBSZW5k
ZXJUaGVtZU1hYzo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVz
cyYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uTnVtRnJhbWVzICogcHJv
Z3Jlc3NBbmltYXRpb25GcmFtZVJhdGU7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVz
dFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCkBAIC0xMTEw
LDcgKzExMTAsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKGNvCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBwcm9ncmVz
c0JhclJlY3RGb3JCb3VuZHMocmVuZGVyT2JqZWN0LCByZWN0KTsKLSAgICBOU0NvbnRyb2xTaXpl
IGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KCZyZW5kZXJPYmplY3Quc3R5bGUoKSk7
CisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChyZW5k
ZXJPYmplY3Quc3R5bGUoKSk7CiAKICAgICBjb25zdCBSZW5kZXJQcm9ncmVzcyYgcmVuZGVyUHJv
Z3Jlc3MgPSAqdG9SZW5kZXJQcm9ncmVzcygmcmVuZGVyT2JqZWN0KTsKICAgICBISVRoZW1lVHJh
Y2tEcmF3SW5mbyB0cmFja0luZm87CkBAIC0xMzM3LDIyICsxMzM3LDIyIEBAIHN0YXRpYyBjb25z
dCBJbnRTaXplKiBtZW51TGlzdEJ1dHRvblNpemUKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgTlND
b250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7CiAKLSAg
ICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAg
c3R5bGUucmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5yZXNldFBhZGRpbmcoKTsKIAogICAgIC8v
IEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0by4KLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChB
dXRvKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CiAKICAgICAvLyBXaGl0
ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCi0gICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsK
KyAgICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKICAgICAvLyBTZXQgdGhlIGZvcmVncm91
bmQgY29sb3IgdG8gYmxhY2sgb3IgZ3JheSB3aGVuIHdlIGhhdmUgdGhlIGFxdWEgbG9vay4KICAg
ICAvLyBDYXN0IHRvIFJHQjMyIGlzIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZXIgYnVnLgotICAg
IHN0eWxlLT5zZXRDb2xvcihlICYmICFlLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSA/IHN0YXRp
Y19jYXN0PFJHQkEzMj4oQ29sb3I6OmJsYWNrKSA6IENvbG9yOjpkYXJrR3JheSk7CisgICAgc3R5
bGUuc2V0Q29sb3IoIWUuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkgPyBzdGF0aWNfY2FzdDxSR0JB
MzI+KENvbG9yOjpibGFjaykgOiBDb2xvcjo6ZGFya0dyYXkpOwogCiAgICAgLy8gU2V0IHRoZSBi
dXR0b24ncyB2ZXJ0aWNhbCBzaXplLgogICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgbWVudUxp
c3RCdXR0b25TaXplcygpKTsKQEAgLTEzNjIsNTIgKzEzNjIsNTIgQEAgdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0TWVudUxpc3RTdHlsZQogICAgIC8vIHN5c3RlbSBmb250IGZvciB0aGUgY29u
dHJvbCBzaXplIGluc3RlYWQuCiAgICAgc2V0Rm9udEZyb21Db250cm9sU2l6ZShzdHlsZVJlc29s
dmVyLCBzdHlsZSwgY29udHJvbFNpemUpOwogCi0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxs
cHRyKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLWludCBSZW5kZXJU
aGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKK2ludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0
eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51
bGlzdFBhcnQpCi0gICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVG
b3JGb250KHN0eWxlKSlbbGVmdFBhZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAg
ICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCi0gICAgICAg
IHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdMZWZ0ICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsK
KyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICAgICAgcmV0
dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtsZWZ0UGFk
ZGluZ10gKiBzdHlsZS5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisgICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRp
bmdMZWZ0ICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOwogICAgIHJldHVybiAwOwogfQogCi1pbnQg
UmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0
KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdFBhcnQpCi0gICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29u
dHJvbFNpemVGb3JGb250KHN0eWxlKSlbcmlnaHRQYWRkaW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVa
b29tKCk7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0
KSB7Ci0gICAgICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gYmFzZUZv
bnRTaXplOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQorICAg
ICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkp
W3JpZ2h0UGFkZGluZ10gKiBzdHlsZS5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxlLmFw
cGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpIHsKKyAgICAgICAgZmxvYXQgZm9udFNj
YWxlID0gc3R5bGUuZm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKICAgICAgICAgZmxvYXQgYXJy
b3dXaWR0aCA9IGJhc2VBcnJvd1dpZHRoICogZm9udFNjYWxlOwotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50PihjZWlsZihhcnJvd1dpZHRoICsgKGFycm93UGFkZGluZ0xlZnQgKyBhcnJv
d1BhZGRpbmdSaWdodCArIHBhZGRpbmdCZWZvcmVTZXBhcmF0b3IpICogc3R5bGUtPmVmZmVjdGl2
ZVpvb20oKSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihhcnJvd1dp
ZHRoICsgKGFycm93UGFkZGluZ0xlZnQgKyBhcnJvd1BhZGRpbmdSaWdodCArIHBhZGRpbmdCZWZv
cmVTZXBhcmF0b3IpICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpKSk7CiAgICAgfQogICAgIHJldHVy
biAwOwogfQogCi1pbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+
YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKLSAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9u
UGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVt0b3BQYWRkaW5nXSAqIHN0eWxlLT5l
ZmZlY3RpdmVab29tKCk7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RC
dXR0b25QYXJ0KQotICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nVG9wICogc3R5bGUt
PmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0
UGFydCkKKyAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZv
bnQoc3R5bGUpKVt0b3BQYWRkaW5nXSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAo
c3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKKyAgICAgICAgcmV0dXJu
IHN0eWxlZFBvcHVwUGFkZGluZ1RvcCAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKICAgICByZXR1
cm4gMDsKIH0KIAotaW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRv
bShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCi0gICAgICAgIHJldHVybiBwb3B1
cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbYm90dG9tUGFkZGluZ10g
KiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09
IE1lbnVsaXN0QnV0dG9uUGFydCkKLSAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ0Jv
dHRvbSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdFBhcnQpCisgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29u
dHJvbFNpemVGb3JGb250KHN0eWxlKSlbYm90dG9tUGFkZGluZ10gKiBzdHlsZS5lZmZlY3RpdmVa
b29tKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQp
CisgICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdCb3R0b20gKiBzdHlsZS5lZmZlY3Rp
dmVab29tKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLVBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVT
aXplIFJlbmRlclRoZW1lTWFjOjpwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSwgSW50UmVjdCYgcmVjdCkgY29uc3QKK1BvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXplIFJl
bmRlclRoZW1lTWFjOjpwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgSW50
UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBOU1BvcFVwQnV0dG9uQ2VsbCogcG9wdXBCdXR0b24g
PSB0aGlzLT5wb3B1cEJ1dHRvbigpOwotICAgIE5TQ29udHJvbFNpemUgc2l6ZSA9IGNvbnRyb2xT
aXplRm9yQ2VsbChwb3B1cEJ1dHRvbiwgcG9wdXBCdXR0b25TaXplcygpLCByZWN0LnNpemUoKSwg
c3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgTlNDb250cm9sU2l6ZSBzaXplID0gY29udHJv
bFNpemVGb3JDZWxsKHBvcHVwQnV0dG9uLCBwb3B1cEJ1dHRvblNpemVzKCksIHJlY3Quc2l6ZSgp
LCBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogICAgIHN3aXRjaCAoc2l6ZSkgewogICAgIGNhc2Ug
TlNSZWd1bGFyQ29udHJvbFNpemU6CiAgICAgICAgIHJldHVybiBQb3B1cE1lbnVTdHlsZTo6UG9w
dXBNZW51U2l6ZU5vcm1hbDsKQEAgLTE0NTIsNyArMTQ1Miw3IEBAIGNvbnN0IEludFNpemUqIFJl
bmRlclRoZW1lTWFjOjptZW51TGlzdFMKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAKLWludCBSZW5k
ZXJUaGVtZU1hYzo6bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
CitpbnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUmIHN0
eWxlKSBjb25zdAogewogICAgIHJldHVybiBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgbWVudUxp
c3RTaXplcygpKS53aWR0aCgpOwogfQpAQCAtMTQ2MCw5ICsxNDYwLDkgQEAgaW50IFJlbmRlclRo
ZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKAogY29uc3QgaW50IHRyYWNrV2lkdGggPSA1Owog
Y29uc3QgaW50IHRyYWNrUmFkaXVzID0gMjsKIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0g
ICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3co
bnVsbHB0cik7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soY29u
c3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKQEAgLTE1MDYsMTAgKzE1MDYsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTbGlkZXJUcmFjayhjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAg
ICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShzdHlsZVJlc29sdmVyLCBzdHls
ZSwgZWxlbWVudCk7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHls
ZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKIGNvbnN0IGZsb2F0IHZlcnRpY2FsU2xpZGVy
SGVpZ2h0UGFkZGluZyA9IDAuMWY7CkBAIC0xNjA4LDcgKzE2MDgsNyBAQCB2b2lkIFJlbmRlclRo
ZW1lTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUoCiB7CiAgICAgTlNTZWFyY2hGaWVsZENlbGwqIHNl
YXJjaCA9IHRoaXMtPnNlYXJjaCgpOwogCi0gICAgW3NlYXJjaCBzZXRDb250cm9sU2l6ZTpjb250
cm9sU2l6ZUZvckZvbnQoJm8uc3R5bGUoKSldOworICAgIFtzZWFyY2ggc2V0Q29udHJvbFNpemU6
Y29udHJvbFNpemVGb3JGb250KG8uc3R5bGUoKSldOwogCiAgICAgLy8gVXBkYXRlIHRoZSB2YXJp
b3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgogICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzZWFyY2gs
IG8pOwpAQCAtMTYyMSw0NSArMTYyMSw0NSBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZU1h
Yzo6c2VhcmNoRmllCiAgICAgcmV0dXJuIHNpemVzOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFj
OjpzZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZU1hYzo6c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QK
IHsKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRo
ZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRy
aW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5
bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8o
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVXNlIHRoZSBmb250IHNpemUgdG8gZGV0ZXJt
aW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGNvbnRyb2wuCiAgICAgc2V0U2l6ZUZyb21G
b250KHN0eWxlLCBzZWFyY2hGaWVsZFNpemVzKCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFj
OjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRl
clN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgLy8gT3ZlcnJpZGUgYm9yZGVy
LgotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAgIGNvbnN0IHNob3J0IGJvcmRlcldpZHRo
ID0gMiAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlckxlZnRX
aWR0aChib3JkZXJXaWR0aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlckxlZnRTdHlsZShJTlNFVCk7
Ci0gICAgc3R5bGUtPnNldEJvcmRlclJpZ2h0V2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHN0eWxl
LT5zZXRCb3JkZXJSaWdodFN0eWxlKElOU0VUKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyQm90dG9t
V2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJCb3R0b21TdHlsZShJTlNF
VCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclRvcFdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHls
ZS0+c2V0Qm9yZGVyVG9wU3R5bGUoSU5TRVQpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7Cisg
ICAgY29uc3Qgc2hvcnQgYm9yZGVyV2lkdGggPSAyICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOwor
ICAgIHN0eWxlLnNldEJvcmRlckxlZnRXaWR0aChib3JkZXJXaWR0aCk7CisgICAgc3R5bGUuc2V0
Qm9yZGVyTGVmdFN0eWxlKElOU0VUKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJSaWdodFdpZHRoKGJv
cmRlcldpZHRoKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJSaWdodFN0eWxlKElOU0VUKTsKKyAgICBz
dHlsZS5zZXRCb3JkZXJCb3R0b21XaWR0aChib3JkZXJXaWR0aCk7CisgICAgc3R5bGUuc2V0Qm9y
ZGVyQm90dG9tU3R5bGUoSU5TRVQpOworICAgIHN0eWxlLnNldEJvcmRlclRvcFdpZHRoKGJvcmRl
cldpZHRoKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJUb3BTdHlsZShJTlNFVCk7CiAKICAgICAvLyBP
dmVycmlkZSBoZWlnaHQuCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworICAg
IHN0eWxlLnNldEhlaWdodChMZW5ndGgoQXV0bykpOwogICAgIHNldFNlYXJjaEZpZWxkU2l6ZShz
dHlsZSk7CiAKICAgICAvLyBPdmVycmlkZSBwYWRkaW5nIHNpemUgdG8gbWF0Y2ggQXBwS2l0IHRl
eHQgcG9zaXRpb25pbmcuCi0gICAgY29uc3QgaW50IHBhZGRpbmcgPSAxICogc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZp
eGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAg
ICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBj
b25zdCBpbnQgcGFkZGluZyA9IDEgKiBzdHlsZS5lZmZlY3RpdmVab29tKCk7CisgICAgc3R5bGUu
c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFk
ZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdU
b3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0JvdHRvbShM
ZW5ndGgocGFkZGluZywgRml4ZWQpKTsKIAogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUg
PSBjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpOwogICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUo
c3R5bGVSZXNvbHZlciwgc3R5bGUsIGNvbnRyb2xTaXplKTsKIAotICAgIHN0eWxlLT5zZXRCb3hT
aGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBi
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJl
bmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCkBAIC0xNzE4LDEyICsxNzE4LDEyIEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lTWFj
OjpjYW5jZWxCdXQKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6
OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JT
eXN0ZW1Gb250KHN0eWxlLCBjYW5jZWxCdXR0b25TaXplcygpKTsKLSAgICBzdHlsZS0+c2V0V2lk
dGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVs
bHB0cik7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsK
KyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAg
c3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBjb25zdCBJbnRTaXplKiBSZW5kZXJU
aGVtZU1hYzo6cmVzdWx0c0J1dHRvblNpemVzKCkgY29uc3QKQEAgLTE3MzMsMTIgKzE3MzMsMTIg
QEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVNYWM6OnJlc3VsdHNCdQogfQogCiBjb25zdCBp
bnQgZW1wdHlSZXN1bHRzT2Zmc2V0ID0gOTsKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNl
YXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJj
aEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0
eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVt
Rm9udChzdHlsZSwgcmVzdWx0c0J1dHRvblNpemVzKCkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChM
ZW5ndGgoc2l6ZS53aWR0aCgpIC0gZW1wdHlSZXN1bHRzT2Zmc2V0LCBGaXhlZCkpOwotICAgIHN0
eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2l6ZS53
aWR0aCgpIC0gZW1wdHlSZXN1bHRzT2Zmc2V0LCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdo
dChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3co
bnVsbHB0cik7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGREZWNv
cmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikKQEAgLTE3NDYsMTIgKzE3NDYsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTZWFyY2hGaWVsZERlYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAg
SW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXpl
cygpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsK
LSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotICAg
IHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3Ro
KHNpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUu
aGVpZ2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQog
CiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25Q
YXJ0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHIpCkBAIC0xNzc5LDEyICsxNzc5LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGRSZXMKIH0KIAogY29uc3QgaW50IHJlc3VsdHNBcnJvd1dpZHRo
ID0gNTsKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7
CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0
b25TaXplcygpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSArIHJl
c3VsdHNBcnJvd1dpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNp
emUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsK
KyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpICsgcmVzdWx0c0Fycm93V2lk
dGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBG
aXhlZCkpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKQEAg
LTE5MTYsMTIgKzE5MTYsMTIgQEAgaW50IFJlbmRlclRoZW1lTWFjOjpzbGlkZXJUaWNrT2Zmc2V0
RnJvbQogY29uc3QgaW50IHNsaWRlclRodW1iV2lkdGggPSAxNTsKIGNvbnN0IGludCBzbGlkZXJU
aHVtYkhlaWdodCA9IDE1OwogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVt
YlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVNYWM6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQm
KSBjb25zdAogewotICAgIGZsb2F0IHpvb21MZXZlbCA9IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7
Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFy
dCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0g
ICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihzbGlkZXJUaHVt
YldpZHRoICogem9vbUxldmVsKSwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChM
ZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihzbGlkZXJUaHVtYkhlaWdodCAqIHpvb21MZXZlbCksIEZp
eGVkKSk7CisgICAgZmxvYXQgem9vbUxldmVsID0gc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAg
IGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBz
dHlsZS5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKKyAgICAgICAg
c3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJXaWR0aCAq
IHpvb21MZXZlbCksIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc3Rh
dGljX2Nhc3Q8aW50PihzbGlkZXJUaHVtYkhlaWdodCAqIHpvb21MZXZlbCksIEZpeGVkKSk7CiAg
ICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233758</attachid>
            <date>2014-06-24 16:14:13 -0700</date>
            <delta_ts>2014-06-24 16:46:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134261-20140624161353.patch</filename>
            <type>text/plain</type>
            <size>177445</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDM5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBAQAorMjAxNC0wNi0yNCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorICAgICAgICAgICAgQW5kIHBl
YXZvQG91dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5jb20+CisKKyAgICAgICAgVXNlIHJlZmVy
ZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycyBpbiBSZW5kZXJUaGVtZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDI2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgor
ICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkSGF2ZVNwaW5CdXR0b24pOgorICAgICAgICAqIGh0
bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZWZs
L1JlbmRlclRoZW1lRWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTaXplQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6c3Vw
cG9ydHNGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFkanVz
dFNsaWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0Q2hlY2tib3hTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFk
anVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFk
anVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVFZmw6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9S
ZW5kZXJUaGVtZUVmbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1Jpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTZWFyY2hGaWVs
ZEljb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpib3JkZXJSYWRpaUZyb21TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVGh1bWIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uUmVwZWF0SW50
ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGsuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGsyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFRvZ2dsZVNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lR3RrOjpjb21ib0JveEFycm93U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzZXRUb2dnbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpz
ZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnNldFJh
ZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRDb21ib0JveE1ldHJpY3MpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRp
bmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQ
YWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RT
bGlkZXJUaHVtYlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVz
dElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxp
c3Q6OmFkanVzdElubmVyU3R5bGUpOgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjptZW51U3R5
bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZXRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZXRlcjo6dXBkYXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1ldGVyOjpjb21wdXRlTG9naWNhbEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBhaW50
T3V0bGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjp1cGRhdGVBbmltYXRpb25TdGF0ZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjphZGp1c3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXND
b250cm9sU3R5bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzdXBwb3J0c0Zv
Y3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RSYWRpb1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjphZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1ldGVyU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6Om1ldGVyU2l6ZUZvckJvdW5kcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVz
c0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2hvdWxkSGF2ZVNwaW5CdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUcmFja1N0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNl
YXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
U3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnN1cHBvcnRzSG92ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6Om1pbmltdW1NZW51TGlzdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjpwb3B1cE1lbnVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpzZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnNldFJhZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2V0QnV0dG9u
U2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OmFkanVzdENoZWNrYm94U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlP
Uzo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSU9TOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6c2V0QnV0dG9uU2l6ZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmlzQ29u
dHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNp
emVGb3JGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzaXplRm9yRm9u
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvclN5c3RlbUZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFNpemVGcm9tRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9sU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpemVGb3JTeXN0ZW1G
b250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEFyZWFT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXplRm9yQm91bmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1ldGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpsZXZlbEluZGljYXRvckZvcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjptaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlvblJlcGVhdEludGVydmFs
Rm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cE1lbnVTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNo
RmllbGREZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVy
VGh1bWJTaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnN1cHBvcnRzSG92ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnN1cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6c2V0Q2hlY2tib3hTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVdpbjo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVdpbjo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVs
ZERlY29yYXRpb25QYXJ0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46
OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RNZXRlclN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjptZXRlclNpemVGb3JCb3VuZHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50TWV0ZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVXaW46OnBhaW50Q2hlY2tib3gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVXaW46OnBhaW50UmFkaW8pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVXaW46OnNldFJhZGlvU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVdpbjo6cGFpbnRUZXh0QXJlYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVdpbjo6cG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGREZWNv
cmF0aW9uUGFydCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6
YWRqdXN0QnV0dG9uU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVXaW46OmFkanVzdFRleHRGaWVsZFN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lV2luOjphZGp1c3RUZXh0QXJlYVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNl
ZCk6IERlbGV0ZWQuCisKIDIwMTQtMDYtMjQgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+CiAKICAgICAgICAgQ1NTIEpJVDogQWRkIHBvc2l0aW9uSW5Sb290RnJhZ21lbnRz
IHRvIFNlbGVjdG9yRnJhZ21lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzMiw4ICsxMzMyLDEwIEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmUKICAgICB9CiAKICAgICAvLyBMZXQgdGhlIHRoZW1l
IGFsc28gaGF2ZSBhIGNyYWNrIGF0IGFkanVzdGluZyB0aGUgc3R5bGUuCi0gICAgaWYgKHN0eWxl
Lmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5h
ZGp1c3RTdHlsZSgqdGhpcywgc3R5bGUsIGUsIG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlKCksIG1f
c3RhdGUuYm9yZGVyRGF0YSgpLCBtX3N0YXRlLmJhY2tncm91bmREYXRhKCksIG1fc3RhdGUuYmFj
a2dyb3VuZENvbG9yKCkpOworICAgIGlmIChzdHlsZS5oYXNBcHBlYXJhbmNlKCkpIHsKKyAgICAg
ICAgQVNTRVJUKGUpOworICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVz
dFN0eWxlKCp0aGlzLCBzdHlsZSwgKmUsIG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlKCksIG1fc3Rh
dGUuYm9yZGVyRGF0YSgpLCBtX3N0YXRlLmJhY2tncm91bmREYXRhKCksIG1fc3RhdGUuYmFja2dy
b3VuZENvbG9yKCkpOworICAgIH0KIAogICAgIC8vIElmIHdlIGhhdmUgZmlyc3QtbGV0dGVyIHBz
ZXVkbyBzdHlsZSwgZG8gbm90IHNoYXJlIHRoaXMgc3R5bGUuCiAgICAgaWYgKHN0eWxlLmhhc1Bz
ZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRG
aWVsZElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
RmllbGRJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw3ICsyMzIs
NyBAQCBib29sIFRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkSGF2ZVNwaW5CCiB7CiAgICAgRG9j
dW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudCgpLmRvY3VtZW50KCk7CiAgICAgUmVmUHRyPFJlbmRl
clRoZW1lPiB0aGVtZSA9IGRvY3VtZW50LnBhZ2UoKSA/ICZkb2N1bWVudC5wYWdlKCktPnRoZW1l
KCkgOiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCk7Ci0gICAgcmV0dXJuIHRoZW1lLT5zaG91
bGRIYXZlU3BpbkJ1dHRvbigmZWxlbWVudCgpKTsKKyAgICByZXR1cm4gdGhlbWUtPnNob3VsZEhh
dmVTcGluQnV0dG9uKGVsZW1lbnQoKSk7CiB9CiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpj
cmVhdGVTaGFkb3dTdWJ0cmVlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Ns
aWRlclRodW1iRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTQsOCArOTQsMTAgQEAgdm9pZCBSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFy
YW5jZQogICAgICAgICBzdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFWb2x1bWVTbGlkZXJUaHVt
YlBhcnQpOwogICAgIGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFG
dWxsU2NyZWVuVm9sdW1lU2xpZGVyUGFydCkKICAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNl
KE1lZGlhRnVsbFNjcmVlblZvbHVtZVNsaWRlclRodW1iUGFydCk7Ci0gICAgaWYgKHN0eWxlKCku
aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICB0aGVtZSgpLmFkanVzdFNsaWRlclRodW1iU2l6ZSgm
c3R5bGUoKSwgZWxlbWVudCgpKTsKKyAgICBpZiAoc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpIHsK
KyAgICAgICAgQVNTRVJUKGVsZW1lbnQoKSk7CisgICAgICAgIHRoZW1lKCkuYWRqdXN0U2xpZGVy
VGh1bWJTaXplKHN0eWxlKCksICplbGVtZW50KCkpOworICAgIH0KIH0KIAogYm9vbCBSZW5kZXJT
bGlkZXJUaHVtYjo6aXNTbGlkZXJUaHVtYigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNSwyNyArMTI1LDI3IEBAIHN0YXRpYyBib29sIHNldFNvdXJjZUdyb3VwRm9y
RWRqZU9iamVjdCgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlKiBzdHlsZSwgRm9ybVR5cGUgdHlwZSkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNpemVDb25zdHJhaW50cyhSZW5kZXJT
dHlsZSYgc3R5bGUsIEZvcm1UeXBlIHR5cGUpIGNvbnN0CiB7CiAgICAgbG9hZFRoZW1lSWZOZWVk
ZWQoKTsKIAogICAgIC8vIFRoZXNlIGFyZSBhbHdheXMgdmFsaWQsIGV2ZW4gaWYgbm8gdGhlbWUg
Y291bGQgYmUgbG9hZGVkLgogICAgIGNvbnN0IFRoZW1lUGFydERlc2MqIGRlc2MgPSBtX3BhcnRE
ZXNjcyArIChzaXplX3QpdHlwZTsKIAotICAgIGlmIChzdHlsZS0+bWluV2lkdGgoKS5pc0ludHJp
bnNpYygpKQotICAgICAgICBzdHlsZS0+c2V0TWluV2lkdGgoZGVzYy0+bWluLndpZHRoKCkpOwot
ICAgIGlmIChzdHlsZS0+bWluSGVpZ2h0KCkuaXNJbnRyaW5zaWMoKSkKLSAgICAgICAgc3R5bGUt
PnNldE1pbkhlaWdodChkZXNjLT5taW4uaGVpZ2h0KCkpOwotCi0gICAgaWYgKGRlc2MtPm1heC53
aWR0aCgpLnZhbHVlKCkgPiAwICYmIHN0eWxlLT5tYXhXaWR0aCgpLmlzSW50cmluc2ljT3JBdXRv
KCkpCi0gICAgICAgIHN0eWxlLT5zZXRNYXhXaWR0aChkZXNjLT5tYXgud2lkdGgoKSk7Ci0gICAg
aWYgKGRlc2MtPm1heC5oZWlnaHQoKS52YWx1ZSgpID4gMCAmJiBzdHlsZS0+bWF4SGVpZ2h0KCku
aXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldE1heEhlaWdodChkZXNjLT5t
YXguaGVpZ2h0KCkpOwotCi0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoZGVzYy0+cGFkZGluZy50
b3AoKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oZGVzYy0+cGFkZGluZy5ib3R0b20o
KSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KGRlc2MtPnBhZGRpbmcubGVmdCgpKTsKLSAg
ICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KGRlc2MtPnBhZGRpbmcucmlnaHQoKSk7CisgICAgaWYg
KHN0eWxlLm1pbldpZHRoKCkuaXNJbnRyaW5zaWMoKSkKKyAgICAgICAgc3R5bGUuc2V0TWluV2lk
dGgoZGVzYy0+bWluLndpZHRoKCkpOworICAgIGlmIChzdHlsZS5taW5IZWlnaHQoKS5pc0ludHJp
bnNpYygpKQorICAgICAgICBzdHlsZS5zZXRNaW5IZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsK
KworICAgIGlmIChkZXNjLT5tYXgud2lkdGgoKS52YWx1ZSgpID4gMCAmJiBzdHlsZS5tYXhXaWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldE1heFdpZHRoKGRlc2Mt
Pm1heC53aWR0aCgpKTsKKyAgICBpZiAoZGVzYy0+bWF4LmhlaWdodCgpLnZhbHVlKCkgPiAwICYm
IHN0eWxlLm1heEhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLnNl
dE1heEhlaWdodChkZXNjLT5tYXguaGVpZ2h0KCkpOworCisgICAgc3R5bGUuc2V0UGFkZGluZ1Rv
cChkZXNjLT5wYWRkaW5nLnRvcCgpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nQm90dG9tKGRlc2Mt
PnBhZGRpbmcuYm90dG9tKCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdMZWZ0KGRlc2MtPnBhZGRp
bmcubGVmdCgpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nUmlnaHQoZGVzYy0+cGFkZGluZy5yaWdo
dCgpKTsKIH0KIAogc3RhdGljIGJvb2wgaXNGb3JtRWxlbWVudFRvb0xhcmdlVG9EaXNwbGF5KGNv
bnN0IEludFNpemUmIGVsZW1lbnRTaXplKQpAQCAtMzQ2LDkgKzM0Niw5IEBAIHZvaWQgUmVuZGVy
VGhlbWVFZmw6OmFwcGx5RWRqZVJUTFN0YXRlKEUKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVFZmw6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJv
cmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xv
ciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZUVmbDo6aXNDb250cm9s
U3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVy
LCBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29s
b3IpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5
bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKSB8fCBzdHlsZS0+YXBwZWFy
YW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydDsKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6Omlz
Q29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3Ip
IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQ7CiB9CiAKIGJvb2wg
UmVuZGVyVGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0
LCBGb3JtVHlwZSB0eXBlLCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCkBAIC02MjcsOSArNjI3LDkgQEAgc3RhdGljIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9s
UGFydCBhcAogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUaGVtZUVmbDo6c3VwcG9ydHNGb2N1c1Jp
bmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZUVmbDo6
c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAg
IHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOworICAgIHJldHVybiBz
dXBwb3J0c0ZvY3VzKHN0eWxlLmFwcGVhcmFuY2UoKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVF
Zmw6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KSBjb25z
dApAQCAtNjk5LDI2ICs2OTksMjYgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTbGlkZXJU
cmFjayhjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRq
dXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNsaWRlclRyYWNrU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7
Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFk
b3cobnVsbHB0cik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNsaWRlclRodW1i
U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVy
VGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNs
aWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwotICAgIHN0eWxl
LT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIp
OwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVz
dFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewot
ICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOworICAgIENvbnRyb2xQ
YXJ0IHBhcnQgPSBzdHlsZS5hcHBlYXJhbmNlKCk7CiAgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1
bWJWZXJ0aWNhbFBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJU
aHVtYkhlaWdodCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xp
ZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNs
aWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3Ro
KHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7CiAgICAgfSBlbHNlIGlmIChwYXJ0ID09IFNsaWRl
clRodW1iSG9yaXpvbnRhbFBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChz
bGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0
aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVu
Z3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChM
ZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CiAgICAgfQogfQogCkBAIC03NjYsNyAr
NzY2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTbGlkZXJUaHVtYihjbwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0Q2hlY2tib3hTdHls
ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RDaGVja2JveFN0
eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxl
bWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYmIGVs
ZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRo
ZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdENoZWNr
Ym94U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwpAQCAtNzc1LDEzICs3NzUs
MTMgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0Q2hlY2tib3hTdHlsZQogCiAgICAgYWRq
dXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBDaGVja0JveCk7CiAKLSAgICBzdHlsZS0+cmVzZXRC
b3JkZXIoKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOwogCiAgICAgY29uc3QgVGhlbWVQYXJ0
RGVzYyogZGVzYyA9IG1fcGFydERlc2NzICsgKHNpemVfdClDaGVja0JveDsKLSAgICBpZiAoc3R5
bGUtPndpZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1pbi53aWR0aCgpLnZhbHVlKCkpCi0gICAgICAg
IHN0eWxlLT5zZXRXaWR0aChkZXNjLT5taW4ud2lkdGgoKSk7Ci0gICAgaWYgKHN0eWxlLT5oZWln
aHQoKS52YWx1ZSgpIDwgZGVzYy0+bWluLmhlaWdodCgpLnZhbHVlKCkpCi0gICAgICAgIHN0eWxl
LT5zZXRIZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKKyAgICBpZiAoc3R5bGUud2lkdGgoKS52
YWx1ZSgpIDwgZGVzYy0+bWluLndpZHRoKCkudmFsdWUoKSkKKyAgICAgICAgc3R5bGUuc2V0V2lk
dGgoZGVzYy0+bWluLndpZHRoKCkpOworICAgIGlmIChzdHlsZS5oZWlnaHQoKS52YWx1ZSgpIDwg
ZGVzYy0+bWluLmhlaWdodCgpLnZhbHVlKCkpCisgICAgICAgIHN0eWxlLnNldEhlaWdodChkZXNj
LT5taW4uaGVpZ2h0KCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludENoZWNrYm94
KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCkBAIC03ODksNyArNzg5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6
cGFpbnRDaGVja2JveChjb25zdAogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIENo
ZWNrQm94LCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UmFk
aW9TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RSYWRp
b1N0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwg
RWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYm
IGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRl
clRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdFJh
ZGlvU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwpAQCAtNzk4LDEzICs3OTgs
MTMgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UmFkaW9TdHlsZShTdAogCiAgICAgYWRq
dXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBSYWRpb0J1dHRvbik7CiAKLSAgICBzdHlsZS0+cmVz
ZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOwogCiAgICAgY29uc3QgVGhlbWVQ
YXJ0RGVzYyogZGVzYyA9IG1fcGFydERlc2NzICsgKHNpemVfdClSYWRpb0J1dHRvbjsKLSAgICBp
ZiAoc3R5bGUtPndpZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1pbi53aWR0aCgpLnZhbHVlKCkpCi0g
ICAgICAgIHN0eWxlLT5zZXRXaWR0aChkZXNjLT5taW4ud2lkdGgoKSk7Ci0gICAgaWYgKHN0eWxl
LT5oZWlnaHQoKS52YWx1ZSgpIDwgZGVzYy0+bWluLmhlaWdodCgpLnZhbHVlKCkpCi0gICAgICAg
IHN0eWxlLT5zZXRIZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKKyAgICBpZiAoc3R5bGUud2lk
dGgoKS52YWx1ZSgpIDwgZGVzYy0+bWluLndpZHRoKCkudmFsdWUoKSkKKyAgICAgICAgc3R5bGUu
c2V0V2lkdGgoZGVzYy0+bWluLndpZHRoKCkpOworICAgIGlmIChzdHlsZS5oZWlnaHQoKS52YWx1
ZSgpIDwgZGVzYy0+bWluLmhlaWdodCgpLnZhbHVlKCkpCisgICAgICAgIHN0eWxlLnNldEhlaWdo
dChkZXNjLT5taW4uaGVpZ2h0KCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFJh
ZGlvKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCkBAIC04MTIsNyArODEyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVm
bDo6cGFpbnRSYWRpbyhjb25zdCBSZQogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3Qs
IFJhZGlvQnV0dG9uLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRq
dXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRq
dXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGlmICghbV9wYWdlICYmIGVs
ZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpIHsKICAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSku
YWRqdXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwpAQCAtODIw
LDcgKzgyMCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdEJ1dHRvblN0eWxlKFMKICAg
ICB9CiAKICAgICAvLyBhZGp1c3RTaXplQ29uc3RyYWlucyBjYW4gbWFrZSBTcXVhcmVCdXR0b25Q
YXJ0J3Mgc2l6ZSB3cm9uZyAoYnkgYWRqdXN0aW5nIHBhZGRpbmdzKSwgc28gY2FsbCBpdCBvbmx5
IGZvciBQdXNoQnV0dG9uUGFydCBhbmQgQnV0dG9uUGFydAotICAgIGlmIChzdHlsZS0+YXBwZWFy
YW5jZSgpID09IFB1c2hCdXR0b25QYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gQnV0dG9u
UGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0IHx8IHN0
eWxlLmFwcGVhcmFuY2UoKSA9PSBCdXR0b25QYXJ0KQogICAgICAgICBhZGp1c3RTaXplQ29uc3Ry
YWludHMoc3R5bGUsIEJ1dHRvbik7CiB9CiAKQEAgLTgyOSwxNyArODI5LDE3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVFZmw6OnBhaW50QnV0dG9uKGNvbnN0IFIKICAgICByZXR1cm4gcGFpbnRUaGVtZVBh
cnQob2JqZWN0LCBCdXR0b24sIGluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZs
OjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVF
Zmw6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGlmICghbV9w
YWdlICYmIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpIHsKICAgICAgICAg
c3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+
dGhlbWUoKSkuYWRqdXN0TWVudUxpc3RTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVu
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0
eWxlLCBDb21ib0JveCk7Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5bGUtPnNl
dFdoaXRlU3BhY2UoUFJFKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnNl
dFdoaXRlU3BhY2UoUFJFKTsKIAotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxl
Ojppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0
eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFp
bnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC04NjgsMTQgKzg2OCwxNCBAQCBib29sIFJl
bmRlclRoZW1lRWZsOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgcmV0dXJuIHBhaW50TWVudUxp
c3Qob2JqZWN0LCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0
VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRq
dXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGlmICghbV9wYWdlICYm
IGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpIHsKICAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUo
KSkuYWRqdXN0VGV4dEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwg
VGV4dEZpZWxkKTsKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5yZXNldEJv
cmRlcigpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRleHRGaWVsZChjb25zdCBS
ZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCkBAIC04ODMsNyArODgzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRU
ZXh0RmllbGQoY29ucwogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFRleHRGaWVs
ZCwgaW5mbywgSW50UmVjdChyZWN0KSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVz
dFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCkBAIC04OTIsMjEgKzg5
MiwyMSBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRleHRBcmVhKGNvbnN0CiAgICAgcmV0
dXJuIHBhaW50VGV4dEZpZWxkKG9iamVjdCwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwg
RWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYm
IGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRl
clRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5
bGUsIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbik7Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7
Ci0gICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigp
OworICAgIHN0eWxlLnNldFdoaXRlU3BhY2UoUFJFKTsKIAotICAgIGZsb2F0IGZvbnRTY2FsZSA9
IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdEZvbnRTaXplOworICAgIGZsb2F0IGZvbnRTY2Fs
ZSA9IHN0eWxlLmZvbnRTaXplKCkgLyBkZWZhdWx0Rm9udFNpemU7CiAgICAgaW50IGRlY29yYXRp
b25TaXplID0gbHJvdW5kZihzdGQ6Om1pbihzdGQ6Om1heChtaW5TZWFyY2hEZWNvcmF0aW9uQnV0
dG9uU2l6ZSwgZGVmYXVsdEZvbnRTaXplICogZm9udFNjYWxlKSwgbWF4U2VhcmNoRGVjb3JhdGlv
bkJ1dHRvblNpemUpKTsKIAotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoZGVjb3JhdGlvblNp
emUgKyBzZWFyY2hGaWVsZERlY29yYXRpb25CdXR0b25PZmZzZXQsIEZpeGVkKSk7Ci0gICAgc3R5
bGUtPnNldEhlaWdodChMZW5ndGgoZGVjb3JhdGlvblNpemUsIEZpeGVkKSk7CisgICAgc3R5bGUu
c2V0V2lkdGgoTGVuZ3RoKGRlY29yYXRpb25TaXplICsgc2VhcmNoRmllbGREZWNvcmF0aW9uQnV0
dG9uT2Zmc2V0LCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoZGVjb3JhdGlv
blNpemUsIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmll
bGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC05MTQsMjEgKzkxNCwyMSBAQCBib29s
IFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIHBhaW50VGhl
bWVQYXJ0KG9iamVjdCwgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uLCBpbmZvLCByZWN0KTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgp
KSB7CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1l
bnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25Q
YXJ0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgU2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvbik7Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5bGUtPnNl
dFdoaXRlU3BhY2UoUFJFKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnNl
dFdoaXRlU3BhY2UoUFJFKTsKIAotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6
ZSgpIC8gZGVmYXVsdEZvbnRTaXplOworICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLmZvbnRT
aXplKCkgLyBkZWZhdWx0Rm9udFNpemU7CiAgICAgaW50IGRlY29yYXRpb25TaXplID0gbHJvdW5k
ZihzdGQ6Om1pbihzdGQ6Om1heChtaW5TZWFyY2hEZWNvcmF0aW9uQnV0dG9uU2l6ZSwgZGVmYXVs
dEZvbnRTaXplICogZm9udFNjYWxlKSwgbWF4U2VhcmNoRGVjb3JhdGlvbkJ1dHRvblNpemUpKTsK
IAotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoZGVjb3JhdGlvblNpemUgKyBzZWFyY2hGaWVs
ZERlY29yYXRpb25CdXR0b25PZmZzZXQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChM
ZW5ndGgoZGVjb3JhdGlvblNpemUsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3Ro
KGRlY29yYXRpb25TaXplICsgc2VhcmNoRmllbGREZWNvcmF0aW9uQnV0dG9uT2Zmc2V0LCBGaXhl
ZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoZGVjb3JhdGlvblNpemUsIEZpeGVkKSk7
CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTkzNiwyMyArOTM2LDIzIEBAIGJvb2wgUmVuZGVy
VGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRSZXMKICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQo
b2JqZWN0LCBTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uLCBpbmZvLCByZWN0KTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
JiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAoIW1fcGFnZSAmJiBl
bGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7CiAgICAgICAgIHN0YXRpY19j
YXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkp
LmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUs
IGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFkanVzdFNpemVDb25zdHJh
aW50cyhzdHlsZSwgU2VhcmNoRmllbGRDYW5jZWxCdXR0b24pOwotICAgIHN0eWxlLT5yZXNldEJv
cmRlcigpOwotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUucmVzZXRC
b3JkZXIoKTsKKyAgICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKICAgICAvLyBMb2dpYyB0
YWtlbiBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW0uY3BwLgogICAgIC8vIFNjYWxlIHRoZSBidXR0
b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplLgotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0
eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdEZvbnRTaXplOworICAgIGZsb2F0IGZvbnRTY2FsZSA9
IHN0eWxlLmZvbnRTaXplKCkgLyBkZWZhdWx0Rm9udFNpemU7CiAgICAgaW50IGNhbmNlbEJ1dHRv
blNpemUgPSBscm91bmRmKHN0ZDo6bWluKHN0ZDo6bWF4KG1pbkNhbmNlbEJ1dHRvblNpemUsIGRl
ZmF1bHRGb250U2l6ZSAqIGZvbnRTY2FsZSksIG1heENhbmNlbEJ1dHRvblNpemUpKTsKIAotICAg
IHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOworICAgIHN0
eWxlLnNldFdpZHRoKExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOworICAgIHN0eWxl
LnNldEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKIH0KIAogYm9vbCBS
ZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJP
YmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQpAQCAtOTYwLDE1ICs5NjAsMTUgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hG
aWVsZENhbgogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0
U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRl
clN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAoIW1fcGFn
ZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7CiAgICAgICAgIHN0
YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPnRo
ZW1lKCkpLmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1l
bnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhz
dHlsZSwgU2VhcmNoRmllbGQpOwotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0eWxl
LT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKKyAgICBzdHls
ZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2Vh
cmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTk3Niw3ICs5NzYsNyBAQCBib29sIFJlbmRlclRo
ZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkKGNvCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9i
amVjdCwgU2VhcmNoRmllbGQsIGluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZs
OjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lRWZsOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2Uo
KSkgewogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3Vt
ZW50KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShzdHlsZVJl
c29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CkBAIC0xMDA4LDkgKzEwMDgsOSBAQCB2b2lkIFJlbmRl
clRoZW1lRWZsOjpzeXN0ZW1Gb250KENTU1ZhbHVlCiB9CiAKICNpZiBFTkFCTEUoUFJPR1JFU1Nf
RUxFTUVOVCkKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lRWZsOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFk
b3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBkb3Vi
bGUgUmVuZGVyVGhlbWVFZmw6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIo
UmVuZGVyUHJvZ3Jlc3MqKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZs
L1JlbmRlclRoZW1lRWZsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL1JlbmRlclRoZW1lRWZsLmgJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMyAr
NjgsMTMgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVh
dGUoUGFnZSopOwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRy
b2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KLSAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBS
ZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIC8vIEEg
bWV0aG9kIFJldHVybmluZyB3aGV0aGVyIHRoZSBjb250cm9sIGlzIHN0eWxlZCBieSBjc3Mgb3Ig
bm90IGUuZyBzcGVjaWZ5aW5nIGJhY2tncm91bmQtY29sb3IuCi0gICAgdmlydHVhbCBib29sIGlz
Q29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25z
dCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwg
Y29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3Jv
dW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRo
ZSB0aGVtZSBpcyBhYmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCi0gICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJikgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hh
bmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KICAgICB2aXJ0
dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Qg
b3ZlcnJpZGU7CkBAIC0xMDQsNTAgKzEwNCw1MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFbnRy
eVRleHRDb2xvcihpbnQgZm9yZVIsIGludCBmb3JlRywgaW50IGZvcmVCLCBpbnQgZm9yZUEsIGlu
dCBiYWNrUiwgaW50IGJhY2tHLCBpbnQgYmFja0IsIGludCBiYWNrQSk7CiAgICAgdm9pZCBzZXRT
ZWFyY2hUZXh0Q29sb3IoaW50IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVB
LCBpbnQgYmFja1IsIGludCBiYWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpOwogCi0gICAgdm9p
ZCBhZGp1c3RTaXplQ29uc3RyYWludHMoUmVuZGVyU3R5bGUqLCBGb3JtVHlwZSkgY29uc3Q7Cisg
ICAgdm9pZCBhZGp1c3RTaXplQ29uc3RyYWludHMoUmVuZGVyU3R5bGUmLCBGb3JtVHlwZSkgY29u
c3Q7CiAKICAgICAvLyBTeXN0ZW0gZm9udHMuCiAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQo
Q1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNr
Ym94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9T
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2
b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJl
YVN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVu
dUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29s
IHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRl
OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1l
bnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVz
dFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAg
ICAgdmlydHVhbCBJbnRTaXplIHNsaWRlclRpY2tTaXplKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0x
NTksMTMgKzE1OSwxMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJU
aHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHN0YXRpYyB2b2lkIHNl
dERlZmF1bHRGb250U2l6ZShpbnQgZm9udHNpemUpOwogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VM
RU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9n
cmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2
YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jl
c3MqKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0azIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQyLDE4ICsxNDIsMTggQEAgc3RhdGljIEd0a1N0YXRlVHlwZSBnZXRHdGtTdGF0ZVR5cGUoUmVu
ZAogICAgIHJldHVybiBHVEtfU1RBVEVfTk9STUFMOwogfQogCi1zdGF0aWMgdm9pZCBzZXRUb2dn
bGVTaXplKGNvbnN0IFJlbmRlclRoZW1lR3RrKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBHdGtXaWRn
ZXQqIHdpZGdldCkKK3N0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoY29uc3QgUmVuZGVyVGhlbWVH
dGsqLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEd0a1dpZGdldCogd2lkZ2V0KQogewogICAgIC8vIFRo
ZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgc28gd2Ugc2hvdWxkbid0IGNo
YW5nZSB0aGVtLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAm
JiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0lu
dHJpbnNpY09yQXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgZ2ludCBpbmRpY2F0b3JTaXplOwogICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0
KHdpZGdldCwgImluZGljYXRvci1zaXplIiwgJmluZGljYXRvclNpemUsIE5VTEwpOwotICAgIGlm
IChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0
V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7Ci0gICAgaWYgKHN0eWxlLT5oZWln
aHQoKS5pc0F1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaW5kaWNhdG9y
U2l6ZSwgRml4ZWQpKTsKKyAgICBpZiAoc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygp
KQorICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsK
KyAgICBpZiAoc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldEhlaWdo
dChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKIH0KIAogc3RhdGljIHZvaWQgcGFpbnRU
b2dnbGUoUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9i
amVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRn
ZXQqIHdpZGdldCkKQEAgLTE5NCw3ICsxOTQsNyBAQCBzdGF0aWMgdm9pZCBwYWludFRvZ2dsZShS
ZW5kZXJUaGVtZUd0ayogCiAgICAgfQogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRDaGVj
a2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6
c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBzZXRUb2dn
bGVTaXplKHRoaXMsIHN0eWxlLCBndGtDaGVja0J1dHRvbigpKTsKIH0KQEAgLTIwNSw3ICsyMDUs
NyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludENoZWNrYm94KGNvbnN0CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRl
clN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBzZXRUb2dnbGVTaXplKHRoaXMsIHN0eWxlLCBn
dGtSYWRpb0J1dHRvbigpKTsKIH0KQEAgLTI4OSwxMSArMjg5LDExIEBAIGludCBSZW5kZXJUaGVt
ZUd0azo6Z2V0Q29tYm9Cb3hTZXBhcmF0b3IKICAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfc3R5
bGUoc2VwYXJhdG9yKS0+eHRoaWNrbmVzczsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpjb21i
b0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVH
dGs6OmNvbWJvQm94QXJyb3dTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICAv
LyBUYWtpbmcgdGhlIGZvbnQgc2l6ZSBhbmQgcmV2ZXJzaW5nIHRoZSBEUEkgY29udmVyc2lvbiBz
ZWVtcyB0byBtYXRjaAogICAgIC8vIEdUSysgcmVuZGVyaW5nIGFzIGNsb3NlbHkgYXMgcG9zc2li
bGUuCi0gICAgcmV0dXJuIHN0eWxlLT5mb250KCkuc2l6ZSgpICogKDcyLjAgLyBSZW5kZXJUaGVt
ZUd0azo6Z2V0U2NyZWVuRFBJKCkpOworICAgIHJldHVybiBzdHlsZS5mb250KCkuc2l6ZSgpICog
KDcyLjAgLyBSZW5kZXJUaGVtZUd0azo6Z2V0U2NyZWVuRFBJKCkpOwogfQogCiBzdGF0aWMgdm9p
ZCBnZXRCdXR0b25Jbm5lckJvcmRlcihHdGtXaWRnZXQqIGJ1dHRvbiwgaW50JiBsZWZ0LCBpbnQm
IHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20pCkBAIC0zMTYsMTEgKzMxNiwxMSBAQCBzdGF0
aWMgdm9pZCBnZXRCdXR0b25Jbm5lckJvcmRlcihHdGtXaWRnCiB9CiAKIAotdm9pZCBSZW5kZXJU
aGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSwgaW50JiBsZWZ0
LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20pIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lR3RrOjpnZXRDb21ib0JveFBhZGRpbmcoUmVuZGVyU3R5bGUmIHN0eWxlLCBpbnQmIGxlZnQs
IGludCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkgY29uc3QKIHsKICAgICAvLyBJZiB0
aGlzIG1lbnUgbGlzdCBidXR0b24gaXNuJ3QgZHJhd24gdXNpbmcgdGhlIG5hdGl2ZSB0aGVtZSwg
d2UKICAgICAvLyBkb24ndCBhZGQgYW55IGV4dHJhIHBhZGRpbmcgYmV5b25kIHdoYXQgV2ViQ29y
ZSBhbHJlYWR5IHVzZXMuCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTm9Db250cm9s
UGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEEgY29tYm8gYm94IGJ1dHRvbiBpcyBhIGJ1dHRvbiB3aXRo
IHdpZGdldHMgcGFja2VkIGludG8gaXQuCkBAIC0zMzIsMzQgKzMzMiwzNCBAQCB2b2lkIFJlbmRl
clRoZW1lR3RrOjpnZXRDb21ib0JveFBhZGRpbmcoCiAgICAgaW50IGFycm93QW5kU2VwZXJhdG9y
TGVuZ3RoID0gY29tYm9Cb3hBcnJvd1NpemUoc3R5bGUpICsKICAgICAgICAgZ2V0Q29tYm9Cb3hT
ZXBhcmF0b3JXaWR0aCgpICsgKDMgKiBidXR0b25XaWRnZXRTdHlsZS0+eHRoaWNrbmVzcyk7CiAK
LSAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFJUTCkKKyAgICBpZiAoc3R5bGUuZGlyZWN0
aW9uKCkgPT0gUlRMKQogICAgICAgICBsZWZ0ICs9IGFycm93QW5kU2VwZXJhdG9yTGVuZ3RoOwog
ICAgIGVsc2UKICAgICAgICAgcmlnaHQgKz0gYXJyb3dBbmRTZXBlcmF0b3JMZW5ndGg7CiB9CiAK
LWludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdM
ZWZ0KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IDAsIHRvcCA9
IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKICAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5bGUs
IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgcmV0dXJuIGxlZnQ7CiB9CiAKLWludCBS
ZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQo
UmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwg
cmlnaHQgPSAwLCBib3R0b20gPSAwOwogICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICByZXR1cm4gcmlnaHQ7CiB9CiAKLWludCBSZW5k
ZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAoraW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJT
dHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9
IDAsIGJvdHRvbSA9IDA7CiAgICAgZ2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3As
IHJpZ2h0LCBib3R0b20pOwogICAgIHJldHVybiB0b3A7CiB9CiAKLWludCBSZW5kZXJUaGVtZUd0
azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAor
aW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHls
ZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAs
IGJvdHRvbSA9IDA7CiAgICAgZ2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b20pOwpAQCAtMzgxLDEyICszODEsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRNZW51TGlzdChjb25zdAogCiAgICAgaW50IGxlZnRCb3JkZXIgPSAwLCByaWdodEJvcmRl
ciA9IDAsIGJvdHRvbUJvcmRlciA9IDAsIHRvcEJvcmRlciA9IDA7CiAgICAgZ2V0QnV0dG9uSW5u
ZXJCb3JkZXIoZ3RrQ29tYm9Cb3hCdXR0b24oKSwgbGVmdEJvcmRlciwgdG9wQm9yZGVyLCByaWdo
dEJvcmRlciwgYm90dG9tQm9yZGVyKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmb2JqZWN0
LnN0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gb2JqZWN0LnN0eWxlKCk7CiAgICAg
aW50IGFycm93U2l6ZSA9IGNvbWJvQm94QXJyb3dTaXplKHN0eWxlKTsKICAgICBHdGtTdHlsZSog
YnV0dG9uU3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShndGtDb21ib0JveEJ1dHRvbigpKTsK
IAogICAgIEludFJlY3QgYXJyb3dSZWN0KDAsIChyZWN0LmhlaWdodCgpIC0gYXJyb3dTaXplKSAv
IDIsIGFycm93U2l6ZSwgYXJyb3dTaXplKTsKLSAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09
IFJUTCkKKyAgICBpZiAoc3R5bGUuZGlyZWN0aW9uKCkgPT0gUlRMKQogICAgICAgICBhcnJvd1Jl
Y3Quc2V0WChsZWZ0Qm9yZGVyICsgYnV0dG9uU3R5bGUtPnh0aGlja25lc3MpOwogICAgIGVsc2UK
ICAgICAgICAgYXJyb3dSZWN0LnNldFgocmVjdC53aWR0aCgpIC0gcmlnaHRCb3JkZXIgLSBidXR0
b25TdHlsZS0+eHRoaWNrbmVzcyAtIGFycm93U2l6ZSk7CkBAIC00MTAsNyArNDEwLDcgQEAgYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChjb25zdAogICAgIGJvdHRvbUJvcmRlciAr
PSBmb2N1c1BhZGRpbmcgKyBmb2N1c1dpZHRoOwogICAgIGludCBzZXBhcmF0b3JXaWR0aCA9IGdl
dENvbWJvQm94U2VwYXJhdG9yV2lkdGgoKTsKICAgICBJbnRSZWN0IHNlcGFyYXRvclJlY3QoMCwg
dG9wQm9yZGVyLCBzZXBhcmF0b3JXaWR0aCwgcmVjdC5oZWlnaHQoKSAtIHRvcEJvcmRlciAtIGJv
dHRvbUJvcmRlcik7Ci0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgaWYg
KHN0eWxlLmRpcmVjdGlvbigpID09IFJUTCkKICAgICAgICAgc2VwYXJhdG9yUmVjdC5zZXRYKGFy
cm93UmVjdC54KCkgKyBhcnJvd1JlY3Qud2lkdGgoKSArIGJ1dHRvblN0eWxlLT54dGhpY2tuZXNz
ICsgc2VwYXJhdG9yV2lkdGgpOwogICAgIGVsc2UKICAgICAgICAgc2VwYXJhdG9yUmVjdC5zZXRY
KGFycm93UmVjdC54KCkgLSBidXR0b25TdHlsZS0+eHRoaWNrbmVzcyAtIHNlcGFyYXRvcldpZHRo
KTsKQEAgLTUyOCw5ICs1MjgsOSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRo
dW1iKGNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1
c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5
bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBw
ZWFyYW5jZSgpOworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS5hcHBlYXJhbmNlKCk7CiAg
ICAgaWYgKHBhcnQgIT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBwYXJ0ICE9IFNsaWRl
clRodW1iVmVydGljYWxQYXJ0KQogICAgICAgICByZXR1cm47CiAKQEAgLTU0MiwxMyArNTQyLDEz
IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2kKICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMKTsKIAogICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpv
bnRhbFBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChsZW5ndGgsIEZpeGVk
KSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAg
ICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOworICAgICAgICBzdHls
ZS5zZXRIZWlnaHQoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0g
TWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgo
d2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgobGVuZ3RoLCBGaXhl
ZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHls
ZS5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKIH0KIAogI2lmIEVOQUJMRShQUk9H
UkVTU19FTEVNRU5UKQpAQCAtNTc0LDcgKzU3NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50UHJvZ3Jlc3NCYXIoY28KIH0KICNlbmRpZgogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1
c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBj
b25zdAogewogICAgIEd0a1N0eWxlKiBndGtTdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKGd0
a1NwaW5CdXR0b24oKSk7CiAgICAgY29uc3QgUGFuZ29Gb250RGVzY3JpcHRpb24qIGZvbnREZXNj
cmlwdGlvbiA9IGd0a1N0eWxlLT5mb250X2Rlc2M7CkBAIC01ODUsOCArNTg1LDggQEAgdm9pZCBS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dAogICAgIGludCB3aWR0aCA9IHN0ZDo6
bWF4KFBBTkdPX1BJWEVMUyhmb250U2l6ZSksIG1pblNwaW5CdXR0b25BcnJvd1NpemUpOwogICAg
IHdpZHRoICs9IC0oKHdpZHRoICUgMikgLSAxKSArIGd0a1N0eWxlLT54dGhpY2tuZXNzOwogCi0g
ICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0
aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgsIEZp
eGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50SW5uZXJTcGluQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZW5kZXJUaGVtZUd0azMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAxLDEwICsyMDEsMTAgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UmVwYWludFJl
Y3QoYwogICAgIGFkanVzdFJlY3RGb3JGb2N1cyhjb250ZXh0LCByZWN0KTsKIH0KIAotc3RhdGlj
IHZvaWQgc2V0VG9nZ2xlU2l6ZShHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJlbmRlclN0eWxl
KiBzdHlsZSkKK3N0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoR3RrU3R5bGVDb250ZXh0KiBjb250
ZXh0LCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQg
YXJlIGJvdGggc3BlY2lmaWVkLCBzbyB3ZSBzaG91bGRuJ3QgY2hhbmdlIHRoZW0uCi0gICAgaWYg
KCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCku
aXNBdXRvKCkpCisgICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYg
IXN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBPdGhl
ciBwb3J0cyBoYXJkLWNvZGUgdGhpcyB0byAxMyB3aGljaCBpcyBhbHNvIHRoZSBkZWZhdWx0IHZh
bHVlIGRlZmluZWQgYnkgR1RLKy4KQEAgLTIxMywxMSArMjEzLDExIEBAIHN0YXRpYyB2b2lkIHNl
dFRvZ2dsZVNpemUoR3RrU3R5bGVDb250ZXgKICAgICBnaW50IGluZGljYXRvclNpemU7CiAgICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0b3Itc2l6ZSIsICZp
bmRpY2F0b3JTaXplLCBOVUxMKTsKIAotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNp
Y09yQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUs
IEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAg
ICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7CiAKLSAg
ICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0
KExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS5oZWlnaHQoKS5p
c0F1dG8oKSkKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChpbmRpY2F0b3JTaXplLCBG
aXhlZCkpOwogfQogCiBzdGF0aWMgdm9pZCBwYWludFRvZ2dsZShjb25zdCBSZW5kZXJUaGVtZUd0
ayogdGhlbWUsIEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2Jq
ZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgZnVsbFJlY3Qp
CkBAIC0yNzUsNyArMjc1LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVuZGVy
VGhlbQogICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Cit2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUmIHN0eWxl
KSBjb25zdAogewogICAgIHNldFRvZ2dsZVNpemUoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NI
RUNLX0JVVFRPTiksIHN0eWxlKTsKIH0KQEAgLTI4Niw3ICsyODYsNyBAQCBib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludENoZWNrYm94KGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29u
c3QKIHsKICAgICBzZXRUb2dnbGVTaXplKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9SQURJT19C
VVRUT04pLCBzdHlsZSk7CiB9CkBAIC0zNzgsMTggKzM3OCwxOCBAQCBib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludEJ1dHRvbihjb25zdCBSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMg
dm9pZCBnZXRDb21ib0JveE1ldHJpY3MoUmVuZGVyU3R5bGUqIHN0eWxlLCBHdGtCb3JkZXImIGJv
cmRlciwgaW50JiBmb2N1cywgaW50JiBzZXBhcmF0b3IpCitzdGF0aWMgdm9pZCBnZXRDb21ib0Jv
eE1ldHJpY3MoUmVuZGVyU3R5bGUmIHN0eWxlLCBHdGtCb3JkZXImIGJvcmRlciwgaW50JiBmb2N1
cywgaW50JiBzZXBhcmF0b3IpCiB7CiAgICAgLy8gSWYgdGhpcyBtZW51IGxpc3QgYnV0dG9uIGlz
bid0IGRyYXduIHVzaW5nIHRoZSBuYXRpdmUgdGhlbWUsIHdlCiAgICAgLy8gZG9uJ3QgYWRkIGFu
eSBleHRyYSBwYWRkaW5nIGJleW9uZCB3aGF0IFdlYkNvcmUgYWxyZWFkeSB1c2VzLgotICAgIGlm
IChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQpCisgICAgaWYgKHN0eWxlLmFw
cGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQogICAgICAgICByZXR1cm47CiAKICAgICBHdGtT
dHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09NQk9fQk9Y
KTsKICAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwogCiAgICAgZ3RrX3N0eWxl
X2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3Rr
VGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS0+ZGlyZWN0aW9uKCkpKSk7Cisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxH
dGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLmRpcmVjdGlvbigpKSkpOwog
CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihjb250ZXh0LCBzdGF0aWNfY2FzdDxH
dGtTdGF0ZUZsYWdzPigwKSwgJmJvcmRlcik7CiAKQEAgLTQwNiw3ICs0MDYsNyBAQCBzdGF0aWMg
dm9pZCBnZXRDb21ib0JveE1ldHJpY3MoUmVuZGVyU3R5CiAgICAgY29udGV4dCA9IGdldFN0eWxl
Q29udGV4dChHVEtfVFlQRV9TRVBBUkFUT1IpOwogICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUo
Y29udGV4dCk7CiAKLSAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0
PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUtPmRpcmVjdGlvbigpKSk7
CisgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxHdGtUZXh0RGly
ZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLmRpcmVjdGlvbigpKSk7CiAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBkaXJlY3Rpb24pOwogICAgIGd0a19z
dHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCAic2VwYXJhdG9yIik7CiAKQEAgLTQyNiwy
OSArNDI2LDI5IEBAIHN0YXRpYyB2b2lkIGdldENvbWJvQm94TWV0cmljcyhSZW5kZXJTdHkKICAg
ICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwogfQogCi1pbnQgUmVuZGVyVGhl
bWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
CitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHls
ZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAw
LCAwIH07CiAgICAgaW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7CiAgICAg
Z2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJh
dG9yV2lkdGgpOwogICAgIGludCBsZWZ0ID0gYm9yZGVyV2lkdGgubGVmdCArIGZvY3VzV2lkdGg7
Ci0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgaWYgKHN0eWxlLmRpcmVj
dGlvbigpID09IFJUTCkKICAgICAgICAgbGVmdCArPSBzZXBhcmF0b3JXaWR0aCArIG1pbkFycm93
U2l6ZTsKICAgICByZXR1cm4gbGVmdDsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cElu
dGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJU
aGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSYgc3R5bGUpIGNv
bnN0CiB7CiAgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07CiAgICAg
aW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7CiAgICAgZ2V0Q29tYm9Cb3hN
ZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOwog
ICAgIGludCByaWdodCA9IGJvcmRlcldpZHRoLnJpZ2h0ICsgZm9jdXNXaWR0aDsKLSAgICBpZiAo
c3R5bGUtPmRpcmVjdGlvbigpID09IExUUikKKyAgICBpZiAoc3R5bGUuZGlyZWN0aW9uKCkgPT0g
TFRSKQogICAgICAgICByaWdodCArPSBzZXBhcmF0b3JXaWR0aCArIG1pbkFycm93U2l6ZTsKICAg
ICByZXR1cm4gcmlnaHQ7CiB9CiAKLWludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdUb3AoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lR3RrOjpw
b3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAg
R3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07CiAgICAgaW50IGZvY3VzV2lk
dGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7CkBAIC00NTYsNyArNDU2LDcgQEAgaW50IFJlbmRl
clRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZwogICAgIHJldHVybiBib3JkZXJXaWR0aC50
b3AgKyBmb2N1c1dpZHRoOwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQ
YWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0
azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAog
ewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OwogICAgIGludCBm
b2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwpAQCAtNzEwLDkgKzcxMCw5IEBAIGJv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVGh1bWIoY28KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0g
ICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBh
cnQgcGFydCA9IHN0eWxlLmFwcGVhcmFuY2UoKTsKICAgICBpZiAocGFydCAhPSBTbGlkZXJUaHVt
Ykhvcml6b250YWxQYXJ0ICYmIHBhcnQgIT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtNzIyLDEzICs3MjIsMTMgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6
YWRqdXN0U2xpZGVyVGh1bWJTaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xp
ZGVyLWxlbmd0aCIsICZzbGlkZXJMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOwogICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpIHsK
LSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJMZW5ndGgsIEZpeGVkKSk7Ci0g
ICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkpOworICAg
ICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBGaXhlZCkpOworICAgICAg
ICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0
IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwotICAgIHN0eWxlLT5zZXRX
aWR0aChMZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChM
ZW5ndGgoc2xpZGVyTGVuZ3RoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChz
bGlkZXJXaWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlckxl
bmd0aCwgRml4ZWQpKTsKIH0KIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQpAQCAtNzc3
LDcgKzc3Nyw3IEBAIHN0YXRpYyBnaW50IHNwaW5CdXR0b25BcnJvd1NpemUoR3RrU3R5bGUKICAg
ICByZXR1cm4gYXJyb3dTaXplIC0gYXJyb3dTaXplICUgMjsgLy8gRm9yY2UgZXZlbi4KIH0KIAot
dm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBHdGtTdHlsZUNvbnRleHQqIGNv
bnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU1BJTl9CVVRUT04pOwogCkBAIC03ODUs
OCArNzg1LDggQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dAogICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9wYWRkaW5nKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0
YXRlRmxhZ3M+KDApLCAmcGFkZGluZyk7CiAKICAgICBpbnQgd2lkdGggPSBzcGluQnV0dG9uQXJy
b3dTaXplKGNvbnRleHQpICsgcGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodDsKLSAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRNaW5XaWR0
aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHdpZHRo
LCBGaXhlZCkpOworICAgIHN0eWxlLnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsK
IH0KIAogc3RhdGljIHZvaWQgcGFpbnRTcGluQXJyb3dCdXR0b24oUmVuZGVyVGhlbWUqIHRoZW1l
LCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2Jq
ZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwgR3Rr
QXJyb3dUeXBlIGFycm93VHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4
LDkgKzE2OCw5IEBAIHN0YXRpYyBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXAKICAg
ICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnN1cHBvcnRzRm9j
dXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICByZXR1cm4gc3Vw
cG9ydHNGb2N1cyhzdHlsZS0+YXBwZWFyYW5jZSgpKTsKKyAgICByZXR1cm4gc3VwcG9ydHNGb2N1
cyhzdHlsZS5hcHBlYXJhbmNlKCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpjb250cm9s
U3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CkBAIC0yMjAsMjUgKzIy
MCwyNSBAQCBzdGF0aWMgR3RrU3RhdGVUeXBlIGd0a0ljb25TdGF0ZShSZW5kZXJUCiAgICAgcmV0
dXJuIEdUS19TVEFURV9OT1JNQUw7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6OkVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCYpIGNvbnN0
CiB7CiAgICAgLy8gU29tZSBsYXlvdXQgdGVzdHMgY2hlY2sgZXhwbGljaXRseSB0aGF0IGJ1dHRv
bnMgaWdub3JlIGxpbmUtaGVpZ2h0LgotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1
c2hCdXR0b25QYXJ0KQotICAgICAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6
aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBQdXNo
QnV0dG9uUGFydCkKKyAgICAgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVM
aXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIFRoZSB0
ZXN0cyBjaGVjayBleHBsaWNpdGx5IHRoYXQgc2VsZWN0IG1lbnUgYnV0dG9ucyBpZ25vcmUgbGlu
ZSBoZWlnaHQuCi0gICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxM
aW5lSGVpZ2h0KCkpOworICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRp
YWxMaW5lSGVpZ2h0KCkpOwogCiAgICAgLy8gV2UgY2Fubm90IGdpdmUgYSBwcm9wZXIgcmVuZGVy
aW5nIHdoZW4gYm9yZGVyIHJhZGl1cyBpcyBhY3RpdmUsIHVuZm9ydHVuYXRlbHkuCi0gICAgc3R5
bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXJSYWRpdXMoKTsK
IH0KIAogdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUp
IGNvbnN0CiB7Ci0gICAgYWRqdXN0TWVudUxpc3RTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxl
LCAmZSk7CisgICAgYWRqdXN0TWVudUxpc3RTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7
CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9u
cyhjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0yOTMsNyArMjkzLDcgQEAgc3RhdGljIEd0a0ljb25TaXpl
IGdldEljb25TaXplRm9yUGl4ZWxTaQogICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX0RJQUxPRzsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewogICAgIGFkanVzdFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogfQpAQCAtMzAzLDI1ICsz
MDMsMjUgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlcwogICAgIHJl
dHVybiBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KG8sIGksIHJlY3QpOwog
fQogCi1zdGF0aWMgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShSZW5kZXJTdHlsZSog
c3R5bGUpCitzdGF0aWMgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShSZW5kZXJTdHls
ZSYgc3R5bGUpCiB7Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5bGUtPnJlc2V0
UGFkZGluZygpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRQYWRk
aW5nKCk7CiAKICAgICAvLyBHZXQgdGhlIGljb24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXpl
LgotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGludCBmb250U2l6
ZSA9IHN0eWxlLmZvbnRTaXplKCk7CiAgICAgaWYgKGZvbnRTaXplIDwgZ3RrSWNvblNpemVNZW51
KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoZm9udFNpemUsIEZpeGVkKSk7Ci0g
ICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGZvbnRTaXplLCBGaXhlZCkpOworICAgICAg
ICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoZm9udFNpemUsIEZpeGVkKSk7CisgICAgICAgIHN0eWxl
LnNldEhlaWdodChMZW5ndGgoZm9udFNpemUsIEZpeGVkKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgZ2ludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CiAgICAgZ3RrX2ljb25fc2l6ZV9s
b29rdXAoZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoZm9udFNpemUpLCAmd2lkdGgsICZoZWlnaHQp
OwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgoaGVpZ2h0LCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExl
bmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodCwg
Rml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBz
dHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUo
c3R5bGUpOwogfQpAQCAtMzYwLDcgKzM2MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
U2VhcmNoRmllbGRSZXMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVH
dGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjph
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIGFkanVzdFNlYXJjaEZpZWxkSWNv
blN0eWxlKHN0eWxlKTsKIH0KQEAgLTM3OSwxMSArMzc5LDExIEBAIGJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50U2VhcmNoRmllbGRDYW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVs
ZW1lbnQmKSBjb25zdAogewogICAgIC8vIFdlIGNhbm5vdCBnaXZlIGEgcHJvcGVyIHJlbmRlcmlu
ZyB3aGVuIGJvcmRlciByYWRpdXMgaXMgYWN0aXZlLCB1bmZvcnR1bmF0ZWx5LgotICAgIHN0eWxl
LT5yZXNldEJvcmRlclJhZGl1cygpOwotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0
eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlclJhZGl1cygp
OworICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0
KCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJl
bmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQpA
QCAtNDE0LDE1ICs0MTQsMTUgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDYXBzTG9ja0lu
ZGljYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RT
bGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAg
ICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhu
dWxscHRyKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTdHls
ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVt
YlN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwg
RWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVy
VGh1bWJTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7Ci0gICAgc3R5bGUtPnNl
dEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9
CiAKIGRvdWJsZSBSZW5kZXJUaGVtZUd0azo6Y2FyZXRCbGlua0ludGVydmFsKCkgY29uc3QKQEAg
LTU3NiwxMyArNTc2LDEzIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFUb2dnbGVD
bG8KIH0KICNlbmRpZgogCi1zdGF0aWMgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkgYm9yZGVyUmFk
aWlGcm9tU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQorc3RhdGljIEZsb2F0Um91bmRlZFJlY3Q6
OlJhZGlpIGJvcmRlclJhZGlpRnJvbVN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICBy
ZXR1cm4gRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkoCi0gICAgICAgIEludFNpemUoc3R5bGUtPmJv
cmRlclRvcExlZnRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLT5ib3JkZXJUb3BM
ZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCi0gICAgICAgIEludFNpemUoc3R5bGUt
PmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS0+Ym9yZGVy
VG9wUmlnaHRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwKLSAgICAgICAgSW50U2l6ZShz
dHlsZS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUt
PmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwKLSAgICAgICAg
SW50U2l6ZShzdHlsZS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVl
KCksIHN0eWxlLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkp
KTsKKyAgICAgICAgSW50U2l6ZShzdHlsZS5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGgoKS5p
bnRWYWx1ZSgpLCBzdHlsZS5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUo
KSksCisgICAgICAgIEludFNpemUoc3R5bGUuYm9yZGVyVG9wUmlnaHRSYWRpdXMoKS53aWR0aCgp
LmludFZhbHVlKCksIHN0eWxlLmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFs
dWUoKSksCisgICAgICAgIEludFNpemUoc3R5bGUuYm9yZGVyQm90dG9tTGVmdFJhZGl1cygpLndp
ZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyQm90dG9tTGVmdFJhZGl1cygpLmhlaWdodCgp
LmludFZhbHVlKCkpLAorICAgICAgICBJbnRTaXplKHN0eWxlLmJvcmRlckJvdHRvbVJpZ2h0UmFk
aXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygp
LmhlaWdodCgpLmludFZhbHVlKCkpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZWRpYVNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCkBAIC01OTcsNyArNTk3LDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYQogCiAgICAgZmxvYXQgbWVkaWFEdXJhdGlv
biA9IG1lZGlhRWxlbWVudC0+ZHVyYXRpb24oKTsKICAgICBmbG9hdCB0b3RhbFRyYWNrV2lkdGgg
PSByLndpZHRoKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gJm8uc3R5bGUoKTsKKyAgICBS
ZW5kZXJTdHlsZSYgc3R5bGUgPSBvLnN0eWxlKCk7CiAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRp
bWVSYW5nZXMgPSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IGluZGV4IDwgdGltZVJhbmdlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKICAgICAg
ICAgZmxvYXQgc3RhcnQgPSB0aW1lUmFuZ2VzLT5zdGFydChpbmRleCwgSUdOT1JFX0VYQ0VQVElP
Tik7CkBAIC02MTEsNyArNjExLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNs
aWRlclRyYQogICAgICAgICByYW5nZVJlY3Quc2V0V2lkdGgobGVuZ3RoUmF0aW8gKiB0b3RhbFRy
YWNrV2lkdGgpOwogICAgICAgICBpZiAoaW5kZXgpCiAgICAgICAgICAgICByYW5nZVJlY3QubW92
ZShzdGFydFJhdGlvICogdG90YWxUcmFja1dpZHRoLCAwKTsKLSAgICAgICAgY29udGV4dC0+Zmls
bFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QocmFuZ2VSZWN0LCBib3JkZXJSYWRpaUZyb21T
dHlsZShzdHlsZSkpLCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFJvdW5kZWRS
ZWN0KEZsb2F0Um91bmRlZFJlY3QocmFuZ2VSZWN0LCBib3JkZXJSYWRpaUZyb21TdHlsZShzdHls
ZSkpLCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxl
LmNvbG9yU3BhY2UoKSk7CiAgICAgfQogCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpAQCAtNjIw
LDggKzYyMCw4IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmEKIAog
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9i
amVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7
Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gJm8uc3R5bGUoKTsKLSAgICBwYWludEluZm8uY29u
dGV4dC0+ZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QociwgYm9yZGVyUmFkaWlGcm9t
U3R5bGUoc3R5bGUpKSwgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNv
bG9yKSwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CisgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gJm8u
c3R5bGUoKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91
bmRlZFJlY3QociwgYm9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUudmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS5jb2xvclNwYWNlKCkpOwogICAg
IHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjQ2LDEzICs2NDYsMTMgQEAgYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaQogCiAgICAgaW50IHJlY3RIZWlnaHQgPSByZWN0Lmhl
aWdodCgpOwogICAgIGZsb2F0IHRyYWNrSGVpZ2h0ID0gcmVjdEhlaWdodCAqIHZvbHVtZTsKLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyT2JqZWN0LnN0eWxlKCk7CisgICAgUmVuZGVy
U3R5bGUmIHN0eWxlID0gJnJlbmRlck9iamVjdC5zdHlsZSgpOwogICAgIEludFJlY3Qgdm9sdW1l
UmVjdChyZWN0KTsKICAgICB2b2x1bWVSZWN0Lm1vdmUoMCwgcmVjdEhlaWdodCAtIHRyYWNrSGVp
Z2h0KTsKICAgICB2b2x1bWVSZWN0LnNldEhlaWdodChjZWlsKHRyYWNrSGVpZ2h0KSk7CiAKICAg
ICBjb250ZXh0LT5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdCh2b2x1bWVSZWN0LCBi
b3JkZXJSYWRpaUZyb21TdHlsZShzdHlsZSkpLAotICAgICAgICBzdHlsZS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKKyAgICAg
ICAgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS5j
b2xvclNwYWNlKCkpOwogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIAogICAgIHJldHVybiBmYWxz
ZTsKQEAgLTY3NSwyMSArNjc1LDIxIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFD
dXJyZW50VGkKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi12b2lkIFJl
bmRlclRoZW1lR3RrOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRq
dXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAg
IHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogLy8gVGhlc2UgdmFsdWVzIGhhdmUg
YmVlbiBjb3BpZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKIHN0YXRpYyBjb25z
dCBpbnQgcHJvZ3Jlc3NBY3Rpdml0eUJsb2NrcyA9IDU7CiBzdGF0aWMgY29uc3QgaW50IHByb2dy
ZXNzQW5pbWF0aW9uRnJhbWVzID0gMTA7CiBzdGF0aWMgY29uc3QgZG91YmxlIHByb2dyZXNzQW5p
bWF0aW9uSW50ZXJ2YWwgPSAwLjEyNTsKLWRvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9u
UmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citkb3Vi
bGUgUmVuZGVyVGhlbWVHdGs6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIo
UmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogewogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbklu
dGVydmFsOwogfQogCi1kb3VibGUgUmVuZGVyVGhlbWVHdGs6OmFuaW1hdGlvbkR1cmF0aW9uRm9y
UHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAorZG91YmxlIFJlbmRlclRoZW1lR3Rr
OjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QK
IHsKICAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0
aW9uRnJhbWVzICogMjsgLy8gIjIiIGZvciBiYWNrIGFuZCBmb3J0aDsKIH0KQEAgLTY5NywxNiAr
Njk3LDE2IEBAIGRvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uRHVyYXRpb24KIEludFJl
Y3QgUmVuZGVyVGhlbWVHdGs6OmNhbGN1bGF0ZVByb2dyZXNzUmVjdChjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYgZnVsbEJhclJlY3QpCiB7CiAgICAgSW50
UmVjdCBwcm9ncmVzc1JlY3QoZnVsbEJhclJlY3QpOwotICAgIGNvbnN0IFJlbmRlclByb2dyZXNz
KiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MoJnJlbmRlck9iamVjdCk7Ci0gICAg
aWYgKHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCkpIHsKLSAgICAgICAgaW50IHByb2dy
ZXNzV2lkdGggPSBwcm9ncmVzc1JlY3Qud2lkdGgoKSAqIHJlbmRlclByb2dyZXNzLT5wb3NpdGlv
bigpOworICAgIGNvbnN0IFJlbmRlclByb2dyZXNzJiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVy
UHJvZ3Jlc3MocmVuZGVyT2JqZWN0KTsKKyAgICBpZiAocmVuZGVyUHJvZ3Jlc3MuaXNEZXRlcm1p
bmF0ZSgpKSB7CisgICAgICAgIGludCBwcm9ncmVzc1dpZHRoID0gcHJvZ3Jlc3NSZWN0LndpZHRo
KCkgKiByZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpOwogICAgICAgICBpZiAocmVuZGVyT2JqZWN0
LnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUlRMKQogICAgICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNl
dFgocHJvZ3Jlc3NSZWN0LngoKSArIHByb2dyZXNzUmVjdC53aWR0aCgpIC0gcHJvZ3Jlc3NXaWR0
aCk7CiAgICAgICAgIHByb2dyZXNzUmVjdC5zZXRXaWR0aChwcm9ncmVzc1dpZHRoKTsKICAgICAg
ICAgcmV0dXJuIHByb2dyZXNzUmVjdDsKICAgICB9CiAKLSAgICBkb3VibGUgYW5pbWF0aW9uUHJv
Z3Jlc3MgPSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKTsKKyAgICBkb3VibGUg
YW5pbWF0aW9uUHJvZ3Jlc3MgPSByZW5kZXJQcm9ncmVzcy5hbmltYXRpb25Qcm9ncmVzcygpOwog
CiAgICAgLy8gTmV2ZXIgbGV0IHRoZSBwcm9ncmVzcyByZWN0IHNocmluayBzbWFsbGVyIHRoYW4g
MiBwaXhlbHMuCiAgICAgaW50IG5ld1dpZHRoID0gc3RkOjptYXgoMiwgcHJvZ3Jlc3NSZWN0Lndp
ZHRoKCkgLyBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsMTAgKzQ0LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJU
aGVtZT4gY3JlYXRlKCk7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3Mg
Y29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNv
bnN0IFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAg
Ly8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSBpcyBhYmxlIHRvIGRyYXcgdGhlIGZvY3Vz
IHJpbmcuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0
eWxlKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5n
KGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICAvLyBBIG1ldGhvZCBh
c2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFz
IGZvY3VzIG9yIG5vdC4KICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29u
c3QgUmVuZGVyT2JqZWN0JikgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMTUsNTAgKzExNSw1MCBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1l
bnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRl
OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgaW50IHBvcHVwSW50ZXJuYWxQ
YWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIGludCBwb3B1cElu
dGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgaW50
IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSYpIGNv
bnN0IG92ZXJyaWRlOworICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0
eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJl
bmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5n
Qm90dG9tKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICAvLyBUaGUgTWFjIHBv
cnQgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiB0aGUgIm1lbnUgbGlzdCIgYW5kIHRoZSAibWVudSBs
aXN0IGJ1dHRvbi4iCiAgICAgLy8gVGhlIGZvcm1lciBpcyB1c2VkIHdoZW4gYSBtZW51IGxpc3Qg
YnV0dG9uIGhhcyBiZWVuIHN0eWxlZC4gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZQogICAgIC8vIEFx
dWEgdGhlbWVkIGNvbnRyb2xzIHdoZW5ldmVyIHBvc3NpYmxlLiBXZSBhbHdheXMgd2FudCB0byB1
c2UgR1RLKyB0aGVtaW5nLCBzbwogICAgIC8vIHdlIGRvbid0IG1haW50YWluIHRoaXMgZGlmZmVy
ZW50aWF0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVM
aXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBh
cnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBi
b29sIHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlk
ZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNs
aWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBF
bGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVy
VGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmLCBFbGVtZW50Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBpbml0TWVkaWFD
b2xvcnMoKTsKQEAgLTE4MSwyMSArMTgxLDIxIEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShQUk9HUkVTU19FTEVNRU5UKQotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVh
dEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRl
clByb2dyZXNzKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dy
ZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9y
UHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICNlbmRpZgogCiAgICAg
dmlydHVhbCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25z
dCBGaWxlTGlzdCosIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0Fs
bG93ZWQpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsKLSAgICBz
dGF0aWMgdm9pZCBzZXRUZXh0SW5wdXRCb3JkZXJzKFJlbmRlclN0eWxlKik7CisgICAgc3RhdGlj
IHZvaWQgc2V0VGV4dElucHV0Qm9yZGVycyhSZW5kZXJTdHlsZSYpOwogICAgIHN0YXRpYyBkb3Vi
bGUgZ2V0U2NyZWVuRFBJKCk7CiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC0yMTUsOSArMjE1LDkg
QEAgcHJpdmF0ZToKICNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogICAgIHZvaWQgc2V0dXBXaWRn
ZXRBbmRBZGRUb0NvbnRhaW5lcihHdGtXaWRnZXQqLCBHdGtXaWRnZXQqKSBjb25zdDsKICAgICB2
b2lkIHJlZnJlc2hDb21ib0JveENoaWxkcmVuKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRDb21ib0Jv
eFBhZGRpbmcoUmVuZGVyU3R5bGUqLCBpbnQmIGxlZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0LCBp
bnQmIGJvdHRvbSkgY29uc3Q7CisgICAgdm9pZCBnZXRDb21ib0JveFBhZGRpbmcoUmVuZGVyU3R5
bGUmLCBpbnQmIGxlZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkgY29uc3Q7
CiAgICAgaW50IGdldENvbWJvQm94U2VwYXJhdG9yV2lkdGgoKSBjb25zdDsKLSAgICBpbnQgY29t
Ym9Cb3hBcnJvd1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBpbnQgY29tYm9Cb3hBcnJv
d1NpemUoUmVuZGVyU3R5bGUmKSBjb25zdDsKIAogICAgIEd0a1dpZGdldCogZ3RrQnV0dG9uKCkg
Y29uc3Q7CiAgICAgR3RrV2lkZ2V0KiBndGtUcmVlVmlldygpIGNvbnN0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDkxLDEwICsxNDkxLDEwIEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmUo
UGFpbnRJbmYKIAogICAgIFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICAv
LyBPbmx5IHBhaW50IHRoZSBmb2N1cyByaW5nIGJ5IGhhbmQgaWYgdGhlIHRoZW1lIGlzbid0IGFi
bGUgdG8gZHJhdyBpdC4KLSAgICBpZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAm
JiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZygmc3R5bGVUb1VzZSkpCisgICAgaWYgKHN0eWxl
VG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1c1Jpbmco
c3R5bGVUb1VzZSkpCiAgICAgICAgIHBhaW50Rm9jdXNSaW5nKHBhaW50SW5mbywgcGFpbnRPZmZz
ZXQsICZzdHlsZVRvVXNlKTsKIAotICAgIGlmIChoYXNPdXRsaW5lQW5ub3RhdGlvbigpICYmICFz
dHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNS
aW5nKCZzdHlsZVRvVXNlKSkKKyAgICBpZiAoaGFzT3V0bGluZUFubm90YXRpb24oKSAmJiAhc3R5
bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmlu
ZyhzdHlsZVRvVXNlKSkKICAgICAgICAgYWRkUERGVVJMUmVjdChwYWludEluZm8sIHBhaW50T2Zm
c2V0KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0ID0gcGFpbnRJbmZv
LmNvbnRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250
cm9scy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1l
ZGlhQ29udHJvbHMuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMCAr
MTAxLDEwIEBAIHN0YXRpYyBGbG9hdFJlY3QgZ2V0VW56b29tZWRSZWN0QW5kQWRqdXMKIHN0YXRp
YyBjb25zdCBpbnQgbWVkaWFTbGlkZXJUaHVtYldpZHRoID0gMTM7CiBzdGF0aWMgY29uc3QgaW50
IG1lZGlhU2xpZGVyVGh1bWJIZWlnaHQgPSAxNDsKIAotdm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xz
OjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIFJl
bmRlck1lZGlhQ29udHJvbHM6OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxl
JiBzdHlsZSkKIHsKICAgICBpbnQgcGFydDsKLSAgICBzd2l0Y2ggKHN0eWxlLT5hcHBlYXJhbmNl
KCkpIHsKKyAgICBzd2l0Y2ggKHN0eWxlLmFwcGVhcmFuY2UoKSkgewogICAgIGNhc2UgTWVkaWFT
bGlkZXJUaHVtYlBhcnQ6CiAgICAgICAgIHBhcnQgPSBNZWRpYVNsaWRlclRodW1iOwogICAgICAg
ICBicmVhazsKQEAgLTEyMSw5ICsxMjEsOSBAQCB2b2lkIFJlbmRlck1lZGlhQ29udHJvbHM6OmFk
anVzdE1lZGlhU2xpCiAgICAgQ0dTaXplIHNpemU7CiAgICAgd2tNZWFzdXJlTWVkaWFVSVBhcnQo
cGFydCwgMCwgJnNpemUpOwogCi0gICAgZmxvYXQgem9vbUxldmVsID0gc3R5bGUtPmVmZmVjdGl2
ZVpvb20oKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2l6
ZS53aWR0aCAqIHpvb21MZXZlbCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5n
dGgoc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCAqIHpvb21MZXZlbCksIEZpeGVkKSk7Cisg
ICAgZmxvYXQgem9vbUxldmVsID0gc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIHN0eWxlLnNl
dFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGggKiB6b29tTGV2ZWwpLCBG
aXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihzaXpl
LmhlaWdodCAqIHpvb21MZXZlbCksIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyTWVkaWFDb250
cm9sczo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBwYXJ0
LCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlh
Q29udHJvbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVkaWFDb250cm9scy5oCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBzdGF0aWMgYm9vbCBwYWludE1l
ZGlhQ29udHJvbHNQYXJ0KE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlLCBjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgc3RhdGljIHZvaWQg
YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqKTsKKyAgICBzdGF0aWMgdm9p
ZCBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYpOwogI2VuZGlmCiAgICAg
c3RhdGljIEludFBvaW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJv
eCosIGNvbnN0IEludFNpemUmKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxMCAr
MTI1LDEwIEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmFkanVzdElubmVyU3R5bGUoKQogICAgICAg
ICBpbm5lclN0eWxlLnNldEFsaWduU2VsZihBbGlnbkZsZXhTdGFydCk7CiAgICAgfQogCi0gICAg
aW5uZXJTdHlsZS5zZXRQYWRkaW5nTGVmdChMZW5ndGgodGhlbWUoKS5wb3B1cEludGVybmFsUGFk
ZGluZ0xlZnQoJnN0eWxlKCkpLCBGaXhlZCkpOwotICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ1Jp
Z2h0KExlbmd0aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoJnN0eWxlKCkpLCBG
aXhlZCkpOwotICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ1RvcChMZW5ndGgodGhlbWUoKS5wb3B1
cEludGVybmFsUGFkZGluZ1RvcCgmc3R5bGUoKSksIEZpeGVkKSk7Ci0gICAgaW5uZXJTdHlsZS5z
ZXRQYWRkaW5nQm90dG9tKExlbmd0aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9t
KCZzdHlsZSgpKSwgRml4ZWQpKTsKKyAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0
aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChzdHlsZSgpKSwgRml4ZWQpKTsKKyAg
ICBpbm5lclN0eWxlLnNldFBhZGRpbmdSaWdodChMZW5ndGgodGhlbWUoKS5wb3B1cEludGVybmFs
UGFkZGluZ1JpZ2h0KHN0eWxlKCkpLCBGaXhlZCkpOworICAgIGlubmVyU3R5bGUuc2V0UGFkZGlu
Z1RvcChMZW5ndGgodGhlbWUoKS5wb3B1cEludGVybmFsUGFkZGluZ1RvcChzdHlsZSgpKSwgRml4
ZWQpKTsKKyAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHRoZW1lKCkucG9w
dXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oc3R5bGUoKSksIEZpeGVkKSk7CiAKICAgICBpZiAoZG9j
dW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLnNlbGVjdEl0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1
cmFsKCkpIHsKICAgICAgICAgLy8gSXRlbXMgaW4gdGhlIHBvcHVwIHdpbGwgbm90IHJlc3BlY3Qg
dGhlIENTUyB0ZXh0LWFsaWduIGFuZCBkaXJlY3Rpb24gcHJvcGVydGllcywKQEAgLTMyNiw3ICsz
MjYsNyBAQCBMYXlvdXRSZWN0IFJlbmRlck1lbnVMaXN0Ojpjb250cm9sQ2xpcFJlCiAKIHZvaWQg
UmVuZGVyTWVudUxpc3Q6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQm
IG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdAogewot
ICAgIG1heExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KG1fb3B0aW9uc1dpZHRoLCB0aGVtZSgpLm1p
bmltdW1NZW51TGlzdFNpemUoJnN0eWxlKCkpKSArIG1faW5uZXJCbG9jay0+cGFkZGluZ0xlZnQo
KSArIG1faW5uZXJCbG9jay0+cGFkZGluZ1JpZ2h0KCk7CisgICAgbWF4TG9naWNhbFdpZHRoID0g
c3RkOjptYXgobV9vcHRpb25zV2lkdGgsIHRoZW1lKCkubWluaW11bU1lbnVMaXN0U2l6ZShzdHls
ZSgpKSkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdMZWZ0KCkgKyBtX2lubmVyQmxvY2stPnBhZGRp
bmdSaWdodCgpOwogICAgIGlmICghc3R5bGUoKS53aWR0aCgpLmlzUGVyY2VudCgpKQogICAgICAg
ICBtaW5Mb2dpY2FsV2lkdGggPSBtYXhMb2dpY2FsV2lkdGg7CiB9CkBAIC01NjksNyArNTY5LDcg
QEAgUG9wdXBNZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Om1lbnVTdHlsZQogICAgIHJldHVybiBQ
b3B1cE1lbnVTdHlsZShzdHlsZVRvVXNlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUNvbG9yKSwgc3R5bGVUb1VzZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3IpLAogICAgICAgICBzdHlsZVRvVXNlLmZvbnQoKSwgc3R5bGVUb1VzZS52aXNp
YmlsaXR5KCkgPT0gVklTSUJMRSwgc3R5bGVUb1VzZS5kaXNwbGF5KCkgPT0gTk9ORSwgc3R5bGUo
KS5oYXNBcHBlYXJhbmNlKCksIHN0eWxlVG9Vc2UudGV4dEluZGVudCgpLAogICAgICAgICBzdHls
ZSgpLmRpcmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxlKCkudW5pY29kZUJpZGkoKSksIFBvcHVw
TWVudVN0eWxlOjpEZWZhdWx0QmFja2dyb3VuZENvbG9yLAotICAgICAgICBQb3B1cE1lbnVTdHls
ZTo6U2VsZWN0UG9wdXAsIHRoZW1lKCkucG9wdXBNZW51U2l6ZSgmc3R5bGVUb1VzZSwgYWJzQm91
bmRzKSk7CisgICAgICAgIFBvcHVwTWVudVN0eWxlOjpTZWxlY3RQb3B1cCwgdGhlbWUoKS5wb3B1
cE1lbnVTaXplKHN0eWxlVG9Vc2UsIGFic0JvdW5kcykpOwogfQogCiBIb3N0V2luZG93KiBSZW5k
ZXJNZW51TGlzdDo6aG9zdFdpbmRvdygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZXRlci5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcg
QEAgdm9pZCBSZW5kZXJNZXRlcjo6dXBkYXRlTG9naWNhbFdpZHRoKCkKIHsKICAgICBSZW5kZXJC
b3g6OnVwZGF0ZUxvZ2ljYWxXaWR0aCgpOwogCi0gICAgSW50U2l6ZSBmcmFtZVNpemUgPSB0aGVt
ZSgpLm1ldGVyU2l6ZUZvckJvdW5kcyh0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYW1lUmVj
dCgpKSk7CisgICAgSW50U2l6ZSBmcmFtZVNpemUgPSB0aGVtZSgpLm1ldGVyU2l6ZUZvckJvdW5k
cygqdGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFtZVJlY3QoKSkpOwogICAgIHNldExvZ2lj
YWxXaWR0aChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZnJhbWVTaXplLndpZHRoKCkgOiBm
cmFtZVNpemUuaGVpZ2h0KCkpOwogfQogCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgUmVuZGVyTWV0
ZXI6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KEwKICAgICAgICAgZnJhbWUuc2V0SGVpZ2h0KGNvbXB1
dGVkVmFsdWVzLm1fZXh0ZW50KTsKICAgICBlbHNlCiAgICAgICAgIGZyYW1lLnNldFdpZHRoKGNv
bXB1dGVkVmFsdWVzLm1fZXh0ZW50KTsKLSAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IHRoZW1lKCku
bWV0ZXJTaXplRm9yQm91bmRzKHRoaXMsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhbWUpKTsKKyAg
ICBJbnRTaXplIGZyYW1lU2l6ZSA9IHRoZW1lKCkubWV0ZXJTaXplRm9yQm91bmRzKCp0aGlzLCBw
aXhlbFNuYXBwZWRJbnRSZWN0KGZyYW1lKSk7CiAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQg
PSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZnJhbWVTaXplLmhlaWdodCgpIDogZnJhbWVT
aXplLndpZHRoKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1MywxMCArMTA1MywxMCBAQCB2
b2lkIFJlbmRlck9iamVjdDo6cGFpbnRPdXRsaW5lKFBhaW50SW5mCiAgICAgaW50IG91dGxpbmVP
ZmZzZXQgPSBzdHlsZVRvVXNlLm91dGxpbmVPZmZzZXQoKTsKIAogICAgIC8vIE9ubHkgcGFpbnQg
dGhlIGZvY3VzIHJpbmcgYnkgaGFuZCBpZiB0aGUgdGhlbWUgaXNuJ3QgYWJsZSB0byBkcmF3IGl0
LgotICAgIGlmIChzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1
cHBvcnRzRm9jdXNSaW5nKCZzdHlsZVRvVXNlKSkKKyAgICBpZiAoc3R5bGVUb1VzZS5vdXRsaW5l
U3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZyhzdHlsZVRvVXNlKSkK
ICAgICAgICAgcGFpbnRGb2N1c1JpbmcocGFpbnRJbmZvLCBwYWludFJlY3QubG9jYXRpb24oKSwg
JnN0eWxlVG9Vc2UpOwogCi0gICAgaWYgKGhhc091dGxpbmVBbm5vdGF0aW9uKCkgJiYgIXN0eWxl
VG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1c1Jpbmco
JnN0eWxlVG9Vc2UpKQorICAgIGlmIChoYXNPdXRsaW5lQW5ub3RhdGlvbigpICYmICFzdHlsZVRv
VXNlLm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKHN0
eWxlVG9Vc2UpKQogICAgICAgICBhZGRQREZVUkxSZWN0KHBhaW50SW5mbywgcGFpbnRSZWN0Lmxv
Y2F0aW9uKCkpOwogCiAgICAgaWYgKHN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgfHwg
c3R5bGVUb1VzZS5vdXRsaW5lU3R5bGUoKSA9PSBCTk9ORSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTEsOCArOTEsOCBAQCB2b2lkIFJlbmRlclByb2dyZXNzOjphbmltYXRpb25UaW1lckZpcmVk
CiAKIHZvaWQgUmVuZGVyUHJvZ3Jlc3M6OnVwZGF0ZUFuaW1hdGlvblN0YXRlKCkKIHsKLSAgICBt
X2FuaW1hdGlvbkR1cmF0aW9uID0gdGhlbWUoKS5hbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNz
QmFyKHRoaXMpOwotICAgIG1fYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWwgPSB0aGVtZSgpLmFuaW1h
dGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIodGhpcyk7CisgICAgbV9hbmltYXRpb25E
dXJhdGlvbiA9IHRoZW1lKCkuYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcigqdGhpcyk7
CisgICAgbV9hbmltYXRpb25SZXBlYXRJbnRlcnZhbCA9IHRoZW1lKCkuYW5pbWF0aW9uUmVwZWF0
SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcigqdGhpcyk7CiAKICAgICBib29sIGFuaW1hdGluZyA9IHN0
eWxlKCkuaGFzQXBwZWFyYW5jZSgpICYmIG1fYW5pbWF0aW9uRHVyYXRpb24gPiAwOwogICAgIGlm
IChhbmltYXRpbmcgPT0gbV9hbmltYXRpbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAg
UmVuZGVyVGhlbWU6OlJlbmRlclRoZW1lKCkKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxl
LCBFbGVtZW50KiBlLCBib29sIFVBSGFzQXBwZWFyYW5jZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9y
ZGVyLCBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5k
Q29sb3IpCit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUsIGJvb2wgVUFIYXNBcHBl
YXJhbmNlLCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dy
b3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikKIHsKICAgICAvLyBGb3JjZSBpbmxp
bmUgYW5kIHRhYmxlIGRpc3BsYXkgc3R5bGVzIHRvIGJlIGlubGluZS1ibG9jayAoZXhjZXB0IGZv
ciB0YWJsZS0gd2hpY2ggaXMgYmxvY2spCiAgICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLmFw
cGVhcmFuY2UoKTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5
bGUoU3R5bGVSZXNvbAogICAgIGVsc2UgaWYgKHN0eWxlLmRpc3BsYXkoKSA9PSBDT01QQUNUIHx8
IHN0eWxlLmRpc3BsYXkoKSA9PSBMSVNUX0lURU0gfHwgc3R5bGUuZGlzcGxheSgpID09IFRBQkxF
KQogICAgICAgICBzdHlsZS5zZXREaXNwbGF5KEJMT0NLKTsKIAotICAgIGlmIChVQUhhc0FwcGVh
cmFuY2UgJiYgaXNDb250cm9sU3R5bGVkKCZzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNr
Z3JvdW5kQ29sb3IpKSB7CisgICAgaWYgKFVBSGFzQXBwZWFyYW5jZSAmJiBpc0NvbnRyb2xTdHls
ZWQoc3R5bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKSkgewogICAgICAg
ICBpZiAocGFydCA9PSBNZW51bGlzdFBhcnQpIHsKICAgICAgICAgICAgIHN0eWxlLnNldEFwcGVh
cmFuY2UoTWVudWxpc3RCdXR0b25QYXJ0KTsKICAgICAgICAgICAgIHBhcnQgPSBNZW51bGlzdEJ1
dHRvblBhcnQ7CkBAIC0xOTIsMjUgKzE5MiwyNSBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RT
dHlsZShTdHlsZVJlc29sCiAgICAgc3dpdGNoIChzdHlsZS5hcHBlYXJhbmNlKCkpIHsKICNpZiAh
VVNFKE5FV19USEVNRSkKICAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgcmV0dXJuIGFk
anVzdENoZWNrYm94U3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJl
dHVybiBhZGp1c3RDaGVja2JveFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBj
YXNlIFJhZGlvUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFJhZGlvU3R5bGUoJnN0eWxlUmVz
b2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RSYWRpb1N0eWxlKHN0eWxl
UmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgogICAgIGNhc2Ug
U3F1YXJlQnV0dG9uUGFydDoKICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgogICAgIGNhc2Ug
QnV0dG9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdEJ1dHRvblN0eWxlKCZzdHlsZVJlc29s
dmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0QnV0dG9uU3R5bGUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgSW5uZXJTcGluQnV0dG9uUGFydDoKLSAgICAg
ICAgcmV0dXJuIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5
bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGUpOwogI2VuZGlmCiAgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgotICAg
ICAgICByZXR1cm4gYWRqdXN0VGV4dEZpZWxkU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwg
ZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RUZXh0RmllbGRTdHlsZShzdHlsZVJlc29sdmVyLCBz
dHlsZSwgZSk7CiAgICAgY2FzZSBUZXh0QXJlYVBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RU
ZXh0QXJlYVN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4g
YWRqdXN0VGV4dEFyZWFTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBN
ZW51bGlzdFBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RNZW51TGlzdFN0eWxlKCZzdHlsZVJl
c29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0TWVudUxpc3RTdHlsZShz
dHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6Ci0g
ICAgICAgIHJldHVybiBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCAqZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxl
UmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIE1lZGlhUGxheUJ1dHRvblBhcnQ6CiAgICAg
Y2FzZSBNZWRpYUN1cnJlbnRUaW1lUGFydDoKICAgICBjYXNlIE1lZGlhVGltZVJlbWFpbmluZ1Bh
cnQ6CkBAIC0yMTgsMjkgKzIxOCwyOSBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShT
dHlsZVJlc29sCiAgICAgY2FzZSBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uUGFydDoKICAgICBj
YXNlIE1lZGlhTXV0ZUJ1dHRvblBhcnQ6CiAgICAgY2FzZSBNZWRpYVZvbHVtZVNsaWRlckNvbnRh
aW5lclBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RNZWRpYUNvbnRyb2xTdHlsZSgmc3R5bGVS
ZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdE1lZGlhQ29udHJvbFN0
eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIE1lZGlhU2xpZGVyUGFydDoK
ICAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyUGFydDoKICAgICBjYXNlIE1lZGlhRnVsbFNjcmVl
blZvbHVtZVNsaWRlclBhcnQ6CiAgICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKICAgICBj
YXNlIFNsaWRlclZlcnRpY2FsUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNsaWRlclRyYWNr
U3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RT
bGlkZXJUcmFja1N0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIFNsaWRl
clRodW1iSG9yaXpvbnRhbFBhcnQ6CiAgICAgY2FzZSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydDoK
LSAgICAgICAgcmV0dXJuIGFkanVzdFNsaWRlclRodW1iU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZz
dHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKLSAgICAgICAgcmV0
dXJuIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7Cisg
ICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxl
LCBlKTsKICAgICBjYXNlIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uUGFydDoKLSAgICAgICAgcmV0
dXJuIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZz
dHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0
eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0
U3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RT
ZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwog
ICAgIGNhc2UgU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQ6Ci0gICAgICAgIHJldHVy
biBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKCZzdHlsZVJlc29s
dmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAg
ICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShzdHlsZVJlc29s
dmVyLCBzdHlsZSwgZSk7CiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCiAgICAgY2FzZSBQ
cm9ncmVzc0JhclBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKCZz
dHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0UHJvZ3Jlc3NC
YXJTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoTUVU
RVJfRUxFTUVOVCkKICAgICBjYXNlIE1ldGVyUGFydDoKQEAgLTI0OCwxMSArMjQ4LDExIEBAIHZv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2wKICAgICBjYXNlIENvbnRpbnVv
dXNDYXBhY2l0eUxldmVsSW5kaWNhdG9yUGFydDoKICAgICBjYXNlIERpc2NyZXRlQ2FwYWNpdHlM
ZXZlbEluZGljYXRvclBhcnQ6CiAgICAgY2FzZSBSYXRpbmdMZXZlbEluZGljYXRvclBhcnQ6Ci0g
ICAgICAgIHJldHVybiBhZGp1c3RNZXRlclN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUp
OworICAgICAgICByZXR1cm4gYWRqdXN0TWV0ZXJTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwg
ZSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAgIGNhc2UgSW5wdXRTcGVl
Y2hCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRv
blN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0
SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICNl
bmRpZgogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQogICAgIGNhc2UgSW1hZ2VDb250cm9s
c0J1dHRvblBhcnQ6CkBAIC02OTMsOSArNjkzLDkgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNDb250
cm9sQ29udGFpbmVyKENvbgogICAgIHJldHVybiBhcHBlYXJhbmNlICE9IENoZWNrYm94UGFydCAm
JiBhcHBlYXJhbmNlICE9IFJhZGlvUGFydDsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6aXNDb250
cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9y
ZGVyLCBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5k
Q29sb3IpIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXll
ciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKIHsKLSAg
ICBzd2l0Y2ggKHN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKKyAgICBzd2l0Y2ggKHN0eWxlLmFwcGVh
cmFuY2UoKSkgewogICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBTcXVhcmVCdXR0
b25QYXJ0OgogICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CkBAIC03MTIsOSArNzEyLDkgQEAg
Ym9vbCBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKGNvbnN0IAogICAgIGNhc2UgVGV4dEZp
ZWxkUGFydDoKICAgICBjYXNlIFRleHRBcmVhUGFydDoKICAgICAgICAgLy8gVGVzdCB0aGUgc3R5
bGUgdG8gc2VlIGlmIHRoZSBVQSBib3JkZXIgYW5kIGJhY2tncm91bmQgbWF0Y2guCi0gICAgICAg
IHJldHVybiAoc3R5bGUtPmJvcmRlcigpICE9IGJvcmRlcgotICAgICAgICAgICAgfHwgKnN0eWxl
LT5iYWNrZ3JvdW5kTGF5ZXJzKCkgIT0gYmFja2dyb3VuZAotICAgICAgICAgICAgfHwgc3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikgIT0gYmFj
a2dyb3VuZENvbG9yKTsKKyAgICAgICAgcmV0dXJuIChzdHlsZS5ib3JkZXIoKSAhPSBib3JkZXIK
KyAgICAgICAgICAgIHx8ICpzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCkgIT0gYmFja2dyb3VuZAor
ICAgICAgICAgICAgfHwgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKSAhPSBiYWNrZ3JvdW5kQ29sb3IpOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CkBAIC03MzEsMTUgKzczMSwxNSBAQCB2b2lkIFJlbmRlclRo
ZW1lOjphZGp1c3RSZXBhaW50UmVjdChjb25zCiAjZW5kaWYKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZTo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorYm9v
bCBSZW5kZXJUaGVtZTo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KSBjb25zdAogewotICAgIHJldHVybiAoc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSAmJiBzdHlsZS0+
YXBwZWFyYW5jZSgpICE9IFRleHRGaWVsZFBhcnQgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBU
ZXh0QXJlYVBhcnQgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBNZW51bGlzdEJ1dHRvblBhcnQg
JiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBMaXN0Ym94UGFydCk7CisgICAgcmV0dXJuIChzdHls
ZS5oYXNBcHBlYXJhbmNlKCkgJiYgc3R5bGUuYXBwZWFyYW5jZSgpICE9IFRleHRGaWVsZFBhcnQg
JiYgc3R5bGUuYXBwZWFyYW5jZSgpICE9IFRleHRBcmVhUGFydCAmJiBzdHlsZS5hcHBlYXJhbmNl
KCkgIT0gTWVudWxpc3RCdXR0b25QYXJ0ICYmIHN0eWxlLmFwcGVhcmFuY2UoKSAhPSBMaXN0Ym94
UGFydCk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWU6OnN0YXRlQ2hhbmdlZChjb25zdCBSZW5kZXJP
YmplY3QmIG8sIENvbnRyb2xTdGF0ZXM6OlN0YXRlcyBzdGF0ZSkgY29uc3QKIHsKICAgICAvLyBE
ZWZhdWx0IGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhlIGNvbnRyb2xzIGRvbid0IHJlc3BvbmQg
dG8gY2hhbmdlcyBpbiA6aG92ZXIgc3RhdGUKLSAgICBpZiAoc3RhdGUgPT0gQ29udHJvbFN0YXRl
czo6SG92ZXJTdGF0ZSAmJiAhc3VwcG9ydHNIb3Zlcigmby5zdHlsZSgpKSkKKyAgICBpZiAoc3Rh
dGUgPT0gQ29udHJvbFN0YXRlczo6SG92ZXJTdGF0ZSAmJiAhc3VwcG9ydHNIb3ZlcihvLnN0eWxl
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBBc3N1bWUgcHJlc3NlZCBzdGF0
ZSBpcyBvbmx5IHJlc3BvbmRlZCB0byBpZiB0aGUgY29udHJvbCBpcyBlbmFibGVkLgpAQCAtOTEw
LDcgKzkxMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzRGVmYXVsdChjb25zdCBSZW5kZXIKIAog
I2lmICFVU0UoTkVXX1RIRU1FKQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAvLyBBIHN1bW1hcnkgb2Yg
dGhlIHJ1bGVzIGZvciBjaGVja2JveCBkZXNpZ25lZCB0byBtYXRjaCBXaW5JRToKICAgICAvLyB3
aWR0aC9oZWlnaHQgLSBob25vcmVkIChXaW5JRSBhY3R1YWxseSBzY2FsZXMgaXRzIGNvbnRyb2wg
Zm9yIHNtYWxsIHdpZHRocywgYnV0IGxldHMgaXQgb3ZlcmZsb3cgZm9yIHNtYWxsIGhlaWdodHMu
KQpAQCAtOTE4LDE2ICs5MTgsMTYgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0Q2hlY2tib3hT
dHlsZShTdAogICAgIHNldENoZWNrYm94U2l6ZShzdHlsZSk7CiAKICAgICAvLyBwYWRkaW5nIC0g
bm90IGhvbm9yZWQgYnkgV2luSUUsIG5lZWRzIHRvIGJlIHJlbW92ZWQuCi0gICAgc3R5bGUtPnJl
c2V0UGFkZGluZygpOworICAgIHN0eWxlLnJlc2V0UGFkZGluZygpOwogCiAgICAgLy8gYm9yZGVy
IC0gaG9ub3JlZCBieSBXaW5JRSwgYnV0IGxvb2tzIHRlcnJpYmxlIChqdXN0IHBhaW50cyBpbiB0
aGUgY29udHJvbCBib3ggYW5kIHR1cm5zIG9mZiB0aGUgV2luZG93cyBYUCB0aGVtZSkKICAgICAv
LyBmb3Igbm93LCB3ZSB3aWxsIG5vdCBob25vciBpdC4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIo
KTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOwogCi0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhu
dWxscHRyKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RSYWRpb1N0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewog
ICAgIC8vIEEgc3VtbWFyeSBvZiB0aGUgcnVsZXMgZm9yIGNoZWNrYm94IGRlc2lnbmVkIHRvIG1h
dGNoIFdpbklFOgogICAgIC8vIHdpZHRoL2hlaWdodCAtIGhvbm9yZWQgKFdpbklFIGFjdHVhbGx5
IHNjYWxlcyBpdHMgY29udHJvbCBmb3Igc21hbGwgd2lkdGhzLCBidXQgbGV0cyBpdCBvdmVyZmxv
dyBmb3Igc21hbGwgaGVpZ2h0cy4pCkBAIC05MzUsMTYgKzkzNSwxNiBAQCB2b2lkIFJlbmRlclRo
ZW1lOjphZGp1c3RSYWRpb1N0eWxlKFN0eWxlCiAgICAgc2V0UmFkaW9TaXplKHN0eWxlKTsKIAog
ICAgIC8vIHBhZGRpbmcgLSBub3QgaG9ub3JlZCBieSBXaW5JRSwgbmVlZHMgdG8gYmUgcmVtb3Zl
ZC4KLSAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAgc3R5bGUucmVzZXRQYWRkaW5nKCk7
CiAKICAgICAvLyBib3JkZXIgLSBob25vcmVkIGJ5IFdpbklFLCBidXQgbG9va3MgdGVycmlibGUg
KGp1c3QgcGFpbnRzIGluIHRoZSBjb250cm9sIGJveCBhbmQgdHVybnMgb2ZmIHRoZSBXaW5kb3dz
IFhQIHRoZW1lKQogICAgIC8vIGZvciBub3csIHdlIHdpbGwgbm90IGhvbm9yIGl0LgotICAgIHN0
eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKLSAgICBzdHls
ZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRy
KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JikgY29uc3QKIHsKICAgICAvLyBNb3N0IHBsYXRmb3JtcyB3aWxsIGNvbXBsZXRlbHkg
aG9ub3IgYWxsIENTUywgYW5kIHNvIHdlIGhhdmUgbm8gbmVlZCB0bwogICAgIC8vIGFkanVzdCB0
aGUgc3R5bGUgYXQgYWxsIGJ5IGRlZmF1bHQuIFdlIHdpbGwgc3RpbGwgYWxsb3cgdGhlIHRoZW1l
IGEgY3JhY2sKQEAgLTk1MiwyNSArOTUyLDI1IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdEJ1
dHRvblN0eWxlKFN0eWwKICAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbm5lclNw
aW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29u
c3QKIHsKIH0KICNlbmRpZgogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RUZXh0RmllbGRTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RUZXh0
QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKICNpZiBFTkFCTEUoSU5Q
VVRfU1BFRUNIKQotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdElucHV0Rmll
bGRTcGVlY2hCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJT
dHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVySW5wdXRT
cGVlY2g6OmFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBz
dHlsZSwgZWxlbWVudCk7CiB9CkBAIC05ODIsMTIgKzk4MiwxMiBAQCBib29sIFJlbmRlclRoZW1l
OjpwYWludElucHV0RmllbGRTcGVlY2hCCiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRVRFUl9FTEVN
RU5UKQotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFk
anVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVu
dCYpIGNvbnN0CiB7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHls
ZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLUludFNpemUgUmVuZGVyVGhlbWU6Om1ldGVy
U2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3QmIGJvdW5kcykg
Y29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWU6Om1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5k
ZXJNZXRlciYsIGNvbnN0IEludFJlY3QmIGJvdW5kcykgY29uc3QKIHsKICAgICByZXR1cm4gYm91
bmRzLnNpemUoKTsKIH0KQEAgLTEwOTQsMTcgKzEwOTQsMTcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6
cGFpbnRTbGlkZXJUaWNrcyhjb25zdAogI2VuZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxF
TUVOVCkKLWRvdWJsZSBSZW5kZXJUaGVtZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citkb3VibGUgUmVuZGVyVGhlbWU6OmFuaW1h
dGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAog
ewogICAgIHJldHVybiAwOwogfQogCi1kb3VibGUgUmVuZGVyVGhlbWU6OmFuaW1hdGlvbkR1cmF0
aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAorZG91YmxlIFJlbmRlclRo
ZW1lOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29u
c3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jl
c3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKQEAgLTExMTQsNDkgKzExMTQs
NDkgQEAgSW50UmVjdCBSZW5kZXJUaGVtZTo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQgogfQogI2VuZGlm
CiAKLWJvb2wgUmVuZGVyVGhlbWU6OnNob3VsZEhhdmVTcGluQnV0dG9uKEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0RWxlbWVudCkgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OnNob3VsZEhhdmVTcGlu
QnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0RWxlbWVudCkgY29uc3QKIHsKLSAgICByZXR1
cm4gaW5wdXRFbGVtZW50LT5pc1N0ZXBwYWJsZSgpICYmICFpbnB1dEVsZW1lbnQtPmlzUmFuZ2VD
b250cm9sKCk7CisgICAgcmV0dXJuIGlucHV0RWxlbWVudC5pc1N0ZXBwYWJsZSgpICYmICFpbnB1
dEVsZW1lbnQuaXNSYW5nZUNvbnRyb2woKTsKIH0KIAogdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVkaWFDb250cm9sU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lOjphZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxl
bWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBhZGp1c3RTbGlkZXJUaHVtYlNpemUoc3R5bGUs
IGVsZW1lbnQpOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlNpemUo
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNs
aWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNo
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QK
IHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCShyZXZp
c2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAko
d29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgLy8gbWV0cmljcyBh
bmQgZGVmYXVsdHMgZ2l2ZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHlsZS4gIFRoaXMgaW5jbHVk
ZXMgc29waGlzdGljYXRlZCBvcGVyYXRpb25zIGxpa2UKICAgICAvLyBzZWxlY3Rpb24gb2YgY29u
dHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgZm9udCwgdGhlIGRpc2FibGluZyBvZiBhcHBlYXJhbmNl
IHdoZW4gY2VydGFpbiBvdGhlciBwcm9wZXJ0aWVzIGxpa2UKICAgICAvLyAiYm9yZGVyIiBhcmUg
c2V0LCBvciBpZiB0aGUgYXBwZWFyYW5jZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0aGVtZS4K
LSAgICB2b2lkIGFkanVzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1l
bnQqLCAgYm9vbCBVQUhhc0FwcGVhcmFuY2UsIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxs
TGF5ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKTsKKyAgICB2b2lkIGFkanVzdFN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmLCAgYm9vbCBVQUhhc0Fw
cGVhcmFuY2UsIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xv
ciYgYmFja2dyb3VuZENvbG9yKTsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBw
YWludCB0aGUgd2lkZ2V0IGFzIGEgYmFja2dyb3VuZCBvZiB0aGUgUmVuZGVyT2JqZWN0LiAgQSB3
aWRnZXQncyBmb3JlZ3JvdW5kLCBlLmcuLCB0aGUKICAgICAvLyB0ZXh0IG9mIGEgYnV0dG9uLCBp
cyBhbHdheXMgcmVuZGVyZWQgYnkgdGhlIGVuZ2luZSBpdHNlbGYuICBUaGUgYm9vbGVhbiByZXR1
cm4gdmFsdWUgaW5kaWNhdGVzCkBAIC0xMTcsNyArMTE3LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIGNvbnRyb2wgaGFz
IGJlZW4gc3R5bGVkIGVub3VnaCBieSB0aGUgYXV0aG9yIHRvIGRpc2FibGUgdGhlIG5hdGl2ZSBh
cHBlYXJhbmNlLgotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVy
U3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3Im
IGJhY2tncm91bmRDb2xvcikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxl
ZChjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXIm
LCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKIAogICAgIC8vIEEgZ2VuZXJh
bCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMgc3VwcG9ydGVkIGF0IGFs
bC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpAQCAtMTM1LDEwICsxMzUsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCB0aGVtZUNoYW5nZWQoKSB7IH0KIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhl
bWUgaXMgYWJsZSB0byBkcmF3IHRoZSBmb2N1cyByaW5nLgotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0OwogCiAgICAgLy8g
QSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJv
dXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zl
cihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBwbGF0Zm9ybSBpcyBhYmxl
IHRvIHNob3cgZGF0YWxpc3Qgc3VnZ2VzdGlvbnMgZm9yIGEgZ2l2ZW4gaW5wdXQgdHlwZS4KICAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEYXRhTGlzdFVJKGNvbnN0IEF0b21pY1N0cmluZyYpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xNzcsMTYgKzE3NywxNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoQ1NTVmFsdWVJRCkgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29u
c3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVu
ZGVyU3R5bGUmKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5
bGUqKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBh
ZGRpbmdSaWdodChSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFs
IGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJu
IDA7IH0KLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJT
dHlsZSopIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFs
UGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUmKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJT
dHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFs
UGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0
dWFsIGJvb2wgcG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNpemUgcG9wdXBN
ZW51U2l6ZShjb25zdCBSZW5kZXJTdHlsZSosIEludFJlY3QmKSBjb25zdCB7IHJldHVybiBQb3B1
cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZU5vcm1hbDsgfQorICAgIHZpcnR1YWwgUG9wdXBNZW51
U3R5bGU6OlBvcHVwTWVudVNpemUgcG9wdXBNZW51U2l6ZShjb25zdCBSZW5kZXJTdHlsZSYsIElu
dFJlY3QmKSBjb25zdCB7IHJldHVybiBQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZU5vcm1h
bDsgfQogCiAgICAgdmlydHVhbCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzY3JvbGxiYXJDb250cm9s
U2l6ZUZvclBhcnQoQ29udHJvbFBhcnQpIHsgcmV0dXJuIFJlZ3VsYXJTY3JvbGxiYXI7IH0KIApA
QCAtMTk1LDkgKzE5NSw5IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5U
KQogICAgIC8vIFJldHVybnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5pbWF0aW9uIGZv
ciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdElu
dGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dy
ZXNzJikgY29uc3Q7CiAgICAgLy8gUmV0dXJucyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlv
biBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJh
dGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CisgICAgdmlydHVhbCBk
b3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNv
bnN0OwogICAgIHZpcnR1YWwgSW50UmVjdCBwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogI2VuZGlmCiAKQEAgLTIxOSw3
ICsyMTksNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5UKQot
ICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIq
LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZv
ckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciYsIGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihDb250cm9sUGFydCkgY29uc3Q7CiAjZW5kaWYKIApA
QCAtMjM1LDcgKzIzNSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHNo
b3VsZFNob3dQbGFjZWhvbGRlcldoZW5Gb2N1c2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRF
bGVtZW50JikgY29uc3Q7CiAKICAgICAvLyBGdW5jdGlvbnMgZm9yIDxzZWxlY3Q+IGVsZW1lbnRz
LgogICAgIHZpcnR1YWwgYm9vbCBkZWxlZ2F0ZXNNZW51TGlzdFJlbmRlcmluZygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CkBAIC0yNzAsMTkgKzI3MCwxOSBAQCBwcm90ZWN0ZWQ6CiAKICNpZiAh
VVNFKE5FV19USEVNRSkKICAgICAvLyBNZXRob2RzIGZvciBlYWNoIGFwcGVhcmFuY2UgdmFsdWUu
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVj
a2JveFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1
YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJikgY29uc3QgeyB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFJhZGlv
U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1Np
emUoUmVuZGVyU3R5bGUmKSBjb25zdCB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSop
IGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlJikg
Y29uc3QgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGlu
QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKIApAQCAtMjkwLDE1ICsyOTAsMTUgQEAgcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvRGVjb3JhdGlvbnMoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1
ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgeyByZXR1cm4gdHJ1
ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1l
bnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKQEAg
LTMwOSw0NCArMzA5LDQ0IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTcXVh
cmVCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxFKE1FVEVSX0VM
RU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RN
ZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9HUkVT
U19FTEVNRU5UKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBF
bGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5w
dXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVs
ZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbnB1dEZpZWxkU3BlZWNoQnV0
dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKICNlbmRpZgogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsg
cmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRp
b25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
ZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVk
aWFDb250cm9sU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFPdmVybGF5UGxheUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MiwxNiArNTIsMTYgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgaW50IGJh
c2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3Qg
Qm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzQ29udHJv
bFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxs
TGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvRGVjb3JhdGlv
bnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbkRl
Y29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQdXNoQnV0dG9uRGVjb3Jh
dGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxl
KikgY29uc3Qgb3ZlcnJpZGU7CkBAIC03NCwxNyArNzQsMTcgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lk
IGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFj
a1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUo
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29s
IHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoUFJPR1JF
U1NfRUxFTUVOVCkKICAgICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhlIGFu
aW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRp
b25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwogICAgIC8vIFJldHVybnMg
dGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAg
dmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0
aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICNlbmRpZgpAQCAtOTQsNyAr
OTQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBpbnQgc2xpZGVyVGlja09mZnNldEZyb21U
cmFja0NlbnRlcigpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxk
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRl
OwogCiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHByb3RlY3RlZDoKICNl
bmRpZgogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dQbGFjZWhvbGRlcldoZW5Gb2N1c2Vk
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEhhdmVTcGluQnV0dG9u
KEhUTUxJbnB1dEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAj
aWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhQ29udHJvbHNTdHlsZVNo
ZWV0KCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLm1tCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1MywxNSArMzUzLDE1IEBAIEZs
b2F0UmVjdCBSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmQKICAgICByZXR1cm4gYm9yZGVy
LnJlY3QoKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Q2hlY2tib3hTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVJT1M6OmFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgaWYgKCFzdHlsZS0+d2lkdGgo
KS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAg
aWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhlaWdodCgp
LmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMZW5ndGggbGVuZ3RoID0gTGVuZ3Ro
KHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3RkOjptYXgoc3R5bGUtPmZvbnRTaXplKCksIDEwKSkp
LCBGaXhlZCk7CisgICAgTGVuZ3RoIGxlbmd0aCA9IExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGNl
aWxmKHN0ZDo6bWF4KHN0eWxlLmZvbnRTaXplKCksIDEwKSkpLCBGaXhlZCk7CiAgICAgCi0gICAg
c3R5bGUtPnNldFdpZHRoKGxlbmd0aCk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChsZW5ndGgpOwor
ICAgIHN0eWxlLnNldFdpZHRoKGxlbmd0aCk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KGxlbmd0aCk7
CiB9CiAKIHN0YXRpYyBDR1BvaW50IHNob3J0ZW5lZChDR1BvaW50IHN0YXJ0LCBDR1BvaW50IGVu
ZCwgZmxvYXQgd2lkdGgpCkBAIC00MzcsMjcgKzQzNywyNyBAQCBpbnQgUmVuZGVyVGhlbWVJT1M6
OmJhc2VsaW5lUG9zaXRpb24oY29uCiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpiYXNlbGluZVBv
c2l0aW9uKGJveCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OmlzQ29udHJvbFN0eWxlZChj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3Qg
RmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25z
dAorYm9vbCBSZW5kZXJUaGVtZUlPUzo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5ZXImIGJhY2tn
cm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7CiAgICAgLy8gQnV0
dG9ucyBhbmQgTWVudWxpc3RCdXR0b25zIGFyZSBzdHlsZWQgaWYgdGhleSBjb250YWluIGEgYmFj
a2dyb3VuZCBpbWFnZS4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9u
UGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKLSAgICAg
ICAgcmV0dXJuICFzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yKS5hbHBoYSgpIHx8IHN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCktPmhhc0ltYWdl
KCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCB8fCBzdHls
ZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gIXN0
eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuYWxw
aGEoKSB8fCBzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCktPmhhc0ltYWdlKCk7CiAKLSAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gVGV4dEFyZWFQYXJ0KQotICAgICAgICByZXR1cm4gKnN0eWxlLT5iYWNrZ3JvdW5kTGF5
ZXJzKCkgIT0gYmFja2dyb3VuZDsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFRleHRG
aWVsZFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IFRleHRBcmVhUGFydCkKKyAgICAgICAg
cmV0dXJuICpzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCkgIT0gYmFja2dyb3VuZDsKIAogICAgIHJl
dHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91
bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFJh
ZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIGlmICghc3R5bGUt
PndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygp
KQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS5o
ZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGVuZ3RoIGxlbmd0aCA9
IExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHN0ZDo6bWF4KHN0eWxlLT5mb250U2l6ZSgp
LCAxMCkpKSwgRml4ZWQpOwotICAgIHN0eWxlLT5zZXRXaWR0aChsZW5ndGgpOwotICAgIHN0eWxl
LT5zZXRIZWlnaHQobGVuZ3RoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVzKEludFNpemUo
bGVuZ3RoLnZhbHVlKCkgLyAyLjBmLCBsZW5ndGgudmFsdWUoKSAvIDIuMGYpKTsKKyAgICBMZW5n
dGggbGVuZ3RoID0gTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3RkOjptYXgoc3R5bGUu
Zm9udFNpemUoKSwgMTApKSksIEZpeGVkKTsKKyAgICBzdHlsZS5zZXRXaWR0aChsZW5ndGgpOwor
ICAgIHN0eWxlLnNldEhlaWdodChsZW5ndGgpOworICAgIHN0eWxlLnNldEJvcmRlclJhZGl1cyhJ
bnRTaXplKGxlbmd0aC52YWx1ZSgpIC8gMi4wZiwgbGVuZ3RoLnZhbHVlKCkgLyAyLjBmKSk7CiB9
CiAKIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UmFkaW9EZWNvcmF0aW9ucyhjb25zdCBSZW5k
ZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCkBAIC01MTksMTAgKzUxOSwxMCBAQCBjb25zdCBmbG9hdCBNZW51TGlzdEFycm93V2lk
dGggPSA3OwogY29uc3QgZmxvYXQgTWVudUxpc3RBcnJvd0hlaWdodCA9IDY7CiBjb25zdCBmbG9h
dCBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdodCA9IDE5OwogCi1pbnQgUmVuZGVyVGhlbWVJT1M6
OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50
IFJlbmRlclRoZW1lSU9TOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlJiBz
dHlsZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1
dHRvblBhcnQpCi0gICAgICAgIHJldHVybiBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdodCArIHN0
eWxlLT5ib3JkZXJUb3BXaWR0aCgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVu
dWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gTWVudUxpc3RCdXR0b25QYWRkaW5nUmln
aHQgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpOwogICAgIHJldHVybiAwOwogfQogCkBAIC02MTks
MTAgKzYxOSw4IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdE1lbnVMaXN0QnV0dG8KICAg
ICAvLyAiLXdlYmtpdC1hcHBlYXJhbmNlOiBtZW51bGlzdC1idXR0b24iLgogICAgIGlmIChlbGVt
ZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3RUYWcpICYmICFlbGVtZW50Lmhhc0F0dHJp
YnV0ZShIVE1MTmFtZXM6Om11bHRpcGxlQXR0cikpCiAgICAgICAgIGFkanVzdFNlbGVjdExpc3RC
dXR0b25TdHlsZShzdHlsZSwgZWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPigmZWxlbWVudCk7Ci0g
ICAgICAgIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWxlKHN0eWxlLCAqaW5wdXRFbGVtZW50
KTsKLSAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5w
dXRUYWcpKQorICAgICAgICBhZGp1c3RJbnB1dEVsZW1lbnRCdXR0b25TdHlsZShzdHlsZSwgc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCY+KGlucHV0RWxlbWVudCkpOwogfQogCiBib29sIFJl
bmRlclRoZW1lSU9TOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVy
T2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCkBAIC03MTcsMTQgKzcxNSwxNCBAQCBjb25zdCBDR0Zsb2F0IGtUcmFja1RoaWNrbmVz
cyA9IDQuMDsKIGNvbnN0IENHRmxvYXQga1RyYWNrUmFkaXVzID0ga1RyYWNrVGhpY2tuZXNzIC8g
Mi4wOwogY29uc3QgaW50IGtEZWZhdWx0U2xpZGVyVGh1bWJTaXplID0gMTY7CiAKLXZvaWQgUmVu
ZGVyVGhlbWVJT1M6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0
b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVJT1M6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYgc2VsZWN0
b3IsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBS
ZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1l
bnQpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgYmUgcmVseWluZyBvbiBib3JkZXIg
cmFkaXVzIGZvciB0aGUgYXBwZWFyYW5jZSBvZiBvdXIgY29udHJvbHMgPHJkYXI6Ly9wcm9ibGVt
Lzc2NzU0OTM+CiAgICAgTGVuZ3RoIHJhZGl1c1dpZHRoKHN0YXRpY19jYXN0PGludD4oa1RyYWNr
UmFkaXVzKSwgRml4ZWQpOwogICAgIExlbmd0aCByYWRpdXNIZWlnaHQoc3RhdGljX2Nhc3Q8aW50
PihrVHJhY2tSYWRpdXMpLCBGaXhlZCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclJhZGl1cyhMZW5n
dGhTaXplKHJhZGl1c1dpZHRoLCByYWRpdXNIZWlnaHQpKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJS
YWRpdXMoTGVuZ3RoU2l6ZShyYWRpdXNXaWR0aCwgcmFkaXVzSGVpZ2h0KSk7CiB9CiAKIGJvb2wg
UmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBib3gs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtODA1
LDIwICs4MDMsMjAgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUcmFjayhjbwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVy
VGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lSU9TOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVt
ZW50JikgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBTbGlkZXJUaHVt
Ykhvcml6b250YWxQYXJ0ICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJWZXJ0
aWNhbFBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSAhPSBTbGlkZXJUaHVtYkhvcml6
b250YWxQYXJ0ICYmIHN0eWxlLmFwcGVhcmFuY2UoKSAhPSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFy
dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRW5mb3JjZSAiYm9yZGVyLXJhZGl1czogNTAl
Ii4KICAgICBMZW5ndGggbGVuZ3RoKDUwLjBmLCBQZXJjZW50KTsKLSAgICBzdHlsZS0+c2V0Qm9y
ZGVyUmFkaXVzKExlbmd0aFNpemUobGVuZ3RoLCBsZW5ndGgpKTsKKyAgICBzdHlsZS5zZXRCb3Jk
ZXJSYWRpdXMoTGVuZ3RoU2l6ZShsZW5ndGgsIGxlbmd0aCkpOwogCiAgICAgLy8gRW5mb3JjZSBh
IDE2eDE2IHNpemUgaWYgbm8gc2l6ZSBpcyBwcm92aWRlZC4KLSAgICBpZiAoc3R5bGUtPndpZHRo
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSB8fCBzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpIHsKKyAg
ICBpZiAoc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpIHx8IHN0eWxlLmhlaWdodCgp
LmlzQXV0bygpKSB7CiAgICAgICAgIExlbmd0aCBsZW5ndGggPSBMZW5ndGgoa0RlZmF1bHRTbGlk
ZXJUaHVtYlNpemUsIEZpeGVkKTsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKGxlbmd0aCk7Ci0g
ICAgICAgIHN0eWxlLT5zZXRIZWlnaHQobGVuZ3RoKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgo
bGVuZ3RoKTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KGxlbmd0aCk7CiAgICAgfQogfQogCkBA
IC04NDAsNyArODM4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUaHVtYkRl
YwogfQogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi1kb3VibGUgUmVuZGVyVGhlbWVJ
T1M6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mq
KSBjb25zdAorZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0K
QEAgLTk0NywxNCArOTQ1LDE0IEBAIGludCBSZW5kZXJUaGVtZUlPUzo6c2xpZGVyVGlja09mZnNl
dEZyb20KIH0KICNlbmRpZgogCi12b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RTZWFyY2hGaWVs
ZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RTZWFyY2hGaWVs
ZFN0eWxlKFN0eWxlUmVzb2x2ZXImIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1l
bnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxk
U3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsKIAogICAgIGlmICghZWxlbWVudCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFzdHlsZS0+aGFzQm9yZGVyKCkpCisgICAgaWYgKCFz
dHlsZS5oYXNCb3JkZXIoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVuZGVyQm94KiBib3gg
PSBlbGVtZW50LT5yZW5kZXJCb3goKTsKQEAgLTk2OSw3ICs5NjcsNyBAQCBib29sIFJlbmRlclRo
ZW1lSU9TOjpwYWludFNlYXJjaEZpZWxkRGVjCiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkRGVj
b3JhdGlvbnMoYm94LCBwYWludEluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lSU9T
OjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRq
dXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc2VsZWN0b3IsIFJlbmRlclN0eWxlJiBzdHls
ZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJUaGVtZTo6YWRqdXN0QnV0
dG9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsKIApAQCAtOTc5LDcgKzk3Nyw3IEBA
IHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFMKICAgICAvLyBhbmQgdGhl
IHJlbmRlciB2aWV3LgogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZW1TaXplID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgxLjAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKTsK
ICAgICBpbnQgcGl4ZWxzID0gZW1TaXplLT5jb21wdXRlTGVuZ3RoPGludD4oQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YShzdHlsZSwgbnVsbHB0ciwgbnVsbHB0ciwgMS4wLCBmYWxzZSkpOwotICAg
IHN0eWxlLT5zZXRQYWRkaW5nQm94KExlbmd0aEJveCgwLCBwaXhlbHMsIDAsIHBpeGVscykpOwor
ICAgIHN0eWxlLnNldFBhZGRpbmdCb3goTGVuZ3RoQm94KDAsIHBpeGVscywgMCwgcGl4ZWxzKSk7
CiAKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMTEsMTQgKzEwMDks
MTQgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQdXNoQnV0dG9uRGVjbwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6c2V0QnV0dG9uU2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjpzZXRCdXR0b25TaXplKFJl
bmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdo
dCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlm
ICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgp
LmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYm
ICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVXNl
IHRoZSBmb250IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGNv
bnRyb2wuCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihDb250
cm9sQmFzZUhlaWdodCAvIENvbnRyb2xCYXNlRm9udFNpemUgKiBzdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCkuY29tcHV0ZWRTaXplKCkpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5n
dGgoc3RhdGljX2Nhc3Q8aW50PihDb250cm9sQmFzZUhlaWdodCAvIENvbnRyb2xCYXNlRm9udFNp
emUgKiBzdHlsZS5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKSksIEZpeGVkKSk7CiB9
CiAKIGNvbnN0IGludCBrVGh1bWJuYWlsQm9yZGVyU3Ryb2tlV2lkdGggPSAxOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHJldmlzaW9uIDE3MDM3MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RS
ZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAot
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25z
dCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChj
b25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBj
b25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1
YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdCBvdmVycmlkZTsKQEAgLTY5LDM2ICs2OSwzNiBAQCBwdWJsaWM6
CiAgICAgLy8gU3lzdGVtIGZvbnRzLgogICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KENTU1Zh
bHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBp
bnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNs
aWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAog
I2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIHZpcnR1YWwgSW50U2l6ZSBzbGlkZXJU
aWNrU2l6ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgaW50IHNsaWRlclRpY2tPZmZz
ZXRGcm9tVHJhY2tDZW50ZXIoKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCi0gICAgdmlydHVh
bCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHls
ZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5n
VG9wKFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJ
bnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXplIHBvcHVwTWVudVNpemUoY29uc3Qg
UmVuZGVyU3R5bGUqLCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBpbnQg
cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJl
bmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXplIHBvcHVwTWVudVNpemUoY29uc3QgUmVuZGVy
U3R5bGUmLCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcG9wc01lbnVC
eUFycm93S2V5cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogI2lmIEVOQUJM
RShNRVRFUl9FTEVNRU5UKQotICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMo
Y29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciYsIGNv
bnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRl
cihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNv
bnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAg
ICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhl
IHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQ
cm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwogICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9m
IHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBkb3VibGUg
YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NC
YXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIEludFJlY3Qg
cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJl
Y3QmKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCkBAIC0xMjUsNDEgKzEyNSw0MSBAQCBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVs
ZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVh
bCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRl
eHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShQ
Uk9HUkVTU19FTEVNRU5UKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29s
IHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNr
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1
YWwgYm9vbCBwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsK
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFy
dFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTE3NiwxNCArMTc2LDE0IEBAIHByaXZhdGU6
CiAgICAgRmxvYXRSZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3Qm
IGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCYgcGFydFJlbmRlcmVyLCBjb25zdCBG
bG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogCiAgICAgLy8gR2V0
IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LiBVc2VkIGJ5IHNvbWUgb2YgdGhl
IGNvbnRyb2xzIChsaWtlIGJ1dHRvbnMpLgotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVG
b3JGb250KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6
ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBOU0NvbnRyb2xTaXplIGNv
bnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSYpIGNvbnN0OworICAgIE5TQ29udHJvbFNpemUg
Y29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJikgY29uc3Q7CiAgICAgTlNDb250
cm9sU2l6ZSBjb250cm9sU2l6ZUZvckNlbGwoTlNDZWxsKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMs
IGNvbnN0IEludFNpemUmIG1pblNpemUsIGZsb2F0IHpvb21MZXZlbCA9IDEuMGYpIGNvbnN0Owog
ICAgIHZvaWQgc2V0Q29udHJvbFNpemUoTlNDZWxsKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMsIGNv
bnN0IEludFNpemUmIG1pblNpemUsIGZsb2F0IHpvb21MZXZlbCA9IDEuMGYpOwotICAgIHZvaWQg
c2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0
OwotICAgIEludFNpemUgc2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBz
aXplcykgY29uc3Q7Ci0gICAgSW50U2l6ZSBzaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSos
IGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKLSAgICB2b2lkIHNldEZvbnRGcm9tQ29udHJv
bFNpemUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7
CisgICAgdm9pZCBzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBz
aXplcykgY29uc3Q7CisgICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJTdHlsZSYsIGNvbnN0
IEludFNpemUqIHNpemVzKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJl
bmRlclN0eWxlJiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAgIHZvaWQgc2V0Rm9u
dEZyb21Db250cm9sU2l6ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBOU0NvbnRyb2xT
aXplKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRlKE5TQ2VsbCosIGNvbnN0
IFJlbmRlck9iamVjdCYpOwogICAgIHZvaWQgdXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCosIGNv
bnN0IFJlbmRlck9iamVjdCYpOwpAQCAtMjAzLDcgKzIwMyw3IEBAIHByaXZhdGU6CiAgICAgY29u
c3QgSW50U2l6ZSogY2FuY2VsQnV0dG9uU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBJbnRTaXpl
KiByZXN1bHRzQnV0dG9uU2l6ZXMoKSBjb25zdDsKICAgICB2b2lkIHNldFNlYXJjaENlbGxTdGF0
ZShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBzZXRTZWFy
Y2hGaWVsZFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2b2lkIHNldFNlYXJjaEZpZWxk
U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCiAgICAgTlNQb3BVcEJ1dHRvbkNlbGwgKnBvcHVw
QnV0dG9uKCkgY29uc3Q7CiAgICAgTlNTZWFyY2hGaWVsZENlbGwgKnNlYXJjaCgpIGNvbnN0OwpA
QCAtMjE0LDExICsyMTQsMTEgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5U
KQogICAgIE5TTGV2ZWxJbmRpY2F0b3JTdHlsZSBsZXZlbEluZGljYXRvclN0eWxlRm9yKENvbnRy
b2xQYXJ0KSBjb25zdDsKLSAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCAqbGV2ZWxJbmRpY2F0b3JG
b3IoY29uc3QgUmVuZGVyTWV0ZXIqKSBjb25zdDsKKyAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCAq
bGV2ZWxJbmRpY2F0b3JGb3IoY29uc3QgUmVuZGVyTWV0ZXImKSBjb25zdDsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgaW50IG1pbmltdW1Qcm9ncmVzc0Jhckhl
aWdodChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIGludCBtaW5pbXVtUHJvZ3Jlc3NCYXJIZWln
aHQoUmVuZGVyU3R5bGUmKSBjb25zdDsKICAgICBjb25zdCBJbnRTaXplKiBwcm9ncmVzc0JhclNp
emVzKCkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBwcm9ncmVzc0Jhck1hcmdpbnMoTlNDb250cm9s
U2l6ZSkgY29uc3Q7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTk5LDE3ICs1OTksMTcg
QEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6dXNlc1Rlc3RNb2RlRm9jdXNSaQogICAgIHJldHVybiBX
ZWJDb3JlOjp1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcigpOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lTWFjOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBC
b3JkZXJEYXRhJiBib3JkZXIsCitib29sIFJlbmRlclRoZW1lTWFjOjppc0NvbnRyb2xTdHlsZWQo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsbExheWVyJiBiYWNrZ3Jv
dW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAogewotICAgIGlmIChzdHls
ZS0+YXBwZWFyYW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9
PSBUZXh0QXJlYVBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAg
ICAgICAgcmV0dXJuIHN0eWxlLT5ib3JkZXIoKSAhPSBib3JkZXI7CisgICAgaWYgKHN0eWxlLmFw
cGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBUZXh0
QXJlYVBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICBy
ZXR1cm4gc3R5bGUuYm9yZGVyKCkgIT0gYm9yZGVyOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMg
aG9ycmlibGUsIGJ1dCB0aGVyZSBpcyBub3QgbXVjaCBlbHNlIHRoYXQgY2FuIGJlIGRvbmUuICBN
ZW51IGxpc3RzIGNhbm5vdCBkcmF3IHByb3Blcmx5IHdoZW4KICAgICAvLyBzY2FsZWQuICBUaGV5
IGNhbid0IHJlYWxseSBkcmF3IHByb3Blcmx5IHdoZW4gdHJhbnNmb3JtZWQgZWl0aGVyLiAgV2Ug
Y2FuJ3QgZGV0ZWN0IHRoZSB0cmFuc2Zvcm0gY2FzZSBhdCBzdHlsZQogICAgIC8vIGFkanVzdG1l
bnQgdGltZSBzbyB0aGF0IHdpbGwganVzdCBoYXZlIHRvIHN0YXkgYnJva2VuLiAgV2UgY2FuIGhv
d2V2ZXIgZGV0ZWN0IHRoYXQgd2UncmUgem9vbWluZy4gIElmIHpvb21pbmcKICAgICAvLyBpcyBp
biBlZmZlY3Qgd2UgdHJlYXQgaXQgbGlrZSB0aGUgY29udHJvbCBpcyBzdHlsZWQuCi0gICAgaWYg
KHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0ICYmIHN0eWxlLT5lZmZlY3RpdmVa
b29tKCkgIT0gMS4wZikKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFy
dCAmJiBzdHlsZS5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVy
LCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpOwpAQCAtNzQzLDkgKzc0Myw5IEBAIGJvb2wg
UmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTdXBwb3J0c1RpbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpemVGb3JGb250KFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3QKK05TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6OmNvbnRy
b2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaW50IGZvbnRT
aXplID0gc3R5bGUtPmZvbnRTaXplKCk7CisgICAgaW50IGZvbnRTaXplID0gc3R5bGUuZm9udFNp
emUoKTsKICAgICBpZiAoZm9udFNpemUgPj0gMTYpCiAgICAgICAgIHJldHVybiBOU1JlZ3VsYXJD
b250cm9sU2l6ZTsKICAgICBpZiAoZm9udFNpemUgPj0gMTEpCkBAIC03NzMsMzUgKzc3MywzNSBA
QCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRDb250cm9sU2l6ZShOU0NlCiAgICAgICAgIFtjZWxs
IHNldENvbnRyb2xTaXplOnNpemVdOwogfQogCi1JbnRTaXplIFJlbmRlclRoZW1lTWFjOjpzaXpl
Rm9yRm9udChSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAor
SW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpv
b20oKSAhPSAxLjBmKSB7CisgICAgaWYgKHN0eWxlLmVmZmVjdGl2ZVpvb20oKSAhPSAxLjBmKSB7
CiAgICAgICAgIEludFNpemUgcmVzdWx0ID0gc2l6ZXNbY29udHJvbFNpemVGb3JGb250KHN0eWxl
KV07Ci0gICAgICAgIHJldHVybiBJbnRTaXplKHJlc3VsdC53aWR0aCgpICogc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKSwgcmVzdWx0LmhlaWdodCgpICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7Cisg
ICAgICAgIHJldHVybiBJbnRTaXplKHJlc3VsdC53aWR0aCgpICogc3R5bGUuZWZmZWN0aXZlWm9v
bSgpLCByZXN1bHQuaGVpZ2h0KCkgKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogICAgIH0KICAg
ICByZXR1cm4gc2l6ZXNbY29udHJvbFNpemVGb3JGb250KHN0eWxlKV07CiB9CiAKLUludFNpemUg
UmVuZGVyVGhlbWVNYWM6OnNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lTWFjOjpzaXplRm9y
U3lzdGVtRm9udChSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25z
dAogewotICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKKyAgICBpZiAo
c3R5bGUuZWZmZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKICAgICAgICAgSW50U2l6ZSByZXN1bHQg
PSBzaXplc1tjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUpXTsKLSAgICAgICAgcmV0dXJu
IEludFNpemUocmVzdWx0LndpZHRoKCkgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpLCByZXN1bHQu
aGVpZ2h0KCkgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgcmV0dXJuIEludFNp
emUocmVzdWx0LndpZHRoKCkgKiBzdHlsZS5lZmZlY3RpdmVab29tKCksIHJlc3VsdC5oZWlnaHQo
KSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgfQogICAgIHJldHVybiBzaXplc1tjb250
cm9sU2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUpXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6
c2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMp
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKIHsKICAgICAvLyBGSVhNRTogQ2hl
Y2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13aWR0aCBp
bnRvIGFjY291bnQuCiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvckZvbnQoc3R5bGUsIHNpemVz
KTsKLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndp
ZHRoKCkgPiAwKQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwg
Rml4ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0
KCkgPiAwKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBG
aXhlZCkpOworICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6
ZS53aWR0aCgpID4gMCkKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgo
KSwgRml4ZWQpKTsKKyAgICBpZiAoc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6ZS5oZWln
aHQoKSA+IDApCisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9sU2l6
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBOU0NvbnRyb2xTaXplIGNvbnRy
b2xTaXplKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9sU2l6
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBOU0NvbnRyb2xTaXplIGNvbnRy
b2xTaXplKSBjb25zdAogewogICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAg
ICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOwpAQCAtODA5LDE5ICs4
MDksMTkgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9sUwogCiAgICAg
TlNGb250KiBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVtRm9u
dFNpemVGb3JDb250cm9sU2l6ZTpjb250cm9sU2l6ZV1dOwogICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRPbmVGYW1pbHkoW2ZvbnQgd2ViQ29yZUZhbWlseU5hbWVdKTsKLSAgICBmb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShbZm9udCBwb2ludFNp
emVdICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENv
bXB1dGVkU2l6ZShbZm9udCBwb2ludFNpemVdICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShbZm9udCBwb2ludFNpemVdICogc3R5
bGUuZWZmZWN0aXZlWm9vbSgpKTsKIAogICAgIC8vIFJlc2V0IGxpbmUgaGVpZ2h0Ci0gICAgc3R5
bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAg
IHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwog
Ci0gICAgaWYgKHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkKLSAg
ICAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoMCk7CisgICAgaWYgKHN0eWxlLnNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pKQorICAgICAgICBzdHlsZS5mb250KCkudXBkYXRlKDAp
OwogfQogCi1OU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvclN5c3Rl
bUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVt
ZU1hYzo6Y29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QK
IHsKLSAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKKyAgICBpbnQgZm9udFNp
emUgPSBzdHlsZS5mb250U2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA+PSBbTlNGb250IHN5c3Rl
bUZvbnRTaXplRm9yQ29udHJvbFNpemU6TlNSZWd1bGFyQ29udHJvbFNpemVdKQogICAgICAgICBy
ZXR1cm4gTlNSZWd1bGFyQ29udHJvbFNpemU7CiAgICAgaWYgKGZvbnRTaXplID49IFtOU0ZvbnQg
c3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpOU1NtYWxsQ29udHJvbFNpemVdKQpAQCAtODQ1
LDcgKzg0NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEZpZWxkKGNvbnMKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRGaWVs
ZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKQEAgLTg2Nyw3ICs4NjcsNyBAQCBi
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludFRleHRBcmVhKGNvbnN0CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3QKIHsKIH0KIApAQCAtOTEzLDcgKzkxMyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50TWVudUxpc3QoY29uc3QKIAogICAgIC8vIE5vdyBpbmZsYXRlIGl0IHRvIGFjY291
bnQgZm9yIHRoZSBzaGFkb3cuCiAgICAgRmxvYXRSZWN0IGluZmxhdGVkUmVjdCA9IHJlY3Q7Ci0g
ICAgaWYgKHJlY3Qud2lkdGgoKSA+PSBtaW5pbXVtTWVudUxpc3RTaXplKCZyZW5kZXJlci5zdHls
ZSgpKSkKKyAgICBpZiAocmVjdC53aWR0aCgpID49IG1pbmltdW1NZW51TGlzdFNpemUocmVuZGVy
ZXIuc3R5bGUoKSkpCiAgICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KHJlY3QsIHNp
emUsIHBvcHVwQnV0dG9uTWFyZ2lucygpLCB6b29tTGV2ZWwpOwogCiAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CkBAIC05NDMsOSAr
OTQzLDkgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdChjb25zdAogCiAjaWYg
RU5BQkxFKE1FVEVSX0VMRU1FTlQpCiAKLUludFNpemUgUmVuZGVyVGhlbWVNYWM6Om1ldGVyU2l6
ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciogcmVuZGVyTWV0ZXIsIGNvbnN0IEludFJlY3Qm
IGJvdW5kcykgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVNYWM6Om1ldGVyU2l6ZUZvckJvdW5k
cyhjb25zdCBSZW5kZXJNZXRlciYgcmVuZGVyTWV0ZXIsIGNvbnN0IEludFJlY3QmIGJvdW5kcykg
Y29uc3QKIHsKLSAgICBpZiAoTm9Db250cm9sUGFydCA9PSByZW5kZXJNZXRlci0+c3R5bGUoKS5h
cHBlYXJhbmNlKCkpCisgICAgaWYgKE5vQ29udHJvbFBhcnQgPT0gcmVuZGVyTWV0ZXIuc3R5bGUo
KS5hcHBlYXJhbmNlKCkpCiAgICAgICAgIHJldHVybiBib3VuZHMuc2l6ZSgpOwogCiAgICAgTlNM
ZXZlbEluZGljYXRvckNlbGwqIGNlbGwgPSBsZXZlbEluZGljYXRvckZvcihyZW5kZXJNZXRlcik7
CkBAIC05NjIsNyArOTYyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZXRlcihjb25z
dCBSZQogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWlu
dEluZm8uY29udGV4dCk7CiAKLSAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCogY2VsbCA9IGxldmVs
SW5kaWNhdG9yRm9yKHRvUmVuZGVyTWV0ZXIoJnJlbmRlck9iamVjdCkpOworICAgIE5TTGV2ZWxJ
bmRpY2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJbmRpY2F0b3JGb3IodG9SZW5kZXJNZXRlcihyZW5k
ZXJPYmplY3QpKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBh
aW50SW5mby5jb250ZXh0KTsKIAogICAgIFtjZWxsIGRyYXdXaXRoRnJhbWU6cmVjdCBpblZpZXc6
ZG9jdW1lbnRWaWV3Rm9yKHJlbmRlck9iamVjdCldOwpAQCAtMTAwMSwxNiArMTAwMSwxNiBAQCBO
U0xldmVsSW5kaWNhdG9yU3R5bGUgUmVuZGVyVGhlbWVNYWM6OmxlCiAKIH0KIAotTlNMZXZlbElu
ZGljYXRvckNlbGwqIFJlbmRlclRoZW1lTWFjOjpsZXZlbEluZGljYXRvckZvcihjb25zdCBSZW5k
ZXJNZXRlciogcmVuZGVyTWV0ZXIpIGNvbnN0CitOU0xldmVsSW5kaWNhdG9yQ2VsbCogUmVuZGVy
VGhlbWVNYWM6OmxldmVsSW5kaWNhdG9yRm9yKGNvbnN0IFJlbmRlck1ldGVyJiByZW5kZXJNZXRl
cikgY29uc3QKIHsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJNZXRlci0+
c3R5bGUoKTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJNZXRlci5zdHls
ZSgpOwogICAgIEFTU0VSVChzdHlsZS5hcHBlYXJhbmNlKCkgIT0gTm9Db250cm9sUGFydCk7CiAK
ICAgICBpZiAoIW1fbGV2ZWxJbmRpY2F0b3IpCiAgICAgICAgIG1fbGV2ZWxJbmRpY2F0b3IgPSBh
ZG9wdE5TKFtbTlNMZXZlbEluZGljYXRvckNlbGwgYWxsb2NdIGluaXRXaXRoTGV2ZWxJbmRpY2F0
b3JTdHlsZTpOU0NvbnRpbnVvdXNDYXBhY2l0eUxldmVsSW5kaWNhdG9yU3R5bGVdKTsKICAgICBO
U0xldmVsSW5kaWNhdG9yQ2VsbCogY2VsbCA9IG1fbGV2ZWxJbmRpY2F0b3IuZ2V0KCk7CiAKLSAg
ICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyTWV0ZXItPm1ldGVyRWxlbWVudCgp
OworICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJNZXRlci5tZXRlckVsZW1l
bnQoKTsKICAgICBkb3VibGUgdmFsdWUgPSBlbGVtZW50LT52YWx1ZSgpOwogCiAgICAgLy8gQmVj
YXVzZSBOU0xldmVsSW5kaWNhdG9yQ2VsbCBkb2VzIG5vdCBzdXBwb3J0IG9wdGltdW0taW4tdGhl
LW1pZGRsZSB0eXBlIGNvbG9yaW5nLApAQCAtMTA3MiwzNSArMTA3MiwzNSBAQCBJbnRSZWN0IFJl
bmRlclRoZW1lTWFjOjpwcm9ncmVzc0JhclJlY3RGCiAgICAgICAgIHJldHVybiBwcm9ncmVzc0Jh
ckJvdW5kczsKIAogICAgIGZsb2F0IHpvb21MZXZlbCA9IHJlbmRlck9iamVjdC5zdHlsZSgpLmVm
ZmVjdGl2ZVpvb20oKTsKLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNp
emVGb3JGb250KCZyZW5kZXJPYmplY3Quc3R5bGUoKSk7CisgICAgTlNDb250cm9sU2l6ZSBjb250
cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChyZW5kZXJPYmplY3Quc3R5bGUoKSk7CiAgICAg
SW50U2l6ZSBzaXplID0gcHJvZ3Jlc3NCYXJTaXplcygpW2NvbnRyb2xTaXplXTsKICAgICBzaXpl
LnNldEhlaWdodChzaXplLmhlaWdodCgpICogem9vbUxldmVsKTsKICAgICBzaXplLnNldFdpZHRo
KHByb2dyZXNzQmFyQm91bmRzLndpZHRoKCkpOwogCiAgICAgLy8gTm93IGluZmxhdGUgaXQgdG8g
YWNjb3VudCBmb3IgdGhlIHNoYWRvdy4KICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHByb2dy
ZXNzQmFyQm91bmRzOwotICAgIGlmIChwcm9ncmVzc0JhckJvdW5kcy5oZWlnaHQoKSA8PSBtaW5p
bXVtUHJvZ3Jlc3NCYXJIZWlnaHQoJnJlbmRlck9iamVjdC5zdHlsZSgpKSkKKyAgICBpZiAocHJv
Z3Jlc3NCYXJCb3VuZHMuaGVpZ2h0KCkgPD0gbWluaW11bVByb2dyZXNzQmFySGVpZ2h0KHJlbmRl
ck9iamVjdC5zdHlsZSgpKSkKICAgICAgICAgaW5mbGF0ZWRSZWN0ID0gSW50UmVjdChpbmZsYXRl
UmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIHByb2dyZXNzQmFyTWFyZ2lucyhjb250cm9sU2l6ZSks
IHpvb21MZXZlbCkpOwogCiAgICAgcmV0dXJuIGluZmxhdGVkUmVjdDsKIH0KIAotaW50IFJlbmRl
clRoZW1lTWFjOjptaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAoraW50IFJlbmRlclRoZW1lTWFjOjptaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQoUmVuZGVy
U3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIHJldHVybiBzaXplRm9yU3lzdGVtRm9udChzdHls
ZSwgcHJvZ3Jlc3NCYXJTaXplcygpKS5oZWlnaHQoKTsKIH0KIAotZG91YmxlIFJlbmRlclRoZW1l
TWFjOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNz
KikgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVtZU1hYzo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxG
b3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHByb2dy
ZXNzQW5pbWF0aW9uRnJhbWVSYXRlOwogfQogCi1kb3VibGUgUmVuZGVyVGhlbWVNYWM6OmFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAorZG91Ymxl
IFJlbmRlclRoZW1lTWFjOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclBy
b2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25OdW1GcmFtZXMg
KiBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lUmF0ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKQEAg
LTExMTAsNyArMTExMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jlc3NCYXIo
Y28KICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHBy
b2dyZXNzQmFyUmVjdEZvckJvdW5kcyhyZW5kZXJPYmplY3QsIHJlY3QpOwotICAgIE5TQ29udHJv
bFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoJnJlbmRlck9iamVjdC5zdHls
ZSgpKTsKKyAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250
KHJlbmRlck9iamVjdC5zdHlsZSgpKTsKIAogICAgIGNvbnN0IFJlbmRlclByb2dyZXNzJiByZW5k
ZXJQcm9ncmVzcyA9ICp0b1JlbmRlclByb2dyZXNzKCZyZW5kZXJPYmplY3QpOwogICAgIEhJVGhl
bWVUcmFja0RyYXdJbmZvIHRyYWNrSW5mbzsKQEAgLTEzMzcsMjIgKzEzMzcsMjIgQEAgc3RhdGlj
IGNvbnN0IEludFNpemUqIG1lbnVMaXN0QnV0dG9uU2l6ZQogICAgIHJldHVybiBzaXplczsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSkgY29uc3QKIHsKICAg
ICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHN0eWxlKTsK
IAotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsK
KyAgICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0UGFkZGluZygpOwogCiAg
ICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvLgotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKEF1dG8pKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKIAogICAgIC8v
IFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0byBwcmUKLSAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQ
UkUpOworICAgIHN0eWxlLnNldFdoaXRlU3BhY2UoUFJFKTsKIAogICAgIC8vIFNldCB0aGUgZm9y
ZWdyb3VuZCBjb2xvciB0byBibGFjayBvciBncmF5IHdoZW4gd2UgaGF2ZSB0aGUgYXF1YSBsb29r
LgogICAgIC8vIENhc3QgdG8gUkdCMzIgaXMgdG8gd29yayBhcm91bmQgYSBjb21waWxlciBidWcu
Ci0gICAgc3R5bGUtPnNldENvbG9yKGUgJiYgIWUtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpID8g
c3RhdGljX2Nhc3Q8UkdCQTMyPihDb2xvcjo6YmxhY2spIDogQ29sb3I6OmRhcmtHcmF5KTsKKyAg
ICBzdHlsZS5zZXRDb2xvcighZS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSA/IHN0YXRpY19jYXN0
PFJHQkEzMj4oQ29sb3I6OmJsYWNrKSA6IENvbG9yOjpkYXJrR3JheSk7CiAKICAgICAvLyBTZXQg
dGhlIGJ1dHRvbidzIHZlcnRpY2FsIHNpemUuCiAgICAgc2V0U2l6ZUZyb21Gb250KHN0eWxlLCBt
ZW51TGlzdEJ1dHRvblNpemVzKCkpOwpAQCAtMTM2Miw1MiArMTM2Miw1MiBAQCB2b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlCiAgICAgLy8gc3lzdGVtIGZvbnQgZm9yIHRo
ZSBjb250cm9sIHNpemUgaW5zdGVhZC4KICAgICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHN0eWxl
UmVzb2x2ZXIsIHN0eWxlLCBjb250cm9sU2l6ZSk7CiAKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93
KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotaW50IFJl
bmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAoraW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVu
ZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09
IE1lbnVsaXN0UGFydCkKLSAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9s
U2l6ZUZvckZvbnQoc3R5bGUpKVtsZWZ0UGFkZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
OwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKLSAg
ICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ0xlZnQgKiBzdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQorICAgICAg
ICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2xl
ZnRQYWRkaW5nXSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoc3R5bGUuYXBwZWFy
YW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKKyAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVw
UGFkZGluZ0xlZnQgKiBzdHlsZS5lZmZlY3RpdmVab29tKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAK
LWludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
UmlnaHQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+YXBwZWFy
YW5jZSgpID09IE1lbnVsaXN0UGFydCkKLSAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGlu
Zyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtyaWdodFBhZGRpbmddICogc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRv
blBhcnQpIHsKLSAgICAgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBi
YXNlRm9udFNpemU7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQp
CisgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0
eWxlKSlbcmlnaHRQYWRkaW5nXSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoc3R5
bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgeworICAgICAgICBmbG9hdCBm
b250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplOwogICAgICAgICBmbG9h
dCBhcnJvd1dpZHRoID0gYmFzZUFycm93V2lkdGggKiBmb250U2NhbGU7Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGFycm93V2lkdGggKyAoYXJyb3dQYWRkaW5nTGVmdCAr
IGFycm93UGFkZGluZ1JpZ2h0ICsgcGFkZGluZ0JlZm9yZVNlcGFyYXRvcikgKiBzdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGFy
cm93V2lkdGggKyAoYXJyb3dQYWRkaW5nTGVmdCArIGFycm93UGFkZGluZ1JpZ2h0ICsgcGFkZGlu
Z0JlZm9yZVNlcGFyYXRvcikgKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpKTsKICAgICB9CiAgICAg
cmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdU
b3AoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cElu
dGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0
eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gcG9wdXBC
dXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW3RvcFBhZGRpbmddICogc3R5
bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51
bGlzdEJ1dHRvblBhcnQpCi0gICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdUb3AgKiBz
dHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVu
dWxpc3RQYXJ0KQorICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXpl
Rm9yRm9udChzdHlsZSkpW3RvcFBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAg
IGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICBy
ZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nVG9wICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOwogICAg
IHJldHVybiAwOwogfQogCi1pbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
Qm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZU1hYzo6cG9w
dXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAg
IGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKLSAgICAgICAgcmV0dXJu
IHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtib3R0b21QYWRk
aW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQotICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRk
aW5nQm90dG9tICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoc3R5bGUuYXBwZWFy
YW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGlu
Zyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtib3R0b21QYWRkaW5nXSAqIHN0eWxlLmVmZmVj
dGl2ZVpvb20oKTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9u
UGFydCkKKyAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ0JvdHRvbSAqIHN0eWxlLmVm
ZmVjdGl2ZVpvb20oKTsKICAgICByZXR1cm4gMDsKIH0KIAotUG9wdXBNZW51U3R5bGU6OlBvcHVw
TWVudVNpemUgUmVuZGVyVGhlbWVNYWM6OnBvcHVwTWVudVNpemUoY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlLCBJbnRSZWN0JiByZWN0KSBjb25zdAorUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNp
emUgUmVuZGVyVGhlbWVNYWM6OnBvcHVwTWVudVNpemUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIE5TUG9wVXBCdXR0b25DZWxsKiBwb3B1cEJ1
dHRvbiA9IHRoaXMtPnBvcHVwQnV0dG9uKCk7Ci0gICAgTlNDb250cm9sU2l6ZSBzaXplID0gY29u
dHJvbFNpemVGb3JDZWxsKHBvcHVwQnV0dG9uLCBwb3B1cEJ1dHRvblNpemVzKCksIHJlY3Quc2l6
ZSgpLCBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBOU0NvbnRyb2xTaXplIHNpemUgPSBj
b250cm9sU2l6ZUZvckNlbGwocG9wdXBCdXR0b24sIHBvcHVwQnV0dG9uU2l6ZXMoKSwgcmVjdC5z
aXplKCksIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgc3dpdGNoIChzaXplKSB7CiAgICAg
Y2FzZSBOU1JlZ3VsYXJDb250cm9sU2l6ZToKICAgICAgICAgcmV0dXJuIFBvcHVwTWVudVN0eWxl
OjpQb3B1cE1lbnVTaXplTm9ybWFsOwpAQCAtMTQ1Miw3ICsxNDUyLDcgQEAgY29uc3QgSW50U2l6
ZSogUmVuZGVyVGhlbWVNYWM6Om1lbnVMaXN0UwogICAgIHJldHVybiBzaXplczsKIH0KIAotaW50
IFJlbmRlclRoZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKK2ludCBSZW5kZXJUaGVtZU1hYzo6bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHls
ZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCBt
ZW51TGlzdFNpemVzKCkpLndpZHRoKCk7CiB9CkBAIC0xNDYwLDkgKzE0NjAsOSBAQCBpbnQgUmVu
ZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNpemUoCiBjb25zdCBpbnQgdHJhY2tXaWR0aCA9
IDU7CiBjb25zdCBpbnQgdHJhY2tSYWRpdXMgPSAyOwogCi12b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVHJhY2tT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QK
IHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNo
YWRvdyhudWxscHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUcmFj
ayhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByKQpAQCAtMTUwNiwxMCArMTUwNiwxMCBAQCBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludFNsaWRlclRyYWNrKGNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAog
ewogICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIs
IHN0eWxlLCBlbGVtZW50KTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAg
IHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogY29uc3QgZmxvYXQgdmVydGljYWxT
bGlkZXJIZWlnaHRQYWRkaW5nID0gMC4xZjsKQEAgLTE2MDgsNyArMTYwOCw3IEBAIHZvaWQgUmVu
ZGVyVGhlbWVNYWM6OnNldFNlYXJjaENlbGxTdGF0ZSgKIHsKICAgICBOU1NlYXJjaEZpZWxkQ2Vs
bCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKLSAgICBbc2VhcmNoIHNldENvbnRyb2xTaXpl
OmNvbnRyb2xTaXplRm9yRm9udCgmby5zdHlsZSgpKV07CisgICAgW3NlYXJjaCBzZXRDb250cm9s
U2l6ZTpjb250cm9sU2l6ZUZvckZvbnQoby5zdHlsZSgpKV07CiAKICAgICAvLyBVcGRhdGUgdGhl
IHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCiAgICAgdXBkYXRlRW5hYmxlZFN0YXRlKHNl
YXJjaCwgbyk7CkBAIC0xNjIxLDQ1ICsxNjIxLDQ1IEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRo
ZW1lTWFjOjpzZWFyY2hGaWUKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lTWFjOjpzZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBj
b25zdAogewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmll
ZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5p
c0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgaWYg
KCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhlaWdodCgpLmlz
QXV0bygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBk
ZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJvbC4KICAgICBzZXRTaXpl
RnJvbUZvbnQoc3R5bGUsIHNlYXJjaEZpZWxkU2l6ZXMoKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVN
YWM6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
UmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAvLyBPdmVycmlkZSBi
b3JkZXIuCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgY29uc3Qgc2hvcnQgYm9yZGVy
V2lkdGggPSAyICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVy
TGVmdFdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyTGVmdFN0eWxlKElO
U0VUKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmlnaHRXaWR0aChib3JkZXJXaWR0aCk7Ci0gICAg
c3R5bGUtPnNldEJvcmRlclJpZ2h0U3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJC
b3R0b21XaWR0aChib3JkZXJXaWR0aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlckJvdHRvbVN0eWxl
KElOU0VUKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyVG9wV2lkdGgoYm9yZGVyV2lkdGgpOwotICAg
IHN0eWxlLT5zZXRCb3JkZXJUb3BTdHlsZShJTlNFVCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIo
KTsKKyAgICBjb25zdCBzaG9ydCBib3JkZXJXaWR0aCA9IDIgKiBzdHlsZS5lZmZlY3RpdmVab29t
KCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyTGVmdFdpZHRoKGJvcmRlcldpZHRoKTsKKyAgICBzdHls
ZS5zZXRCb3JkZXJMZWZ0U3R5bGUoSU5TRVQpOworICAgIHN0eWxlLnNldEJvcmRlclJpZ2h0V2lk
dGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNldEJvcmRlclJpZ2h0U3R5bGUoSU5TRVQpOwor
ICAgIHN0eWxlLnNldEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlcldpZHRoKTsKKyAgICBzdHlsZS5z
ZXRCb3JkZXJCb3R0b21TdHlsZShJTlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyVG9wV2lkdGgo
Ym9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNldEJvcmRlclRvcFN0eWxlKElOU0VUKTsKIAogICAg
IC8vIE92ZXJyaWRlIGhlaWdodC4KLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7
CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CiAgICAgc2V0U2VhcmNoRmllbGRT
aXplKHN0eWxlKTsKIAogICAgIC8vIE92ZXJyaWRlIHBhZGRpbmcgc2l6ZSB0byBtYXRjaCBBcHBL
aXQgdGV4dCBwb3NpdGlvbmluZy4KLSAgICBjb25zdCBpbnQgcGFkZGluZyA9IDEgKiBzdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGlu
ZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBG
aXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwor
ICAgIGNvbnN0IGludCBwYWRkaW5nID0gMSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBz
dHlsZS5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS5z
ZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFk
ZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nQm90
dG9tKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwogCiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7CiAgICAgc2V0Rm9udEZyb21Db250cm9s
U2l6ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgY29udHJvbFNpemUpOwogCi0gICAgc3R5bGUtPnNl
dEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9
CiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKQEAgLTE3MTgsMTIgKzE3MTgsMTIgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhl
bWVNYWM6OmNhbmNlbEJ1dAogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6
OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6
ZUZvclN5c3RlbUZvbnQoc3R5bGUsIGNhbmNlbEJ1dHRvblNpemVzKCkpOwotICAgIHN0eWxlLT5z
ZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWln
aHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRv
dyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhl
ZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsK
KyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKIGNvbnN0IEludFNpemUqIFJl
bmRlclRoZW1lTWFjOjpyZXN1bHRzQnV0dG9uU2l6ZXMoKSBjb25zdApAQCAtMTczMywxMiArMTcz
MywxMiBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6cmVzdWx0c0J1CiB9CiAKIGNv
bnN0IGludCBlbXB0eVJlc3VsdHNPZmZzZXQgPSA5Owotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JT
eXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdp
ZHRoKExlbmd0aChzaXplLndpZHRoKCkgLSBlbXB0eVJlc3VsdHNPZmZzZXQsIEZpeGVkKSk7Ci0g
ICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChz
aXplLndpZHRoKCkgLSBlbXB0eVJlc3VsdHNPZmZzZXQsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0
SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEJveFNo
YWRvdyhudWxscHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVs
ZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKQpAQCAtMTc0NiwxMiArMTc0NiwxMiBAQCBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludFNlYXJjaEZpZWxkRGVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsK
ICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1dHRv
blNpemVzKCkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhl
ZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7
Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRXaWR0aChM
ZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgo
c2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7
CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKQEAgLTE3NzksMTIgKzE3NzksMTIgQEAgYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlcwogfQogCiBjb25zdCBpbnQgcmVzdWx0c0Fycm93
V2lkdGggPSA1Owotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29u
c3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0
c0J1dHRvblNpemVzKCkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgp
ICsgcmVzdWx0c0Fycm93V2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5n
dGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxw
dHIpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgKyByZXN1bHRzQXJy
b3dXaWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0
KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5k
ZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQpAQCAtMTkxNiwxMiArMTkxNiwxMiBAQCBpbnQgUmVuZGVyVGhlbWVNYWM6OnNsaWRlclRpY2tP
ZmZzZXRGcm9tCiBjb25zdCBpbnQgc2xpZGVyVGh1bWJXaWR0aCA9IDE1OwogY29uc3QgaW50IHNs
aWRlclRodW1iSGVpZ2h0ID0gMTU7CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRl
clRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwgRWxl
bWVudCYpIGNvbnN0CiB7Ci0gICAgZmxvYXQgem9vbUxldmVsID0gc3R5bGUtPmVmZmVjdGl2ZVpv
b20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYkhvcml6b250
YWxQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQp
IHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRl
clRodW1iV2lkdGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRlclRodW1iSGVpZ2h0ICogem9vbUxldmVs
KSwgRml4ZWQpKTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBzdHlsZS5lZmZlY3RpdmVab29tKCk7
CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0
IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgeworICAg
ICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihzbGlkZXJUaHVtYldp
ZHRoICogem9vbUxldmVsKSwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0
aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRlclRodW1iSGVpZ2h0ICogem9vbUxldmVsKSwgRml4ZWQp
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lV2luLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkxLDcgKzI5MSw3IEBAIFN0
cmluZyBSZW5kZXJUaGVtZVdpbjo6ZXh0cmFRdWlya3NTdHlsZVMKICAgICByZXR1cm4gU3RyaW5n
KHRoZW1lV2luUXVpcmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lV2luUXVpcmtz
VXNlckFnZW50U3R5bGVTaGVldCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpzdXBwb3J0
c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnN1
cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdAogewogICAgIC8vIFRoZSBDbGFz
c2ljLzJrIGxvb2sgaGFzIG5vIGhvdmVyIGVmZmVjdHMuCiAgICAgcmV0dXJuIGhhdmVUaGVtZTsK
QEAgLTQyOSw5ICs0MjksOSBAQCBib29sIFJlbmRlclRoZW1lV2luOjpzdXBwb3J0c0ZvY3VzKENv
bnRyCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpzdXBwb3J0c0ZvY3VzUmluZyhj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citib29sIFJlbmRlclRoZW1lV2luOjpzdXBw
b3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7CisgICAgcmV0dXJuIHN1cHBv
cnRzRm9jdXMoc3R5bGUuYXBwZWFyYW5jZSgpKTsKIH0KIAogdW5zaWduZWQgUmVuZGVyVGhlbWVX
aW46OmRldGVybWluZUNsYXNzaWNTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8sIENvbnRyb2xT
dWJQYXJ0IHN1YlBhcnQpCkBAIC03MzAsMTMgKzczMCwxMyBAQCBib29sIFJlbmRlclRoZW1lV2lu
OjpwYWludEJ1dHRvbihjb25zdCBSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRl
clRoZW1lV2luOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lV2luOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAg
ICAgaW50IHdpZHRoID0gOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYVlNDUk9MTCk7CiAgICAgaWYg
KHdpZHRoIDw9IDApCiAgICAgICAgIHdpZHRoID0gMTc7IC8vIFZpc3RhJ3MgZGVmYXVsdC4KLSAg
ICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRN
aW5XaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3Ro
KHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4
ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRJbm5lclNwaW5CdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
CkBAIC03NTUsMjkgKzc1NSwyOSBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludElubmVyU3Bp
bkJ1dHRvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjpzZXRD
aGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdp
bjo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICAvLyBJ
ZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBu
b3RoaW5nIHRvIGRvLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5p
c0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gRklYTUU6ICBBIGhhcmQtY29kZWQgc2l6ZSBvZiAxMyBpcyB1c2Vk
LiAgVGhpcyBpcyB3cm9uZyBidXQgbmVjZXNzYXJ5IGZvciBub3cuICBJdCBtYXRjaGVzIEZpcmVm
b3guCiAgICAgLy8gQXQgZGlmZmVyZW50IERQSSBzZXR0aW5ncyBvbiBXaW5kb3dzLCBxdWVyeWlu
ZyB0aGUgdGhlbWUgZ2l2ZXMgeW91IGEgbGFyZ2VyIHNpemUgdGhhdCBhY2NvdW50cyBmb3IKICAg
ICAvLyB0aGUgaGlnaGVyIERQSS4gIFVudGlsIG91ciBlbnRpcmUgZW5naW5lIGhvbm9ycyBhIERQ
SSBzZXR0aW5nIG90aGVyIHRoYW4gOTYsIHdlIGNhbid0IHJlbHkgb24gdGhlIHRoZW1lJ3MKICAg
ICAvLyBtZXRyaWNzLgotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygp
KQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKDEzLCBGaXhlZCkpOwotICAgIGlmIChz
dHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KDEzLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkp
CisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aCgxMywgRml4ZWQpKTsKKyAgICBpZiAoc3R5
bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoMTMs
IEZpeGVkKSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50VGV4dEZpZWxkKGNvbnN0
IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQor
Ym9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKLSAgICBkcmF3Q29u
dHJvbChpLmNvbnRleHQsICBvLCB0ZXh0RmllbGRUaGVtZSgpLCBnZXRUaGVtZURhdGEobyksIHIp
OworICAgIGRyYXdDb250cm9sKGkuY29udGV4dCwgIG8sIHRleHRGaWVsZFRoZW1lKCksIGdldFRo
ZW1lRGF0YShvKSwgSW50UmVjdChyKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJl
bmRlclRoZW1lV2luOjpwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBS
ZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVy
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewog
ICAgIEhBTkRMRSB0aGVtZTsKICAgICBpbnQgcGFydDsKQEAgLTc5Miw0NiArNzkyLDQ2IEBAIGJv
b2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3QoY29uc3QKICAgICAgICAgcGFydCA9IFRG
UF9URVhURklFTEQ7CiAgICAgfQogCi0gICAgZHJhd0NvbnRyb2wocGFpbnRJbmZvLmNvbnRleHQs
IHJlbmRlcmVyLCB0aGVtZSwgVGhlbWVEYXRhKHBhcnQsIGRldGVybWluZVN0YXRlKHJlbmRlcmVy
KSksIHJlY3QpOworICAgIGRyYXdDb250cm9sKHBhaW50SW5mby5jb250ZXh0LCByZW5kZXJlciwg
dGhlbWUsIFRoZW1lRGF0YShwYXJ0LCBkZXRlcm1pbmVTdGF0ZShyZW5kZXJlcikpLCBJbnRSZWN0
KHJlY3QpKTsKICAgICAKICAgICByZXR1cm4gcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25z
KHJlbmRlcmVyLCBwYWludEluZm8sIEZsb2F0UmVjdChyZWN0KSk7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVXaW46OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZVdpbjo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUpIGNvbnN0CiB7Ci0gICAgc3R5bGUtPnJlc2V0
Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKICAgICBhZGp1c3RNZW51TGlzdEJ1
dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZVdpbjo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lV2luOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSkgY29uc3QKIHsKICAgICAvLyBU
aGVzZSBhcmUgdGhlIHBhZGRpbmdzIG5lZWRlZCB0byBwbGFjZSB0aGUgdGV4dCBjb3JyZWN0bHkg
aW4gdGhlIDxzZWxlY3Q+IGJveAogICAgIGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdUb3Ag
ICAgPSAyOwotICAgIGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdSaWdodCAgPSBzdHlsZS0+
ZGlyZWN0aW9uKCkgPT0gTFRSID8gNCArIGRyb3BEb3duQnV0dG9uV2lkdGggOiA0OworICAgIGNv
bnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdSaWdodCAgPSBzdHlsZS5kaXJlY3Rpb24oKSA9PSBM
VFIgPyA0ICsgZHJvcERvd25CdXR0b25XaWR0aCA6IDQ7CiAgICAgY29uc3QgaW50IGRyb3BEb3du
Qm94UGFkZGluZ0JvdHRvbSA9IDI7Ci0gICAgY29uc3QgaW50IGRyb3BEb3duQm94UGFkZGluZ0xl
ZnQgICA9IHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyA0IDogNCArIGRyb3BEb3duQnV0dG9u
V2lkdGg7CisgICAgY29uc3QgaW50IGRyb3BEb3duQm94UGFkZGluZ0xlZnQgICA9IHN0eWxlLmRp
cmVjdGlvbigpID09IExUUiA/IDQgOiA0ICsgZHJvcERvd25CdXR0b25XaWR0aDsKICAgICAvLyBU
aGUgPHNlbGVjdD4gYm94IG11c3QgYmUgYXQgbGVhc3QgMTJweCBoaWdoIGZvciB0aGUgYnV0dG9u
IHRvIHJlbmRlciBuaWNlbHkgb24gV2luZG93cwogICAgIGNvbnN0IGludCBkcm9wRG93bkJveE1p
bkhlaWdodCA9IDEyOwogICAgIAogICAgIC8vIFBvc2l0aW9uIHRoZSB0ZXh0IGNvcnJlY3RseSB3
aXRoaW4gdGhlIHNlbGVjdCBib3ggYW5kIG1ha2UgdGhlIGJveCB3aWRlIGVub3VnaCB0byBmaXQg
dGhlIGRyb3Bkb3duIGJ1dHRvbgotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChkcm9w
RG93bkJveFBhZGRpbmdUb3AsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChM
ZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5nUmlnaHQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdCb3R0b20oTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKLSAg
ICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ0xlZnQsIEZp
eGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ1RvcChMZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5n
VG9wLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdSaWdodChMZW5ndGgoZHJvcERvd25C
b3hQYWRkaW5nUmlnaHQsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0JvdHRvbShMZW5n
dGgoZHJvcERvd25Cb3hQYWRkaW5nQm90dG9tLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRp
bmdMZWZ0KExlbmd0aChkcm9wRG93bkJveFBhZGRpbmdMZWZ0LCBGaXhlZCkpOwogCiAgICAgLy8g
SGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0
bykpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoQXV0bykpOwogCiAgICAgLy8gQ2FsY3Vs
YXRlIG91ciBtaW4taGVpZ2h0Ci0gICAgaW50IG1pbkhlaWdodCA9IHN0eWxlLT5mb250TWV0cmlj
cygpLmhlaWdodCgpOworICAgIGludCBtaW5IZWlnaHQgPSBzdHlsZS5mb250TWV0cmljcygpLmhl
aWdodCgpOwogICAgIG1pbkhlaWdodCA9IG1heChtaW5IZWlnaHQsIGRyb3BEb3duQm94TWluSGVp
Z2h0KTsKIAotICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQp
KTsKKyAgICBzdHlsZS5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQpKTsKIAot
ICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgp
KTsKKyAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdo
dCgpKTsKICAgICAKICAgICAvLyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCi0gICAgc3R5
bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKyAgICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiB9
CiAKIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtODg2LDE1ICs4ODYsMTUgQEAgYm9vbCBSZW5kZXJU
aGVtZVdpbjo6cGFpbnRTbGlkZXJUaHVtYihjbwogY29uc3QgaW50IHNsaWRlclRodW1iV2lkdGgg
PSA3OwogY29uc3QgaW50IHNsaWRlclRodW1iSGVpZ2h0ID0gMTU7CiAKLXZvaWQgUmVuZGVyVGhl
bWVXaW46OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRl
clN0eWxlJiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9
IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLmFwcGVh
cmFuY2UoKTsKICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgewotICAg
ICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOwot
ICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkp
OworICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVk
KSk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4
ZWQpKTsKICAgICB9IGVsc2UgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkg
ewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVk
KSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBG
aXhlZCkpOworICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwg
Rml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdo
dCwgRml4ZWQpKTsKICAgICB9CiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoQ0cpCiAgICAgZWxz
ZSBpZiAocGFydCA9PSBNZWRpYVNsaWRlclRodW1iUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1l
U2xpZGVyVGh1bWJQYXJ0KSAKQEAgLTkwNywxNiArOTA3LDE2IEBAIGJvb2wgUmVuZGVyVGhlbWVX
aW46OnBhaW50U2VhcmNoRmllbGQoY28KICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwg
cik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUp
IGNvbnN0CiB7CiAgICAgLy8gT3ZlcnJpZGUgcGFkZGluZ1NpemUgdG8gbWF0Y2ggQXBwS2l0IHRl
eHQgcG9zaXRpb25pbmcuCiAgICAgY29uc3QgaW50IHBhZGRpbmcgPSAxOwotICAgIHN0eWxlLT5z
ZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFk
ZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5n
VG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9t
KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIGlmIChlICYmIGUtPmZvY3VzZWQoKSAmJiBl
LT5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpKQot
ICAgICAgICBzdHlsZS0+c2V0T3V0bGluZU9mZnNldCgtMik7CisgICAgc3R5bGUuc2V0UGFkZGlu
Z0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ1JpZ2h0
KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3Ro
KHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFk
ZGluZywgRml4ZWQpKTsKKyAgICBpZiAoZS5mb2N1c2VkKCkgJiYgZS5kb2N1bWVudCgpLmZyYW1l
KCktPnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpKQorICAgICAgICBzdHlsZS5zZXRP
dXRsaW5lT2Zmc2V0KC0yKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtOTQ0LDMwICs5NDQsMzAgQEAgYm9vbCBS
ZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZENhbgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAg
Ly8gU2NhbGUgdGhlIGJ1dHRvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKLSAgICBmbG9h
dCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVs
U2l6ZTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdENv
bnRyb2xGb250UGl4ZWxTaXplOwogICAgIGludCBjYW5jZWxCdXR0b25TaXplID0gbHJvdW5kZiht
aW4obWF4KG1pbkNhbmNlbEJ1dHRvblNpemUsIGRlZmF1bHRDYW5jZWxCdXR0b25TaXplICogZm9u
dFNjYWxlKSwgbWF4Q2FuY2VsQnV0dG9uU2l6ZSkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5n
dGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0
aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChj
YW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoY2Fu
Y2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0
U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2Vh
cmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEludFNpemUgZW1wdHlTaXplKDEsIDExKTsK
LSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwot
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGVtcHR5U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsK
KyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoZW1wdHlTaXplLndpZHRoKCksIEZpeGVkKSk7Cisg
ICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChlbXB0eVNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1l
bnQmKSBjb25zdAogewogICAgIC8vIFNjYWxlIHRoZSBkZWNvcmF0aW9uIHNpemUgYmFzZWQgb24g
dGhlIGZvbnQgc2l6ZQotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8g
ZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOworICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxl
LmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7CiAgICAgaW50IG1hZ25p
ZmllclNpemUgPSBscm91bmRmKG1pbihtYXgobWluU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blNpemUsIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSAqIGZvbnRTY2Fs
ZSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25TaXplKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChtYWdu
aWZpZXJTaXplLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmll
clNpemUsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKG1hZ25pZmllclNpemUs
IEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhl
ZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHIpCkBAIC05OTMsMTUgKzk5MywxNSBAQCBib29sIFJlbmRl
clRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8v
IFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplCi0gICAgZmxvYXQg
Zm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNp
emU7CisgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUuZm9udFNpemUoKSAvIGRlZmF1bHRDb250
cm9sRm9udFBpeGVsU2l6ZTsKICAgICBpbnQgbWFnbmlmaWVySGVpZ2h0ID0gbHJvdW5kZihtaW4o
bWF4KG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplLCBkZWZhdWx0U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvblNpemUgKiBmb250U2NhbGUpLCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF4U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpKTsK
ICAgICBpbnQgbWFnbmlmaWVyV2lkdGggPSBscm91bmRmKG1hZ25pZmllckhlaWdodCAqIGRlZmF1
bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCAvIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uU2l6ZSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJX
aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJIZWln
aHQsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKG1hZ25pZmllcldpZHRoLCBG
aXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVySGVpZ2h0LCBGaXhl
ZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQpAQCAtMTE1Nyw5ICsxMTU3LDkgQEAgU3RyaW5nIFJlbmRlclRoZW1l
V2luOjptZWRpYUNvbnRyb2xzU2NyaQogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVO
VCkKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2lu
OjphZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVs
ZW1lbnQmKSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAg
c3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRoZW1lV2luOjpz
dXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0CkBAIC0xMTcyLDcgKzExNzIsNyBA
QCBib29sIFJlbmRlclRoZW1lV2luOjpzdXBwb3J0c01ldGVyKENvbnRyCiAgICAgfQogfQogCi1J
bnRTaXplIFJlbmRlclRoZW1lV2luOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0
ZXIqLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lV2lu
OjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXImLCBjb25zdCBJbnRSZWN0JiBi
b3VuZHMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7CiB9CkBAIC0xMTgyLDcg
KzExODIsNyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1ldGVyKGNvbnN0IFJlCiAgICAg
aWYgKCFyZW5kZXJPYmplY3QuaXNNZXRlcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKCZyZW5kZXJPYmplY3Qp
LT5tZXRlckVsZW1lbnQoKTsKKyAgICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gdG9SZW5k
ZXJNZXRlcihyZW5kZXJPYmplY3QpLm1ldGVyRWxlbWVudCgpOwogCiAgICAgVGhlbWVEYXRhIHRo
ZW1lID0gZ2V0VGhlbWVEYXRhKHJlbmRlck9iamVjdCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5oCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NzggKzU1LDc4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVF1aXJrc1N0eWxl
U2hlZXQoKTsKIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9s
cyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCi0gICAgdmlydHVh
bCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcigpIGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9y
bUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgLy8gU3lzdGVtIGZvbnRzLgotICAgIHZpcnR1YWwgdm9pZCBz
eXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotICAgIHZpcnR1
YWwgQ29sb3Igc3lzdGVtQ29sb3IoQ1NTVmFsdWVJRCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHN5c3RlbUZvbnQoQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYg
bywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorICAgIHZpcnR1YWwgYm9v
bCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByKSBvdmVycmlkZQogICAgIHsgcmV0dXJuIHBhaW50QnV0dG9uKG8s
IGksIHIpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSop
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorICAgIHZp
cnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJ
bmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKSBvdmVycmlkZQogICAgIHsgcmV0dXJuIHBhaW50QnV0
dG9uKG8sIGksIHIpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0CisgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0IG92ZXJyaWRlCiAgICAgeyByZXR1cm4gc2V0Q2hlY2tib3hTaXplKHN0
eWxlKTsgfQogCi0gICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGlu
QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29sIHBh
aW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVu
ZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEZsb2F0UmVjdCYgcikgb3Zl
cnJpZGUKICAgICB7IHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsgfQogCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVM
aXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVu
dUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
bGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgcG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0
SW5kZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25Q
YXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9p
ZCB0aGVtZUNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCkgb3ZlcnJp
ZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHsg
fQorICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVh
bCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGUgeyB9CiAKICAgICBzdGF0aWMgdm9pZCBzZXRXZWJLaXRJc0Jl
aW5nVW5sb2FkZWQoKTsKIAogICAgIHN0YXRpYyBTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZG
aWxlKENGU3RyaW5nUmVmIG5hbWUsIENGU3RyaW5nUmVmIHR5cGUpOwogCi0gICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Qgb3Zl
cnJpZGU7CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCBTdHJpbmcgbWVkaWFDb250
cm9sc1N0eWxlU2hlZXQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFN0cmluZyBtZWRpYUNvbnRy
b2xzU2NyaXB0KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTdHJpbmcgbWVkaWFDb250cm9sc1N0
eWxlU2hlZXQoKSBvdmVycmlkZSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFN0cmluZyBtZWRpYUNv
bnRyb2xzU2NyaXB0KCkgb3ZlcnJpZGUgb3ZlcnJpZGU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShN
RVRFUl9FTEVNRU5UKQpAQCAtMTM2LDcgKzEzNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRT
aG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAKIHByaXZhdGU6CiAgICAgZW51bSBDb250cm9sU3ViUGFy
dCB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233764</attachid>
            <date>2014-06-24 16:46:41 -0700</date>
            <delta_ts>2014-06-24 16:59:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134261-20140624164620.patch</filename>
            <type>text/plain</type>
            <size>209809</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1MyBAQAorMjAxNC0wNi0yNCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorICAgICAgICAgICAgQW5kIHBl
YXZvQG91dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5jb20+CisKKyAgICAgICAgVXNlIHJlZmVy
ZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycyBpbiBSZW5kZXJUaGVtZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDI2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgor
ICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkSGF2ZVNwaW5CdXR0b24pOgorICAgICAgICAqIGh0
bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZWZs
L1JlbmRlclRoZW1lRWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTaXplQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6c3Vw
cG9ydHNGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFkanVz
dFNsaWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0Q2hlY2tib3hTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFk
anVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFk
anVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVFZmw6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9S
ZW5kZXJUaGVtZUVmbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1Jpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTZWFyY2hGaWVs
ZEljb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpib3JkZXJSYWRpaUZyb21TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVGh1bWIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uUmVwZWF0SW50
ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGsuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGsyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFRvZ2dsZVNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lR3RrOjpjb21ib0JveEFycm93U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzZXRUb2dnbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpz
ZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnNldFJh
ZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRDb21ib0JveE1ldHJpY3MpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRp
bmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQ
YWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RT
bGlkZXJUaHVtYlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVz
dElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxp
c3Q6OmFkanVzdElubmVyU3R5bGUpOgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjptZW51U3R5
bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZXRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZXRlcjo6dXBkYXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1ldGVyOjpjb21wdXRlTG9naWNhbEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBhaW50
T3V0bGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjp1cGRhdGVBbmltYXRpb25TdGF0ZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjphZGp1c3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXND
b250cm9sU3R5bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzdXBwb3J0c0Zv
Y3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RSYWRpb1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjphZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1ldGVyU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6Om1ldGVyU2l6ZUZvckJvdW5kcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVz
c0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2hvdWxkSGF2ZVNwaW5CdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUcmFja1N0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNl
YXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
U3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnN1cHBvcnRzSG92ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6Om1pbmltdW1NZW51TGlzdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjpwb3B1cE1lbnVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpzZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnNldFJhZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2V0QnV0dG9u
U2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OmFkanVzdENoZWNrYm94U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlP
Uzo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSU9TOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6c2V0QnV0dG9uU2l6ZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmlzQ29u
dHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNp
emVGb3JGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzaXplRm9yRm9u
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvclN5c3RlbUZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFNpemVGcm9tRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9sU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpemVGb3JTeXN0ZW1G
b250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEFyZWFT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXplRm9yQm91bmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1ldGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpsZXZlbEluZGljYXRvckZvcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjptaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlvblJlcGVhdEludGVydmFs
Rm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cE1lbnVTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNo
RmllbGREZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVy
VGh1bWJTaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmlzQ29udHJvbFN0eWxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YmFzZWxpbmVQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFNpemVGb3JGb250KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpzaXplRm9yRm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6c2l6ZUZvclN5c3RlbUZvbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnNldFNpemVGcm9tRm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Rm9udEZyb21Db250cm9sU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFNpemVGb3JTeXN0
ZW1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpzZXRDaGVja2Jv
eFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnNldFJhZGlvU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6c2V0QnV0dG9uUGFkZGlu
Z0Zyb21Db250cm9sU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6
YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6
OnNldEJ1dHRvblNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFk
anVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJp
OjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Fm
YXJpOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
U2FmYXJpOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRv
bSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6bWluaW11
bU1lbnVMaXN0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRq
dXN0U2xpZGVyVGh1bWJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFy
aTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
U2FmYXJpOjpzZXRTZWFyY2hGaWVsZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1ldGVyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6Om1ldGVyU2l6ZUZvckJv
dW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZXRlcik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
V2luOjpzdXBwb3J0c0hvdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpz
dXBwb3J0c0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRq
dXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVX
aW46OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6
cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50
TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdE1lbnVM
aXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdE1lbnVM
aXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVz
dFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVdpbjo6YWRqdXN0TWV0ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVdpbjo6bWV0ZXJTaXplRm9yQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lV2luOjpwYWludE1ldGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVX
aW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludENoZWNrYm94KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludFJhZGlvKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpzZXRSYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVXaW46OnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdEJ1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RUZXh0RmllbGRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRqdXN0VGV4dEFyZWFTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6c2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hl
bkZvY3VzZWQpOgorCiAyMDE0LTA2LTI0ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29t
PgogCiAgICAgICAgIFtNU0VdW01hY10gVW5jYXVnaHQgZXhjZXB0aW9uIHdoZW4gZGVhbGxvY2F0
aW5nIEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMzIsOCArMTMzMiwxMCBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlCiAgICAgfQogCiAgICAgLy8gTGV0
IHRoZSB0aGVtZSBhbHNvIGhhdmUgYSBjcmFjayBhdCBhZGp1c3RpbmcgdGhlIHN0eWxlLgotICAg
IGlmIChzdHlsZS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0
VGhlbWUoKS0+YWRqdXN0U3R5bGUoKnRoaXMsIHN0eWxlLCBlLCBtX3N0YXRlLmhhc1VBQXBwZWFy
YW5jZSgpLCBtX3N0YXRlLmJvcmRlckRhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSgpLCBt
X3N0YXRlLmJhY2tncm91bmRDb2xvcigpKTsKKyAgICBpZiAoc3R5bGUuaGFzQXBwZWFyYW5jZSgp
KSB7CisgICAgICAgIEFTU0VSVChlKTsKKyAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLT5hZGp1c3RTdHlsZSgqdGhpcywgc3R5bGUsICplLCBtX3N0YXRlLmhhc1VBQXBwZWFyYW5j
ZSgpLCBtX3N0YXRlLmJvcmRlckRhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSgpLCBtX3N0
YXRlLmJhY2tncm91bmRDb2xvcigpKTsKKyAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0
LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0eWxlLgogICAgIGlmIChz
dHlsZS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzIsNyArMjMyLDcgQEAgYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVTcGluQgog
ewogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQoKS5kb2N1bWVudCgpOwogICAgIFJl
ZlB0cjxSZW5kZXJUaGVtZT4gdGhlbWUgPSBkb2N1bWVudC5wYWdlKCkgPyAmZG9jdW1lbnQucGFn
ZSgpLT50aGVtZSgpIDogUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpOwotICAgIHJldHVybiB0
aGVtZS0+c2hvdWxkSGF2ZVNwaW5CdXR0b24oJmVsZW1lbnQoKSk7CisgICAgcmV0dXJuIHRoZW1l
LT5zaG91bGRIYXZlU3BpbkJ1dHRvbihlbGVtZW50KCkpOwogfQogCiB2b2lkIFRleHRGaWVsZElu
cHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDM3MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDggKzk0LDEwIEBAIHZvaWQgUmVuZGVyU2xpZGVyVGh1bWI6OnVw
ZGF0ZUFwcGVhcmFuY2UKICAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhVm9sdW1l
U2xpZGVyVGh1bWJQYXJ0KTsKICAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgp
ID09IE1lZGlhRnVsbFNjcmVlblZvbHVtZVNsaWRlclBhcnQpCiAgICAgICAgIHN0eWxlKCkuc2V0
QXBwZWFyYW5jZShNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwotICAgIGlm
IChzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgdGhlbWUoKS5hZGp1c3RTbGlkZXJU
aHVtYlNpemUoJnN0eWxlKCksIGVsZW1lbnQoKSk7CisgICAgaWYgKHN0eWxlKCkuaGFzQXBwZWFy
YW5jZSgpKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50KCkpOworICAgICAgICB0aGVtZSgpLmFk
anVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSgpLCAqZWxlbWVudCgpKTsKKyAgICB9CiB9CiAKIGJv
b2wgUmVuZGVyU2xpZGVyVGh1bWI6OmlzU2xpZGVyVGh1bWIoKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwCShyZXZpc2lvbiAx
NzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMjcgKzEyNSwyNyBAQCBzdGF0aWMgYm9vbCBzZXRTb3Vy
Y2VHcm91cEZvckVkamVPYmplY3QoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVFZmw6OmFkanVzdFNpemVDb25zdHJhaW50cyhSZW5kZXJTdHlsZSogc3R5bGUsIEZvcm1U
eXBlIHR5cGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTaXplQ29uc3RyYWlu
dHMoUmVuZGVyU3R5bGUmIHN0eWxlLCBGb3JtVHlwZSB0eXBlKSBjb25zdAogewogICAgIGxvYWRU
aGVtZUlmTmVlZGVkKCk7CiAKICAgICAvLyBUaGVzZSBhcmUgYWx3YXlzIHZhbGlkLCBldmVuIGlm
IG5vIHRoZW1lIGNvdWxkIGJlIGxvYWRlZC4KICAgICBjb25zdCBUaGVtZVBhcnREZXNjKiBkZXNj
ID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KXR5cGU7CiAKLSAgICBpZiAoc3R5bGUtPm1pbldpZHRo
KCkuaXNJbnRyaW5zaWMoKSkKLSAgICAgICAgc3R5bGUtPnNldE1pbldpZHRoKGRlc2MtPm1pbi53
aWR0aCgpKTsKLSAgICBpZiAoc3R5bGUtPm1pbkhlaWdodCgpLmlzSW50cmluc2ljKCkpCi0gICAg
ICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKLQotICAgIGlmIChk
ZXNjLT5tYXgud2lkdGgoKS52YWx1ZSgpID4gMCAmJiBzdHlsZS0+bWF4V2lkdGgoKS5pc0ludHJp
bnNpY09yQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0TWF4V2lkdGgoZGVzYy0+bWF4LndpZHRo
KCkpOwotICAgIGlmIChkZXNjLT5tYXguaGVpZ2h0KCkudmFsdWUoKSA+IDAgJiYgc3R5bGUtPm1h
eEhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRNYXhIZWln
aHQoZGVzYy0+bWF4LmhlaWdodCgpKTsKLQotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKGRlc2Mt
PnBhZGRpbmcudG9wKCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKGRlc2MtPnBhZGRp
bmcuYm90dG9tKCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChkZXNjLT5wYWRkaW5nLmxl
ZnQoKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChkZXNjLT5wYWRkaW5nLnJpZ2h0KCkp
OworICAgIGlmIChzdHlsZS5taW5XaWR0aCgpLmlzSW50cmluc2ljKCkpCisgICAgICAgIHN0eWxl
LnNldE1pbldpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKKyAgICBpZiAoc3R5bGUubWluSGVpZ2h0
KCkuaXNJbnRyaW5zaWMoKSkKKyAgICAgICAgc3R5bGUuc2V0TWluSGVpZ2h0KGRlc2MtPm1pbi5o
ZWlnaHQoKSk7CisKKyAgICBpZiAoZGVzYy0+bWF4LndpZHRoKCkudmFsdWUoKSA+IDAgJiYgc3R5
bGUubWF4V2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHlsZS5zZXRNYXhX
aWR0aChkZXNjLT5tYXgud2lkdGgoKSk7CisgICAgaWYgKGRlc2MtPm1heC5oZWlnaHQoKS52YWx1
ZSgpID4gMCAmJiBzdHlsZS5tYXhIZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAg
ICBzdHlsZS5zZXRNYXhIZWlnaHQoZGVzYy0+bWF4LmhlaWdodCgpKTsKKworICAgIHN0eWxlLnNl
dFBhZGRpbmdUb3AoZGVzYy0+cGFkZGluZy50b3AoKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0Jv
dHRvbShkZXNjLT5wYWRkaW5nLmJvdHRvbSgpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nTGVmdChk
ZXNjLT5wYWRkaW5nLmxlZnQoKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ1JpZ2h0KGRlc2MtPnBh
ZGRpbmcucmlnaHQoKSk7CiB9CiAKIHN0YXRpYyBib29sIGlzRm9ybUVsZW1lbnRUb29MYXJnZVRv
RGlzcGxheShjb25zdCBJbnRTaXplJiBlbGVtZW50U2l6ZSkKQEAgLTM0Niw5ICszNDYsOSBAQCB2
b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZShFCiAgICAgfQogfQogCi1ib29s
IFJlbmRlclRoZW1lRWZsOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
LCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwg
Y29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6
OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRh
dGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFj
a2dyb3VuZENvbG9yKSBjb25zdAogewotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9s
U3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcikgfHwgc3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQ7CisgICAgcmV0dXJuIFJlbmRl
clRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dy
b3VuZENvbG9yKSB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0Owog
fQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRoZW1lUGFydChjb25zdCBSZW5kZXJPYmpl
Y3QmIG9iamVjdCwgRm9ybVR5cGUgdHlwZSwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQpAQCAtNjI3LDkgKzYyNyw5IEBAIHN0YXRpYyBib29sIHN1cHBvcnRzRm9j
dXMoQ29udHJvbFBhcnQgYXAKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnN1cHBv
cnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2Jvb2wgUmVuZGVy
VGhlbWVFZmw6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29u
c3QKIHsKLSAgICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS0+YXBwZWFyYW5jZSgpKTsKKyAg
ICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS5hcHBlYXJhbmNlKCkpOwogfQogCiBib29sIFJl
bmRlclRoZW1lRWZsOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG9i
amVjdCkgY29uc3QKQEAgLTY5OSwyNiArNjk5LDI2IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBh
aW50U2xpZGVyVHJhY2soY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTbGlk
ZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQm
KSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUu
c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RT
bGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclRoZW1l
OjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsK
LSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRv
dyhudWxscHRyKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVGh1bWJT
aXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
RWZsOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50Jikg
Y29uc3QKIHsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAg
ICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFyYW5jZSgpOwogICAgIGlmIChwYXJ0ID09
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5n
dGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldFdpZHRo
KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0SGVp
Z2h0KExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOwogICAgIH0gZWxzZSBpZiAocGFy
dCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0
aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhl
aWdodChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNl
dFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOworICAgICAgICBzdHlsZS5z
ZXRIZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOwogICAgIH0KIH0KIApA
QCAtNzY2LDcgKzc2Niw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2xpZGVyVGh1bWIo
Y28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdENo
ZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0
Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYgZWxl
bWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNfY2Fz
dDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5h
ZGp1c3RDaGVja2JveFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKQEAgLTc3
NSwxMyArNzc1LDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdENoZWNrYm94U3R5bGUK
IAogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgQ2hlY2tCb3gpOwogCi0gICAgc3R5
bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKIAogICAgIGNvbnN0
IFRoZW1lUGFydERlc2MqIGRlc2MgPSBtX3BhcnREZXNjcyArIChzaXplX3QpQ2hlY2tCb3g7Ci0g
ICAgaWYgKHN0eWxlLT53aWR0aCgpLnZhbHVlKCkgPCBkZXNjLT5taW4ud2lkdGgoKS52YWx1ZSgp
KQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoZGVzYy0+bWluLndpZHRoKCkpOwotICAgIGlmIChz
dHlsZS0+aGVpZ2h0KCkudmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgpKQotICAg
ICAgICBzdHlsZS0+c2V0SGVpZ2h0KGRlc2MtPm1pbi5oZWlnaHQoKSk7CisgICAgaWYgKHN0eWxl
LndpZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1pbi53aWR0aCgpLnZhbHVlKCkpCisgICAgICAgIHN0
eWxlLnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKKyAgICBpZiAoc3R5bGUuaGVpZ2h0KCku
dmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgpKQorICAgICAgICBzdHlsZS5zZXRI
ZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFp
bnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtNzg5LDcgKzc4OSw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVFZmw6OnBhaW50Q2hlY2tib3goY29uc3QKICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQo
b2JqZWN0LCBDaGVja0JveCwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6
OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYg
ZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgp
KS5hZGp1c3RSYWRpb1N0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKQEAgLTc5
OCwxMyArNzk4LDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFJhZGlvU3R5bGUoU3QK
IAogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgUmFkaW9CdXR0b24pOwogCi0gICAg
c3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKIAogICAgIGNv
bnN0IFRoZW1lUGFydERlc2MqIGRlc2MgPSBtX3BhcnREZXNjcyArIChzaXplX3QpUmFkaW9CdXR0
b247Ci0gICAgaWYgKHN0eWxlLT53aWR0aCgpLnZhbHVlKCkgPCBkZXNjLT5taW4ud2lkdGgoKS52
YWx1ZSgpKQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoZGVzYy0+bWluLndpZHRoKCkpOwotICAg
IGlmIChzdHlsZS0+aGVpZ2h0KCkudmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgp
KQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KGRlc2MtPm1pbi5oZWlnaHQoKSk7CisgICAgaWYg
KHN0eWxlLndpZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1pbi53aWR0aCgpLnZhbHVlKCkpCisgICAg
ICAgIHN0eWxlLnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKKyAgICBpZiAoc3R5bGUuaGVp
Z2h0KCkudmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgpKQorICAgICAgICBzdHls
ZS5zZXRIZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVm
bDo6cGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtODEyLDcgKzgxMiw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVFZmw6OnBhaW50UmFkaW8oY29uc3QgUmUKICAgICByZXR1cm4gcGFpbnRUaGVtZVBh
cnQob2JqZWN0LCBSYWRpb0J1dHRvbiwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAoIW1f
cGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7CiAgICAgICAg
IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkt
PnRoZW1lKCkpLmFkanVzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50
KTsKQEAgLTgyMCw3ICs4MjAsNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RCdXR0b25T
dHlsZShTCiAgICAgfQogCiAgICAgLy8gYWRqdXN0U2l6ZUNvbnN0cmFpbnMgY2FuIG1ha2UgU3F1
YXJlQnV0dG9uUGFydCdzIHNpemUgd3JvbmcgKGJ5IGFkanVzdGluZyBwYWRkaW5ncyksIHNvIGNh
bGwgaXQgb25seSBmb3IgUHVzaEJ1dHRvblBhcnQgYW5kIEJ1dHRvblBhcnQKLSAgICBpZiAoc3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgp
ID09IEJ1dHRvblBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9u
UGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gQnV0dG9uUGFydCkKICAgICAgICAgYWRqdXN0
U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBCdXR0b24pOwogfQogCkBAIC04MjksMTcgKzgyOSwxNyBA
QCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludEJ1dHRvbihjb25zdCBSCiAgICAgcmV0dXJuIHBh
aW50VGhlbWVQYXJ0KG9iamVjdCwgQnV0dG9uLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lRWZsOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7
CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQo
KS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5
bGUsIGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFkanVzdFNpemVDb25z
dHJhaW50cyhzdHlsZSwgQ29tYm9Cb3gpOwotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAg
IHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKKyAg
ICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdo
dChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhl
bWVFZmw6OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgaW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtODY4LDE0ICs4NjgsMTQg
QEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIHJldHVybiBw
YWludE1lbnVMaXN0KG9iamVjdCwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVF
Zmw6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAo
IW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7CiAgICAg
ICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdl
KCktPnRoZW1lKCkpLmFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBl
bGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXplQ29uc3RyYWlu
dHMoc3R5bGUsIFRleHRGaWVsZCk7Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5
bGUucmVzZXRCb3JkZXIoKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0Rmll
bGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29u
c3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtODgzLDcgKzg4Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVF
Zmw6OnBhaW50VGV4dEZpZWxkKGNvbnMKICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0
LCBUZXh0RmllbGQsIGluZm8sIEludFJlY3QocmVjdCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1l
RWZsOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEFyZWFTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAt
ODkyLDIxICs4OTIsMjEgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0QXJlYShjb25z
dAogICAgIHJldHVybiBwYWludFRleHRGaWVsZChvYmplY3QsIGluZm8sIHJlY3QpOwogfQogCi12
b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYg
ZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgp
KS5hZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHls
ZSwgZWxlbWVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYWRqdXN0U2l6ZUNvbnN0
cmFpbnRzKHN0eWxlLCBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24pOwotICAgIHN0eWxlLT5yZXNl
dEJvcmRlcigpOwotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUucmVz
ZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKLSAgICBmbG9hdCBm
b250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKKyAgICBmbG9h
dCBmb250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdEZvbnRTaXplOwogICAgIGlu
dCBkZWNvcmF0aW9uU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluU2VhcmNoRGVj
b3JhdGlvbkJ1dHRvblNpemUsIGRlZmF1bHRGb250U2l6ZSAqIGZvbnRTY2FsZSksIG1heFNlYXJj
aERlY29yYXRpb25CdXR0b25TaXplKSk7CiAKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGRl
Y29yYXRpb25TaXplICsgc2VhcmNoRmllbGREZWNvcmF0aW9uQnV0dG9uT2Zmc2V0LCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGRlY29yYXRpb25TaXplLCBGaXhlZCkpOwor
ICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChkZWNvcmF0aW9uU2l6ZSArIHNlYXJjaEZpZWxkRGVj
b3JhdGlvbkJ1dHRvbk9mZnNldCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3Ro
KGRlY29yYXRpb25TaXplLCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtOTE0LDIxICs5MTQs
MjEgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVsZFJlcwogICAgIHJldHVy
biBwYWludFRoZW1lUGFydChvYmplY3QsIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbiwgaW5mbywg
cmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVu
dCgpLnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1l
bnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOwotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAg
IHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKKyAg
ICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKLSAgICBmbG9hdCBmb250U2NhbGUgPSBzdHls
ZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBz
dHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdEZvbnRTaXplOwogICAgIGludCBkZWNvcmF0aW9uU2l6
ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluU2VhcmNoRGVjb3JhdGlvbkJ1dHRvblNp
emUsIGRlZmF1bHRGb250U2l6ZSAqIGZvbnRTY2FsZSksIG1heFNlYXJjaERlY29yYXRpb25CdXR0
b25TaXplKSk7CiAKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGRlY29yYXRpb25TaXplICsg
c2VhcmNoRmllbGREZWNvcmF0aW9uQnV0dG9uT2Zmc2V0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKGRlY29yYXRpb25TaXplLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdp
ZHRoKExlbmd0aChkZWNvcmF0aW9uU2l6ZSArIHNlYXJjaEZpZWxkRGVjb3JhdGlvbkJ1dHRvbk9m
ZnNldCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGRlY29yYXRpb25TaXpl
LCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC05MzYsMjMgKzkzNiwyMyBAQCBi
b29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIHBhaW50
VGhlbWVQYXJ0KG9iamVjdCwgU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbiwgaW5mbywgcmVj
dCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAg
ICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgp
LT50aGVtZSgpKS5hZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2
ZXIsIHN0eWxlLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RT
aXplQ29uc3RyYWludHMoc3R5bGUsIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKTsKLSAgICBzdHls
ZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgIHN0
eWxlLnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCiAgICAg
Ly8gTG9naWMgdGFrZW4gZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtLmNwcC4KICAgICAvLyBTY2Fs
ZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZS4KLSAgICBmbG9hdCBmb250
U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKKyAgICBmbG9hdCBm
b250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdEZvbnRTaXplOwogICAgIGludCBj
YW5jZWxCdXR0b25TaXplID0gbHJvdW5kZihzdGQ6Om1pbihzdGQ6Om1heChtaW5DYW5jZWxCdXR0
b25TaXplLCBkZWZhdWx0Rm9udFNpemUgKiBmb250U2NhbGUpLCBtYXhDYW5jZWxCdXR0b25TaXpl
KSk7CiAKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQp
KTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsK
KyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CiB9
CiAKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKQEAgLTk2MCwxNSArOTYwLDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBh
aW50U2VhcmNoRmllbGRDYW4KICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbiwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVF
Zmw6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewog
ICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCku
cGFnZSgpLT50aGVtZSgpKS5hZGp1c3RTZWFyY2hGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXplQ29u
c3RyYWludHMoc3R5bGUsIFNlYXJjaEZpZWxkKTsKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsK
LSAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7
CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZs
OjpwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC05NzYsNyArOTc2LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVsZChjbwogICAgIHJldHVybiBwYWludFRo
ZW1lUGFydChvYmplY3QsIFNlYXJjaEZpZWxkLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZUVmbDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50
KSBjb25zdAogewogICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1l
bnQoKS5wYWdlKCkpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVt
ZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwpAQCAtMTAwOCw5ICsxMDA4LDkgQEAg
dm9pZCBSZW5kZXJUaGVtZUVmbDo6c3lzdGVtRm9udChDU1NWYWx1ZQogfQogCiAjaWYgRU5BQkxF
KFBST0dSRVNTX0VMRU1FTlQpCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RQcm9ncmVzc0Jh
clN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+
c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsK
IH0KIAogZG91YmxlIFJlbmRlclRoZW1lRWZsOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclBy
b2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuaAkod29ya2luZyBjb3B5KQpA
QCAtNjgsMTMgKzY4LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJU
aGVtZT4gY3JlYXRlKFBhZ2UqKTsKIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhl
bWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQu
Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92
ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAK
ICAgICAvLyBBIG1ldGhvZCBSZXR1cm5pbmcgd2hldGhlciB0aGUgY29udHJvbCBpcyBzdHlsZWQg
YnkgY3NzIG9yIG5vdCBlLmcgc3BlY2lmeWluZyBiYWNrZ3JvdW5kLWNvbG9yLgotICAgIHZpcnR1
YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJE
YXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xv
ciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIEEgbWV0aG9kIGFz
a2luZyBpZiB0aGUgdGhlbWUgaXMgYWJsZSB0byBkcmF3IHRoZSBmb2N1cyByaW5nLgotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJT
dHlsZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBj
b250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3Qu
CiAgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVj
dCYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTA0LDUwICsxMDQsNTAgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0RW50cnlUZXh0Q29sb3IoaW50IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50
IGZvcmVBLCBpbnQgYmFja1IsIGludCBiYWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpOwogICAg
IHZvaWQgc2V0U2VhcmNoVGV4dENvbG9yKGludCBmb3JlUiwgaW50IGZvcmVHLCBpbnQgZm9yZUIs
IGludCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNrQiwgaW50IGJhY2tBKTsK
IAotICAgIHZvaWQgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlKiwgRm9ybVR5cGUp
IGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlJiwgRm9y
bVR5cGUpIGNvbnN0OwogCiAgICAgLy8gU3lzdGVtIGZvbnRzLgogICAgIHZpcnR1YWwgdm9pZCBz
eXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4
dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJy
aWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25Q
YXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xp
ZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShEQVRBTElTVF9F
TEVNRU5UKQogICAgIHZpcnR1YWwgSW50U2l6ZSBzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0IG92ZXJy
aWRlOwpAQCAtMTU5LDEzICsxNTksMTMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHBh
aW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3Bp
bkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICBzdGF0
aWMgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50IGZvbnRzaXplKTsKIAogI2lmIEVOQUJMRShQ
Uk9HUkVTU19FTEVNRU5UKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29s
IHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJl
cGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzKikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MiwxOCArMTQyLDE4IEBAIHN0YXRpYyBHdGtTdGF0ZVR5cGUgZ2V0R3RrU3Rh
dGVUeXBlKFJlbmQKICAgICByZXR1cm4gR1RLX1NUQVRFX05PUk1BTDsKIH0KIAotc3RhdGljIHZv
aWQgc2V0VG9nZ2xlU2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0ayosIFJlbmRlclN0eWxlKiBzdHls
ZSwgR3RrV2lkZ2V0KiB3aWRnZXQpCitzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKGNvbnN0IFJl
bmRlclRoZW1lR3RrKiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBHdGtXaWRnZXQqIHdpZGdldCkKIHsK
ICAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNo
b3VsZG4ndCBjaGFuZ2UgdGhlbS4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2lj
T3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndp
ZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGdpbnQgaW5kaWNhdG9yU2l6ZTsKICAgICBndGtfd2lkZ2V0
X3N0eWxlX2dldCh3aWRnZXQsICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBOVUxM
KTsKLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwotICAgIGlmIChz
dHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KGluZGljYXRvclNpemUsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5z
aWNPckF1dG8oKSkKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUs
IEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHls
ZS5zZXRIZWlnaHQoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7CiB9CiAKIHN0YXRpYyB2
b2lkIHBhaW50VG9nZ2xlKFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCwgR3RrV2lkZ2V0KiB3aWRnZXQpCkBAIC0xOTQsNyArMTk0LDcgQEAgc3RhdGljIHZvaWQgcGFp
bnRUb2dnbGUoUmVuZGVyVGhlbWVHdGsqIAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0
azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAg
ICAgc2V0VG9nZ2xlU2l6ZSh0aGlzLCBzdHlsZSwgZ3RrQ2hlY2tCdXR0b24oKSk7CiB9CkBAIC0y
MDUsNyArMjA1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChjb25zdAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldFJhZGlv
U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgc2V0VG9nZ2xlU2l6ZSh0aGlz
LCBzdHlsZSwgZ3RrUmFkaW9CdXR0b24oKSk7CiB9CkBAIC0yODksMTEgKzI4OSwxMSBAQCBpbnQg
UmVuZGVyVGhlbWVHdGs6OmdldENvbWJvQm94U2VwYXJhdG9yCiAgICAgcmV0dXJuIGd0a193aWRn
ZXRfZ2V0X3N0eWxlKHNlcGFyYXRvciktPnh0aGlja25lc3M7CiB9CiAKLWludCBSZW5kZXJUaGVt
ZUd0azo6Y29tYm9Cb3hBcnJvd1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJl
bmRlclRoZW1lR3RrOjpjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0
CiB7CiAgICAgLy8gVGFraW5nIHRoZSBmb250IHNpemUgYW5kIHJldmVyc2luZyB0aGUgRFBJIGNv
bnZlcnNpb24gc2VlbXMgdG8gbWF0Y2gKICAgICAvLyBHVEsrIHJlbmRlcmluZyBhcyBjbG9zZWx5
IGFzIHBvc3NpYmxlLgotICAgIHJldHVybiBzdHlsZS0+Zm9udCgpLnNpemUoKSAqICg3Mi4wIC8g
UmVuZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQSSgpKTsKKyAgICByZXR1cm4gc3R5bGUuZm9udCgp
LnNpemUoKSAqICg3Mi4wIC8gUmVuZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQSSgpKTsKIH0KIAog
c3RhdGljIHZvaWQgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoR3RrV2lkZ2V0KiBidXR0b24sIGludCYg
bGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKQpAQCAtMzE2LDExICszMTYs
MTEgQEAgc3RhdGljIHZvaWQgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoR3RrV2lkZwogfQogCiAKLXZv
aWQgUmVuZGVyVGhlbWVHdGs6OmdldENvbWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUs
IGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKFJlbmRlclN0eWxlJiBzdHlsZSwg
aW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20pIGNvbnN0CiB7CiAg
ICAgLy8gSWYgdGhpcyBtZW51IGxpc3QgYnV0dG9uIGlzbid0IGRyYXduIHVzaW5nIHRoZSBuYXRp
dmUgdGhlbWUsIHdlCiAgICAgLy8gZG9uJ3QgYWRkIGFueSBleHRyYSBwYWRkaW5nIGJleW9uZCB3
aGF0IFdlYkNvcmUgYWxyZWFkeSB1c2VzLgotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09
IE5vQ29udHJvbFBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQ
YXJ0KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBBIGNvbWJvIGJveCBidXR0b24gaXMgYSBi
dXR0b24gd2l0aCB3aWRnZXRzIHBhY2tlZCBpbnRvIGl0LgpAQCAtMzMyLDM0ICszMzIsMzQgQEAg
dm9pZCBSZW5kZXJUaGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKAogICAgIGludCBhcnJvd0Fu
ZFNlcGVyYXRvckxlbmd0aCA9IGNvbWJvQm94QXJyb3dTaXplKHN0eWxlKSArCiAgICAgICAgIGdl
dENvbWJvQm94U2VwYXJhdG9yV2lkdGgoKSArICgzICogYnV0dG9uV2lkZ2V0U3R5bGUtPnh0aGlj
a25lc3MpOwogCi0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgaWYgKHN0
eWxlLmRpcmVjdGlvbigpID09IFJUTCkKICAgICAgICAgbGVmdCArPSBhcnJvd0FuZFNlcGVyYXRv
ckxlbmd0aDsKICAgICBlbHNlCiAgICAgICAgIHJpZ2h0ICs9IGFycm93QW5kU2VwZXJhdG9yTGVu
Z3RoOwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJu
YWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQg
PSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7CiAgICAgZ2V0Q29tYm9Cb3hQYWRk
aW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIHJldHVybiBsZWZ0Owog
fQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFk
ZGluZ1JpZ2h0KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IDAs
IHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKICAgICBnZXRDb21ib0JveFBhZGRpbmco
c3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgcmV0dXJuIHJpZ2h0OwogfQog
Ci1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdU
b3AoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIGludCBsZWZ0ID0gMCwgdG9wID0g
MCwgcmlnaHQgPSAwLCBib3R0b20gPSAwOwogICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwg
bGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICByZXR1cm4gdG9wOwogfQogCi1pbnQgUmVu
ZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20o
UmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwg
cmlnaHQgPSAwLCBib3R0b20gPSAwOwogICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tKTsKQEAgLTM4MSwxMiArMzgxLDEyIEBAIGJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50TWVudUxpc3QoY29uc3QKIAogICAgIGludCBsZWZ0Qm9yZGVyID0gMCwg
cmlnaHRCb3JkZXIgPSAwLCBib3R0b21Cb3JkZXIgPSAwLCB0b3BCb3JkZXIgPSAwOwogICAgIGdl
dEJ1dHRvbklubmVyQm9yZGVyKGd0a0NvbWJvQm94QnV0dG9uKCksIGxlZnRCb3JkZXIsIHRvcEJv
cmRlciwgcmlnaHRCb3JkZXIsIGJvdHRvbUJvcmRlcik7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gJm9iamVjdC5zdHlsZSgpOworICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IG9iamVjdC5zdHls
ZSgpOwogICAgIGludCBhcnJvd1NpemUgPSBjb21ib0JveEFycm93U2l6ZShzdHlsZSk7CiAgICAg
R3RrU3R5bGUqIGJ1dHRvblN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrQ29tYm9Cb3hC
dXR0b24oKSk7CiAKICAgICBJbnRSZWN0IGFycm93UmVjdCgwLCAocmVjdC5oZWlnaHQoKSAtIGFy
cm93U2l6ZSkgLyAyLCBhcnJvd1NpemUsIGFycm93U2l6ZSk7Ci0gICAgaWYgKHN0eWxlLT5kaXJl
Y3Rpb24oKSA9PSBSVEwpCisgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigpID09IFJUTCkKICAgICAg
ICAgYXJyb3dSZWN0LnNldFgobGVmdEJvcmRlciArIGJ1dHRvblN0eWxlLT54dGhpY2tuZXNzKTsK
ICAgICBlbHNlCiAgICAgICAgIGFycm93UmVjdC5zZXRYKHJlY3Qud2lkdGgoKSAtIHJpZ2h0Qm9y
ZGVyIC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBhcnJvd1NpemUpOwpAQCAtNDEwLDcgKzQx
MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoY29uc3QKICAgICBib3R0
b21Cb3JkZXIgKz0gZm9jdXNQYWRkaW5nICsgZm9jdXNXaWR0aDsKICAgICBpbnQgc2VwYXJhdG9y
V2lkdGggPSBnZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCk7CiAgICAgSW50UmVjdCBzZXBhcmF0
b3JSZWN0KDAsIHRvcEJvcmRlciwgc2VwYXJhdG9yV2lkdGgsIHJlY3QuaGVpZ2h0KCkgLSB0b3BC
b3JkZXIgLSBib3R0b21Cb3JkZXIpOwotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRM
KQorICAgIGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgIHNlcGFyYXRvclJl
Y3Quc2V0WChhcnJvd1JlY3QueCgpICsgYXJyb3dSZWN0LndpZHRoKCkgKyBidXR0b25TdHlsZS0+
eHRoaWNrbmVzcyArIHNlcGFyYXRvcldpZHRoKTsKICAgICBlbHNlCiAgICAgICAgIHNlcGFyYXRv
clJlY3Quc2V0WChhcnJvd1JlY3QueCgpIC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBzZXBh
cmF0b3JXaWR0aCk7CkBAIC01MjgsOSArNTI4LDkgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRTbGlkZXJUaHVtYihjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0g
c3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFy
YW5jZSgpOwogICAgIGlmIChwYXJ0ICE9IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgJiYgcGFy
dCAhPSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDIs
MTMgKzU0MiwxMyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAKICAgICBpZiAocGFydCA9PSBTbGlkZXJU
aHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobGVu
Z3RoLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCh3aWR0aCwgRml4
ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAg
ICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8
fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLSAgICBzdHlsZS0+c2V0V2lk
dGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxl
bmd0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7
CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVkKSk7CiB9CiAKICNpZiBF
TkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKQEAgLTU3NCw3ICs1NzQsNyBAQCBib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKGNvCiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJ
bm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JikgY29uc3QKIHsKICAgICBHdGtTdHlsZSogZ3RrU3R5bGUgPSBndGtfd2lkZ2V0X2dl
dF9zdHlsZShndGtTcGluQnV0dG9uKCkpOwogICAgIGNvbnN0IFBhbmdvRm9udERlc2NyaXB0aW9u
KiBmb250RGVzY3JpcHRpb24gPSBndGtTdHlsZS0+Zm9udF9kZXNjOwpAQCAtNTg1LDggKzU4NSw4
IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHQKICAgICBpbnQgd2lk
dGggPSBzdGQ6Om1heChQQU5HT19QSVhFTFMoZm9udFNpemUpLCBtaW5TcGluQnV0dG9uQXJyb3dT
aXplKTsKICAgICB3aWR0aCArPSAtKCh3aWR0aCAlIDIpIC0gMSkgKyBndGtTdHlsZS0+eHRoaWNr
bmVzczsKIAotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAg
c3R5bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRX
aWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0TWluV2lkdGgoTGVuZ3Ro
KHdpZHRoLCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludElubmVyU3Bp
bkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAkocmV2aXNpb24gMTcwMzcxKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwMSwxMCArMjAxLDEwIEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dFJlcGFpbnRSZWN0KGMKICAgICBhZGp1c3RSZWN0Rm9yRm9jdXMoY29udGV4dCwgcmVjdCk7CiB9
CiAKLXN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBS
ZW5kZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29u
dGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIC8vIFRoZSB3aWR0aCBh
bmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgc28gd2Ugc2hvdWxkbid0IGNoYW5nZSB0aGVt
LgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUt
PmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09y
QXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gT3RoZXIgcG9ydHMgaGFyZC1jb2RlIHRoaXMgdG8gMTMgd2hpY2ggaXMgYWxzbyB0aGUg
ZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSysuCkBAIC0yMTMsMTEgKzIxMywxMSBAQCBzdGF0
aWMgdm9pZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29udGV4CiAgICAgZ2ludCBpbmRpY2F0b3JT
aXplOwogICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9y
LXNpemUiLCAmaW5kaWNhdG9yU2l6ZSwgTlVMTCk7CiAKLSAgICBpZiAoc3R5bGUtPndpZHRoKCku
aXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChpbmRp
Y2F0b3JTaXplLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JB
dXRvKCkpCisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhl
ZCkpOwogCi0gICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKKyAgICBpZiAoc3R5bGUu
aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoaW5kaWNh
dG9yU2l6ZSwgRml4ZWQpKTsKIH0KIAogc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVu
ZGVyVGhlbWVHdGsqIHRoZW1lLCBHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IGZ1bGxSZWN0KQpAQCAtMjc1LDcgKzI3NSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50VG9nZ2xlKGNv
bnN0IFJlbmRlclRoZW0KICAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwog
fQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0
eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBzZXRUb2dnbGVTaXplKGdldFN0eWxlQ29udGV4dChH
VEtfVFlQRV9DSEVDS19CVVRUT04pLCBzdHlsZSk7CiB9CkBAIC0yODYsNyArMjg2LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChjb25zdAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYg
c3R5bGUpIGNvbnN0CiB7CiAgICAgc2V0VG9nZ2xlU2l6ZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZ
UEVfUkFESU9fQlVUVE9OKSwgc3R5bGUpOwogfQpAQCAtMzc4LDE4ICszNzgsMTggQEAgYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oY29uc3QgUgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotc3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlKiBzdHlsZSwgR3Rr
Qm9yZGVyJiBib3JkZXIsIGludCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQorc3RhdGljIHZvaWQg
Z2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlJiBzdHlsZSwgR3RrQm9yZGVyJiBib3JkZXIs
IGludCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQogewogICAgIC8vIElmIHRoaXMgbWVudSBsaXN0
IGJ1dHRvbiBpc24ndCBkcmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3ZQogICAgIC8vIGRv
bid0IGFkZCBhbnkgZXh0cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3JlIGFscmVhZHkgdXNl
cy4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQorICAgIGlm
IChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTm9Db250cm9sUGFydCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X0NPTUJPX0JPWCk7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKIAogICAg
IGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVU
VE9OKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRp
Y19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUtPmRpcmVjdGlv
bigpKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3Rh
dGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS5kaXJlY3Rp
b24oKSkpKTsKIAogICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoY29udGV4dCwgc3Rh
dGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICZib3JkZXIpOwogCkBAIC00MDYsNyArNDA2LDcg
QEAgc3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eQogICAgIGNvbnRleHQg
PSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQQVJBVE9SKTsKICAgICBndGtfc3R5bGVfY29u
dGV4dF9zYXZlKGNvbnRleHQpOwogCi0gICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBz
dGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLT5kaXJl
Y3Rpb24oKSkpOworICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8
R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS5kaXJlY3Rpb24oKSkpOwog
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZGlyZWN0aW9uKTsK
ICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgInNlcGFyYXRvciIpOwog
CkBAIC00MjYsMjkgKzQyNiwyOSBAQCBzdGF0aWMgdm9pZCBnZXRDb21ib0JveE1ldHJpY3MoUmVu
ZGVyU3R5CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKIH0KIAotaW50
IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQo
UmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9
IHsgMCwgMCwgMCwgMCB9OwogICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGgg
PSAwOwogICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lk
dGgsIHNlcGFyYXRvcldpZHRoKTsKICAgICBpbnQgbGVmdCA9IGJvcmRlcldpZHRoLmxlZnQgKyBm
b2N1c1dpZHRoOwotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgIGlmIChz
dHlsZS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgIGxlZnQgKz0gc2VwYXJhdG9yV2lkdGgg
KyBtaW5BcnJvd1NpemU7CiAgICAgcmV0dXJuIGxlZnQ7CiB9CiAKLWludCBSZW5kZXJUaGVtZUd0
azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citp
bnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUm
IHN0eWxlKSBjb25zdAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwg
MCB9OwogICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwogICAgIGdl
dENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRv
cldpZHRoKTsKICAgICBpbnQgcmlnaHQgPSBib3JkZXJXaWR0aC5yaWdodCArIGZvY3VzV2lkdGg7
Ci0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgaWYgKHN0eWxlLmRpcmVj
dGlvbigpID09IExUUikKICAgICAgICAgcmlnaHQgKz0gc2VwYXJhdG9yV2lkdGggKyBtaW5BcnJv
d1NpemU7CiAgICAgcmV0dXJuIHJpZ2h0OwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJU
aGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OwogICAgIGlu
dCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwpAQCAtNDU2LDcgKzQ1Niw3IEBA
IGludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmcKICAgICByZXR1cm4gYm9y
ZGVyV2lkdGgudG9wICsgZm9jdXNXaWR0aDsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1
cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVu
ZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJiBzdHls
ZSkgY29uc3QKIHsKICAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsK
ICAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKQEAgLTcxMCw5ICs3
MTAsOSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKGNvCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNp
emUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVH
dGs6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBj
b25zdAogewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOworICAg
IENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS5hcHBlYXJhbmNlKCk7CiAgICAgaWYgKHBhcnQgIT0g
U2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBwYXJ0ICE9IFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0KQogICAgICAgICByZXR1cm47CiAKQEAgLTcyMiwxMyArNzIyLDEzIEBAIHZvaWQgUmVuZGVy
VGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2kKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInNsaWRlci1sZW5ndGgiLCAmc2xpZGVyTGVuZ3RoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMKTsKICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250
YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBG
aXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJXaWR0aCwgRml4
ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQp
KTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJXaWR0aCwgRml4ZWQpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVtYlZl
cnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLSAgICBz
dHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0
aChMZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0
aChzbGlkZXJMZW5ndGgsIEZpeGVkKSk7CiB9CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVO
VCkKQEAgLTc3Nyw3ICs3NzcsNyBAQCBzdGF0aWMgZ2ludCBzcGluQnV0dG9uQXJyb3dTaXplKEd0
a1N0eWxlCiAgICAgcmV0dXJuIGFycm93U2l6ZSAtIGFycm93U2l6ZSAlIDI7IC8vIEZvcmNlIGV2
ZW4uCiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgR3RrU3R5bGVD
b250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NQSU5fQlVUVE9OKTsK
IApAQCAtNzg1LDggKzc4NSw4IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3Bp
bkJ1dHQKICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGluZyhjb250ZXh0LCBzdGF0aWNf
Y2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJnBhZGRpbmcpOwogCiAgICAgaW50IHdpZHRoID0gc3Bp
bkJ1dHRvbkFycm93U2l6ZShjb250ZXh0KSArIHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQ7
Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+
c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExl
bmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgs
IEZpeGVkKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhaW50U3BpbkFycm93QnV0dG9uKFJlbmRlclRo
ZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QsIEd0a0Fycm93VHlwZSBhcnJvd1R5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2OCw5ICsxNjgsOSBAQCBzdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQ
YXJ0IGFwCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpzdXBwb3J0c0ZvY3VzUmlu
Zyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citib29sIFJlbmRlclRoZW1lR3RrOjpz
dXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7CisgICAgcmV0dXJuIHN1
cHBvcnRzRm9jdXMoc3R5bGUuYXBwZWFyYW5jZSgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0
azo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdApAQCAt
MjIwLDI1ICsyMjAsMjUgQEAgc3RhdGljIEd0a1N0YXRlVHlwZSBndGtJY29uU3RhdGUoUmVuZGVy
VAogICAgIHJldHVybiBHVEtfU1RBVEVfTk9STUFMOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3Rr
OjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBX
ZWJDb3JlOjpFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIFdlYkNvcmU6OkVsZW1l
bnQmKSBjb25zdAogewogICAgIC8vIFNvbWUgbGF5b3V0IHRlc3RzIGNoZWNrIGV4cGxpY2l0bHkg
dGhhdCBidXR0b25zIGlnbm9yZSBsaW5lLWhlaWdodC4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFu
Y2UoKSA9PSBQdXNoQnV0dG9uUGFydCkKLSAgICAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVu
ZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNl
KCkgPT0gUHVzaEJ1dHRvblBhcnQpCisgICAgICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVy
U3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjph
ZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxpc3RTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAg
ICAvLyBUaGUgdGVzdHMgY2hlY2sgZXhwbGljaXRseSB0aGF0IHNlbGVjdCBtZW51IGJ1dHRvbnMg
aWdub3JlIGxpbmUgaGVpZ2h0LgotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxl
Ojppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0
eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKIAogICAgIC8vIFdlIGNhbm5vdCBnaXZlIGEgcHJv
cGVyIHJlbmRlcmluZyB3aGVuIGJvcmRlciByYWRpdXMgaXMgYWN0aXZlLCB1bmZvcnR1bmF0ZWx5
LgotICAgIHN0eWxlLT5yZXNldEJvcmRlclJhZGl1cygpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVy
UmFkaXVzKCk7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JiBlKSBjb25zdAogewotICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoJnN0eWxlUmVzb2x2
ZXIsICZzdHlsZSwgJmUpOworICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGVSZXNvbHZlciwg
c3R5bGUsIGUpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0QnV0dG9u
RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
aW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjkzLDcgKzI5Myw3IEBAIHN0YXRpYyBH
dGtJY29uU2l6ZSBnZXRJY29uU2l6ZUZvclBpeGVsU2kKICAgICByZXR1cm4gR1RLX0lDT05fU0la
RV9ESUFMT0c7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSkgY29uc3QKIHsKICAgICBhZGp1c3RTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKIH0KQEAg
LTMwMywyNSArMzAzLDI1IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRS
ZXMKICAgICByZXR1cm4gcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChvLCBp
LCByZWN0KTsKIH0KIAotc3RhdGljIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoUmVu
ZGVyU3R5bGUqIHN0eWxlKQorc3RhdGljIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUo
UmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0
eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIHN0eWxl
LnJlc2V0UGFkZGluZygpOwogCiAgICAgLy8gR2V0IHRoZSBpY29uIHNpemUgYmFzZWQgb24gdGhl
IGZvbnQgc2l6ZS4KLSAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKKyAgICBp
bnQgZm9udFNpemUgPSBzdHlsZS5mb250U2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA8IGd0a0lj
b25TaXplTWVudSkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGZvbnRTaXplLCBG
aXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChmb250U2l6ZSwgRml4ZWQp
KTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGZvbnRTaXplLCBGaXhlZCkpOworICAg
ICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGZvbnRTaXplLCBGaXhlZCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGdpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwogICAgIGd0a19p
Y29uX3NpemVfbG9va3VwKGdldEljb25TaXplRm9yUGl4ZWxTaXplKGZvbnRTaXplKSwgJndpZHRo
LCAmaGVpZ2h0KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwot
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodCwgRml4ZWQpKTsKKyAgICBzdHlsZS5z
ZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0
aChoZWlnaHQsIEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIGFkanVzdFNlYXJjaEZpZWxk
SWNvblN0eWxlKHN0eWxlKTsKIH0KQEAgLTM2MCw3ICszNjAsNyBAQCBib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJl
bmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBhZGp1c3RTZWFy
Y2hGaWVsZEljb25TdHlsZShzdHlsZSk7CiB9CkBAIC0zNzksMTEgKzM3OSwxMSBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAvLyBXZSBjYW5ub3QgZ2l2ZSBhIHByb3Bl
ciByZW5kZXJpbmcgd2hlbiBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwgdW5mb3J0dW5hdGVseS4K
LSAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdo
dChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUucmVzZXRCb3Jk
ZXJSYWRpdXMoKTsKKyAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFs
TGluZUhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVs
ZChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcmVjdCkKQEAgLTQxNCwxNSArNDE0LDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
Q2Fwc0xvY2tJbmRpY2EKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRy
YWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNv
bnN0CiB7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRC
b3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRl
clRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGhlbWU6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwotICAg
IHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51
bGxwdHIpOwogfQogCiBkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmNhcmV0QmxpbmtJbnRlcnZhbCgp
IGNvbnN0CkBAIC01NzYsMTMgKzU3NiwxMyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1l
ZGlhVG9nZ2xlQ2xvCiB9CiAjZW5kaWYKIAotc3RhdGljIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlp
IGJvcmRlclJhZGlpRnJvbVN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBGbG9hdFJv
dW5kZWRSZWN0OjpSYWRpaSBib3JkZXJSYWRpaUZyb21TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUp
CiB7CiAgICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKAotICAgICAgICBJbnRTaXpl
KHN0eWxlLT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS0+
Ym9yZGVyVG9wTGVmdFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAotICAgICAgICBJbnRT
aXplKHN0eWxlLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5
bGUtPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCi0gICAgICAg
IEludFNpemUoc3R5bGUtPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVl
KCksIHN0eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSks
Ci0gICAgICAgIEludFNpemUoc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkud2lkdGgo
KS5pbnRWYWx1ZSgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS5oZWlnaHQoKS5p
bnRWYWx1ZSgpKSk7CisgICAgICAgIEludFNpemUoc3R5bGUuYm9yZGVyVG9wTGVmdFJhZGl1cygp
LndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyVG9wTGVmdFJhZGl1cygpLmhlaWdodCgp
LmludFZhbHVlKCkpLAorICAgICAgICBJbnRTaXplKHN0eWxlLmJvcmRlclRvcFJpZ2h0UmFkaXVz
KCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS5ib3JkZXJUb3BSaWdodFJhZGl1cygpLmhlaWdo
dCgpLmludFZhbHVlKCkpLAorICAgICAgICBJbnRTaXplKHN0eWxlLmJvcmRlckJvdHRvbUxlZnRS
YWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMo
KS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwKKyAgICAgICAgSW50U2l6ZShzdHlsZS5ib3JkZXJCb3R0
b21SaWdodFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyQm90dG9tUmln
aHRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtNTk3LDcgKzU5Nyw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmEKIAogICAgIGZsb2F0IG1l
ZGlhRHVyYXRpb24gPSBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7CiAgICAgZmxvYXQgdG90YWxU
cmFja1dpZHRoID0gci53aWR0aCgpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZvLnN0eWxl
KCk7CisgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gby5zdHlsZSgpOwogICAgIFJlZlB0cjxUaW1l
UmFuZ2VzPiB0aW1lUmFuZ2VzID0gbWVkaWFFbGVtZW50LT5idWZmZXJlZCgpOwogICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHRpbWVSYW5nZXMtPmxlbmd0aCgpOyArK2luZGV4
KSB7CiAgICAgICAgIGZsb2F0IHN0YXJ0ID0gdGltZVJhbmdlcy0+c3RhcnQoaW5kZXgsIElHTk9S
RV9FWENFUFRJT04pOwpAQCAtNjExLDcgKzYxMSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50TWVkaWFTbGlkZXJUcmEKICAgICAgICAgcmFuZ2VSZWN0LnNldFdpZHRoKGxlbmd0aFJhdGlv
ICogdG90YWxUcmFja1dpZHRoKTsKICAgICAgICAgaWYgKGluZGV4KQogICAgICAgICAgICAgcmFu
Z2VSZWN0Lm1vdmUoc3RhcnRSYXRpbyAqIHRvdGFsVHJhY2tXaWR0aCwgMCk7Ci0gICAgICAgIGNv
bnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHJhbmdlUmVjdCwgYm9yZGVy
UmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKSwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CisgICAgICAgIGNvbnRleHQtPmZp
bGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHJhbmdlUmVjdCwgYm9yZGVyUmFkaWlGcm9t
U3R5bGUoc3R5bGUpKSwgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpLCBzdHlsZS5jb2xvclNwYWNlKCkpOwogICAgIH0KIAogICAgIGNvbnRleHQtPnJlc3RvcmUo
KTsKQEAgLTYyMCw4ICs2MjAsOCBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xp
ZGVyVHJhCiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByKQogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZvLnN0eWxlKCk7Ci0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHIsIGJvcmRl
clJhZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgIFJlbmRlclN0eWxlJiBz
dHlsZSA9IG8uc3R5bGUoKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0
KEZsb2F0Um91bmRlZFJlY3QociwgYm9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUu
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS5jb2xvclNwYWNl
KCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjQ2LDEzICs2NDYsMTMgQEAgYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaQogCiAgICAgaW50IHJlY3RIZWlnaHQg
PSByZWN0LmhlaWdodCgpOwogICAgIGZsb2F0IHRyYWNrSGVpZ2h0ID0gcmVjdEhlaWdodCAqIHZv
bHVtZTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyT2JqZWN0LnN0eWxlKCk7Cisg
ICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyT2JqZWN0LnN0eWxlKCk7CiAgICAgSW50UmVj
dCB2b2x1bWVSZWN0KHJlY3QpOwogICAgIHZvbHVtZVJlY3QubW92ZSgwLCByZWN0SGVpZ2h0IC0g
dHJhY2tIZWlnaHQpOwogICAgIHZvbHVtZVJlY3Quc2V0SGVpZ2h0KGNlaWwodHJhY2tIZWlnaHQp
KTsKIAogICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHZvbHVt
ZVJlY3QsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksCi0gICAgICAgIHN0eWxlLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkp
OworICAgICAgICBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciks
IHN0eWxlLmNvbG9yU3BhY2UoKSk7CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogCiAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNjc1LDIxICs2NzUsMjEgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYUN1cnJlbnRUaQogI2VuZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkK
LXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0
cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiAvLyBUaGVzZSB2YWx1
ZXMgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAogc3Rh
dGljIGNvbnN0IGludCBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzID0gNTsKIHN0YXRpYyBjb25zdCBp
bnQgcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMgPSAxMDsKIHN0YXRpYyBjb25zdCBkb3VibGUgcHJv
Z3Jlc3NBbmltYXRpb25JbnRlcnZhbCA9IDAuMTI1OwotZG91YmxlIFJlbmRlclRoZW1lR3RrOjph
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29u
c3QKK2RvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHByb2dyZXNzQW5p
bWF0aW9uSW50ZXJ2YWw7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uRHVy
YXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citkb3VibGUgUmVuZGVy
VGhlbWVHdGs6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mm
KSBjb25zdAogewogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsICogcHJvZ3Jl
c3NBbmltYXRpb25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sgYW5kIGZvcnRoOwogfQpAQCAt
Njk3LDE2ICs2OTcsMTYgQEAgZG91YmxlIFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25EdXJhdGlv
bgogSW50UmVjdCBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiBmdWxsQmFyUmVjdCkKIHsK
ICAgICBJbnRSZWN0IHByb2dyZXNzUmVjdChmdWxsQmFyUmVjdCk7Ci0gICAgY29uc3QgUmVuZGVy
UHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcygmcmVuZGVyT2JqZWN0
KTsKLSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkgewotICAgICAgICBp
bnQgcHJvZ3Jlc3NXaWR0aCA9IHByb2dyZXNzUmVjdC53aWR0aCgpICogcmVuZGVyUHJvZ3Jlc3Mt
PnBvc2l0aW9uKCk7CisgICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3MmIHJlbmRlclByb2dyZXNzID0g
dG9SZW5kZXJQcm9ncmVzcyhyZW5kZXJPYmplY3QpOworICAgIGlmIChyZW5kZXJQcm9ncmVzcy5p
c0RldGVybWluYXRlKCkpIHsKKyAgICAgICAgaW50IHByb2dyZXNzV2lkdGggPSBwcm9ncmVzc1Jl
Y3Qud2lkdGgoKSAqIHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCk7CiAgICAgICAgIGlmIChyZW5k
ZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgICAgICBwcm9ncmVz
c1JlY3Quc2V0WChwcm9ncmVzc1JlY3QueCgpICsgcHJvZ3Jlc3NSZWN0LndpZHRoKCkgLSBwcm9n
cmVzc1dpZHRoKTsKICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFdpZHRoKHByb2dyZXNzV2lkdGgp
OwogICAgICAgICByZXR1cm4gcHJvZ3Jlc3NSZWN0OwogICAgIH0KIAotICAgIGRvdWJsZSBhbmlt
YXRpb25Qcm9ncmVzcyA9IHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpOworICAg
IGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcyA9IHJlbmRlclByb2dyZXNzLmFuaW1hdGlvblByb2dy
ZXNzKCk7CiAKICAgICAvLyBOZXZlciBsZXQgdGhlIHByb2dyZXNzIHJlY3Qgc2hyaW5rIHNtYWxs
ZXIgdGhhbiAyIHBpeGVscy4KICAgICBpbnQgbmV3V2lkdGggPSBzdGQ6Om1heCgyLCBwcm9ncmVz
c1JlY3Qud2lkdGgoKSAvIHByb2dyZXNzQWN0aXZpdHlCbG9ja3MpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgJKHJldmlzaW9uIDE3MDM3MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwxMCArNDQsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUg
dGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVy
ZWQuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
SG92ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0
aGUgZm9jdXMgcmluZy4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3Qg
UmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNG
b2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIEEg
bWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdp
bmRvdyBoYXMgZm9jdXMgb3Igbm90LgogICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNU
aW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCBvdmVycmlkZTsKQEAgLTExNSw1MCArMTE1
LDUwIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2Jv
eChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSop
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVy
U3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICBpbnQgcG9wdXBJ
bnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgaW50
IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsK
LSAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBj
b25zdCBvdmVycmlkZTsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0
eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQo
UmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRp
bmdUb3AoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIFRo
ZSBNYWMgcG9ydCBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHRoZSAibWVudSBsaXN0IiBhbmQgdGhl
ICJtZW51IGxpc3QgYnV0dG9uLiIKICAgICAvLyBUaGUgZm9ybWVyIGlzIHVzZWQgd2hlbiBhIG1l
bnUgbGlzdCBidXR0b24gaGFzIGJlZW4gc3R5bGVkLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlCiAg
ICAgLy8gQXF1YSB0aGVtZWQgY29udHJvbHMgd2hlbmV2ZXIgcG9zc2libGUuIFdlIGFsd2F5cyB3
YW50IHRvIHVzZSBHVEsrIHRoZW1pbmcsIHNvCiAgICAgLy8gd2UgZG9uJ3QgbWFpbnRhaW4gdGhp
cyBkaWZmZXJlbnRpYXRpb24uCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0
b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVt
Yihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVs
ZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIGlu
aXRNZWRpYUNvbG9ycygpOwpAQCAtMTgxLDIxICsxODEsMjEgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0
aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NC
YXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50
ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NC
YXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlm
CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJT
cGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldp
ZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBs
ZUZpbGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBsYXRmb3JtSW5pdCgp
OwotICAgIHN0YXRpYyB2b2lkIHNldFRleHRJbnB1dEJvcmRlcnMoUmVuZGVyU3R5bGUqKTsKKyAg
ICBzdGF0aWMgdm9pZCBzZXRUZXh0SW5wdXRCb3JkZXJzKFJlbmRlclN0eWxlJik7CiAgICAgc3Rh
dGljIGRvdWJsZSBnZXRTY3JlZW5EUEkoKTsKIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTIxNSw5
ICsyMTUsOSBAQCBwcml2YXRlOgogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiAgICAgdm9pZCBz
ZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCosIEd0a1dpZGdldCopIGNvbnN0
OwogICAgIHZvaWQgcmVmcmVzaENvbWJvQm94Q2hpbGRyZW4oKSBjb25zdDsKLSAgICB2b2lkIGdl
dENvbWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSosIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYg
cmlnaHQsIGludCYgYm90dG9tKSBjb25zdDsKKyAgICB2b2lkIGdldENvbWJvQm94UGFkZGluZyhS
ZW5kZXJTdHlsZSYsIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9t
KSBjb25zdDsKICAgICBpbnQgZ2V0Q29tYm9Cb3hTZXBhcmF0b3JXaWR0aCgpIGNvbnN0OwotICAg
IGludCBjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIGludCBjb21i
b0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCiAgICAgR3RrV2lkZ2V0KiBndGtC
dXR0b24oKSBjb25zdDsKICAgICBHdGtXaWRnZXQqIGd0a1RyZWVWaWV3KCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gMTcw
MzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0OTEsMTAgKzE0OTEsMTAgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50
T3V0bGluZShQYWludEluZgogCiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgp
OwogICAgIC8vIE9ubHkgcGFpbnQgdGhlIGZvY3VzIHJpbmcgYnkgaGFuZCBpZiB0aGUgdGhlbWUg
aXNuJ3QgYWJsZSB0byBkcmF3IGl0LgotICAgIGlmIChzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlz
QXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKCZzdHlsZVRvVXNlKSkKKyAgICBp
ZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0Zv
Y3VzUmluZyhzdHlsZVRvVXNlKSkKICAgICAgICAgcGFpbnRGb2N1c1JpbmcocGFpbnRJbmZvLCBw
YWludE9mZnNldCwgJnN0eWxlVG9Vc2UpOwogCi0gICAgaWYgKGhhc091dGxpbmVBbm5vdGF0aW9u
KCkgJiYgIXN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9y
dHNGb2N1c1JpbmcoJnN0eWxlVG9Vc2UpKQorICAgIGlmIChoYXNPdXRsaW5lQW5ub3RhdGlvbigp
ICYmICFzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRz
Rm9jdXNSaW5nKHN0eWxlVG9Vc2UpKQogICAgICAgICBhZGRQREZVUkxSZWN0KHBhaW50SW5mbywg
cGFpbnRPZmZzZXQpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQgPSBw
YWludEluZm8uY29udGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVkaWFDb250cm9scy5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAxLDEwICsxMDEsMTAgQEAgc3RhdGljIEZsb2F0UmVjdCBnZXRVbnpvb21lZFJlY3RBbmRBZGp1
cwogc3RhdGljIGNvbnN0IGludCBtZWRpYVNsaWRlclRodW1iV2lkdGggPSAxMzsKIHN0YXRpYyBj
b25zdCBpbnQgbWVkaWFTbGlkZXJUaHVtYkhlaWdodCA9IDE0OwogCi12b2lkIFJlbmRlck1lZGlh
Q29udHJvbHM6OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkK
K3ZvaWQgUmVuZGVyTWVkaWFDb250cm9sczo6YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVu
ZGVyU3R5bGUmIHN0eWxlKQogewogICAgIGludCBwYXJ0OwotICAgIHN3aXRjaCAoc3R5bGUtPmFw
cGVhcmFuY2UoKSkgeworICAgIHN3aXRjaCAoc3R5bGUuYXBwZWFyYW5jZSgpKSB7CiAgICAgY2Fz
ZSBNZWRpYVNsaWRlclRodW1iUGFydDoKICAgICAgICAgcGFydCA9IE1lZGlhU2xpZGVyVGh1bWI7
CiAgICAgICAgIGJyZWFrOwpAQCAtMTIxLDkgKzEyMSw5IEBAIHZvaWQgUmVuZGVyTWVkaWFDb250
cm9sczo6YWRqdXN0TWVkaWFTbGkKICAgICBDR1NpemUgc2l6ZTsKICAgICB3a01lYXN1cmVNZWRp
YVVJUGFydChwYXJ0LCAwLCAmc2l6ZSk7CiAKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBzdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc3RhdGljX2Nhc3Q8
aW50PihzaXplLndpZHRoICogem9vbUxldmVsKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0ICogem9vbUxldmVsKSwgRml4
ZWQpKTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBzdHlsZS5lZmZlY3RpdmVab29tKCk7CisgICAg
c3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2l6ZS53aWR0aCAqIHpvb21M
ZXZlbCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzdGF0aWNfY2FzdDxp
bnQ+KHNpemUuaGVpZ2h0ICogem9vbUxldmVsKSwgRml4ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJN
ZWRpYUNvbnRyb2xzOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhQ29udHJvbEVsZW1lbnRU
eXBlIHBhcnQsIGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVkaWFDb250cm9scy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZWRpYUNvbnRyb2xzLmgJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDcgKzQ2LDcgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHN0YXRpYyBib29s
IHBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUsIGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICBzdGF0
aWMgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSopOworICAgIHN0
YXRpYyB2b2lkIGFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJik7CiAjZW5k
aWYKICAgICBzdGF0aWMgSW50UG9pbnQgdm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24o
UmVuZGVyQm94KiwgY29uc3QgSW50U2l6ZSYpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTI1LDEwICsxMjUsMTAgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSgp
CiAgICAgICAgIGlubmVyU3R5bGUuc2V0QWxpZ25TZWxmKEFsaWduRmxleFN0YXJ0KTsKICAgICB9
CiAKLSAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0aCh0aGVtZSgpLnBvcHVwSW50
ZXJuYWxQYWRkaW5nTGVmdCgmc3R5bGUoKSksIEZpeGVkKSk7Ci0gICAgaW5uZXJTdHlsZS5zZXRQ
YWRkaW5nUmlnaHQoTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCgmc3R5
bGUoKSksIEZpeGVkKSk7Ci0gICAgaW5uZXJTdHlsZS5zZXRQYWRkaW5nVG9wKExlbmd0aCh0aGVt
ZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKCZzdHlsZSgpKSwgRml4ZWQpKTsKLSAgICBpbm5l
clN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRp
bmdCb3R0b20oJnN0eWxlKCkpLCBGaXhlZCkpOworICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ0xl
ZnQoTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KHN0eWxlKCkpLCBGaXhl
ZCkpOworICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ1JpZ2h0KExlbmd0aCh0aGVtZSgpLnBvcHVw
SW50ZXJuYWxQYWRkaW5nUmlnaHQoc3R5bGUoKSksIEZpeGVkKSk7CisgICAgaW5uZXJTdHlsZS5z
ZXRQYWRkaW5nVG9wKExlbmd0aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKHN0eWxl
KCkpLCBGaXhlZCkpOworICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ0JvdHRvbShMZW5ndGgodGhl
bWUoKS5wb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShzdHlsZSgpKSwgRml4ZWQpKTsKIAogICAg
IGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuc2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rp
b25Jc05hdHVyYWwoKSkgewogICAgICAgICAvLyBJdGVtcyBpbiB0aGUgcG9wdXAgd2lsbCBub3Qg
cmVzcGVjdCB0aGUgQ1NTIHRleHQtYWxpZ24gYW5kIGRpcmVjdGlvbiBwcm9wZXJ0aWVzLApAQCAt
MzI2LDcgKzMyNiw3IEBAIExheW91dFJlY3QgUmVuZGVyTWVudUxpc3Q6OmNvbnRyb2xDbGlwUmUK
IAogdm9pZCBSZW5kZXJNZW51TGlzdDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5
b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNv
bnN0CiB7Ci0gICAgbWF4TG9naWNhbFdpZHRoID0gc3RkOjptYXgobV9vcHRpb25zV2lkdGgsIHRo
ZW1lKCkubWluaW11bU1lbnVMaXN0U2l6ZSgmc3R5bGUoKSkpICsgbV9pbm5lckJsb2NrLT5wYWRk
aW5nTGVmdCgpICsgbV9pbm5lckJsb2NrLT5wYWRkaW5nUmlnaHQoKTsKKyAgICBtYXhMb2dpY2Fs
V2lkdGggPSBzdGQ6Om1heChtX29wdGlvbnNXaWR0aCwgdGhlbWUoKS5taW5pbXVtTWVudUxpc3RT
aXplKHN0eWxlKCkpKSArIG1faW5uZXJCbG9jay0+cGFkZGluZ0xlZnQoKSArIG1faW5uZXJCbG9j
ay0+cGFkZGluZ1JpZ2h0KCk7CiAgICAgaWYgKCFzdHlsZSgpLndpZHRoKCkuaXNQZXJjZW50KCkp
CiAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IG1heExvZ2ljYWxXaWR0aDsKIH0KQEAgLTU2OSw3
ICs1NjksNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6bWVudVN0eWxlCiAgICAg
cmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxlVG9Vc2UudmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpLCBzdHlsZVRvVXNlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvciksCiAgICAgICAgIHN0eWxlVG9Vc2UuZm9udCgpLCBzdHlsZVRv
VXNlLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLCBzdHlsZVRvVXNlLmRpc3BsYXkoKSA9PSBOT05F
LCBzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSwgc3R5bGVUb1VzZS50ZXh0SW5kZW50KCksCiAgICAg
ICAgIHN0eWxlKCkuZGlyZWN0aW9uKCksIGlzT3ZlcnJpZGUoc3R5bGUoKS51bmljb2RlQmlkaSgp
KSwgUG9wdXBNZW51U3R5bGU6OkRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IsCi0gICAgICAgIFBvcHVw
TWVudVN0eWxlOjpTZWxlY3RQb3B1cCwgdGhlbWUoKS5wb3B1cE1lbnVTaXplKCZzdHlsZVRvVXNl
LCBhYnNCb3VuZHMpKTsKKyAgICAgICAgUG9wdXBNZW51U3R5bGU6OlNlbGVjdFBvcHVwLCB0aGVt
ZSgpLnBvcHVwTWVudVNpemUoc3R5bGVUb1VzZSwgYWJzQm91bmRzKSk7CiB9CiAKIEhvc3RXaW5k
b3cqIFJlbmRlck1lbnVMaXN0Ojpob3N0V2luZG93KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NyArNTQsNyBAQCB2b2lkIFJlbmRlck1ldGVyOjp1cGRhdGVMb2dpY2FsV2lkdGgoKQogewogICAg
IFJlbmRlckJveDo6dXBkYXRlTG9naWNhbFdpZHRoKCk7CiAKLSAgICBJbnRTaXplIGZyYW1lU2l6
ZSA9IHRoZW1lKCkubWV0ZXJTaXplRm9yQm91bmRzKHRoaXMsIHBpeGVsU25hcHBlZEludFJlY3Qo
ZnJhbWVSZWN0KCkpKTsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IHRoZW1lKCkubWV0ZXJTaXpl
Rm9yQm91bmRzKCp0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYW1lUmVjdCgpKSk7CiAgICAg
c2V0TG9naWNhbFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFtZVNpemUud2lk
dGgoKSA6IGZyYW1lU2l6ZS5oZWlnaHQoKSk7CiB9CiAKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBS
ZW5kZXJNZXRlcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTAogICAgICAgICBmcmFtZS5zZXRIZWln
aHQoY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQpOwogICAgIGVsc2UKICAgICAgICAgZnJhbWUuc2V0
V2lkdGgoY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQpOwotICAgIEludFNpemUgZnJhbWVTaXplID0g
dGhlbWUoKS5tZXRlclNpemVGb3JCb3VuZHModGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFt
ZSkpOworICAgIEludFNpemUgZnJhbWVTaXplID0gdGhlbWUoKS5tZXRlclNpemVGb3JCb3VuZHMo
KnRoaXMsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhbWUpKTsKICAgICBjb21wdXRlZFZhbHVlcy5t
X2V4dGVudCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFtZVNpemUuaGVpZ2h0KCkg
OiBmcmFtZVNpemUud2lkdGgoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUzLDEwICsxMDUz
LDEwIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludE91dGxpbmUoUGFpbnRJbmYKICAgICBpbnQg
b3V0bGluZU9mZnNldCA9IHN0eWxlVG9Vc2Uub3V0bGluZU9mZnNldCgpOwogCiAgICAgLy8gT25s
eSBwYWludCB0aGUgZm9jdXMgcmluZyBieSBoYW5kIGlmIHRoZSB0aGVtZSBpc24ndCBhYmxlIHRv
IGRyYXcgaXQuCi0gICAgaWYgKHN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRo
ZW1lKCkuc3VwcG9ydHNGb2N1c1JpbmcoJnN0eWxlVG9Vc2UpKQorICAgIGlmIChzdHlsZVRvVXNl
Lm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKHN0eWxl
VG9Vc2UpKQogICAgICAgICBwYWludEZvY3VzUmluZyhwYWludEluZm8sIHBhaW50UmVjdC5sb2Nh
dGlvbigpLCAmc3R5bGVUb1VzZSk7CiAKLSAgICBpZiAoaGFzT3V0bGluZUFubm90YXRpb24oKSAm
JiAhc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0Zv
Y3VzUmluZygmc3R5bGVUb1VzZSkpCisgICAgaWYgKGhhc091dGxpbmVBbm5vdGF0aW9uKCkgJiYg
IXN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1
c1Jpbmcoc3R5bGVUb1VzZSkpCiAgICAgICAgIGFkZFBERlVSTFJlY3QocGFpbnRJbmZvLCBwYWlu
dFJlY3QubG9jYXRpb24oKSk7CiAKICAgICBpZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1
dG8oKSB8fCBzdHlsZVRvVXNlLm91dGxpbmVTdHlsZSgpID09IEJOT05FKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCShyZXZpc2lvbiAxNzAzNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MSw4ICs5MSw4IEBAIHZvaWQgUmVuZGVyUHJvZ3Jlc3M6OmFuaW1hdGlvblRp
bWVyRmlyZWQKIAogdm9pZCBSZW5kZXJQcm9ncmVzczo6dXBkYXRlQW5pbWF0aW9uU3RhdGUoKQog
ewotICAgIG1fYW5pbWF0aW9uRHVyYXRpb24gPSB0aGVtZSgpLmFuaW1hdGlvbkR1cmF0aW9uRm9y
UHJvZ3Jlc3NCYXIodGhpcyk7Ci0gICAgbV9hbmltYXRpb25SZXBlYXRJbnRlcnZhbCA9IHRoZW1l
KCkuYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcih0aGlzKTsKKyAgICBtX2Fu
aW1hdGlvbkR1cmF0aW9uID0gdGhlbWUoKS5hbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFy
KCp0aGlzKTsKKyAgICBtX2FuaW1hdGlvblJlcGVhdEludGVydmFsID0gdGhlbWUoKS5hbmltYXRp
b25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKCp0aGlzKTsKIAogICAgIGJvb2wgYW5pbWF0
aW5nID0gc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgJiYgbV9hbmltYXRpb25EdXJhdGlvbiA+IDA7
CiAgICAgaWYgKGFuaW1hdGluZyA9PSBtX2FuaW1hdGluZykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyAr
ODEsNyBAQCBSZW5kZXJUaGVtZTo6UmVuZGVyVGhlbWUoKQogewogfQogCi12b2lkIFJlbmRlclRo
ZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQqIGUsIGJvb2wgVUFIYXNBcHBlYXJhbmNlLCBjb25zdCBCb3JkZXJE
YXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvcikKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSwgYm9vbCBV
QUhhc0FwcGVhcmFuY2UsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVy
JiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQogewogICAgIC8vIEZv
cmNlIGlubGluZSBhbmQgdGFibGUgZGlzcGxheSBzdHlsZXMgdG8gYmUgaW5saW5lLWJsb2NrIChl
eGNlcHQgZm9yIHRhYmxlLSB3aGljaCBpcyBibG9jaykKICAgICBDb250cm9sUGFydCBwYXJ0ID0g
c3R5bGUuYXBwZWFyYW5jZSgpOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RTdHlsZShTdHlsZVJlc29sCiAgICAgZWxzZSBpZiAoc3R5bGUuZGlzcGxheSgpID09IENP
TVBBQ1QgfHwgc3R5bGUuZGlzcGxheSgpID09IExJU1RfSVRFTSB8fCBzdHlsZS5kaXNwbGF5KCkg
PT0gVEFCTEUpCiAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoQkxPQ0spOwogCi0gICAgaWYgKFVB
SGFzQXBwZWFyYW5jZSAmJiBpc0NvbnRyb2xTdHlsZWQoJnN0eWxlLCBib3JkZXIsIGJhY2tncm91
bmQsIGJhY2tncm91bmRDb2xvcikpIHsKKyAgICBpZiAoVUFIYXNBcHBlYXJhbmNlICYmIGlzQ29u
dHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpKSB7
CiAgICAgICAgIGlmIChwYXJ0ID09IE1lbnVsaXN0UGFydCkgewogICAgICAgICAgICAgc3R5bGUu
c2V0QXBwZWFyYW5jZShNZW51bGlzdEJ1dHRvblBhcnQpOwogICAgICAgICAgICAgcGFydCA9IE1l
bnVsaXN0QnV0dG9uUGFydDsKQEAgLTE5MiwyNSArMTkyLDI1IEBAIHZvaWQgUmVuZGVyVGhlbWU6
OmFkanVzdFN0eWxlKFN0eWxlUmVzb2wKICAgICBzd2l0Y2ggKHN0eWxlLmFwcGVhcmFuY2UoKSkg
ewogI2lmICFVU0UoTkVXX1RIRU1FKQogICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgICAgICBy
ZXR1cm4gYWRqdXN0Q2hlY2tib3hTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAg
ICAgICAgcmV0dXJuIGFkanVzdENoZWNrYm94U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUp
OwogICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0UmFkaW9TdHlsZSgm
c3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFJhZGlvU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CiAg
ICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgogICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CiAg
ICAgY2FzZSBCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0QnV0dG9uU3R5bGUoJnN0
eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RCdXR0b25TdHls
ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0
OgotICAgICAgICByZXR1cm4gYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2
ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHls
ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAjZW5kaWYKICAgICBjYXNlIFRleHRGaWVsZFBh
cnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RUZXh0RmllbGRTdHlsZSgmc3R5bGVSZXNvbHZlciwg
JnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICAgICAgcmV0dXJu
IGFkanVzdFRleHRBcmVhU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAg
IHJldHVybiBhZGp1c3RUZXh0QXJlYVN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAg
ICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0U3R5bGUo
JnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RNZW51TGlz
dFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIE1lbnVsaXN0QnV0dG9u
UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNv
bHZlciwgc3R5bGUsICplKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgTWVkaWFQbGF5QnV0dG9uUGFy
dDoKICAgICBjYXNlIE1lZGlhQ3VycmVudFRpbWVQYXJ0OgogICAgIGNhc2UgTWVkaWFUaW1lUmVt
YWluaW5nUGFydDoKQEAgLTIxOCwyOSArMjE4LDI5IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dFN0eWxlKFN0eWxlUmVzb2wKICAgICBjYXNlIE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b25QYXJ0
OgogICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uUGFydDoKICAgICBjYXNlIE1lZGlhVm9sdW1lU2xp
ZGVyQ29udGFpbmVyUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lZGlhQ29udHJvbFN0eWxl
KCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0TWVkaWFD
b250cm9sU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgTWVkaWFTbGlk
ZXJQYXJ0OgogICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJQYXJ0OgogICAgIGNhc2UgTWVkaWFG
dWxsU2NyZWVuVm9sdW1lU2xpZGVyUGFydDoKICAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0
OgogICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2xp
ZGVyVHJhY2tTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJu
IGFkanVzdFNsaWRlclRyYWNrU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNh
c2UgU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydDoKICAgICBjYXNlIFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2xpZGVyVGh1bWJTdHlsZSgmc3R5bGVSZXNv
bHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNsaWRlclRodW1iU3R5bGUo
c3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgotICAg
ICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxl
LCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZl
ciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25QYXJ0OgotICAg
ICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSgmc3R5bGVSZXNv
bHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmll
bGREZWNvcmF0aW9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblBhcnRTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJu
IGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHls
ZSwgZSk7CiAgICAgY2FzZSBTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydDoKLSAgICAg
ICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoJnN0
eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAg
ICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBl
KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKHN0
eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAg
ICBjYXNlIFByb2dyZXNzQmFyUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFByb2dyZXNzQmFy
U3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RQ
cm9ncmVzc0JhclN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICNlbmRpZgogI2lmIEVO
QUJMRShNRVRFUl9FTEVNRU5UKQogICAgIGNhc2UgTWV0ZXJQYXJ0OgpAQCAtMjQ4LDExICsyNDgs
MTEgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgIGNhc2Ug
Q29udGludW91c0NhcGFjaXR5TGV2ZWxJbmRpY2F0b3JQYXJ0OgogICAgIGNhc2UgRGlzY3JldGVD
YXBhY2l0eUxldmVsSW5kaWNhdG9yUGFydDoKICAgICBjYXNlIFJhdGluZ0xldmVsSW5kaWNhdG9y
UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1ldGVyU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZz
dHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RNZXRlclN0eWxlKHN0eWxlUmVzb2x2ZXIs
IHN0eWxlLCBlKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgY2FzZSBJ
bnB1dFNwZWVjaEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVy
biBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUs
IGUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgY2FzZSBJbWFn
ZUNvbnRyb2xzQnV0dG9uUGFydDoKQEAgLTY5Myw5ICs2OTMsOSBAQCBib29sIFJlbmRlclRoZW1l
Ojppc0NvbnRyb2xDb250YWluZXIoQ29uCiAgICAgcmV0dXJuIGFwcGVhcmFuY2UgIT0gQ2hlY2ti
b3hQYXJ0ICYmIGFwcGVhcmFuY2UgIT0gUmFkaW9QYXJ0OwogfQogCi1ib29sIFJlbmRlclRoZW1l
Ojppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJE
YXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvcikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3Qg
RmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25z
dAogewotICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIHN3aXRjaCAoc3R5
bGUuYXBwZWFyYW5jZSgpKSB7CiAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKICAgICBjYXNlIFNx
dWFyZUJ1dHRvblBhcnQ6CiAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKQEAgLTcxMiw5ICs3
MTIsOSBAQCBib29sIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgCiAgICAgY2Fz
ZSBUZXh0RmllbGRQYXJ0OgogICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgogICAgICAgICAvLyBUZXN0
IHRoZSBzdHlsZSB0byBzZWUgaWYgdGhlIFVBIGJvcmRlciBhbmQgYmFja2dyb3VuZCBtYXRjaC4K
LSAgICAgICAgcmV0dXJuIChzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVyCi0gICAgICAgICAgICB8
fCAqc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNrZ3JvdW5kCi0gICAgICAgICAgICB8
fCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KSAhPSBiYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICByZXR1cm4gKHN0eWxlLmJvcmRlcigpICE9
IGJvcmRlcgorICAgICAgICAgICAgfHwgKnN0eWxlLmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNr
Z3JvdW5kCisgICAgICAgICAgICB8fCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpICE9IGJhY2tncm91bmRDb2xvcik7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTczMSwxNSArNzMxLDE1IEBAIHZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnMKICNlbmRpZgogfQogCi1ib29sIFJl
bmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Citib29sIFJlbmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpICYm
IHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gVGV4dEZpZWxkUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5j
ZSgpICE9IFRleHRBcmVhUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IE1lbnVsaXN0QnV0
dG9uUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IExpc3Rib3hQYXJ0KTsKKyAgICByZXR1
cm4gKHN0eWxlLmhhc0FwcGVhcmFuY2UoKSAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gVGV4dEZp
ZWxkUGFydCAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gVGV4dEFyZWFQYXJ0ICYmIHN0eWxlLmFw
cGVhcmFuY2UoKSAhPSBNZW51bGlzdEJ1dHRvblBhcnQgJiYgc3R5bGUuYXBwZWFyYW5jZSgpICE9
IExpc3Rib3hQYXJ0KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKGNvbnN0
IFJlbmRlck9iamVjdCYgbywgQ29udHJvbFN0YXRlczo6U3RhdGVzIHN0YXRlKSBjb25zdAogewog
ICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGUgY29udHJvbHMgZG9uJ3Qg
cmVzcG9uZCB0byBjaGFuZ2VzIGluIDpob3ZlciBzdGF0ZQotICAgIGlmIChzdGF0ZSA9PSBDb250
cm9sU3RhdGVzOjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVyKCZvLnN0eWxlKCkpKQorICAg
IGlmIChzdGF0ZSA9PSBDb250cm9sU3RhdGVzOjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVy
KG8uc3R5bGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEFzc3VtZSBwcmVz
c2VkIHN0YXRlIGlzIG9ubHkgcmVzcG9uZGVkIHRvIGlmIHRoZSBjb250cm9sIGlzIGVuYWJsZWQu
CkBAIC05MTAsNyArOTEwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNEZWZhdWx0KGNvbnN0IFJl
bmRlcgogCiAjaWYgIVVTRShORVdfVEhFTUUpCiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdENo
ZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIEEgc3Vt
bWFyeSBvZiB0aGUgcnVsZXMgZm9yIGNoZWNrYm94IGRlc2lnbmVkIHRvIG1hdGNoIFdpbklFOgog
ICAgIC8vIHdpZHRoL2hlaWdodCAtIGhvbm9yZWQgKFdpbklFIGFjdHVhbGx5IHNjYWxlcyBpdHMg
Y29udHJvbCBmb3Igc21hbGwgd2lkdGhzLCBidXQgbGV0cyBpdCBvdmVyZmxvdyBmb3Igc21hbGwg
aGVpZ2h0cy4pCkBAIC05MTgsMTYgKzkxOCwxNiBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RD
aGVja2JveFN0eWxlKFN0CiAgICAgc2V0Q2hlY2tib3hTaXplKHN0eWxlKTsKIAogICAgIC8vIHBh
ZGRpbmcgLSBub3QgaG9ub3JlZCBieSBXaW5JRSwgbmVlZHMgdG8gYmUgcmVtb3ZlZC4KLSAgICBz
dHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAgc3R5bGUucmVzZXRQYWRkaW5nKCk7CiAKICAgICAv
LyBib3JkZXIgLSBob25vcmVkIGJ5IFdpbklFLCBidXQgbG9va3MgdGVycmlibGUgKGp1c3QgcGFp
bnRzIGluIHRoZSBjb250cm9sIGJveCBhbmQgdHVybnMgb2ZmIHRoZSBXaW5kb3dzIFhQIHRoZW1l
KQogICAgIC8vIGZvciBub3csIHdlIHdpbGwgbm90IGhvbm9yIGl0LgotICAgIHN0eWxlLT5yZXNl
dEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKLSAgICBzdHlsZS0+c2V0Qm94
U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJh
ZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNv
bnN0CiB7CiAgICAgLy8gQSBzdW1tYXJ5IG9mIHRoZSBydWxlcyBmb3IgY2hlY2tib3ggZGVzaWdu
ZWQgdG8gbWF0Y2ggV2luSUU6CiAgICAgLy8gd2lkdGgvaGVpZ2h0IC0gaG9ub3JlZCAoV2luSUUg
YWN0dWFsbHkgc2NhbGVzIGl0cyBjb250cm9sIGZvciBzbWFsbCB3aWR0aHMsIGJ1dCBsZXRzIGl0
IG92ZXJmbG93IGZvciBzbWFsbCBoZWlnaHRzLikKQEAgLTkzNSwxNiArOTM1LDE2IEBAIHZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGUKICAgICBzZXRSYWRpb1NpemUoc3R5
bGUpOwogCiAgICAgLy8gcGFkZGluZyAtIG5vdCBob25vcmVkIGJ5IFdpbklFLCBuZWVkcyB0byBi
ZSByZW1vdmVkLgotICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBzdHlsZS5yZXNldFBh
ZGRpbmcoKTsKIAogICAgIC8vIGJvcmRlciAtIGhvbm9yZWQgYnkgV2luSUUsIGJ1dCBsb29rcyB0
ZXJyaWJsZSAoanVzdCBwYWludHMgaW4gdGhlIGNvbnRyb2wgYm94IGFuZCB0dXJucyBvZmYgdGhl
IFdpbmRvd3MgWFAgdGhlbWUpCiAgICAgLy8gZm9yIG5vdywgd2Ugd2lsbCBub3QgaG9ub3IgaXQu
Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKIAot
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93
KG51bGxwdHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIE1vc3QgcGxhdGZvcm1zIHdpbGwgY29t
cGxldGVseSBob25vciBhbGwgQ1NTLCBhbmQgc28gd2UgaGF2ZSBubyBuZWVkIHRvCiAgICAgLy8g
YWRqdXN0IHRoZSBzdHlsZSBhdCBhbGwgYnkgZGVmYXVsdC4gV2Ugd2lsbCBzdGlsbCBhbGxvdyB0
aGUgdGhlbWUgYSBjcmFjawpAQCAtOTUyLDI1ICs5NTIsMjUgQEAgdm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0QnV0dG9uU3R5bGUoU3R5bAogICAgIHNldEJ1dHRvblNpemUoc3R5bGUpOwogfQogCi12
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1l
bnQmKSBjb25zdAogewogfQogI2VuZGlmCiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRG
aWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFk
anVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRo
ZW1lOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAogI2lmIEVO
QUJMRShJTlBVVF9TUEVFQ0gpCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5k
ZXJJbnB1dFNwZWVjaDo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKIH0KQEAgLTk4MiwxMiArOTgyLDEyIEBAIGJvb2wgUmVu
ZGVyVGhlbWU6OnBhaW50SW5wdXRGaWVsZFNwZWVjaEIKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1F
VEVSX0VMRU1FTlQpCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxl
LCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwor
ICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotSW50U2l6ZSBSZW5kZXJUaGVt
ZTo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29uc3QgSW50UmVjdCYg
Ym91bmRzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZTo6bWV0ZXJTaXplRm9yQm91bmRzKGNv
bnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAogewogICAgIHJl
dHVybiBib3VuZHMuc2l6ZSgpOwogfQpAQCAtMTA5NCwxNyArMTA5NCwxNyBAQCB2b2lkIFJlbmRl
clRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9H
UkVTU19FTEVNRU5UKQotZG91YmxlIFJlbmRlclRoZW1lOjphbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVt
ZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZTo6YW5pbWF0
aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citkb3VibGUg
UmVuZGVyVGhlbWU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jl
c3MmKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAtMTExNCw0
OSArMTExNCw0OSBAQCBJbnRSZWN0IFJlbmRlclRoZW1lOjpwcm9ncmVzc0JhclJlY3RGb3JCCiB9
CiAjZW5kaWYKIAotYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxk
SGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50KSBjb25zdAogewot
ICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzU3RlcHBhYmxlKCkgJiYgIWlucHV0RWxlbWVudC0+
aXNSYW5nZUNvbnRyb2woKTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50LmlzU3RlcHBhYmxlKCkg
JiYgIWlucHV0RWxlbWVudC5pc1JhbmdlQ29udHJvbCgpOwogfQogCiB2b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZWRpYUNv
bnRyb2xTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0
eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGFkanVzdFNsaWRlclRodW1iU2l6
ZShzdHlsZSwgZWxlbWVudCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3QKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmgJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICAvLyBt
ZXRyaWNzIGFuZCBkZWZhdWx0cyBnaXZlbiB0aGUgY29udGVudHMgb2YgdGhlIHN0eWxlLiAgVGhp
cyBpbmNsdWRlcyBzb3BoaXN0aWNhdGVkIG9wZXJhdGlvbnMgbGlrZQogICAgIC8vIHNlbGVjdGlv
biBvZiBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LCB0aGUgZGlzYWJsaW5nIG9mIGFw
cGVhcmFuY2Ugd2hlbiBjZXJ0YWluIG90aGVyIHByb3BlcnRpZXMgbGlrZQogICAgIC8vICJib3Jk
ZXIiIGFyZSBzZXQsIG9yIGlmIHRoZSBhcHBlYXJhbmNlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhl
IHRoZW1lLgotICAgIHZvaWQgYWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCosICBib29sIFVBSGFzQXBwZWFyYW5jZSwgY29uc3QgQm9yZGVyRGF0YSYsIGNv
bnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpOworICAgIHZvaWQg
YWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYsICBib29s
IFVBSGFzQXBwZWFyYW5jZSwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNv
bnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIHRvIHBhaW50IHRoZSB3aWRnZXQgYXMgYSBiYWNrZ3JvdW5kIG9mIHRoZSBSZW5kZXJPYmpl
Y3QuICBBIHdpZGdldCdzIGZvcmVncm91bmQsIGUuZy4sIHRoZQogICAgIC8vIHRleHQgb2YgYSBi
dXR0b24sIGlzIGFsd2F5cyByZW5kZXJlZCBieSB0aGUgZW5naW5lIGl0c2VsZi4gIFRoZSBib29s
ZWFuIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCYp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgY29u
dHJvbCBoYXMgYmVlbiBzdHlsZWQgZW5vdWdoIGJ5IHRoZSBhdXRob3IgdG8gZGlzYWJsZSB0aGUg
bmF0aXZlIGFwcGVhcmFuY2UuCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25z
dCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25z
dCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250
cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZp
bGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0OwogCiAgICAgLy8g
QSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0
ZWQgYXQgYWxsLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMzUsMTAgKzEzNSwxMCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIHsgfQogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlm
IHRoZSB0aGVtZSBpcyBhYmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCi0gICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7CiAK
ICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkg
Y2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHBsYXRmb3Jt
IGlzIGFibGUgdG8gc2hvdyBkYXRhbGlzdCBzdWdnZXN0aW9ucyBmb3IgYSBnaXZlbiBpbnB1dCB0
eXBlLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RhdGFMaXN0VUkoY29uc3QgQXRvbWljU3Ry
aW5nJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3NywxNiArMTc3LDE2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRp
b24mKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihDU1NWYWx1ZUlE
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5
bGUqKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0
U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1l
bnQmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChS
ZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludCBwb3B1cElu
dGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKikgY29uc3Qg
eyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9t
KFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVw
SW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlJikgY29u
c3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9w
KFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVw
SW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gMDsgfQog
ICAgIHZpcnR1YWwgYm9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6
ZSBwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0eWxlKiwgSW50UmVjdCYpIGNvbnN0IHsgcmV0
dXJuIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXplTm9ybWFsOyB9CisgICAgdmlydHVhbCBQ
b3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0
eWxlJiwgSW50UmVjdCYpIGNvbnN0IHsgcmV0dXJuIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVT
aXplTm9ybWFsOyB9CiAKICAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9sbGJh
ckNvbnRyb2xTaXplRm9yUGFydChDb250cm9sUGFydCkgeyByZXR1cm4gUmVndWxhclNjcm9sbGJh
cjsgfQogCkBAIC0xOTUsOSArMTk1LDkgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFBST0dSRVNT
X0VMRU1FTlQpCiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmlt
YXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9u
UmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OworICAg
IHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVu
ZGVyUHJvZ3Jlc3MmKSBjb25zdDsKICAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUg
YW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dy
ZXNzJikgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0IHByb2dyZXNzQmFyUmVjdEZvckJvdW5k
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAjZW5kaWYKIApA
QCAtMjE5LDcgKzIxOSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX0VM
RU1FTlQpCi0gICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5k
ZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFNpemUgbWV0
ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0KSBjb25zdDsKICNl
bmRpZgogCkBAIC0yMzUsNyArMjM1LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZEhhdmVTcGluQnV0dG9uKEhU
TUxJbnB1dEVsZW1lbnQmKSBjb25zdDsKIAogICAgIC8vIEZ1bmN0aW9ucyBmb3IgPHNlbGVjdD4g
ZWxlbWVudHMuCiAgICAgdmlydHVhbCBib29sIGRlbGVnYXRlc01lbnVMaXN0UmVuZGVyaW5nKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI3MCwxOSArMjcwLDE5IEBAIHByb3RlY3RlZDoK
IAogI2lmICFVU0UoTkVXX1RIRU1FKQogICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5j
ZSB2YWx1ZS4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUmKSBjb25zdCB7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9T
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRl
clN0eWxlKikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVy
U3R5bGUmKSBjb25zdCB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJ
bm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCkBAIC0yOTAsMTUgKzI5MCwx
NSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW9EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbkRlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBF
bGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURlY29yYXRpb25zKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KIApAQCAtMzA5LDQ0ICszMDksNDQgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBw
YWludFNxdWFyZUJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICNpZiBFTkFCTEUo
TUVURVJfRUxFTUVOVCkKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jh
cihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludElucHV0RmllbGRT
cGVlY2hCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRy
YWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRo
dW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWJEZWNv
cmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYU92ZXJsYXlQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAkocmV2aXNpb24gMTcwMzcx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDE2ICs1MiwxNiBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUq
LCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9yZGVyRGF0YSYsIGNv
bnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICAvLyBNZXRob2RzIGZvciBlYWNoIGFwcGVhcmFuY2UgdmFs
dWUuCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1l
bnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveERlY29y
YXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW9E
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50
QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFB1c2hCdXR0
b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVu
ZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKQEAgLTc0LDE3ICs3NCwxNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNs
aWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsK
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogI2lmIEVOQUJM
RShQUk9HUkVTU19FTEVNRU5UKQogICAgIC8vIFJldHVybnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBv
ZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91Ymxl
IGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgLy8g
UmV0dXJucyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJh
ci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0
aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCkBA
IC05NCw3ICs5NCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGludCBzbGlkZXJUaWNrT2Zm
c2V0RnJvbVRyYWNrQ2VudGVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9u
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMDUsNyArMTA1LDcgQEAgcHJvdGVj
dGVkOgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hl
bkZvY3VzZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGF2ZVNw
aW5CdXR0b24oSFRNTElucHV0RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRFbGVtZW50JikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICNpZiBFTkFCTEUoVklERU8pCiAgICAgdmlydHVhbCBTdHJpbmcgbWVkaWFDb250cm9s
c1N0eWxlU2hlZXQoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUzLDE1ICszNTMs
MTUgQEAgRmxvYXRSZWN0IFJlbmRlclRoZW1lSU9TOjphZGRSb3VuZGVkQm9yZAogICAgIHJldHVy
biBib3JkZXIucmVjdCgpOwogfQogCi12b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RDaGVja2Jv
eFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBpZiAoIXN0eWxl
LT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8o
KSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUu
aGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExlbmd0aCBsZW5ndGgg
PSBMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihjZWlsZihzdGQ6Om1heChzdHlsZS0+Zm9udFNpemUo
KSwgMTApKSksIEZpeGVkKTsKKyAgICBMZW5ndGggbGVuZ3RoID0gTGVuZ3RoKHN0YXRpY19jYXN0
PGludD4oY2VpbGYoc3RkOjptYXgoc3R5bGUuZm9udFNpemUoKSwgMTApKSksIEZpeGVkKTsKICAg
ICAKLSAgICBzdHlsZS0+c2V0V2lkdGgobGVuZ3RoKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KGxl
bmd0aCk7CisgICAgc3R5bGUuc2V0V2lkdGgobGVuZ3RoKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQo
bGVuZ3RoKTsKIH0KIAogc3RhdGljIENHUG9pbnQgc2hvcnRlbmVkKENHUG9pbnQgc3RhcnQsIENH
UG9pbnQgZW5kLCBmbG9hdCB3aWR0aCkKQEAgLTQzNywyNyArNDM3LDI3IEBAIGludCBSZW5kZXJU
aGVtZUlPUzo6YmFzZWxpbmVQb3NpdGlvbihjb24KICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmJh
c2VsaW5lUG9zaXRpb24oYm94KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6aXNDb250cm9s
U3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVy
LCBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29s
b3IpIGNvbnN0Citib29sIFJlbmRlclRoZW1lSU9TOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXll
ciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKIHsKICAg
ICAvLyBCdXR0b25zIGFuZCBNZW51bGlzdEJ1dHRvbnMgYXJlIHN0eWxlZCBpZiB0aGV5IGNvbnRh
aW4gYSBiYWNrZ3JvdW5kIGltYWdlLgotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1
c2hCdXR0b25QYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0
KQotICAgICAgICByZXR1cm4gIXN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhhKCkgfHwgc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKS0+
aGFzSW1hZ2UoKTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0
IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisgICAgICAgIHJl
dHVybiAhc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yKS5hbHBoYSgpIHx8IHN0eWxlLmJhY2tncm91bmRMYXllcnMoKS0+aGFzSW1hZ2UoKTsKIAot
ICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUtPmFw
cGVhcmFuY2UoKSA9PSBUZXh0QXJlYVBhcnQpCi0gICAgICAgIHJldHVybiAqc3R5bGUtPmJhY2tn
cm91bmRMYXllcnMoKSAhPSBiYWNrZ3JvdW5kOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkg
PT0gVGV4dEZpZWxkUGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gVGV4dEFyZWFQYXJ0KQor
ICAgICAgICByZXR1cm4gKnN0eWxlLmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNrZ3JvdW5kOwog
CiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwg
YmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6
YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgaWYg
KCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCku
aXNBdXRvKCkpCisgICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYg
IXN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMZW5ndGgg
bGVuZ3RoID0gTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3RkOjptYXgoc3R5bGUtPmZv
bnRTaXplKCksIDEwKSkpLCBGaXhlZCk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKGxlbmd0aCk7Ci0g
ICAgc3R5bGUtPnNldEhlaWdodChsZW5ndGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSYWRpdXMo
SW50U2l6ZShsZW5ndGgudmFsdWUoKSAvIDIuMGYsIGxlbmd0aC52YWx1ZSgpIC8gMi4wZikpOwor
ICAgIExlbmd0aCBsZW5ndGggPSBMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihjZWlsZihzdGQ6Om1h
eChzdHlsZS5mb250U2l6ZSgpLCAxMCkpKSwgRml4ZWQpOworICAgIHN0eWxlLnNldFdpZHRoKGxl
bmd0aCk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KGxlbmd0aCk7CisgICAgc3R5bGUuc2V0Qm9yZGVy
UmFkaXVzKEludFNpemUobGVuZ3RoLnZhbHVlKCkgLyAyLjBmLCBsZW5ndGgudmFsdWUoKSAvIDIu
MGYpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRSYWRpb0RlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYgYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKQEAgLTUxOSwxMCArNTE5LDEwIEBAIGNvbnN0IGZsb2F0IE1lbnVMaXN0
QXJyb3dXaWR0aCA9IDc7CiBjb25zdCBmbG9hdCBNZW51TGlzdEFycm93SGVpZ2h0ID0gNjsKIGNv
bnN0IGZsb2F0IE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0ID0gMTk7CiAKLWludCBSZW5kZXJU
aGVtZUlPUzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CitpbnQgUmVuZGVyVGhlbWVJT1M6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVy
U3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1l
bnVsaXN0QnV0dG9uUGFydCkKLSAgICAgICAgcmV0dXJuIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1Jp
Z2h0ICsgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisgICAgICAgIHJldHVybiBNZW51TGlzdEJ1dHRvblBh
ZGRpbmdSaWdodCArIHN0eWxlLmJvcmRlclRvcFdpZHRoKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAK
QEAgLTYxOSwxMCArNjE5LDggQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0TWVudUxpc3RC
dXR0bwogICAgIC8vICItd2Via2l0LWFwcGVhcmFuY2U6IG1lbnVsaXN0LWJ1dHRvbiIuCiAgICAg
aWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdFRhZykgJiYgIWVsZW1lbnQu
aGFzQXR0cmlidXRlKEhUTUxOYW1lczo6bXVsdGlwbGVBdHRyKSkKICAgICAgICAgYWRqdXN0U2Vs
ZWN0TGlzdEJ1dHRvblN0eWxlKHN0eWxlLCBlbGVtZW50KTsKLSAgICBlbHNlIGlmIChlbGVtZW50
Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpIHsKLSAgICAgICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KCZlbGVt
ZW50KTsKLSAgICAgICAgYWRqdXN0SW5wdXRFbGVtZW50QnV0dG9uU3R5bGUoc3R5bGUsICppbnB1
dEVsZW1lbnQpOwotICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjppbnB1dFRhZykpCisgICAgICAgIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWxlKHN0
eWxlLCBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Jj4oaW5wdXRFbGVtZW50KSk7CiB9CiAK
IGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKQEAgLTcxNywxNCArNzE1LDE0IEBAIGNvbnN0IENHRmxvYXQga1RyYWNr
VGhpY2tuZXNzID0gNC4wOwogY29uc3QgQ0dGbG9hdCBrVHJhY2tSYWRpdXMgPSBrVHJhY2tUaGlj
a25lc3MgLyAyLjA7CiBjb25zdCBpbnQga0RlZmF1bHRTbGlkZXJUaHVtYlNpemUgPSAxNjsKIAot
dm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVy
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVy
JiBzZWxlY3RvciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAog
ewogICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKHNlbGVjdG9yLCBzdHls
ZSwgZWxlbWVudCk7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBiZSByZWx5aW5nIG9u
IGJvcmRlciByYWRpdXMgZm9yIHRoZSBhcHBlYXJhbmNlIG9mIG91ciBjb250cm9scyA8cmRhcjov
L3Byb2JsZW0vNzY3NTQ5Mz4KICAgICBMZW5ndGggcmFkaXVzV2lkdGgoc3RhdGljX2Nhc3Q8aW50
PihrVHJhY2tSYWRpdXMpLCBGaXhlZCk7CiAgICAgTGVuZ3RoIHJhZGl1c0hlaWdodChzdGF0aWNf
Y2FzdDxpbnQ+KGtUcmFja1JhZGl1cyksIEZpeGVkKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmFk
aXVzKExlbmd0aFNpemUocmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCkpOworICAgIHN0eWxlLnNl
dEJvcmRlclJhZGl1cyhMZW5ndGhTaXplKHJhZGl1c1dpZHRoLCByYWRpdXNIZWlnaHQpKTsKIH0K
IAogYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmpl
Y3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CkBAIC04MDUsMjAgKzgwMywyMCBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRy
YWNrKGNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1
c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5
bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFNs
aWRlclRodW1iSG9yaXpvbnRhbFBhcnQgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBTbGlkZXJU
aHVtYlZlcnRpY2FsUGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpICE9IFNsaWRlclRo
dW1iSG9yaXpvbnRhbFBhcnQgJiYgc3R5bGUuYXBwZWFyYW5jZSgpICE9IFNsaWRlclRodW1iVmVy
dGljYWxQYXJ0KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBFbmZvcmNlICJib3JkZXItcmFk
aXVzOiA1MCUiLgogICAgIExlbmd0aCBsZW5ndGgoNTAuMGYsIFBlcmNlbnQpOwotICAgIHN0eWxl
LT5zZXRCb3JkZXJSYWRpdXMoTGVuZ3RoU2l6ZShsZW5ndGgsIGxlbmd0aCkpOworICAgIHN0eWxl
LnNldEJvcmRlclJhZGl1cyhMZW5ndGhTaXplKGxlbmd0aCwgbGVuZ3RoKSk7CiAKICAgICAvLyBF
bmZvcmNlIGEgMTZ4MTYgc2l6ZSBpZiBubyBzaXplIGlzIHByb3ZpZGVkLgotICAgIGlmIChzdHls
ZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpIHx8IHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8o
KSkgeworICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgfHwgc3R5bGUu
aGVpZ2h0KCkuaXNBdXRvKCkpIHsKICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IExlbmd0aChrRGVm
YXVsdFNsaWRlclRodW1iU2l6ZSwgRml4ZWQpOwotICAgICAgICBzdHlsZS0+c2V0V2lkdGgobGVu
Z3RoKTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChsZW5ndGgpOworICAgICAgICBzdHlsZS5z
ZXRXaWR0aChsZW5ndGgpOworICAgICAgICBzdHlsZS5zZXRIZWlnaHQobGVuZ3RoKTsKICAgICB9
CiB9CiAKQEAgLTg0MCw3ICs4MzgsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRl
clRodW1iRGVjCiB9CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLWRvdWJsZSBSZW5k
ZXJUaGVtZUlPUzo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQ
cm9ncmVzcyopIGNvbnN0Citkb3VibGUgUmVuZGVyVGhlbWVJT1M6OmFuaW1hdGlvblJlcGVhdElu
dGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogewogICAgIHJldHVy
biAwOwogfQpAQCAtOTQ3LDE0ICs5NDUsMTQgQEAgaW50IFJlbmRlclRoZW1lSU9TOjpzbGlkZXJU
aWNrT2Zmc2V0RnJvbQogfQogI2VuZGlmCiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNl
YXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNl
YXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYgc2VsZWN0b3IsIFJlbmRlclN0eWxlJiBzdHls
ZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2Vh
cmNoRmllbGRTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwogCiAgICAgaWYgKCFlbGVt
ZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXN0eWxlLT5oYXNCb3JkZXIoKSkKKyAg
ICBpZiAoIXN0eWxlLmhhc0JvcmRlcigpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJC
b3gqIGJveCA9IGVsZW1lbnQtPnJlbmRlckJveCgpOwpAQCAtOTY5LDcgKzk2Nyw3IEBAIGJvb2wg
UmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWMKICAgICByZXR1cm4gcGFpbnRUZXh0
RmllbGREZWNvcmF0aW9ucyhib3gsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
SU9TOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzZWxlY3RvciwgUmVuZGVyU3R5
bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclRoZW1lOjph
ZGp1c3RCdXR0b25TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwogCkBAIC05NzksNyAr
OTc3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0QnV0dG9uU3R5bGUoUwogICAgIC8v
IGFuZCB0aGUgcmVuZGVyIHZpZXcuCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBlbVNp
emUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDEuMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19FTVMpOwogICAgIGludCBwaXhlbHMgPSBlbVNpemUtPmNvbXB1dGVMZW5ndGg8aW50PihDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKHN0eWxlLCBudWxscHRyLCBudWxscHRyLCAxLjAsIGZhbHNl
KSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3goTGVuZ3RoQm94KDAsIHBpeGVscywgMCwgcGl4
ZWxzKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0JveChMZW5ndGhCb3goMCwgcGl4ZWxzLCAwLCBw
aXhlbHMpKTsKIAogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAxMSwx
NCArMTAwOSwxNCBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFB1c2hCdXR0b25EZWNvCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lSU9TOjpzZXRCdXR0b25TaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OnNldEJ1dHRv
blNpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIC8vIElmIHRoZSB3aWR0aCBh
bmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8u
Ci0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+
aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JB
dXRvKCkgJiYgIXN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBv
ZiB0aGUgY29udHJvbC4KLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzdGF0aWNfY2FzdDxp
bnQ+KENvbnRyb2xCYXNlSGVpZ2h0IC8gQ29udHJvbEJhc2VGb250U2l6ZSAqIHN0eWxlLT5mb250
RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKSksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVp
Z2h0KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KENvbnRyb2xCYXNlSGVpZ2h0IC8gQ29udHJvbEJh
c2VGb250U2l6ZSAqIHN0eWxlLmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpKSwgRml4
ZWQpKTsKIH0KIAogY29uc3QgaW50IGtUaHVtYm5haWxCb3JkZXJTdHJva2VXaWR0aCA9IDE7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkocmV2aXNpb24g
MTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIEZsb2F0UmVjdCYpIG92ZXJy
aWRlOwogCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYgYmFj
a2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9s
U3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxM
YXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNjksMzYgKzY5LDM2IEBA
IHB1YmxpYzoKICAgICAvLyBTeXN0ZW0gZm9udHMuCiAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZv
bnQoQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2
aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSYpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJy
aWRlOwogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgdmlydHVhbCBJbnRTaXpl
IHNsaWRlclRpY2tTaXplKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBpbnQgc2xpZGVy
VGlja09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKLSAg
ICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJl
bmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGlu
dCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNpemUgcG9wdXBNZW51U2l6
ZShjb25zdCBSZW5kZXJTdHlsZSosIEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0
eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRp
bmdUb3AoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBwb3B1
cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNpemUgcG9wdXBNZW51U2l6ZShjb25z
dCBSZW5kZXJTdHlsZSYsIEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBw
b3BzTWVudUJ5QXJyb3dLZXlzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAj
aWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCi0gICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZv
ckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1l
dGVyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBw
YWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihDb250cm9s
UGFydCkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVN
RU5UKQogICAgIC8vIFJldHVybnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5pbWF0aW9u
IGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVh
dEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFy
KFJlbmRlclByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgLy8gUmV0dXJucyB0aGUgZHVy
YXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFs
IGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQ
cm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
SW50UmVjdCBwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKQEAgLTEyNSw0MSArMTI1LDQx
IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3JzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAjaWYg
RU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNz
QmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xp
ZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1
bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBh
cnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJp
ZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMTc2LDE0ICsxNzYsMTQgQEAg
cHJpdmF0ZToKICAgICBGbG9hdFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJlbmRl
ck9iamVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0JiBwYXJ0UmVuZGVyZXIs
IGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKICAg
ICAvLyBHZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIGZvbnQuIFVzZWQgYnkgc29t
ZSBvZiB0aGUgY29udHJvbHMgKGxpa2UgYnV0dG9ucykuCi0gICAgTlNDb250cm9sU2l6ZSBjb250
cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBOU0NvbnRyb2xTaXplIGNv
bnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIE5TQ29udHJv
bFNpemUgY29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgTlNDb250
cm9sU2l6ZSBjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmKSBjb25zdDsKICAg
ICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yQ2VsbChOU0NlbGwqLCBjb25zdCBJbnRTaXpl
KiBzaXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0gMS4wZikg
Y29uc3Q7CiAgICAgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBjb25zdCBJbnRTaXplKiBz
aXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0gMS4wZik7Ci0g
ICAgdm9pZCBzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXpl
cykgY29uc3Q7Ci0gICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IElu
dFNpemUqIHNpemVzKSBjb25zdDsKLSAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJlbmRl
clN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAgIHZvaWQgc2V0Rm9udEZy
b21Db250cm9sU2l6ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBOU0NvbnRyb2xTaXpl
KSBjb25zdDsKKyAgICB2b2lkIHNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSYsIGNvbnN0IElu
dFNpemUqIHNpemVzKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVGb3JGb250KFJlbmRlclN0eWxl
JiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAgIEludFNpemUgc2l6ZUZvclN5c3Rl
bUZvbnQoUmVuZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7CisgICAgdm9p
ZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIE5T
Q29udHJvbFNpemUpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxs
KiwgY29uc3QgUmVuZGVyT2JqZWN0Jik7CiAgICAgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoTlND
ZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Jik7CkBAIC0yMDMsNyArMjAzLDcgQEAgcHJpdmF0ZToK
ICAgICBjb25zdCBJbnRTaXplKiBjYW5jZWxCdXR0b25TaXplcygpIGNvbnN0OwogICAgIGNvbnN0
IEludFNpemUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VhcmNo
Q2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lk
IHNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZvaWQgc2V0U2Vh
cmNoRmllbGRTaXplKFJlbmRlclN0eWxlJikgY29uc3Q7CiAKICAgICBOU1BvcFVwQnV0dG9uQ2Vs
bCAqcG9wdXBCdXR0b24oKSBjb25zdDsKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCAqc2VhcmNoKCkg
Y29uc3Q7CkBAIC0yMTQsMTEgKzIxNCwxMSBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKE1FVEVS
X0VMRU1FTlQpCiAgICAgTlNMZXZlbEluZGljYXRvclN0eWxlIGxldmVsSW5kaWNhdG9yU3R5bGVG
b3IoQ29udHJvbFBhcnQpIGNvbnN0OwotICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsICpsZXZlbElu
ZGljYXRvckZvcihjb25zdCBSZW5kZXJNZXRlciopIGNvbnN0OworICAgIE5TTGV2ZWxJbmRpY2F0
b3JDZWxsICpsZXZlbEluZGljYXRvckZvcihjb25zdCBSZW5kZXJNZXRlciYpIGNvbnN0OwogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICBpbnQgbWluaW11bVByb2dy
ZXNzQmFySGVpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgaW50IG1pbmltdW1Qcm9ncmVz
c0JhckhlaWdodChSZW5kZXJTdHlsZSYpIGNvbnN0OwogICAgIGNvbnN0IEludFNpemUqIHByb2dy
ZXNzQmFyU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBpbnQqIHByb2dyZXNzQmFyTWFyZ2lucyhO
U0NvbnRyb2xTaXplKSBjb25zdDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OTksMTcg
KzU5OSwxNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjp1c2VzVGVzdE1vZGVGb2N1c1JpCiAgICAg
cmV0dXJuIFdlYkNvcmU6OnVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKCk7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWVNYWM6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OmlzQ29udHJv
bFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXIm
IGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7Ci0gICAg
aWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkUGFydCB8fCBzdHlsZS0+YXBwZWFy
YW5jZSgpID09IFRleHRBcmVhUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IExpc3Rib3hQ
YXJ0KQotICAgICAgICByZXR1cm4gc3R5bGUtPmJvcmRlcigpICE9IGJvcmRlcjsKKyAgICBpZiAo
c3R5bGUuYXBwZWFyYW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgp
ID09IFRleHRBcmVhUGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisg
ICAgICAgIHJldHVybiBzdHlsZS5ib3JkZXIoKSAhPSBib3JkZXI7CiAKICAgICAvLyBGSVhNRTog
VGhpcyBpcyBob3JyaWJsZSwgYnV0IHRoZXJlIGlzIG5vdCBtdWNoIGVsc2UgdGhhdCBjYW4gYmUg
ZG9uZS4gIE1lbnUgbGlzdHMgY2Fubm90IGRyYXcgcHJvcGVybHkgd2hlbgogICAgIC8vIHNjYWxl
ZC4gIFRoZXkgY2FuJ3QgcmVhbGx5IGRyYXcgcHJvcGVybHkgd2hlbiB0cmFuc2Zvcm1lZCBlaXRo
ZXIuICBXZSBjYW4ndCBkZXRlY3QgdGhlIHRyYW5zZm9ybSBjYXNlIGF0IHN0eWxlCiAgICAgLy8g
YWRqdXN0bWVudCB0aW1lIHNvIHRoYXQgd2lsbCBqdXN0IGhhdmUgdG8gc3RheSBicm9rZW4uICBX
ZSBjYW4gaG93ZXZlciBkZXRlY3QgdGhhdCB3ZSdyZSB6b29taW5nLiAgSWYgem9vbWluZwogICAg
IC8vIGlzIGluIGVmZmVjdCB3ZSB0cmVhdCBpdCBsaWtlIHRoZSBjb250cm9sIGlzIHN0eWxlZC4K
LSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQgJiYgc3R5bGUtPmVm
ZmVjdGl2ZVpvb20oKSAhPSAxLjBmKQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVu
dWxpc3RQYXJ0ICYmIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSAhPSAxLjBmKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxl
LCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CkBAIC03NDMsOSArNzQzLDkg
QEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFN1cHBvcnRzVGludAogICAgIHJldHVybiB0
cnVlOwogfQogCi1OU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvckZv
bnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1h
Yzo6Y29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBp
bnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKKyAgICBpbnQgZm9udFNpemUgPSBzdHls
ZS5mb250U2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA+PSAxNikKICAgICAgICAgcmV0dXJuIE5T
UmVndWxhckNvbnRyb2xTaXplOwogICAgIGlmIChmb250U2l6ZSA+PSAxMSkKQEAgLTc3MywzNSAr
NzczLDM1IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldENvbnRyb2xTaXplKE5TQ2UKICAgICAg
ICAgW2NlbGwgc2V0Q29udHJvbFNpemU6c2l6ZV07CiB9CiAKLUludFNpemUgUmVuZGVyVGhlbWVN
YWM6OnNpemVGb3JGb250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMp
IGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lTWFjOjpzaXplRm9yRm9udChSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKKyAgICBpZiAoc3R5bGUuZWZmZWN0aXZlWm9vbSgpICE9
IDEuMGYpIHsKICAgICAgICAgSW50U2l6ZSByZXN1bHQgPSBzaXplc1tjb250cm9sU2l6ZUZvckZv
bnQoc3R5bGUpXTsKLSAgICAgICAgcmV0dXJuIEludFNpemUocmVzdWx0LndpZHRoKCkgKiBzdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpLCByZXN1bHQuaGVpZ2h0KCkgKiBzdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpKTsKKyAgICAgICAgcmV0dXJuIEludFNpemUocmVzdWx0LndpZHRoKCkgKiBzdHlsZS5lZmZl
Y3RpdmVab29tKCksIHJlc3VsdC5oZWlnaHQoKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAg
ICAgfQogICAgIHJldHVybiBzaXplc1tjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpXTsKIH0KIAot
SW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVNYWM6
OnNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6
ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikgewor
ICAgIGlmIChzdHlsZS5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikgewogICAgICAgICBJbnRTaXpl
IHJlc3VsdCA9IHNpemVzW2NvbnRyb2xTaXplRm9yU3lzdGVtRm9udChzdHlsZSldOwotICAgICAg
ICByZXR1cm4gSW50U2l6ZShyZXN1bHQud2lkdGgoKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCks
IHJlc3VsdC5oZWlnaHQoKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICByZXR1
cm4gSW50U2l6ZShyZXN1bHQud2lkdGgoKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSwgcmVzdWx0
LmhlaWdodCgpICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHNp
emVzW2NvbnRyb2xTaXplRm9yU3lzdGVtRm9udChzdHlsZSldOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lTWFjOjpzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXpl
KiBzaXplcykgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNpemVGcm9tRm9udChSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAogewogICAgIC8vIEZJ
WE1FOiBDaGVjayBpcyBmbGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4
LXdpZHRoIGludG8gYWNjb3VudC4KICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yRm9udChzdHls
ZSwgc2l6ZXMpOwotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYm
IHNpemUud2lkdGgoKSA+IDApCi0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53
aWR0aCgpLCBGaXhlZCkpOwotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6
ZS5oZWlnaHQoKSA+IDApCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVp
Z2h0KCksIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KSAmJiBzaXplLndpZHRoKCkgPiAwKQorICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2l6
ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSAmJiBz
aXplLmhlaWdodCgpID4gMCkKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhl
aWdodCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNv
bnRyb2xTaXplKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNp
emUgY29udHJvbFNpemUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNv
bnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIE5TQ29udHJvbFNp
emUgY29udHJvbFNpemUpIGNvbnN0CiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CkBAIC04
MDksMTkgKzgwOSwxOSBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xT
CiAKICAgICBOU0ZvbnQqIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBz
eXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOmNvbnRyb2xTaXplXV07CiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldE9uZUZhbWlseShbZm9udCB3ZWJDb3JlRmFtaWx5TmFtZV0pOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoW2ZvbnQgcG9pbnRTaXplXSAqIHN0eWxlLT5lZmZl
Y3RpdmVab29tKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKFtmb250
IHBvaW50U2l6ZV0gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBmb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS5lZmZlY3RpdmVab29t
KCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKFtmb250IHBvaW50U2l6
ZV0gKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogCiAgICAgLy8gUmVzZXQgbGluZSBoZWlnaHQK
LSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQo
KSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWln
aHQoKSk7CiAKLSAgICBpZiAoc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pKQotICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICBpZiAoc3R5bGUuc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCisgICAgICAgIHN0eWxlLmZvbnQoKS51
cGRhdGUoMCk7CiB9CiAKLU5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTaXpl
Rm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitOU0NvbnRyb2xTaXplIFJl
bmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxl
KSBjb25zdAogewotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGlu
dCBmb250U2l6ZSA9IHN0eWxlLmZvbnRTaXplKCk7CiAgICAgaWYgKGZvbnRTaXplID49IFtOU0Zv
bnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpOU1JlZ3VsYXJDb250cm9sU2l6ZV0pCiAg
ICAgICAgIHJldHVybiBOU1JlZ3VsYXJDb250cm9sU2l6ZTsKICAgICBpZiAoZm9udFNpemUgPj0g
W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOk5TU21hbGxDb250cm9sU2l6ZV0p
CkBAIC04NDUsNyArODQ1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQo
Y29ucwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAtODY3LDcgKzg2
Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEoY29uc3QKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRBcmVhU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCkBAIC05MTMsNyArOTEzLDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdChjb25zdAogCiAgICAgLy8gTm93IGluZmxhdGUgaXQg
dG8gYWNjb3VudCBmb3IgdGhlIHNoYWRvdy4KICAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0ID0g
cmVjdDsKLSAgICBpZiAocmVjdC53aWR0aCgpID49IG1pbmltdW1NZW51TGlzdFNpemUoJnJlbmRl
cmVyLnN0eWxlKCkpKQorICAgIGlmIChyZWN0LndpZHRoKCkgPj0gbWluaW11bU1lbnVMaXN0U2l6
ZShyZW5kZXJlci5zdHlsZSgpKSkKICAgICAgICAgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZVJlY3Qo
cmVjdCwgc2l6ZSwgcG9wdXBCdXR0b25NYXJnaW5zKCksIHpvb21MZXZlbCk7CiAKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKQEAg
LTk0Myw5ICs5NDMsOSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KGNvbnN0
CiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKIAotSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6
bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiByZW5kZXJNZXRlciwgY29uc3Qg
SW50UmVjdCYgYm91bmRzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXpl
Rm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiByZW5kZXJNZXRlciwgY29uc3QgSW50UmVjdCYg
Ym91bmRzKSBjb25zdAogewotICAgIGlmIChOb0NvbnRyb2xQYXJ0ID09IHJlbmRlck1ldGVyLT5z
dHlsZSgpLmFwcGVhcmFuY2UoKSkKKyAgICBpZiAoTm9Db250cm9sUGFydCA9PSByZW5kZXJNZXRl
ci5zdHlsZSgpLmFwcGVhcmFuY2UoKSkKICAgICAgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7CiAK
ICAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCogY2VsbCA9IGxldmVsSW5kaWNhdG9yRm9yKHJlbmRl
ck1ldGVyKTsKQEAgLTk2Miw3ICs5NjIsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1l
dGVyKGNvbnN0IFJlCiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250
ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKIAotICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxs
ID0gbGV2ZWxJbmRpY2F0b3JGb3IodG9SZW5kZXJNZXRlcigmcmVuZGVyT2JqZWN0KSk7CisgICAg
TlNMZXZlbEluZGljYXRvckNlbGwqIGNlbGwgPSBsZXZlbEluZGljYXRvckZvcih0b1JlbmRlck1l
dGVyKHJlbmRlck9iamVjdCkpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCiAgICAgW2NlbGwgZHJhd1dpdGhGcmFtZTpyZWN0
IGluVmlldzpkb2N1bWVudFZpZXdGb3IocmVuZGVyT2JqZWN0KV07CkBAIC0xMDAxLDE2ICsxMDAx
LDE2IEBAIE5TTGV2ZWxJbmRpY2F0b3JTdHlsZSBSZW5kZXJUaGVtZU1hYzo6bGUKIAogfQogCi1O
U0xldmVsSW5kaWNhdG9yQ2VsbCogUmVuZGVyVGhlbWVNYWM6OmxldmVsSW5kaWNhdG9yRm9yKGNv
bnN0IFJlbmRlck1ldGVyKiByZW5kZXJNZXRlcikgY29uc3QKK05TTGV2ZWxJbmRpY2F0b3JDZWxs
KiBSZW5kZXJUaGVtZU1hYzo6bGV2ZWxJbmRpY2F0b3JGb3IoY29uc3QgUmVuZGVyTWV0ZXImIHJl
bmRlck1ldGVyKSBjb25zdAogewotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRl
ck1ldGVyLT5zdHlsZSgpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlck1l
dGVyLnN0eWxlKCk7CiAgICAgQVNTRVJUKHN0eWxlLmFwcGVhcmFuY2UoKSAhPSBOb0NvbnRyb2xQ
YXJ0KTsKIAogICAgIGlmICghbV9sZXZlbEluZGljYXRvcikKICAgICAgICAgbV9sZXZlbEluZGlj
YXRvciA9IGFkb3B0TlMoW1tOU0xldmVsSW5kaWNhdG9yQ2VsbCBhbGxvY10gaW5pdFdpdGhMZXZl
bEluZGljYXRvclN0eWxlOk5TQ29udGludW91c0NhcGFjaXR5TGV2ZWxJbmRpY2F0b3JTdHlsZV0p
OwogICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbV9sZXZlbEluZGljYXRvci5nZXQo
KTsKIAotICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJNZXRlci0+bWV0ZXJF
bGVtZW50KCk7CisgICAgSFRNTE1ldGVyRWxlbWVudCogZWxlbWVudCA9IHJlbmRlck1ldGVyLm1l
dGVyRWxlbWVudCgpOwogICAgIGRvdWJsZSB2YWx1ZSA9IGVsZW1lbnQtPnZhbHVlKCk7CiAKICAg
ICAvLyBCZWNhdXNlIE5TTGV2ZWxJbmRpY2F0b3JDZWxsIGRvZXMgbm90IHN1cHBvcnQgb3B0aW11
bS1pbi10aGUtbWlkZGxlIHR5cGUgY29sb3JpbmcsCkBAIC0xMDcyLDM1ICsxMDcyLDM1IEBAIElu
dFJlY3QgUmVuZGVyVGhlbWVNYWM6OnByb2dyZXNzQmFyUmVjdEYKICAgICAgICAgcmV0dXJuIHBy
b2dyZXNzQmFyQm91bmRzOwogCiAgICAgZmxvYXQgem9vbUxldmVsID0gcmVuZGVyT2JqZWN0LnN0
eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBj
b250cm9sU2l6ZUZvckZvbnQoJnJlbmRlck9iamVjdC5zdHlsZSgpKTsKKyAgICBOU0NvbnRyb2xT
aXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHJlbmRlck9iamVjdC5zdHlsZSgp
KTsKICAgICBJbnRTaXplIHNpemUgPSBwcm9ncmVzc0JhclNpemVzKClbY29udHJvbFNpemVdOwog
ICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwogICAgIHNpemUu
c2V0V2lkdGgocHJvZ3Jlc3NCYXJCb3VuZHMud2lkdGgoKSk7CiAKICAgICAvLyBOb3cgaW5mbGF0
ZSBpdCB0byBhY2NvdW50IGZvciB0aGUgc2hhZG93LgogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0
ID0gcHJvZ3Jlc3NCYXJCb3VuZHM7Ci0gICAgaWYgKHByb2dyZXNzQmFyQm91bmRzLmhlaWdodCgp
IDw9IG1pbmltdW1Qcm9ncmVzc0JhckhlaWdodCgmcmVuZGVyT2JqZWN0LnN0eWxlKCkpKQorICAg
IGlmIChwcm9ncmVzc0JhckJvdW5kcy5oZWlnaHQoKSA8PSBtaW5pbXVtUHJvZ3Jlc3NCYXJIZWln
aHQocmVuZGVyT2JqZWN0LnN0eWxlKCkpKQogICAgICAgICBpbmZsYXRlZFJlY3QgPSBJbnRSZWN0
KGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcHJvZ3Jlc3NCYXJNYXJnaW5zKGNvbnRy
b2xTaXplKSwgem9vbUxldmVsKSk7CiAKICAgICByZXR1cm4gaW5mbGF0ZWRSZWN0OwogfQogCi1p
bnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1Qcm9ncmVzc0JhckhlaWdodChSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1Qcm9ncmVzc0JhckhlaWdo
dChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNpemVGb3JTeXN0ZW1G
b250KHN0eWxlLCBwcm9ncmVzc0JhclNpemVzKCkpLmhlaWdodCgpOwogfQogCi1kb3VibGUgUmVu
ZGVyVGhlbWVNYWM6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVy
UHJvZ3Jlc3MqKSBjb25zdAorZG91YmxlIFJlbmRlclRoZW1lTWFjOjphbmltYXRpb25SZXBlYXRJ
bnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1
cm4gcHJvZ3Jlc3NBbmltYXRpb25GcmFtZVJhdGU7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZU1h
Yzo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0
Citkb3VibGUgUmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIo
UmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogewogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbk51
bUZyYW1lcyAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRlOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lTWFjOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jlc3NC
YXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsK
IH0KIApAQCAtMTExMCw3ICsxMTEwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9n
cmVzc0JhcihjbwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEludFJlY3QgaW5mbGF0ZWRS
ZWN0ID0gcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKHJlbmRlck9iamVjdCwgcmVjdCk7Ci0gICAg
TlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udCgmcmVuZGVyT2Jq
ZWN0LnN0eWxlKCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6
ZUZvckZvbnQocmVuZGVyT2JqZWN0LnN0eWxlKCkpOwogCiAgICAgY29uc3QgUmVuZGVyUHJvZ3Jl
c3MmIHJlbmRlclByb2dyZXNzID0gKnRvUmVuZGVyUHJvZ3Jlc3MoJnJlbmRlck9iamVjdCk7CiAg
ICAgSElUaGVtZVRyYWNrRHJhd0luZm8gdHJhY2tJbmZvOwpAQCAtMTMzNywyMiArMTMzNywyMiBA
QCBzdGF0aWMgY29uc3QgSW50U2l6ZSogbWVudUxpc3RCdXR0b25TaXplCiAgICAgcmV0dXJuIHNp
emVzOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25z
dAogewogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQo
c3R5bGUpOwogCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5bGUtPnJlc2V0UGFk
ZGluZygpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRQYWRkaW5n
KCk7CiAKICAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0gICAgc3R5bGUtPnNldEhl
aWdodChMZW5ndGgoQXV0bykpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoQXV0bykpOwog
CiAgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0eWxlLT5zZXRXaGl0
ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCiAgICAgLy8gU2V0
IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHRvIGJsYWNrIG9yIGdyYXkgd2hlbiB3ZSBoYXZlIHRoZSBh
cXVhIGxvb2suCiAgICAgLy8gQ2FzdCB0byBSR0IzMiBpcyB0byB3b3JrIGFyb3VuZCBhIGNvbXBp
bGVyIGJ1Zy4KLSAgICBzdHlsZS0+c2V0Q29sb3IoZSAmJiAhZS0+aXNEaXNhYmxlZEZvcm1Db250
cm9sKCkgPyBzdGF0aWNfY2FzdDxSR0JBMzI+KENvbG9yOjpibGFjaykgOiBDb2xvcjo6ZGFya0dy
YXkpOworICAgIHN0eWxlLnNldENvbG9yKCFlLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpID8gc3Rh
dGljX2Nhc3Q8UkdCQTMyPihDb2xvcjo6YmxhY2spIDogQ29sb3I6OmRhcmtHcmF5KTsKIAogICAg
IC8vIFNldCB0aGUgYnV0dG9uJ3MgdmVydGljYWwgc2l6ZS4KICAgICBzZXRTaXplRnJvbUZvbnQo
c3R5bGUsIG1lbnVMaXN0QnV0dG9uU2l6ZXMoKSk7CkBAIC0xMzYyLDUyICsxMzYyLDUyIEBAIHZv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUKICAgICAvLyBzeXN0ZW0gZm9u
dCBmb3IgdGhlIGNvbnRyb2wgc2l6ZSBpbnN0ZWFkLgogICAgIHNldEZvbnRGcm9tQ29udHJvbFNp
emUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGNvbnRyb2xTaXplKTsKIAotICAgIHN0eWxlLT5zZXRC
b3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQog
Ci1pbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
TGVmdChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5n
KGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2xlZnRQYWRkaW5nXSAqIHN0eWxlLT5lZmZlY3Rp
dmVab29tKCk7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25Q
YXJ0KQotICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCAqIHN0eWxlLT5lZmZl
Y3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQp
CisgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0
eWxlKSlbbGVmdFBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHls
ZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gc3R5
bGVkUG9wdXBQYWRkaW5nTGVmdCAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKICAgICByZXR1cm4g
MDsKIH0KIAotaW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxl
LT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gcG9wdXBCdXR0
b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW3JpZ2h0UGFkZGluZ10gKiBzdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVs
aXN0QnV0dG9uUGFydCkgewotICAgICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNp
emUoKSAvIGJhc2VGb250U2l6ZTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVs
aXN0UGFydCkKKyAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZv
ckZvbnQoc3R5bGUpKVtyaWdodFBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAg
IGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KSB7CisgICAgICAg
IGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemU7CiAgICAg
ICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRTY2FsZTsKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY2VpbGYoYXJyb3dXaWR0aCArIChhcnJvd1BhZGRp
bmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAqIHN0
eWxlLT5lZmZlY3RpdmVab29tKCkpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
Y2VpbGYoYXJyb3dXaWR0aCArIChhcnJvd1BhZGRpbmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQg
KyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSkpOwogICAg
IH0KICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFs
UGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6
OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAg
ICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCi0gICAgICAgIHJldHVy
biBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbdG9wUGFkZGlu
Z10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgp
ID09IE1lbnVsaXN0QnV0dG9uUGFydCkKLSAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGlu
Z1RvcCAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdFBhcnQpCisgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29u
dHJvbFNpemVGb3JGb250KHN0eWxlKSlbdG9wUGFkZGluZ10gKiBzdHlsZS5lZmZlY3RpdmVab29t
KCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisg
ICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdUb3AgKiBzdHlsZS5lZmZlY3RpdmVab29t
KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1l
TWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0
CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAg
ICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2Jv
dHRvbVBhZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBpZiAoc3R5bGUtPmFw
cGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCi0gICAgICAgIHJldHVybiBzdHlsZWRQ
b3B1cFBhZGRpbmdCb3R0b20gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHls
ZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQorICAgICAgICByZXR1cm4gcG9wdXBCdXR0
b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2JvdHRvbVBhZGRpbmddICogc3R5
bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxp
c3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nQm90dG9tICog
c3R5bGUuZWZmZWN0aXZlWm9vbSgpOwogICAgIHJldHVybiAwOwogfQogCi1Qb3B1cE1lbnVTdHls
ZTo6UG9wdXBNZW51U2l6ZSBSZW5kZXJUaGVtZU1hYzo6cG9wdXBNZW51U2l6ZShjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEludFJlY3QmIHJlY3QpIGNvbnN0CitQb3B1cE1lbnVTdHlsZTo6UG9w
dXBNZW51U2l6ZSBSZW5kZXJUaGVtZU1hYzo6cG9wdXBNZW51U2l6ZShjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgTlNQb3BVcEJ1dHRvbkNlbGwq
IHBvcHVwQnV0dG9uID0gdGhpcy0+cG9wdXBCdXR0b24oKTsKLSAgICBOU0NvbnRyb2xTaXplIHNp
emUgPSBjb250cm9sU2l6ZUZvckNlbGwocG9wdXBCdXR0b24sIHBvcHVwQnV0dG9uU2l6ZXMoKSwg
cmVjdC5zaXplKCksIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOworICAgIE5TQ29udHJvbFNpemUg
c2l6ZSA9IGNvbnRyb2xTaXplRm9yQ2VsbChwb3B1cEJ1dHRvbiwgcG9wdXBCdXR0b25TaXplcygp
LCByZWN0LnNpemUoKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICBzd2l0Y2ggKHNpemUp
IHsKICAgICBjYXNlIE5TUmVndWxhckNvbnRyb2xTaXplOgogICAgICAgICByZXR1cm4gUG9wdXBN
ZW51U3R5bGU6OlBvcHVwTWVudVNpemVOb3JtYWw7CkBAIC0xNDUyLDcgKzE0NTIsNyBAQCBjb25z
dCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6bWVudUxpc3RTCiAgICAgcmV0dXJuIHNpemVzOwog
fQogCi1pbnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKFJl
bmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gc2l6ZUZvclN5c3RlbUZvbnQo
c3R5bGUsIG1lbnVMaXN0U2l6ZXMoKSkud2lkdGgoKTsKIH0KQEAgLTE0NjAsOSArMTQ2MCw5IEBA
IGludCBSZW5kZXJUaGVtZU1hYzo6bWluaW11bU1lbnVMaXN0U2l6ZSgKIGNvbnN0IGludCB0cmFj
a1dpZHRoID0gNTsKIGNvbnN0IGludCB0cmFja1JhZGl1cyA9IDI7CiAKLXZvaWQgUmVuZGVyVGhl
bWVNYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlk
ZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQm
KSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUu
c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNs
aWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCkBAIC0xNTA2LDEwICsxNTA2LDEwIEBAIGJvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQp
IGNvbnN0CiB7CiAgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0
cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBjb25zdCBmbG9hdCB2
ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwpAQCAtMTYwOCw3ICsxNjA4LDcgQEAg
dm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoQ2VsbFN0YXRlKAogewogICAgIE5TU2VhcmNo
RmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIAotICAgIFtzZWFyY2ggc2V0Q29u
dHJvbFNpemU6Y29udHJvbFNpemVGb3JGb250KCZvLnN0eWxlKCkpXTsKKyAgICBbc2VhcmNoIHNl
dENvbnRyb2xTaXplOmNvbnRyb2xTaXplRm9yRm9udChvLnN0eWxlKCkpXTsKIAogICAgIC8vIFVw
ZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1cGRhdGVFbmFibGVk
U3RhdGUoc2VhcmNoLCBvKTsKQEAgLTE2MjEsNDUgKzE2MjEsNDUgQEAgY29uc3QgSW50U2l6ZSog
UmVuZGVyVGhlbWVNYWM6OnNlYXJjaEZpZQogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSYg
c3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGgg
c3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53
aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkK
KyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVp
Z2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSB0aGUgZm9udCBz
aXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgogICAg
IHNldFNpemVGcm9tRm9udChzdHlsZSwgc2VhcmNoRmllbGRTaXplcygpKTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIE92
ZXJyaWRlIGJvcmRlci4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBjb25zdCBzaG9y
dCBib3JkZXJXaWR0aCA9IDIgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIHN0eWxlLT5z
ZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0
U3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSaWdodFdpZHRoKGJvcmRlcldpZHRo
KTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmlnaHRTdHlsZShJTlNFVCk7Ci0gICAgc3R5bGUtPnNl
dEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyQm90
dG9tU3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJXaWR0
aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclRvcFN0eWxlKElOU0VUKTsKKyAgICBzdHlsZS5yZXNl
dEJvcmRlcigpOworICAgIGNvbnN0IHNob3J0IGJvcmRlcldpZHRoID0gMiAqIHN0eWxlLmVmZmVj
dGl2ZVpvb20oKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOwor
ICAgIHN0eWxlLnNldEJvcmRlckxlZnRTdHlsZShJTlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVy
UmlnaHRXaWR0aChib3JkZXJXaWR0aCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmlnaHRTdHlsZShJ
TlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyQm90dG9tV2lkdGgoYm9yZGVyV2lkdGgpOworICAg
IHN0eWxlLnNldEJvcmRlckJvdHRvbVN0eWxlKElOU0VUKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJU
b3BXaWR0aChib3JkZXJXaWR0aCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyVG9wU3R5bGUoSU5TRVQp
OwogCiAgICAgLy8gT3ZlcnJpZGUgaGVpZ2h0LgotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KEF1dG8pKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKICAgICBzZXRTZWFy
Y2hGaWVsZFNpemUoc3R5bGUpOwogCiAgICAgLy8gT3ZlcnJpZGUgcGFkZGluZyBzaXplIHRvIG1h
dGNoIEFwcEtpdCB0ZXh0IHBvc2l0aW9uaW5nLgotICAgIGNvbnN0IGludCBwYWRkaW5nID0gMSAq
IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0
aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBh
ZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcs
IEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZp
eGVkKSk7CisgICAgY29uc3QgaW50IHBhZGRpbmcgPSAxICogc3R5bGUuZWZmZWN0aXZlWm9vbSgp
OworICAgIHN0eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAg
IHN0eWxlLnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHls
ZS5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBh
ZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CiAKICAgICBOU0NvbnRyb2xTaXpl
IGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHN0eWxlKTsKICAgICBzZXRGb250RnJv
bUNvbnRyb2xTaXplKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBjb250cm9sU2l6ZSk7CiAKLSAgICBz
dHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxs
cHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQpAQCAtMTcxOCwxMiArMTcxOCwxMiBAQCBjb25zdCBJbnRTaXplKiBS
ZW5kZXJUaGVtZU1hYzo6Y2FuY2VsQnV0CiAgICAgcmV0dXJuIHNpemVzOwogfQogCi12b2lkIFJl
bmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBJbnRTaXplIHNp
emUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgY2FuY2VsQnV0dG9uU2l6ZXMoKSk7Ci0gICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRo
KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBG
aXhlZCkpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogY29uc3QgSW50
U2l6ZSogUmVuZGVyVGhlbWVNYWM6OnJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0CkBAIC0xNzMz
LDEyICsxNzMzLDEyIEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lTWFjOjpyZXN1bHRzQnUK
IH0KIAogY29uc3QgaW50IGVtcHR5UmVzdWx0c09mZnNldCA9IDk7Ci12b2lkIFJlbmRlclRoZW1l
TWFjOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFj
OjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0g
c2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKLSAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4
ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0V2lkdGgo
TGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKKyAgICBz
dHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUu
c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNl
YXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpCkBAIC0xNzQ2LDEyICsxNzQ2LDEyIEBAIGJvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGREZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBj
b25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1
bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRo
KCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNl
dFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0
KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhu
dWxscHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtMTc3OSwxMiArMTc3OSwxMiBAQCBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzCiB9CiAKIGNvbnN0IGludCByZXN1
bHRzQXJyb3dXaWR0aCA9IDU7Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1l
bnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxl
LCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXpl
LndpZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFk
b3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSArIHJl
c3VsdHNBcnJvd1dpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2l6
ZS5oZWlnaHQoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9
CiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCkBAIC0xOTE2LDEyICsxOTE2LDEyIEBAIGludCBSZW5kZXJUaGVtZU1hYzo6c2xp
ZGVyVGlja09mZnNldEZyb20KIGNvbnN0IGludCBzbGlkZXJUaHVtYldpZHRoID0gMTU7CiBjb25z
dCBpbnQgc2xpZGVyVGh1bWJIZWlnaHQgPSAxNTsKIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0
eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBzdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1i
SG9yaXpvbnRhbFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRp
Y2FsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGlu
dD4oc2xpZGVyVGh1bWJXaWR0aCAqIHpvb21MZXZlbCksIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxl
LT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6
b29tTGV2ZWwpLCBGaXhlZCkpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IHN0eWxlLmVmZmVjdGl2
ZVpvb20oKTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpv
bnRhbFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0
KSB7CisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRl
clRodW1iV2lkdGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRIZWln
aHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6b29tTGV2ZWwp
LCBGaXhlZCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lU2FmYXJpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTIsMTUgKzI1MiwxNSBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzeXN0ZW1Gb250KENTU1Zh
CiAgICAgZm9udERlc2NyaXB0aW9uID0gKmNhY2hlZERlc2M7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVTYWZhcmk6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0
IEJvcmRlckRhdGEmIGJvcmRlciwKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OmlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXImIGJh
Y2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7CiAgICAgLy8g
SWYgd2UgZGlkbid0IGZpbmQgU2FmYXJpVGhlbWUuZGxsIHdlIHdvbid0IGJlIGFibGUgdG8gcGFp
bnQgYW55IHRoZW1lZCBjb250cm9scy4KICAgICBpZiAoIVNhZmFyaVRoZW1lTGlicmFyeSgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFRl
eHRGaWVsZFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0QXJlYVBhcnQgfHwgc3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5i
b3JkZXIoKSAhPSBib3JkZXI7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBUZXh0Rmll
bGRQYXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBUZXh0QXJlYVBhcnQgfHwgc3R5bGUuYXBw
ZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm4gc3R5bGUuYm9yZGVyKCkg
IT0gYm9yZGVyOwogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxl
LCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKQEAgLTMyMyw4ICsz
MjMsOCBAQCBpbnQgUmVuZGVyVGhlbWVTYWZhcmk6OmJhc2VsaW5lUG9zaXRpb24oCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgaWYgKG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQ
YXJ0IHx8IG8uc3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KSB7Ci0gICAgICAgIGNv
bnN0IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3goJm8pOwotICAgICAgICByZXR1cm4gYm94
LT5tYXJnaW5Ub3AoKSArIGJveC0+aGVpZ2h0KCkgLSAyOyAvLyBUaGUgYmFzZWxpbmUgaXMgMnB4
IHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgY2hlY2tib3gvcmFkaW8gaW4gQXBwS2l0LgorICAg
ICAgICBjb25zdCBSZW5kZXJCb3gmIGJveCA9IHRvUmVuZGVyQm94KG8pOworICAgICAgICByZXR1
cm4gYm94Lm1hcmdpblRvcCgpICsgYm94LmhlaWdodCgpIC0gMjsgLy8gVGhlIGJhc2VsaW5lIGlz
IDJweCB1cCBmcm9tIHRoZSBib3R0b20gb2YgdGhlIGNoZWNrYm94L3JhZGlvIGluIEFwcEtpdC4K
ICAgICB9CiAKICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24obyk7CkBA
IC0zNDMsOSArMzQzLDkgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFN1cHBvcnRz
VAogICAgIHJldHVybiB0cnVlOwogfQogCi1OU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lU2FmYXJp
Ojpjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorTlNDb250cm9s
U2l6ZSBSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlJiBz
dHlsZSkgY29uc3QKIHsKLSAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKKyAg
ICBpbnQgZm9udFNpemUgPSBzdHlsZS5mb250U2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA+PSAx
NikKICAgICAgICAgcmV0dXJuIE5TUmVndWxhckNvbnRyb2xTaXplOwogICAgIGlmIChmb250U2l6
ZSA+PSAxMSkKQEAgLTM2OCwyNyArMzY4LDI3IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNl
dENvbnRyb2xTaXplKE4KICAgICAgICAgW2NlbGwgc2V0Q29udHJvbFNpemU6c2l6ZV07CiB9CiAq
LwotSW50U2l6ZSBSZW5kZXJUaGVtZVNhZmFyaTo6c2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVTYWZh
cmk6OnNpemVGb3JGb250KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIHNpemVzW2NvbnRyb2xTaXplRm9yRm9udChzdHlsZSldOwog
fQogCi1JbnRTaXplIFJlbmRlclRoZW1lU2FmYXJpOjpzaXplRm9yU3lzdGVtRm9udChSZW5kZXJT
dHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJU
aGVtZVNhZmFyaTo6c2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBJ
bnRTaXplKiBzaXplcykgY29uc3QKIHsKICAgICByZXR1cm4gc2l6ZXNbY29udHJvbFNpemVGb3JT
eXN0ZW1Gb250KHN0eWxlKV07CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldFNpemVG
cm9tRm9udChSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IENoZWNrIGlz
IGZsYXdlZCwgc2luY2UgaXQgZG9lc24ndCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBh
Y2NvdW50LgogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JGb250KHN0eWxlLCBzaXplcyk7Ci0g
ICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgp
ID4gMCkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVk
KSk7Ci0gICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4g
MCkKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQp
KTsKKyAgICBpZiAoc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmIHNpemUud2lk
dGgoKSA+IDApCisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZp
eGVkKSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0KCkg
PiAwKQorICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVk
KSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldEZvbnRGcm9tQ29udHJvbFNpemUo
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBOU0NvbnRy
b2xTaXplIGNvbnRyb2xTaXplKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Rm9u
dEZyb21Db250cm9sU2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0CiB7CiAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNv
bHV0ZVNpemUodHJ1ZSk7CkBAIC00MDAsMTUgKzQwMCwxNSBAQCB2b2lkIFJlbmRlclRoZW1lU2Fm
YXJpOjpzZXRGb250RnJvbUNvbnRyCiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNp
emUoZm9udFNpemUpOwogCiAgICAgLy8gUmVzZXQgbGluZSBoZWlnaHQKLSAgICBzdHlsZS0+c2V0
TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUu
c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAKLSAgICBp
ZiAoc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKQotICAgICAgICBz
dHlsZS0+Zm9udCgpLnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250U2VsZWN0b3IoKSk7CisgICAg
aWYgKHN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKQorICAgICAgICBz
dHlsZS5mb250KCkudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsKIH0KIAot
TlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFNpemVGb3JTeXN0ZW1Gb250
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK05TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVTYWZh
cmk6OmNvbnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7
Ci0gICAgaW50IGZvbnRTaXplID0gc3R5bGUtPmZvbnRTaXplKCk7CisgICAgaW50IGZvbnRTaXpl
ID0gc3R5bGUuZm9udFNpemUoKTsKICAgICBpZiAoZm9udFNpemUgPj0gMTMpCiAgICAgICAgIHJl
dHVybiBOU1JlZ3VsYXJDb250cm9sU2l6ZTsKICAgICBpZiAoZm9udFNpemUgPj0gMTEpCkBAIC00
NDUsMTAgKzQ0NSwxMCBAQCBjb25zdCBpbnQqIFJlbmRlclRoZW1lU2FmYXJpOjpjaGVja2JveE1h
CiAgICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOwogfQogCi12b2lkIFJlbmRlclRoZW1l
U2FmYXJpOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZVNhZmFyaTo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29u
c3QKIHsKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQs
IHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICgh
c3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1
dG8oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVXNlIHRoZSBmb250IHNpemUgdG8gZGV0
ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGNvbnRyb2wuCkBAIC00ODQsMTcgKzQ4
NCwxNyBAQCBjb25zdCBpbnQqIFJlbmRlclRoZW1lU2FmYXJpOjpyYWRpb01hcmdpCiAgICAgcmV0
dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpz
ZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNh
ZmFyaTo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICAvLyBJ
ZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBu
b3RoaW5nIHRvIGRvLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5p
c0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gVXNlIHRoZSBmb250IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRy
aW5zaWMgd2lkdGggb2YgdGhlIGNvbnRyb2wuCiAgICAgc2V0U2l6ZUZyb21Gb250KHN0eWxlLCBy
YWRpb1NpemVzKCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRCdXR0b25QYWRk
aW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgTlNDb250cm9sU2l6ZSBzaXpl
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0QnV0dG9uUGFkZGluZ0Zyb21Db250
cm9sU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUsIE5TQ29udHJvbFNpemUgc2l6ZSkgY29uc3QKIHsK
ICAgICAvLyBKdXN0IHVzZSA4cHguICBBcHBLaXQgd2FudHMgdG8gdXNlIDExcHggZm9yIG1pbmkg
YnV0dG9ucywgYnV0IHRoYXQgcGFkZGluZyBpcyBqdXN0IHRvbyBsYXJnZQogICAgIC8vIGZvciBy
ZWFsLXdvcmxkIFdlYiBzaXRlcyAoY3JlYXRpbmcgYSBodWdlIG5lY2Vzc2FyeSBtaW5pbXVtIHdp
ZHRoIGZvciBidXR0b25zIHdob3NlIHNwYWNlIGlzCkBAIC01MDIsMTMgKzUwMiwxMyBAQCB2b2lk
IFJlbmRlclRoZW1lU2FmYXJpOjpzZXRCdXR0b25QYWRkaW5nCiAgICAgLy8gVGhpcyBhbHNvIGd1
YXJhbnRlZXMgdGhlIEhUTUw0IDxidXR0b24+IHdpbGwgbWF0Y2ggb3VyIHJlbmRlcmluZyBieSBk
ZWZhdWx0LCBzaW5jZSB3ZSdyZSB1c2luZyBhIGNvbnNpc3RlbnQKICAgICAvLyBwYWRkaW5nLgog
ICAgIGNvbnN0IGludCBwYWRkaW5nID0gODsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVu
Z3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgo
cGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoMCwgRml4
ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoMCwgRml4ZWQpKTsKKyAg
ICBzdHlsZS5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHls
ZS5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0
UGFkZGluZ1RvcChMZW5ndGgoMCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nQm90dG9t
KExlbmd0aCgwLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUs
IEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgLy8gVGhlcmUgYXJlIHRocmVlIGFwcGVhcmFuY2Ug
Y29uc3RhbnRzIGZvciBidXR0b25zLgogICAgIC8vICgxKSBQdXNoLWJ1dHRvbiBpcyB0aGUgY29u
c3RhbnQgZm9yIHRoZSBkZWZhdWx0IEFxdWEgc3lzdGVtIGJ1dHRvbi4gIFB1c2ggYnV0dG9ucyB3
aWxsIG5vdCBzY2FsZSB2ZXJ0aWNhbGx5IGFuZCB3aWxsIG5vdCBhbGxvdwpAQCAtNTIyLDE1ICs1
MjIsMTUgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0QnV0dG9uU3R5bAogICAgIC8v
IERldGVybWluZSBvdXIgY29udHJvbCBzaXplIGJhc2VkIG9mZiBvdXIgZm9udC4KICAgICBOU0Nv
bnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHN0eWxlKTsKIAotICAg
IGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0KSB7CisgICAgaWYgKHN0
eWxlLmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkgewogICAgICAgICAvLyBEaXRjaCB0
aGUgYm9yZGVyLgotICAgICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAgICAgICAgc3R5bGUu
cmVzZXRCb3JkZXIoKTsKIAogICAgICAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0g
ICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKKyAgICAgICAgc3R5bGUuc2V0
SGVpZ2h0KExlbmd0aChBdXRvKSk7CiAKICAgICAgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2Vk
IHRvIHByZQotICAgICAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgICAgICBzdHls
ZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKICAgICAgICAgLy8gU2V0IHRoZSBidXR0b24ncyB2ZXJ0
aWNhbCBzaXplLgogICAgICAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKQEAgLTU0NCwxMSArNTQ0
LDExIEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdEJ1dHRvblN0eWwKICAgICAgICAg
c2V0Rm9udEZyb21Db250cm9sU2l6ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgY29udHJvbFNpemUp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFNldCBhIG1pbi1oZWlnaHQgc28gdGhhdCB3ZSBj
YW4ndCBnZXQgc21hbGxlciB0aGFuIHRoZSBtaW5pIGJ1dHRvbi4KLSAgICAgICAgc3R5bGUtPnNl
dE1pbkhlaWdodChMZW5ndGgoMTUsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldE1pbkhlaWdo
dChMZW5ndGgoMTUsIEZpeGVkKSk7CiAKICAgICAgICAgLy8gUmVzZXQgdGhlIHRvcCBhbmQgYm90
dG9tIGJvcmRlcnMuCi0gICAgICAgIHN0eWxlLT5yZXNldEJvcmRlclRvcCgpOwotICAgICAgICBz
dHlsZS0+cmVzZXRCb3JkZXJCb3R0b20oKTsKKyAgICAgICAgc3R5bGUucmVzZXRCb3JkZXJUb3Ao
KTsKKyAgICAgICAgc3R5bGUucmVzZXRCb3JkZXJCb3R0b20oKTsKICAgICB9CiB9CiAKQEAgLTU2
OSwxMCArNTY5LDEwIEBAIGNvbnN0IGludCogUmVuZGVyVGhlbWVTYWZhcmk6OmJ1dHRvbk1hcmcK
ICAgICByZXR1cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVT
YWZhcmk6OnNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZVNhZmFyaTo6c2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7
CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVu
IHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmlu
c2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxl
LndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWlu
ZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgpAQCAtNjIwLDcgKzYyMCw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50VGV4dEZpZWxkKGMKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZVNhZmFyaTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKQEAgLTY0OCw3ICs2NDgsNyBAQCBib29sIFJl
bmRlclRoZW1lU2FmYXJpOjpwYWludFRleHRBcmVhKGNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFy
aTo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3QKIHsKIH0KIApAQCAtODY0LDIyICs4NjQsMjIgQEAgYm9vbCBSZW5kZXJUaGVt
ZVNhZmFyaTo6cGFpbnRNZW51TGlzdEJ1dAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lU2FmYXJpOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSkgY29uc3QKIHsKICAgICBO
U0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHN0eWxlKTsKIAot
ICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAg
ICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0UGFkZGluZygpOwogICAgIAog
ICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0by4KLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aChBdXRvKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CiAKICAgICAv
LyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCi0gICAgc3R5bGUtPnNldFdoaXRlU3BhY2Uo
UFJFKTsKKyAgICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKICAgICAvLyBTZXQgdGhlIGZv
cmVncm91bmQgY29sb3IgdG8gYmxhY2sgb3IgZ3JheSB3aGVuIHdlIGhhdmUgdGhlIGFxdWEgbG9v
ay4KICAgICAvLyBDYXN0IHRvIFJHQjMyIGlzIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZXIgYnVn
LgotICAgIHN0eWxlLT5zZXRDb2xvcihlICYmICFlLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSA/
IHN0YXRpY19jYXN0PFJHQkEzMj4oQ29sb3I6OmJsYWNrKSA6IENvbG9yOjpkYXJrR3JheSk7Cisg
ICAgc3R5bGUuc2V0Q29sb3IoZSAmJiAhZS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkgPyBzdGF0
aWNfY2FzdDxSR0JBMzI+KENvbG9yOjpibGFjaykgOiBDb2xvcjo6ZGFya0dyYXkpOwogCiAgICAg
Ly8gU2V0IHRoZSBidXR0b24ncyB2ZXJ0aWNhbCBzaXplLgogICAgIHNldEJ1dHRvblNpemUoc3R5
bGUpOwpAQCAtODkwLDU2ICs4OTAsNTYgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0
TWVudUxpc3RTdAogICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc3R5bGVSZXNvbHZlciwgc3R5
bGUsIGNvbnRyb2xTaXplKTsKIH0KIAotaW50IFJlbmRlclRoZW1lU2FmYXJpOjpwb3B1cEludGVy
bmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1l
U2FmYXJpOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dAogewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICBp
ZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKICAgICAgICAgcmV0dXJuIHBv
cHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtsZWZ0UGFkZGluZ107
Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAg
IGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQogICAgICAgICBy
ZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nTGVmdDsKICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJl
bmRlclRoZW1lU2FmYXJpOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdS
aWdodChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gTWVudWxpc3RQYXJ0KQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVu
dWxpc3RQYXJ0KQogICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXpl
Rm9yRm9udChzdHlsZSkpW3JpZ2h0UGFkZGluZ107Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KSB7Ci0gICAgICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0
eWxlLT5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNl
KCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KSB7CisgICAgICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0
eWxlLmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemU7CiAgICAgICAgIGZsb2F0IGFycm93V2lkdGgg
PSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRTY2FsZTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludD4oY2VpbGYoYXJyb3dXaWR0aCArIGFycm93UGFkZGluZ0xlZnQgKyBhcnJvd1BhZGRpbmdS
aWdodCArIHBhZGRpbmdCZWZvcmVTZXBhcmF0b3IpKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9
CiAKLWludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lU2FmYXJpOjpwb3B1cEludGVybmFs
UGFkZGluZ1RvcChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5h
cHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkg
PT0gTWVudWxpc3RQYXJ0KQogICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRy
b2xTaXplRm9yRm9udChzdHlsZSkpW3RvcFBhZGRpbmddOwotICAgIGlmIChzdHlsZS0+YXBwZWFy
YW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgp
ID09IE1lbnVsaXN0QnV0dG9uUGFydCkKICAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGlu
Z1RvcDsKICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJlbmRlclRoZW1lU2FmYXJpOjpwb3B1cElu
dGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVy
VGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJiBzdHls
ZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQp
CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCiAgICAgICAgIHJl
dHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbYm90dG9t
UGFkZGluZ107Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25Q
YXJ0KQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQog
ICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nQm90dG9tOwogICAgIHJldHVybiAwOwog
fQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBmbG9hdCBmb250
U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKKyAgICBmbG9hdCBmb250
U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplOwogICAgIAotICAgIHN0eWxl
LT5yZXNldFBhZGRpbmcoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVzKEludFNpemUoaW50
KGJhc2VCb3JkZXJSYWRpdXMgKyBmb250U2NhbGUgLSAxKSwgaW50KGJhc2VCb3JkZXJSYWRpdXMg
KyBmb250U2NhbGUgLSAxKSkpOyAvLyBGSVhNRTogUm91bmQgdXA/CisgICAgc3R5bGUucmVzZXRQ
YWRkaW5nKCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmFkaXVzKEludFNpemUoaW50KGJhc2VCb3Jk
ZXJSYWRpdXMgKyBmb250U2NhbGUgLSAxKSwgaW50KGJhc2VCb3JkZXJSYWRpdXMgKyBmb250U2Nh
bGUgLSAxKSkpOyAvLyBGSVhNRTogUm91bmQgdXA/CiAKICAgICBjb25zdCBpbnQgbWluSGVpZ2h0
ID0gMTU7Ci0gICAgc3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgobWluSGVpZ2h0LCBGaXhlZCkp
OworICAgIHN0eWxlLnNldE1pbkhlaWdodChMZW5ndGgobWluSGVpZ2h0LCBGaXhlZCkpOwogICAg
IAotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdo
dCgpKTsKKyAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhl
aWdodCgpKTsKIH0KIAogY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVTYWZhcmk6Om1lbnVMaXN0
U2l6ZXMoKSBjb25zdApAQCAtOTQ4LDcgKzk0OCw3IEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRo
ZW1lU2FmYXJpOjptZW51TGkKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAKLWludCBSZW5kZXJUaGVt
ZVNhZmFyaTo6bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citp
bnQgUmVuZGVyVGhlbWVTYWZhcmk6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUmIHN0
eWxlKSBjb25zdAogewogICAgIHJldHVybiBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgbWVudUxp
c3RTaXplcygpKS53aWR0aCgpOwogfQpAQCAtOTg3LDEwICs5ODcsMTAgQEAgYm9vbCBSZW5kZXJU
aGVtZVNhZmFyaTo6cGFpbnRTbGlkZXJUcmFjawogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0IAor
dm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUpIGNvbnN0
IAogeyAKICAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShzdHlsZVJlc29s
dmVyLCBzdHlsZSwgZSk7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsgCisgICAg
c3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOyAKIH0gCiAKIGNvbnN0IGZsb2F0IHZlcnRpY2Fs
U2xpZGVySGVpZ2h0UGFkZGluZyA9IDAuMWY7CkBAIC0xMDA1LDE0ICsxMDA1LDE0IEBAIGJvb2wg
UmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2xpZGVyVGh1bWIKIGNvbnN0IGludCBzbGlkZXJUaHVt
YldpZHRoID0gMTU7CiBjb25zdCBpbnQgc2xpZGVyVGh1bWJIZWlnaHQgPSAxNTsKIAotdm9pZCBS
ZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IHN0eWxl
LT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKLSAgICAgICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOwotICAgICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKKyAgICBp
ZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgc3R5
bGUuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7CisgICAgICAgIHN0
eWxlLnNldFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOworICAgICAgICBz
dHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOwogICAgIH0g
CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIGVsc2UgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0g
TWVkaWFTbGlkZXJUaHVtYlBhcnQpIAorICAgIGVsc2UgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9
PSBNZWRpYVNsaWRlclRodW1iUGFydCkgCiAgICAgICAgIFJlbmRlck1lZGlhQ29udHJvbHM6OmFk
anVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKHN0eWxlKTsKICNlbmRpZgogfQpAQCAtMTAzMSw0MCAr
MTAzMSw0MCBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZVNhZmFyaTo6c2VhcmNoCiAgICAg
cmV0dXJuIHNpemVzOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRTZWFyY2hGaWVs
ZFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6
c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICAvLyBJ
ZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBu
b3RoaW5nIHRvIGRvLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5p
c0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUg
aW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgogICAgIHNldFNpemVGcm9tRm9udChzdHls
ZSwgc2VhcmNoRmllbGRTaXplcygpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjph
ZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRl
clN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSkgY29uc3QKIHsKICAgICAvLyBPdmVycmlkZSBib3Jk
ZXIuCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsK
ICAgICBjb25zdCBzaG9ydCBib3JkZXJXaWR0aCA9IDI7Ci0gICAgc3R5bGUtPnNldEJvcmRlckxl
ZnRXaWR0aChib3JkZXJXaWR0aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlckxlZnRTdHlsZShJTlNF
VCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclJpZ2h0V2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHN0
eWxlLT5zZXRCb3JkZXJSaWdodFN0eWxlKElOU0VUKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyQm90
dG9tV2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJCb3R0b21TdHlsZShJ
TlNFVCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclRvcFdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBz
dHlsZS0+c2V0Qm9yZGVyVG9wU3R5bGUoSU5TRVQpOyAgICAKKyAgICBzdHlsZS5zZXRCb3JkZXJM
ZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNldEJvcmRlckxlZnRTdHlsZShJTlNF
VCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmlnaHRXaWR0aChib3JkZXJXaWR0aCk7CisgICAgc3R5
bGUuc2V0Qm9yZGVyUmlnaHRTdHlsZShJTlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyQm90dG9t
V2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNldEJvcmRlckJvdHRvbVN0eWxlKElOU0VU
KTsKKyAgICBzdHlsZS5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJXaWR0aCk7CisgICAgc3R5bGUu
c2V0Qm9yZGVyVG9wU3R5bGUoSU5TRVQpOyAgICAKICAgICAKICAgICAvLyBPdmVycmlkZSBoZWln
aHQuCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworICAgIHN0eWxlLnNldEhl
aWdodChMZW5ndGgoQXV0bykpOwogICAgIHNldFNlYXJjaEZpZWxkU2l6ZShzdHlsZSk7CiAgICAg
CiAgICAgLy8gT3ZlcnJpZGUgcGFkZGluZyBzaXplIHRvIG1hdGNoIEFwcEtpdCB0ZXh0IHBvc2l0
aW9uaW5nLgogICAgIGNvbnN0IGludCBwYWRkaW5nID0gMTsKLSAgICBzdHlsZS0+c2V0UGFkZGlu
Z0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdo
dChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5n
dGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgo
cGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGlu
ZywgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZp
eGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsK
KyAgICBzdHlsZS5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwogICAg
IAogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoc3R5
bGUpOwogICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGNv
bnRyb2xTaXplKTsKQEAgLTEwOTIsMTEgKzEwOTIsMTEgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVy
VGhlbWVTYWZhcmk6OmNhbmNlbAogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBz
aXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIGNhbmNlbEJ1dHRvblNpemVzKCkpOwotICAg
IHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIHN0eWxl
LT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0
V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQo
TGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKIGNvbnN0IEludFNpemUqIFJlbmRl
clRoZW1lU2FmYXJpOjpyZXN1bHRzQnV0dG9uU2l6ZXMoKSBjb25zdApAQCAtMTEwNiwxMSArMTEw
NiwxMSBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZVNhZmFyaTo6cmVzdWx0CiB9CiAKIGNv
bnN0IGludCBlbXB0eVJlc3VsdHNPZmZzZXQgPSA5Owotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6
YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6
YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNp
emVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUt
PnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgLSBlbXB0eVJlc3VsdHNPZmZzZXQsIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsK
KyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpIC0gZW1wdHlSZXN1bHRzT2Zm
c2V0LCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZERl
Y29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKQpAQCAtMTExOCwxMSArMTExOCwxMSBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJp
OjpwYWludFNlYXJjaEZpZWxkCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QK
IHsKICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1
dHRvblNpemVzKCkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBG
aXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVk
KSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAg
ICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKIGJv
b2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBh
cnQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYpCkBAIC0xMTQyLDExICsxMTQyLDExIEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZh
cmk6OnBhaW50U2VhcmNoRmllbGQKIH0KIAogY29uc3QgaW50IHJlc3VsdHNBcnJvd1dpZHRoID0g
NTsKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0
CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNC
dXR0b25TaXplcygpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAr
IHJlc3VsdHNBcnJvd1dpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUu
d2lkdGgoKSArIHJlc3VsdHNBcnJvd1dpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdo
dChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVNh
ZmFyaTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYpCkBAIC0xMTkwLDkg
KzExOTAsOSBAQCBTdHJpbmcgUmVuZGVyVGhlbWVTYWZhcmk6Om1lZGlhQ29udHJvbHNTCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5UKQotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6
YWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1ldGVyU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAg
c3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVs
bHB0cik7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnN1cHBvcnRzTWV0ZXIoQ29udHJv
bFBhcnQgcGFydCkgY29uc3QKQEAgLTEyMDUsNyArMTIwNSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVT
YWZhcmk6OnN1cHBvcnRzTWV0ZXIoQ28KICAgICB9CiB9CiAKLUludFNpemUgUmVuZGVyVGhlbWVT
YWZhcmk6Om1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJl
Y3QmIGJvdW5kcykgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6Om1ldGVyU2l6ZUZv
ckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciYsIGNvbnN0IEludFJlY3QmIGJvdW5kcykgY29uc3QK
IHsKICAgICByZXR1cm4gYm91bmRzLnNpemUoKTsKIH0KQEAgLTEyMTcsNyArMTIxNyw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWV0ZXIoY29uc3QKICAgICBpZiAoIXJlbmRlck9i
amVjdC5pc01ldGVyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSFRNTE1ldGVyRWxl
bWVudCogZWxlbWVudCA9IHRvUmVuZGVyTWV0ZXIoJnJlbmRlck9iamVjdCktPm1ldGVyRWxlbWVu
dCgpOworICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKHJlbmRl
ck9iamVjdCkubWV0ZXJFbGVtZW50KCk7CiAKICAgICBpbnQgcmVtYWluaW5nID0gc3RhdGljX2Nh
c3Q8aW50PigoMS4wIC0gZWxlbWVudC0+dmFsdWVSYXRpbygpKSAqIHN0YXRpY19jYXN0PGRvdWJs
ZT4ocmVjdC5zaXplKCkud2lkdGgoKSkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVTYWZhcmkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuaAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0
KGNvbnN0IFJlbmRlck9iamVjdCYsIEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0Nv
bnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwKKyAgICB2
aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9y
ZGVyRGF0YSYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5
ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
Q29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKQEAg
LTc0LDU2ICs3NCw1NiBAQCBwdWJsaWM6CiAgICAgLy8gU3lzdGVtIGZvbnRzLgogICAgIHZpcnR1
YWwgdm9pZCBzeXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0Owog
Ci0gICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0
OworICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUmKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OyAKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsgCiAgICAgCi0gICAgdmlydHVh
bCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAg
dmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSopIGNvbnN0
OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQo
UmVuZGVyU3R5bGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGlu
Z1JpZ2h0KFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBwb3B1cElu
dGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAg
ICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgogICAgIHZpcnR1YWwgYm9v
bCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0
eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHls
ZSYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
UmFkaW9TaXplKFJlbmRlclN0eWxlJikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgV2ViQ29yZTo6RWxlbWVu
dCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBXZWJDb3JlOjpFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJT
dHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxl
JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBh
aW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERl
Y29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
ICAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CkBAIC0xMzQsOSArMTM0
LDkgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKLSAg
ICB2aXJ0dWFsIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRl
clNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXImLCBjb25zdCBJbnRSZWN0JikgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBF
bGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwogI2VuZGlmCiAKQEAgLTE1MCwxMyArMTUwLDEzIEBAIHByaXZhdGU6CiAKICAgICAvLyBH
ZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIGZvbnQuICBVc2VkIGJ5IHNvbWUgb2Yg
dGhlIGNvbnRyb2xzIChsaWtlIGJ1dHRvbnMpLgogCi0gICAgTlNDb250cm9sU2l6ZSBjb250cm9s
U2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBOU0NvbnRyb2xTaXplIGNvbnRy
b2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIE5TQ29udHJvbFNp
emUgY29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgTlNDb250cm9s
U2l6ZSBjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmKSBjb25zdDsKICAgICAv
L3ZvaWQgc2V0Q29udHJvbFNpemUoTlNDZWxsKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMsIGNvbnN0
IEludFNpemUmIG1pblNpemUpOwotICAgIHZvaWQgc2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxl
KiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAgIEludFNpemUgc2l6ZUZvckZvbnQo
UmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7Ci0gICAgSW50U2l6ZSBz
aXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25z
dDsKLSAgICB2b2lkIHNldEZvbnRGcm9tQ29udHJvbFNpemUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7CisgICAgdm9pZCBzZXRTaXplRnJvbUZvbnQo
UmVuZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7CisgICAgSW50U2l6ZSBz
aXplRm9yRm9udChSZW5kZXJTdHlsZSYsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKKyAg
ICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJiwgY29uc3QgSW50U2l6ZSog
c2l6ZXMpIGNvbnN0OworICAgIHZvaWQgc2V0Rm9udEZyb21Db250cm9sU2l6ZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBOU0NvbnRyb2xTaXplKSBjb25zdDsKIAogICAgIC8vIEhlbHBl
cnMgZm9yIGFkanVzdGluZyBhcHBlYXJhbmNlIGFuZCBmb3IgcGFpbnRpbmcKICAgICBjb25zdCBJ
bnRTaXplKiBjaGVja2JveFNpemVzKCkgY29uc3Q7CkBAIC0xNjUsNyArMTY1LDcgQEAgcHJpdmF0
ZToKICAgICBjb25zdCBJbnRTaXplKiByYWRpb1NpemVzKCkgY29uc3Q7CiAgICAgY29uc3QgaW50
KiByYWRpb01hcmdpbnMoTlNDb250cm9sU2l6ZSkgY29uc3Q7CiAKLSAgICB2b2lkIHNldEJ1dHRv
blBhZGRpbmdGcm9tQ29udHJvbFNpemUoUmVuZGVyU3R5bGUqLCBOU0NvbnRyb2xTaXplKSBjb25z
dDsKKyAgICB2b2lkIHNldEJ1dHRvblBhZGRpbmdGcm9tQ29udHJvbFNpemUoUmVuZGVyU3R5bGUm
LCBOU0NvbnRyb2xTaXplKSBjb25zdDsKICAgICBjb25zdCBJbnRTaXplKiBidXR0b25TaXplcygp
IGNvbnN0OwogICAgIGNvbnN0IGludCogYnV0dG9uTWFyZ2lucyhOU0NvbnRyb2xTaXplKSBjb25z
dDsKIApAQCAtMTc4LDcgKzE3OCw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgSW50U2l6ZSogc2Vh
cmNoRmllbGRTaXplcygpIGNvbnN0OwogICAgIGNvbnN0IEludFNpemUqIGNhbmNlbEJ1dHRvblNp
emVzKCkgY29uc3Q7CiAgICAgY29uc3QgSW50U2l6ZSogcmVzdWx0c0J1dHRvblNpemVzKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAg
ICB2b2lkIHNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCiAgICAgVGhl
bWVDb250cm9sU3RhdGUgZGV0ZXJtaW5lU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Q7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAko
cmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkxLDcgKzI5MSw3IEBAIFN0cmluZyBSZW5kZXJU
aGVtZVdpbjo6ZXh0cmFRdWlya3NTdHlsZVMKICAgICByZXR1cm4gU3RyaW5nKHRoZW1lV2luUXVp
cmtzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lV2luUXVpcmtzVXNlckFnZW50U3R5
bGVTaGVldCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpzdXBwb3J0c0hvdmVyKGNvbnN0
IFJlbmRlclN0eWxlKikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnN1cHBvcnRzSG92ZXIo
Y29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdAogewogICAgIC8vIFRoZSBDbGFzc2ljLzJrIGxvb2sg
aGFzIG5vIGhvdmVyIGVmZmVjdHMuCiAgICAgcmV0dXJuIGhhdmVUaGVtZTsKQEAgLTQyOSw5ICs0
MjksOSBAQCBib29sIFJlbmRlclRoZW1lV2luOjpzdXBwb3J0c0ZvY3VzKENvbnRyCiAgICAgfQog
fQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0Citib29sIFJlbmRlclRoZW1lV2luOjpzdXBwb3J0c0ZvY3VzUmlu
Zyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN1cHBvcnRz
Rm9jdXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7CisgICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5
bGUuYXBwZWFyYW5jZSgpKTsKIH0KIAogdW5zaWduZWQgUmVuZGVyVGhlbWVXaW46OmRldGVybWlu
ZUNsYXNzaWNTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmIG8sIENvbnRyb2xTdWJQYXJ0IHN1YlBh
cnQpCkBAIC03MzAsMTMgKzczMCwxMyBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludEJ1dHRv
bihjb25zdCBSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjph
ZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2lu
OjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgaW50IHdpZHRo
ID0gOjpHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYVlNDUk9MTCk7CiAgICAgaWYgKHdpZHRoIDw9IDAp
CiAgICAgICAgIHdpZHRoID0gMTc7IC8vIFZpc3RhJ3MgZGVmYXVsdC4KLSAgICBzdHlsZS0+c2V0
V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRNaW5XaWR0aChMZW5n
dGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhl
ZCkpOworICAgIHN0eWxlLnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKIH0KIAog
Ym9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCkBAIC03NTUsMjkg
Kzc1NSwyOSBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludElubmVyU3BpbkJ1dHRvCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjpzZXRDaGVja2JveFNpemUo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6c2V0Q2hlY2ti
b3hTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgd2lkdGgg
YW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRv
LgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUt
PmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09y
QXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gRklYTUU6ICBBIGhhcmQtY29kZWQgc2l6ZSBvZiAxMyBpcyB1c2VkLiAgVGhpcyBpcyB3
cm9uZyBidXQgbmVjZXNzYXJ5IGZvciBub3cuICBJdCBtYXRjaGVzIEZpcmVmb3guCiAgICAgLy8g
QXQgZGlmZmVyZW50IERQSSBzZXR0aW5ncyBvbiBXaW5kb3dzLCBxdWVyeWluZyB0aGUgdGhlbWUg
Z2l2ZXMgeW91IGEgbGFyZ2VyIHNpemUgdGhhdCBhY2NvdW50cyBmb3IKICAgICAvLyB0aGUgaGln
aGVyIERQSS4gIFVudGlsIG91ciBlbnRpcmUgZW5naW5lIGhvbm9ycyBhIERQSSBzZXR0aW5nIG90
aGVyIHRoYW4gOTYsIHdlIGNhbid0IHJlbHkgb24gdGhlIHRoZW1lJ3MKICAgICAvLyBtZXRyaWNz
LgotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQotICAgICAgICBz
dHlsZS0+c2V0V2lkdGgoTGVuZ3RoKDEzLCBGaXhlZCkpOwotICAgIGlmIChzdHlsZS0+aGVpZ2h0
KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKDEzLCBGaXhlZCkp
OworICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0
eWxlLnNldFdpZHRoKExlbmd0aCgxMywgRml4ZWQpKTsKKyAgICBpZiAoc3R5bGUuaGVpZ2h0KCku
aXNBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoMTMsIEZpeGVkKSk7CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJU
aGVtZVdpbjo6cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWlu
dEluZm8mIGksIGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKLSAgICBkcmF3Q29udHJvbChpLmNvbnRl
eHQsICBvLCB0ZXh0RmllbGRUaGVtZSgpLCBnZXRUaGVtZURhdGEobyksIHIpOworICAgIGRyYXdD
b250cm9sKGkuY29udGV4dCwgIG8sIHRleHRGaWVsZFRoZW1lKCksIGdldFRoZW1lRGF0YShvKSwg
SW50UmVjdChyKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lV2lu
OjpwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZVdp
bjo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIEhBTkRMRSB0
aGVtZTsKICAgICBpbnQgcGFydDsKQEAgLTc5Miw0NiArNzkyLDQ2IEBAIGJvb2wgUmVuZGVyVGhl
bWVXaW46OnBhaW50TWVudUxpc3QoY29uc3QKICAgICAgICAgcGFydCA9IFRGUF9URVhURklFTEQ7
CiAgICAgfQogCi0gICAgZHJhd0NvbnRyb2wocGFpbnRJbmZvLmNvbnRleHQsIHJlbmRlcmVyLCB0
aGVtZSwgVGhlbWVEYXRhKHBhcnQsIGRldGVybWluZVN0YXRlKHJlbmRlcmVyKSksIHJlY3QpOwor
ICAgIGRyYXdDb250cm9sKHBhaW50SW5mby5jb250ZXh0LCByZW5kZXJlciwgdGhlbWUsIFRoZW1l
RGF0YShwYXJ0LCBkZXRlcm1pbmVTdGF0ZShyZW5kZXJlcikpLCBJbnRSZWN0KHJlY3QpKTsKICAg
ICAKICAgICByZXR1cm4gcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKHJlbmRlcmVyLCBw
YWludEluZm8sIEZsb2F0UmVjdChyZWN0KSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFk
anVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0
TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmIGUpIGNvbnN0CiB7Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Cisg
ICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKICAgICBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0
eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1
c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRl
clN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSkgY29uc3QKIHsKICAgICAvLyBUaGVzZSBhcmUgdGhl
IHBhZGRpbmdzIG5lZWRlZCB0byBwbGFjZSB0aGUgdGV4dCBjb3JyZWN0bHkgaW4gdGhlIDxzZWxl
Y3Q+IGJveAogICAgIGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdUb3AgICAgPSAyOwotICAg
IGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdSaWdodCAgPSBzdHlsZS0+ZGlyZWN0aW9uKCkg
PT0gTFRSID8gNCArIGRyb3BEb3duQnV0dG9uV2lkdGggOiA0OworICAgIGNvbnN0IGludCBkcm9w
RG93bkJveFBhZGRpbmdSaWdodCAgPSBzdHlsZS5kaXJlY3Rpb24oKSA9PSBMVFIgPyA0ICsgZHJv
cERvd25CdXR0b25XaWR0aCA6IDQ7CiAgICAgY29uc3QgaW50IGRyb3BEb3duQm94UGFkZGluZ0Jv
dHRvbSA9IDI7Ci0gICAgY29uc3QgaW50IGRyb3BEb3duQm94UGFkZGluZ0xlZnQgICA9IHN0eWxl
LT5kaXJlY3Rpb24oKSA9PSBMVFIgPyA0IDogNCArIGRyb3BEb3duQnV0dG9uV2lkdGg7CisgICAg
Y29uc3QgaW50IGRyb3BEb3duQm94UGFkZGluZ0xlZnQgICA9IHN0eWxlLmRpcmVjdGlvbigpID09
IExUUiA/IDQgOiA0ICsgZHJvcERvd25CdXR0b25XaWR0aDsKICAgICAvLyBUaGUgPHNlbGVjdD4g
Ym94IG11c3QgYmUgYXQgbGVhc3QgMTJweCBoaWdoIGZvciB0aGUgYnV0dG9uIHRvIHJlbmRlciBu
aWNlbHkgb24gV2luZG93cwogICAgIGNvbnN0IGludCBkcm9wRG93bkJveE1pbkhlaWdodCA9IDEy
OwogICAgIAogICAgIC8vIFBvc2l0aW9uIHRoZSB0ZXh0IGNvcnJlY3RseSB3aXRoaW4gdGhlIHNl
bGVjdCBib3ggYW5kIG1ha2UgdGhlIGJveCB3aWRlIGVub3VnaCB0byBmaXQgdGhlIGRyb3Bkb3du
IGJ1dHRvbgotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChkcm9wRG93bkJveFBhZGRp
bmdUb3AsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgoZHJvcERv
d25Cb3hQYWRkaW5nUmlnaHQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20o
TGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
UGFkZGluZ0xlZnQoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ0xlZnQsIEZpeGVkKSk7CisgICAg
c3R5bGUuc2V0UGFkZGluZ1RvcChMZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5nVG9wLCBGaXhlZCkp
OworICAgIHN0eWxlLnNldFBhZGRpbmdSaWdodChMZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5nUmln
aHQsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoZHJvcERvd25C
b3hQYWRkaW5nQm90dG9tLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0
aChkcm9wRG93bkJveFBhZGRpbmdMZWZ0LCBGaXhlZCkpOwogCiAgICAgLy8gSGVpZ2h0IGlzIGxv
Y2tlZCB0byBhdXRvCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworICAgIHN0
eWxlLnNldEhlaWdodChMZW5ndGgoQXV0bykpOwogCiAgICAgLy8gQ2FsY3VsYXRlIG91ciBtaW4t
aGVpZ2h0Ci0gICAgaW50IG1pbkhlaWdodCA9IHN0eWxlLT5mb250TWV0cmljcygpLmhlaWdodCgp
OworICAgIGludCBtaW5IZWlnaHQgPSBzdHlsZS5mb250TWV0cmljcygpLmhlaWdodCgpOwogICAg
IG1pbkhlaWdodCA9IG1heChtaW5IZWlnaHQsIGRyb3BEb3duQm94TWluSGVpZ2h0KTsKIAotICAg
IHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQpKTsKKyAgICBzdHls
ZS5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQpKTsKIAotICAgIHN0eWxlLT5z
ZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBzdHls
ZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKICAgICAK
ICAgICAvLyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCi0gICAgc3R5bGUtPnNldFdoaXRl
U3BhY2UoUFJFKTsKKyAgICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiB9CiAKIGJvb2wgUmVu
ZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQpAQCAtODg2LDE1ICs4ODYsMTUgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFp
bnRTbGlkZXJUaHVtYihjbwogY29uc3QgaW50IHNsaWRlclRodW1iV2lkdGggPSA3OwogY29uc3Qg
aW50IHNsaWRlclRodW1iSGVpZ2h0ID0gMTU7CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVz
dFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0CiB7Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBl
YXJhbmNlKCk7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLmFwcGVhcmFuY2UoKTsKICAg
ICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgewotICAgICAgICBzdHlsZS0+
c2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOwotICAgICAgICBzdHls
ZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOworICAgICAgICBz
dHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CisgICAgICAg
IHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKICAgICB9
IGVsc2UgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgewotICAgICAgICBz
dHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7Ci0gICAgICAg
IHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOworICAg
ICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKKyAg
ICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsK
ICAgICB9CiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoQ0cpCiAgICAgZWxzZSBpZiAocGFydCA9
PSBNZWRpYVNsaWRlclRodW1iUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQ
YXJ0KSAKQEAgLTkwNywxNiArOTA3LDE2IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2Vh
cmNoRmllbGQoY28KICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAg
ICAgLy8gT3ZlcnJpZGUgcGFkZGluZ1NpemUgdG8gbWF0Y2ggQXBwS2l0IHRleHQgcG9zaXRpb25p
bmcuCiAgICAgY29uc3QgaW50IHBhZGRpbmcgPSAxOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVm
dChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExl
bmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChw
YWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRk
aW5nLCBGaXhlZCkpOwotICAgIGlmIChlICYmIGUtPmZvY3VzZWQoKSAmJiBlLT5kb2N1bWVudCgp
LmZyYW1lKCktPnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpKQotICAgICAgICBzdHls
ZS0+c2V0T3V0bGluZU9mZnNldCgtMik7CisgICAgc3R5bGUuc2V0UGFkZGluZ0xlZnQoTGVuZ3Ro
KHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRk
aW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZp
eGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKKyAgICBpZiAoZS5mb2N1c2VkKCkgJiYgZS5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlv
bigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpKQorICAgICAgICBzdHlsZS5zZXRPdXRsaW5lT2Zmc2V0
KC0yKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQpAQCAtOTQ0LDMwICs5NDQsMzAgQEAgYm9vbCBSZW5kZXJUaGVtZVdp
bjo6cGFpbnRTZWFyY2hGaWVsZENhbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVXaW46OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgLy8gU2NhbGUgdGhl
IGJ1dHRvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKLSAgICBmbG9hdCBmb250U2NhbGUg
PSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAgICBm
bG9hdCBmb250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4
ZWxTaXplOwogICAgIGludCBjYW5jZWxCdXR0b25TaXplID0gbHJvdW5kZihtaW4obWF4KG1pbkNh
bmNlbEJ1dHRvblNpemUsIGRlZmF1bHRDYW5jZWxCdXR0b25TaXplICogZm9udFNjYWxlKSwgbWF4
Q2FuY2VsQnV0dG9uU2l6ZSkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0
dG9uU2l6ZSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0
b25TaXplLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChjYW5jZWxCdXR0b25T
aXplLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6
ZSwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRE
ZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGREZWNv
cmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1l
bnQmKSBjb25zdAogewogICAgIEludFNpemUgZW1wdHlTaXplKDEsIDExKTsKLSAgICBzdHlsZS0+
c2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKGVtcHR5U2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5z
ZXRXaWR0aChMZW5ndGgoZW1wdHlTaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0
SGVpZ2h0KExlbmd0aChlbXB0eVNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAog
ewogICAgIC8vIFNjYWxlIHRoZSBkZWNvcmF0aW9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6
ZQotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRy
b2xGb250UGl4ZWxTaXplOworICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLmZvbnRTaXplKCkg
LyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7CiAgICAgaW50IG1hZ25pZmllclNpemUgPSBs
cm91bmRmKG1pbihtYXgobWluU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUsIGRlZmF1
bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSAqIGZvbnRTY2FsZSksIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TaXplKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJTaXplLCBG
aXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllclNpemUsIEZpeGVk
KSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKG1hZ25pZmllclNpemUsIEZpeGVkKSk7Cisg
ICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOwogfQogCiBi
b29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCkBAIC05OTMsMTUgKzk5MywxNSBAQCBib29sIFJlbmRlclRoZW1lV2luOjpw
YWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVX
aW46OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIFNjYWxlIHRoZSBi
dXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplCi0gICAgZmxvYXQgZm9udFNjYWxlID0g
c3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7CisgICAgZmxv
YXQgZm9udFNjYWxlID0gc3R5bGUuZm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVs
U2l6ZTsKICAgICBpbnQgbWFnbmlmaWVySGVpZ2h0ID0gbHJvdW5kZihtaW4obWF4KG1pblNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplLCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblNpemUgKiBmb250U2NhbGUpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWF4U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpKTsKICAgICBpbnQgbWFn
bmlmaWVyV2lkdGggPSBscm91bmRmKG1hZ25pZmllckhlaWdodCAqIGRlZmF1bHRTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25XaWR0aCAvIGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U2l6ZSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJXaWR0aCwgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJIZWlnaHQsIEZpeGVkKSk7
CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKG1hZ25pZmllcldpZHRoLCBGaXhlZCkpOworICAg
IHN0eWxlLnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVySGVpZ2h0LCBGaXhlZCkpOwogfQogCiBi
b29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQpAQCAtMTE1Nyw5ICsxMTU3LDkgQEAgU3RyaW5nIFJlbmRlclRoZW1lV2luOjptZWRpYUNv
bnRyb2xzU2NyaQogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKLXZvaWQgUmVu
ZGVyVGhlbWVXaW46OmFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RNZXRl
clN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25z
dAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94
U2hhZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRoZW1lV2luOjpzdXBwb3J0c01ldGVy
KENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0CkBAIC0xMTcyLDcgKzExNzIsNyBAQCBib29sIFJlbmRl
clRoZW1lV2luOjpzdXBwb3J0c01ldGVyKENvbnRyCiAgICAgfQogfQogCi1JbnRTaXplIFJlbmRl
clRoZW1lV2luOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJ
bnRSZWN0JiBib3VuZHMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lV2luOjptZXRlclNpemVG
b3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXImLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7CiB9CkBAIC0xMTgyLDcgKzExODIsNyBAQCBi
b29sIFJlbmRlclRoZW1lV2luOjpwYWludE1ldGVyKGNvbnN0IFJlCiAgICAgaWYgKCFyZW5kZXJP
YmplY3QuaXNNZXRlcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEhUTUxNZXRlckVs
ZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKCZyZW5kZXJPYmplY3QpLT5tZXRlckVsZW1l
bnQoKTsKKyAgICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gdG9SZW5kZXJNZXRlcihyZW5k
ZXJPYmplY3QpLm1ldGVyRWxlbWVudCgpOwogCiAgICAgVGhlbWVEYXRhIHRoZW1lID0gZ2V0VGhl
bWVEYXRhKHJlbmRlck9iamVjdCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZVdpbi5oCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNzggKzU1LDc4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYVF1aXJrc1N0eWxlU2hlZXQoKTsKIAog
ICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxseSBj
YXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCi0gICAgdmlydHVhbCBib29sIHN1cHBv
cnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmly
dHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0
OwotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcigpIGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgQ29sb3Ig
cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgLy8gU3lzdGVtIGZvbnRzLgotICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KENT
U1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3Igc3lz
dGVtQ29sb3IoQ1NTVmFsdWVJRCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQo
Q1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBDb2xvciBzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZp
cnR1YWwgYm9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNr
Ym94KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByKSBvdmVycmlkZQogICAgIHsgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYgbywg
Y29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorICAgIHZpcnR1YWwgYm9vbCBw
YWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByKSBvdmVycmlkZQogICAgIHsgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIp
OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CisgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0IG92ZXJyaWRlCiAgICAgeyByZXR1cm4gc2V0Q2hlY2tib3hTaXplKHN0eWxlKTsgfQogCi0g
ICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNw
aW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlk
ZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBh
aW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEo
Y29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEZsb2F0UmVjdCYgcikgb3ZlcnJpZGUKICAgICB7
IHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0
QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25E
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNr
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVz
dFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50
U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNp
emUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgcG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CisgICAgdmlydHVhbCBib29sIHBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmll
bGREZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5n
ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCkgb3ZlcnJpZGU7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHsgfQorICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3Qg
b3ZlcnJpZGUgeyB9CiAKICAgICBzdGF0aWMgdm9pZCBzZXRXZWJLaXRJc0JlaW5nVW5sb2FkZWQo
KTsKIAogICAgIHN0YXRpYyBTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlKENGU3RyaW5n
UmVmIG5hbWUsIENGU3RyaW5nUmVmIHR5cGUpOwogCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRz
Rm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7CiAKICNp
ZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCBTdHJpbmcgbWVkaWFDb250cm9sc1N0eWxlU2hl
ZXQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFN0cmluZyBtZWRpYUNvbnRyb2xzU2NyaXB0KCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBTdHJpbmcgbWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKSBv
dmVycmlkZSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFN0cmluZyBtZWRpYUNvbnRyb2xzU2NyaXB0
KCkgb3ZlcnJpZGUgb3ZlcnJpZGU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5U
KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRl
cihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xk
ZXJXaGVuRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAKIHByaXZhdGU6CiAgICAgZW51bSBDb250cm9sU3ViUGFydCB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233766</attachid>
            <date>2014-06-24 16:59:40 -0700</date>
            <delta_ts>2014-06-24 17:36:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134261-20140624165919.patch</filename>
            <type>text/plain</type>
            <size>211059</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1MyBAQAorMjAxNC0wNi0yNCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorICAgICAgICAgICAgQW5kIHBl
YXZvQG91dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5jb20+CisKKyAgICAgICAgVXNlIHJlZmVy
ZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycyBpbiBSZW5kZXJUaGVtZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDI2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgor
ICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkSGF2ZVNwaW5CdXR0b24pOgorICAgICAgICAqIGh0
bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZWZs
L1JlbmRlclRoZW1lRWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTaXplQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6c3Vw
cG9ydHNGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFkanVz
dFNsaWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0Q2hlY2tib3hTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFk
anVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFk
anVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVFZmw6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9S
ZW5kZXJUaGVtZUVmbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1Jpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTZWFyY2hGaWVs
ZEljb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpib3JkZXJSYWRpaUZyb21TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVGh1bWIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uUmVwZWF0SW50
ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGsuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGsyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFRvZ2dsZVNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lR3RrOjpjb21ib0JveEFycm93U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzZXRUb2dnbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpz
ZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnNldFJh
ZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRDb21ib0JveE1ldHJpY3MpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRp
bmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQ
YWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RT
bGlkZXJUaHVtYlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVz
dElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxp
c3Q6OmFkanVzdElubmVyU3R5bGUpOgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjptZW51U3R5
bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZXRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZXRlcjo6dXBkYXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1ldGVyOjpjb21wdXRlTG9naWNhbEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBhaW50
T3V0bGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjp1cGRhdGVBbmltYXRpb25TdGF0ZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjphZGp1c3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXND
b250cm9sU3R5bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzdXBwb3J0c0Zv
Y3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RSYWRpb1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjphZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1ldGVyU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6Om1ldGVyU2l6ZUZvckJvdW5kcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVz
c0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2hvdWxkSGF2ZVNwaW5CdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUcmFja1N0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNl
YXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
U3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnN1cHBvcnRzSG92ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6Om1pbmltdW1NZW51TGlzdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjpwb3B1cE1lbnVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpzZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnNldFJhZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2V0QnV0dG9u
U2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OmFkanVzdENoZWNrYm94U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlP
Uzo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSU9TOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6c2V0QnV0dG9uU2l6ZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmlzQ29u
dHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNp
emVGb3JGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzaXplRm9yRm9u
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvclN5c3RlbUZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFNpemVGcm9tRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9sU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpemVGb3JTeXN0ZW1G
b250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEFyZWFT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXplRm9yQm91bmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1ldGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpsZXZlbEluZGljYXRvckZvcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjptaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlvblJlcGVhdEludGVydmFs
Rm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cE1lbnVTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNo
RmllbGREZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVy
VGh1bWJTaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmlzQ29udHJvbFN0eWxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YmFzZWxpbmVQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFNpemVGb3JGb250KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpzaXplRm9yRm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6c2l6ZUZvclN5c3RlbUZvbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnNldFNpemVGcm9tRm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Rm9udEZyb21Db250cm9sU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFNpemVGb3JTeXN0
ZW1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpzZXRDaGVja2Jv
eFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnNldFJhZGlvU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6c2V0QnV0dG9uUGFkZGlu
Z0Zyb21Db250cm9sU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6
YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6
OnNldEJ1dHRvblNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFk
anVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJp
OjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Fm
YXJpOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
U2FmYXJpOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRv
bSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6bWluaW11
bU1lbnVMaXN0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRq
dXN0U2xpZGVyVGh1bWJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFy
aTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
U2FmYXJpOjpzZXRTZWFyY2hGaWVsZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1ldGVyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6Om1ldGVyU2l6ZUZvckJv
dW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZXRlcik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
V2luOjpzdXBwb3J0c0hvdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpz
dXBwb3J0c0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRq
dXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVX
aW46OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6
cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50
TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdE1lbnVM
aXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdE1lbnVM
aXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVz
dFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVdpbjo6YWRqdXN0TWV0ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVdpbjo6bWV0ZXJTaXplRm9yQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lV2luOjpwYWludE1ldGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVX
aW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludENoZWNrYm94KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludFJhZGlvKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpzZXRSYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVXaW46OnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdEJ1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RUZXh0RmllbGRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRqdXN0VGV4dEFyZWFTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6c2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hl
bkZvY3VzZWQpOgorCiAyMDE0LTA2LTI0ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29t
PgogCiAgICAgICAgIFtNU0VdW01hY10gVW5jYXVnaHQgZXhjZXB0aW9uIHdoZW4gZGVhbGxvY2F0
aW5nIEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMzIsOCArMTMzMiwxMCBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlCiAgICAgfQogCiAgICAgLy8gTGV0
IHRoZSB0aGVtZSBhbHNvIGhhdmUgYSBjcmFjayBhdCBhZGp1c3RpbmcgdGhlIHN0eWxlLgotICAg
IGlmIChzdHlsZS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0
VGhlbWUoKS0+YWRqdXN0U3R5bGUoKnRoaXMsIHN0eWxlLCBlLCBtX3N0YXRlLmhhc1VBQXBwZWFy
YW5jZSgpLCBtX3N0YXRlLmJvcmRlckRhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSgpLCBt
X3N0YXRlLmJhY2tncm91bmRDb2xvcigpKTsKKyAgICBpZiAoc3R5bGUuaGFzQXBwZWFyYW5jZSgp
KSB7CisgICAgICAgIEFTU0VSVChlKTsKKyAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLT5hZGp1c3RTdHlsZSgqdGhpcywgc3R5bGUsICplLCBtX3N0YXRlLmhhc1VBQXBwZWFyYW5j
ZSgpLCBtX3N0YXRlLmJvcmRlckRhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSgpLCBtX3N0
YXRlLmJhY2tncm91bmRDb2xvcigpKTsKKyAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0
LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0eWxlLgogICAgIGlmIChz
dHlsZS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzIsNyArMjMyLDcgQEAgYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVTcGluQgog
ewogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQoKS5kb2N1bWVudCgpOwogICAgIFJl
ZlB0cjxSZW5kZXJUaGVtZT4gdGhlbWUgPSBkb2N1bWVudC5wYWdlKCkgPyAmZG9jdW1lbnQucGFn
ZSgpLT50aGVtZSgpIDogUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpOwotICAgIHJldHVybiB0
aGVtZS0+c2hvdWxkSGF2ZVNwaW5CdXR0b24oJmVsZW1lbnQoKSk7CisgICAgcmV0dXJuIHRoZW1l
LT5zaG91bGRIYXZlU3BpbkJ1dHRvbihlbGVtZW50KCkpOwogfQogCiB2b2lkIFRleHRGaWVsZElu
cHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDM3MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDggKzk0LDEwIEBAIHZvaWQgUmVuZGVyU2xpZGVyVGh1bWI6OnVw
ZGF0ZUFwcGVhcmFuY2UKICAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhVm9sdW1l
U2xpZGVyVGh1bWJQYXJ0KTsKICAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgp
ID09IE1lZGlhRnVsbFNjcmVlblZvbHVtZVNsaWRlclBhcnQpCiAgICAgICAgIHN0eWxlKCkuc2V0
QXBwZWFyYW5jZShNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwotICAgIGlm
IChzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgdGhlbWUoKS5hZGp1c3RTbGlkZXJU
aHVtYlNpemUoJnN0eWxlKCksIGVsZW1lbnQoKSk7CisgICAgaWYgKHN0eWxlKCkuaGFzQXBwZWFy
YW5jZSgpKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50KCkpOworICAgICAgICB0aGVtZSgpLmFk
anVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSgpLCAqZWxlbWVudCgpKTsKKyAgICB9CiB9CiAKIGJv
b2wgUmVuZGVyU2xpZGVyVGh1bWI6OmlzU2xpZGVyVGh1bWIoKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwCShyZXZpc2lvbiAx
NzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMjcgKzEyNSwyNyBAQCBzdGF0aWMgYm9vbCBzZXRTb3Vy
Y2VHcm91cEZvckVkamVPYmplY3QoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVFZmw6OmFkanVzdFNpemVDb25zdHJhaW50cyhSZW5kZXJTdHlsZSogc3R5bGUsIEZvcm1U
eXBlIHR5cGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTaXplQ29uc3RyYWlu
dHMoUmVuZGVyU3R5bGUmIHN0eWxlLCBGb3JtVHlwZSB0eXBlKSBjb25zdAogewogICAgIGxvYWRU
aGVtZUlmTmVlZGVkKCk7CiAKICAgICAvLyBUaGVzZSBhcmUgYWx3YXlzIHZhbGlkLCBldmVuIGlm
IG5vIHRoZW1lIGNvdWxkIGJlIGxvYWRlZC4KICAgICBjb25zdCBUaGVtZVBhcnREZXNjKiBkZXNj
ID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KXR5cGU7CiAKLSAgICBpZiAoc3R5bGUtPm1pbldpZHRo
KCkuaXNJbnRyaW5zaWMoKSkKLSAgICAgICAgc3R5bGUtPnNldE1pbldpZHRoKGRlc2MtPm1pbi53
aWR0aCgpKTsKLSAgICBpZiAoc3R5bGUtPm1pbkhlaWdodCgpLmlzSW50cmluc2ljKCkpCi0gICAg
ICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKLQotICAgIGlmIChk
ZXNjLT5tYXgud2lkdGgoKS52YWx1ZSgpID4gMCAmJiBzdHlsZS0+bWF4V2lkdGgoKS5pc0ludHJp
bnNpY09yQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0TWF4V2lkdGgoZGVzYy0+bWF4LndpZHRo
KCkpOwotICAgIGlmIChkZXNjLT5tYXguaGVpZ2h0KCkudmFsdWUoKSA+IDAgJiYgc3R5bGUtPm1h
eEhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRNYXhIZWln
aHQoZGVzYy0+bWF4LmhlaWdodCgpKTsKLQotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKGRlc2Mt
PnBhZGRpbmcudG9wKCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKGRlc2MtPnBhZGRp
bmcuYm90dG9tKCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChkZXNjLT5wYWRkaW5nLmxl
ZnQoKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChkZXNjLT5wYWRkaW5nLnJpZ2h0KCkp
OworICAgIGlmIChzdHlsZS5taW5XaWR0aCgpLmlzSW50cmluc2ljKCkpCisgICAgICAgIHN0eWxl
LnNldE1pbldpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKKyAgICBpZiAoc3R5bGUubWluSGVpZ2h0
KCkuaXNJbnRyaW5zaWMoKSkKKyAgICAgICAgc3R5bGUuc2V0TWluSGVpZ2h0KGRlc2MtPm1pbi5o
ZWlnaHQoKSk7CisKKyAgICBpZiAoZGVzYy0+bWF4LndpZHRoKCkudmFsdWUoKSA+IDAgJiYgc3R5
bGUubWF4V2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHlsZS5zZXRNYXhX
aWR0aChkZXNjLT5tYXgud2lkdGgoKSk7CisgICAgaWYgKGRlc2MtPm1heC5oZWlnaHQoKS52YWx1
ZSgpID4gMCAmJiBzdHlsZS5tYXhIZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAg
ICBzdHlsZS5zZXRNYXhIZWlnaHQoZGVzYy0+bWF4LmhlaWdodCgpKTsKKworICAgIHN0eWxlLnNl
dFBhZGRpbmdUb3AoZGVzYy0+cGFkZGluZy50b3AoKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0Jv
dHRvbShkZXNjLT5wYWRkaW5nLmJvdHRvbSgpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nTGVmdChk
ZXNjLT5wYWRkaW5nLmxlZnQoKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ1JpZ2h0KGRlc2MtPnBh
ZGRpbmcucmlnaHQoKSk7CiB9CiAKIHN0YXRpYyBib29sIGlzRm9ybUVsZW1lbnRUb29MYXJnZVRv
RGlzcGxheShjb25zdCBJbnRTaXplJiBlbGVtZW50U2l6ZSkKQEAgLTM0Niw5ICszNDYsOSBAQCB2
b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZShFCiAgICAgfQogfQogCi1ib29s
IFJlbmRlclRoZW1lRWZsOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
LCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwg
Y29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6
OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRh
dGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFj
a2dyb3VuZENvbG9yKSBjb25zdAogewotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9s
U3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcikgfHwgc3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQ7CisgICAgcmV0dXJuIFJlbmRl
clRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dy
b3VuZENvbG9yKSB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0Owog
fQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRoZW1lUGFydChjb25zdCBSZW5kZXJPYmpl
Y3QmIG9iamVjdCwgRm9ybVR5cGUgdHlwZSwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQpAQCAtNjI3LDkgKzYyNyw5IEBAIHN0YXRpYyBib29sIHN1cHBvcnRzRm9j
dXMoQ29udHJvbFBhcnQgYXAKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnN1cHBv
cnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2Jvb2wgUmVuZGVy
VGhlbWVFZmw6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29u
c3QKIHsKLSAgICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS0+YXBwZWFyYW5jZSgpKTsKKyAg
ICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS5hcHBlYXJhbmNlKCkpOwogfQogCiBib29sIFJl
bmRlclRoZW1lRWZsOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG9i
amVjdCkgY29uc3QKQEAgLTY5OSwyNiArNjk5LDI2IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBh
aW50U2xpZGVyVHJhY2soY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTbGlk
ZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQm
KSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUu
c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RT
bGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclRoZW1l
OjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsK
LSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRv
dyhudWxscHRyKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVGh1bWJT
aXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
RWZsOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50Jikg
Y29uc3QKIHsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAg
ICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFyYW5jZSgpOwogICAgIGlmIChwYXJ0ID09
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5n
dGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldFdpZHRo
KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0SGVp
Z2h0KExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOwogICAgIH0gZWxzZSBpZiAocGFy
dCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0
aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhl
aWdodChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNl
dFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOworICAgICAgICBzdHlsZS5z
ZXRIZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOwogICAgIH0KIH0KIApA
QCAtNzY2LDcgKzc2Niw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2xpZGVyVGh1bWIo
Y28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdENo
ZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0
Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYgZWxl
bWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNfY2Fz
dDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5h
ZGp1c3RDaGVja2JveFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKQEAgLTc3
NSwxMyArNzc1LDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdENoZWNrYm94U3R5bGUK
IAogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgQ2hlY2tCb3gpOwogCi0gICAgc3R5
bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKIAogICAgIGNvbnN0
IFRoZW1lUGFydERlc2MqIGRlc2MgPSBtX3BhcnREZXNjcyArIChzaXplX3QpQ2hlY2tCb3g7Ci0g
ICAgaWYgKHN0eWxlLT53aWR0aCgpLnZhbHVlKCkgPCBkZXNjLT5taW4ud2lkdGgoKS52YWx1ZSgp
KQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoZGVzYy0+bWluLndpZHRoKCkpOwotICAgIGlmIChz
dHlsZS0+aGVpZ2h0KCkudmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgpKQotICAg
ICAgICBzdHlsZS0+c2V0SGVpZ2h0KGRlc2MtPm1pbi5oZWlnaHQoKSk7CisgICAgaWYgKHN0eWxl
LndpZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1pbi53aWR0aCgpLnZhbHVlKCkpCisgICAgICAgIHN0
eWxlLnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKKyAgICBpZiAoc3R5bGUuaGVpZ2h0KCku
dmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgpKQorICAgICAgICBzdHlsZS5zZXRI
ZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFp
bnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtNzg5LDcgKzc4OSw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVFZmw6OnBhaW50Q2hlY2tib3goY29uc3QKICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQo
b2JqZWN0LCBDaGVja0JveCwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6
OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYg
ZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgp
KS5hZGp1c3RSYWRpb1N0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKQEAgLTc5
OCwxMyArNzk4LDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFJhZGlvU3R5bGUoU3QK
IAogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgUmFkaW9CdXR0b24pOwogCi0gICAg
c3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKIAogICAgIGNv
bnN0IFRoZW1lUGFydERlc2MqIGRlc2MgPSBtX3BhcnREZXNjcyArIChzaXplX3QpUmFkaW9CdXR0
b247Ci0gICAgaWYgKHN0eWxlLT53aWR0aCgpLnZhbHVlKCkgPCBkZXNjLT5taW4ud2lkdGgoKS52
YWx1ZSgpKQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoZGVzYy0+bWluLndpZHRoKCkpOwotICAg
IGlmIChzdHlsZS0+aGVpZ2h0KCkudmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgp
KQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KGRlc2MtPm1pbi5oZWlnaHQoKSk7CisgICAgaWYg
KHN0eWxlLndpZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1pbi53aWR0aCgpLnZhbHVlKCkpCisgICAg
ICAgIHN0eWxlLnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKKyAgICBpZiAoc3R5bGUuaGVp
Z2h0KCkudmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgpKQorICAgICAgICBzdHls
ZS5zZXRIZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVm
bDo6cGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtODEyLDcgKzgxMiw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVFZmw6OnBhaW50UmFkaW8oY29uc3QgUmUKICAgICByZXR1cm4gcGFpbnRUaGVtZVBh
cnQob2JqZWN0LCBSYWRpb0J1dHRvbiwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAoIW1f
cGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7CiAgICAgICAg
IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkt
PnRoZW1lKCkpLmFkanVzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50
KTsKQEAgLTgyMCw3ICs4MjAsNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RCdXR0b25T
dHlsZShTCiAgICAgfQogCiAgICAgLy8gYWRqdXN0U2l6ZUNvbnN0cmFpbnMgY2FuIG1ha2UgU3F1
YXJlQnV0dG9uUGFydCdzIHNpemUgd3JvbmcgKGJ5IGFkanVzdGluZyBwYWRkaW5ncyksIHNvIGNh
bGwgaXQgb25seSBmb3IgUHVzaEJ1dHRvblBhcnQgYW5kIEJ1dHRvblBhcnQKLSAgICBpZiAoc3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgp
ID09IEJ1dHRvblBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9u
UGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gQnV0dG9uUGFydCkKICAgICAgICAgYWRqdXN0
U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBCdXR0b24pOwogfQogCkBAIC04MjksMTcgKzgyOSwxNyBA
QCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludEJ1dHRvbihjb25zdCBSCiAgICAgcmV0dXJuIHBh
aW50VGhlbWVQYXJ0KG9iamVjdCwgQnV0dG9uLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lRWZsOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7
CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQo
KS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5
bGUsIGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFkanVzdFNpemVDb25z
dHJhaW50cyhzdHlsZSwgQ29tYm9Cb3gpOwotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAg
IHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKKyAg
ICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdo
dChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhl
bWVFZmw6OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgaW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtODY4LDE0ICs4NjgsMTQg
QEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIHJldHVybiBw
YWludE1lbnVMaXN0KG9iamVjdCwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVF
Zmw6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAo
IW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7CiAgICAg
ICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdl
KCktPnRoZW1lKCkpLmFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBl
bGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXplQ29uc3RyYWlu
dHMoc3R5bGUsIFRleHRGaWVsZCk7Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5
bGUucmVzZXRCb3JkZXIoKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0Rmll
bGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29u
c3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtODgzLDcgKzg4Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVF
Zmw6OnBhaW50VGV4dEZpZWxkKGNvbnMKICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0
LCBUZXh0RmllbGQsIGluZm8sIEludFJlY3QocmVjdCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1l
RWZsOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEFyZWFTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAt
ODkyLDIxICs4OTIsMjEgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0QXJlYShjb25z
dAogICAgIHJldHVybiBwYWludFRleHRGaWVsZChvYmplY3QsIGluZm8sIHJlY3QpOwogfQogCi12
b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYg
ZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgp
KS5hZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHls
ZSwgZWxlbWVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYWRqdXN0U2l6ZUNvbnN0
cmFpbnRzKHN0eWxlLCBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24pOwotICAgIHN0eWxlLT5yZXNl
dEJvcmRlcigpOwotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUucmVz
ZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKLSAgICBmbG9hdCBm
b250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKKyAgICBmbG9h
dCBmb250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdEZvbnRTaXplOwogICAgIGlu
dCBkZWNvcmF0aW9uU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluU2VhcmNoRGVj
b3JhdGlvbkJ1dHRvblNpemUsIGRlZmF1bHRGb250U2l6ZSAqIGZvbnRTY2FsZSksIG1heFNlYXJj
aERlY29yYXRpb25CdXR0b25TaXplKSk7CiAKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGRl
Y29yYXRpb25TaXplICsgc2VhcmNoRmllbGREZWNvcmF0aW9uQnV0dG9uT2Zmc2V0LCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGRlY29yYXRpb25TaXplLCBGaXhlZCkpOwor
ICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChkZWNvcmF0aW9uU2l6ZSArIHNlYXJjaEZpZWxkRGVj
b3JhdGlvbkJ1dHRvbk9mZnNldCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3Ro
KGRlY29yYXRpb25TaXplLCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtOTE0LDIxICs5MTQs
MjEgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVsZFJlcwogICAgIHJldHVy
biBwYWludFRoZW1lUGFydChvYmplY3QsIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbiwgaW5mbywg
cmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVu
dCgpLnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1l
bnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOwotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAg
IHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKKyAg
ICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKLSAgICBmbG9hdCBmb250U2NhbGUgPSBzdHls
ZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBz
dHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdEZvbnRTaXplOwogICAgIGludCBkZWNvcmF0aW9uU2l6
ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluU2VhcmNoRGVjb3JhdGlvbkJ1dHRvblNp
emUsIGRlZmF1bHRGb250U2l6ZSAqIGZvbnRTY2FsZSksIG1heFNlYXJjaERlY29yYXRpb25CdXR0
b25TaXplKSk7CiAKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGRlY29yYXRpb25TaXplICsg
c2VhcmNoRmllbGREZWNvcmF0aW9uQnV0dG9uT2Zmc2V0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKGRlY29yYXRpb25TaXplLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdp
ZHRoKExlbmd0aChkZWNvcmF0aW9uU2l6ZSArIHNlYXJjaEZpZWxkRGVjb3JhdGlvbkJ1dHRvbk9m
ZnNldCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGRlY29yYXRpb25TaXpl
LCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC05MzYsMjMgKzkzNiwyMyBAQCBi
b29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIHBhaW50
VGhlbWVQYXJ0KG9iamVjdCwgU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbiwgaW5mbywgcmVj
dCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAg
ICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgp
LT50aGVtZSgpKS5hZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2
ZXIsIHN0eWxlLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RT
aXplQ29uc3RyYWludHMoc3R5bGUsIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKTsKLSAgICBzdHls
ZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgIHN0
eWxlLnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCiAgICAg
Ly8gTG9naWMgdGFrZW4gZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtLmNwcC4KICAgICAvLyBTY2Fs
ZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZS4KLSAgICBmbG9hdCBmb250
U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKKyAgICBmbG9hdCBm
b250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdEZvbnRTaXplOwogICAgIGludCBj
YW5jZWxCdXR0b25TaXplID0gbHJvdW5kZihzdGQ6Om1pbihzdGQ6Om1heChtaW5DYW5jZWxCdXR0
b25TaXplLCBkZWZhdWx0Rm9udFNpemUgKiBmb250U2NhbGUpLCBtYXhDYW5jZWxCdXR0b25TaXpl
KSk7CiAKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQp
KTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsK
KyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CiB9
CiAKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKQEAgLTk2MCwxNSArOTYwLDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBh
aW50U2VhcmNoRmllbGRDYW4KICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbiwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVF
Zmw6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewog
ICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCku
cGFnZSgpLT50aGVtZSgpKS5hZGp1c3RTZWFyY2hGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXplQ29u
c3RyYWludHMoc3R5bGUsIFNlYXJjaEZpZWxkKTsKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsK
LSAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7
CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZs
OjpwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC05NzYsNyArOTc2LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVsZChjbwogICAgIHJldHVybiBwYWludFRo
ZW1lUGFydChvYmplY3QsIFNlYXJjaEZpZWxkLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZUVmbDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50
KSBjb25zdAogewogICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1l
bnQoKS5wYWdlKCkpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVt
ZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwpAQCAtMTAwOCw5ICsxMDA4LDkgQEAg
dm9pZCBSZW5kZXJUaGVtZUVmbDo6c3lzdGVtRm9udChDU1NWYWx1ZQogfQogCiAjaWYgRU5BQkxF
KFBST0dSRVNTX0VMRU1FTlQpCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RQcm9ncmVzc0Jh
clN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+
c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsK
IH0KIAogZG91YmxlIFJlbmRlclRoZW1lRWZsOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclBy
b2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuaAkod29ya2luZyBjb3B5KQpA
QCAtNjgsMTMgKzY4LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJU
aGVtZT4gY3JlYXRlKFBhZ2UqKTsKIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhl
bWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQu
Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92
ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAK
ICAgICAvLyBBIG1ldGhvZCBSZXR1cm5pbmcgd2hldGhlciB0aGUgY29udHJvbCBpcyBzdHlsZWQg
YnkgY3NzIG9yIG5vdCBlLmcgc3BlY2lmeWluZyBiYWNrZ3JvdW5kLWNvbG9yLgotICAgIHZpcnR1
YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJE
YXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xv
ciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIEEgbWV0aG9kIGFz
a2luZyBpZiB0aGUgdGhlbWUgaXMgYWJsZSB0byBkcmF3IHRoZSBmb2N1cyByaW5nLgotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJT
dHlsZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBj
b250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3Qu
CiAgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVj
dCYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTA0LDUwICsxMDQsNTAgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0RW50cnlUZXh0Q29sb3IoaW50IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50
IGZvcmVBLCBpbnQgYmFja1IsIGludCBiYWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpOwogICAg
IHZvaWQgc2V0U2VhcmNoVGV4dENvbG9yKGludCBmb3JlUiwgaW50IGZvcmVHLCBpbnQgZm9yZUIs
IGludCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNrQiwgaW50IGJhY2tBKTsK
IAotICAgIHZvaWQgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlKiwgRm9ybVR5cGUp
IGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlJiwgRm9y
bVR5cGUpIGNvbnN0OwogCiAgICAgLy8gU3lzdGVtIGZvbnRzLgogICAgIHZpcnR1YWwgdm9pZCBz
eXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4
dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJy
aWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25Q
YXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xp
ZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShEQVRBTElTVF9F
TEVNRU5UKQogICAgIHZpcnR1YWwgSW50U2l6ZSBzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0IG92ZXJy
aWRlOwpAQCAtMTU5LDEzICsxNTksMTMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHBh
aW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3Bp
bkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICBzdGF0
aWMgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50IGZvbnRzaXplKTsKIAogI2lmIEVOQUJMRShQ
Uk9HUkVTU19FTEVNRU5UKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29s
IHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJl
cGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzKikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MiwxOCArMTQyLDE4IEBAIHN0YXRpYyBHdGtTdGF0ZVR5cGUgZ2V0R3RrU3Rh
dGVUeXBlKFJlbmQKICAgICByZXR1cm4gR1RLX1NUQVRFX05PUk1BTDsKIH0KIAotc3RhdGljIHZv
aWQgc2V0VG9nZ2xlU2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0ayosIFJlbmRlclN0eWxlKiBzdHls
ZSwgR3RrV2lkZ2V0KiB3aWRnZXQpCitzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKGNvbnN0IFJl
bmRlclRoZW1lR3RrKiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBHdGtXaWRnZXQqIHdpZGdldCkKIHsK
ICAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNo
b3VsZG4ndCBjaGFuZ2UgdGhlbS4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2lj
T3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndp
ZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGdpbnQgaW5kaWNhdG9yU2l6ZTsKICAgICBndGtfd2lkZ2V0
X3N0eWxlX2dldCh3aWRnZXQsICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBOVUxM
KTsKLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwotICAgIGlmIChz
dHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KGluZGljYXRvclNpemUsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5z
aWNPckF1dG8oKSkKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUs
IEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHls
ZS5zZXRIZWlnaHQoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7CiB9CiAKIHN0YXRpYyB2
b2lkIHBhaW50VG9nZ2xlKFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCwgR3RrV2lkZ2V0KiB3aWRnZXQpCkBAIC0xOTQsNyArMTk0LDcgQEAgc3RhdGljIHZvaWQgcGFp
bnRUb2dnbGUoUmVuZGVyVGhlbWVHdGsqIAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0
azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAg
ICAgc2V0VG9nZ2xlU2l6ZSh0aGlzLCBzdHlsZSwgZ3RrQ2hlY2tCdXR0b24oKSk7CiB9CkBAIC0y
MDUsNyArMjA1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChjb25zdAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldFJhZGlv
U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgc2V0VG9nZ2xlU2l6ZSh0aGlz
LCBzdHlsZSwgZ3RrUmFkaW9CdXR0b24oKSk7CiB9CkBAIC0yODksMTEgKzI4OSwxMSBAQCBpbnQg
UmVuZGVyVGhlbWVHdGs6OmdldENvbWJvQm94U2VwYXJhdG9yCiAgICAgcmV0dXJuIGd0a193aWRn
ZXRfZ2V0X3N0eWxlKHNlcGFyYXRvciktPnh0aGlja25lc3M7CiB9CiAKLWludCBSZW5kZXJUaGVt
ZUd0azo6Y29tYm9Cb3hBcnJvd1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJl
bmRlclRoZW1lR3RrOjpjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0
CiB7CiAgICAgLy8gVGFraW5nIHRoZSBmb250IHNpemUgYW5kIHJldmVyc2luZyB0aGUgRFBJIGNv
bnZlcnNpb24gc2VlbXMgdG8gbWF0Y2gKICAgICAvLyBHVEsrIHJlbmRlcmluZyBhcyBjbG9zZWx5
IGFzIHBvc3NpYmxlLgotICAgIHJldHVybiBzdHlsZS0+Zm9udCgpLnNpemUoKSAqICg3Mi4wIC8g
UmVuZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQSSgpKTsKKyAgICByZXR1cm4gc3R5bGUuZm9udCgp
LnNpemUoKSAqICg3Mi4wIC8gUmVuZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQSSgpKTsKIH0KIAog
c3RhdGljIHZvaWQgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoR3RrV2lkZ2V0KiBidXR0b24sIGludCYg
bGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKQpAQCAtMzE2LDExICszMTYs
MTEgQEAgc3RhdGljIHZvaWQgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoR3RrV2lkZwogfQogCiAKLXZv
aWQgUmVuZGVyVGhlbWVHdGs6OmdldENvbWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUs
IGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKFJlbmRlclN0eWxlJiBzdHlsZSwg
aW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20pIGNvbnN0CiB7CiAg
ICAgLy8gSWYgdGhpcyBtZW51IGxpc3QgYnV0dG9uIGlzbid0IGRyYXduIHVzaW5nIHRoZSBuYXRp
dmUgdGhlbWUsIHdlCiAgICAgLy8gZG9uJ3QgYWRkIGFueSBleHRyYSBwYWRkaW5nIGJleW9uZCB3
aGF0IFdlYkNvcmUgYWxyZWFkeSB1c2VzLgotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09
IE5vQ29udHJvbFBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQ
YXJ0KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBBIGNvbWJvIGJveCBidXR0b24gaXMgYSBi
dXR0b24gd2l0aCB3aWRnZXRzIHBhY2tlZCBpbnRvIGl0LgpAQCAtMzMyLDM0ICszMzIsMzQgQEAg
dm9pZCBSZW5kZXJUaGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKAogICAgIGludCBhcnJvd0Fu
ZFNlcGVyYXRvckxlbmd0aCA9IGNvbWJvQm94QXJyb3dTaXplKHN0eWxlKSArCiAgICAgICAgIGdl
dENvbWJvQm94U2VwYXJhdG9yV2lkdGgoKSArICgzICogYnV0dG9uV2lkZ2V0U3R5bGUtPnh0aGlj
a25lc3MpOwogCi0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgaWYgKHN0
eWxlLmRpcmVjdGlvbigpID09IFJUTCkKICAgICAgICAgbGVmdCArPSBhcnJvd0FuZFNlcGVyYXRv
ckxlbmd0aDsKICAgICBlbHNlCiAgICAgICAgIHJpZ2h0ICs9IGFycm93QW5kU2VwZXJhdG9yTGVu
Z3RoOwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJu
YWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQg
PSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7CiAgICAgZ2V0Q29tYm9Cb3hQYWRk
aW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIHJldHVybiBsZWZ0Owog
fQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFk
ZGluZ1JpZ2h0KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IDAs
IHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKICAgICBnZXRDb21ib0JveFBhZGRpbmco
c3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgcmV0dXJuIHJpZ2h0OwogfQog
Ci1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdU
b3AoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIGludCBsZWZ0ID0gMCwgdG9wID0g
MCwgcmlnaHQgPSAwLCBib3R0b20gPSAwOwogICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwg
bGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICByZXR1cm4gdG9wOwogfQogCi1pbnQgUmVu
ZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20o
UmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwg
cmlnaHQgPSAwLCBib3R0b20gPSAwOwogICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tKTsKQEAgLTM4MSwxMiArMzgxLDEyIEBAIGJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50TWVudUxpc3QoY29uc3QKIAogICAgIGludCBsZWZ0Qm9yZGVyID0gMCwg
cmlnaHRCb3JkZXIgPSAwLCBib3R0b21Cb3JkZXIgPSAwLCB0b3BCb3JkZXIgPSAwOwogICAgIGdl
dEJ1dHRvbklubmVyQm9yZGVyKGd0a0NvbWJvQm94QnV0dG9uKCksIGxlZnRCb3JkZXIsIHRvcEJv
cmRlciwgcmlnaHRCb3JkZXIsIGJvdHRvbUJvcmRlcik7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gJm9iamVjdC5zdHlsZSgpOworICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IG9iamVjdC5zdHls
ZSgpOwogICAgIGludCBhcnJvd1NpemUgPSBjb21ib0JveEFycm93U2l6ZShzdHlsZSk7CiAgICAg
R3RrU3R5bGUqIGJ1dHRvblN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrQ29tYm9Cb3hC
dXR0b24oKSk7CiAKICAgICBJbnRSZWN0IGFycm93UmVjdCgwLCAocmVjdC5oZWlnaHQoKSAtIGFy
cm93U2l6ZSkgLyAyLCBhcnJvd1NpemUsIGFycm93U2l6ZSk7Ci0gICAgaWYgKHN0eWxlLT5kaXJl
Y3Rpb24oKSA9PSBSVEwpCisgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigpID09IFJUTCkKICAgICAg
ICAgYXJyb3dSZWN0LnNldFgobGVmdEJvcmRlciArIGJ1dHRvblN0eWxlLT54dGhpY2tuZXNzKTsK
ICAgICBlbHNlCiAgICAgICAgIGFycm93UmVjdC5zZXRYKHJlY3Qud2lkdGgoKSAtIHJpZ2h0Qm9y
ZGVyIC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBhcnJvd1NpemUpOwpAQCAtNDEwLDcgKzQx
MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoY29uc3QKICAgICBib3R0
b21Cb3JkZXIgKz0gZm9jdXNQYWRkaW5nICsgZm9jdXNXaWR0aDsKICAgICBpbnQgc2VwYXJhdG9y
V2lkdGggPSBnZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCk7CiAgICAgSW50UmVjdCBzZXBhcmF0
b3JSZWN0KDAsIHRvcEJvcmRlciwgc2VwYXJhdG9yV2lkdGgsIHJlY3QuaGVpZ2h0KCkgLSB0b3BC
b3JkZXIgLSBib3R0b21Cb3JkZXIpOwotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRM
KQorICAgIGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgIHNlcGFyYXRvclJl
Y3Quc2V0WChhcnJvd1JlY3QueCgpICsgYXJyb3dSZWN0LndpZHRoKCkgKyBidXR0b25TdHlsZS0+
eHRoaWNrbmVzcyArIHNlcGFyYXRvcldpZHRoKTsKICAgICBlbHNlCiAgICAgICAgIHNlcGFyYXRv
clJlY3Quc2V0WChhcnJvd1JlY3QueCgpIC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBzZXBh
cmF0b3JXaWR0aCk7CkBAIC01MjgsOSArNTI4LDkgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRTbGlkZXJUaHVtYihjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0g
c3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFy
YW5jZSgpOwogICAgIGlmIChwYXJ0ICE9IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgJiYgcGFy
dCAhPSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDIs
MTMgKzU0MiwxMyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAKICAgICBpZiAocGFydCA9PSBTbGlkZXJU
aHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobGVu
Z3RoLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCh3aWR0aCwgRml4
ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAg
ICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8
fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLSAgICBzdHlsZS0+c2V0V2lk
dGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxl
bmd0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7
CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVkKSk7CiB9CiAKICNpZiBF
TkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKQEAgLTU3NCw3ICs1NzQsNyBAQCBib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKGNvCiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJ
bm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JikgY29uc3QKIHsKICAgICBHdGtTdHlsZSogZ3RrU3R5bGUgPSBndGtfd2lkZ2V0X2dl
dF9zdHlsZShndGtTcGluQnV0dG9uKCkpOwogICAgIGNvbnN0IFBhbmdvRm9udERlc2NyaXB0aW9u
KiBmb250RGVzY3JpcHRpb24gPSBndGtTdHlsZS0+Zm9udF9kZXNjOwpAQCAtNTg1LDggKzU4NSw4
IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHQKICAgICBpbnQgd2lk
dGggPSBzdGQ6Om1heChQQU5HT19QSVhFTFMoZm9udFNpemUpLCBtaW5TcGluQnV0dG9uQXJyb3dT
aXplKTsKICAgICB3aWR0aCArPSAtKCh3aWR0aCAlIDIpIC0gMSkgKyBndGtTdHlsZS0+eHRoaWNr
bmVzczsKIAotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAg
c3R5bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRX
aWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0TWluV2lkdGgoTGVuZ3Ro
KHdpZHRoLCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludElubmVyU3Bp
bkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAkocmV2aXNpb24gMTcwMzcxKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwMSwxMCArMjAxLDEwIEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dFJlcGFpbnRSZWN0KGMKICAgICBhZGp1c3RSZWN0Rm9yRm9jdXMoY29udGV4dCwgcmVjdCk7CiB9
CiAKLXN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBS
ZW5kZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29u
dGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIC8vIFRoZSB3aWR0aCBh
bmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgc28gd2Ugc2hvdWxkbid0IGNoYW5nZSB0aGVt
LgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUt
PmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09y
QXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gT3RoZXIgcG9ydHMgaGFyZC1jb2RlIHRoaXMgdG8gMTMgd2hpY2ggaXMgYWxzbyB0aGUg
ZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSysuCkBAIC0yMTMsMTEgKzIxMywxMSBAQCBzdGF0
aWMgdm9pZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29udGV4CiAgICAgZ2ludCBpbmRpY2F0b3JT
aXplOwogICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9y
LXNpemUiLCAmaW5kaWNhdG9yU2l6ZSwgTlVMTCk7CiAKLSAgICBpZiAoc3R5bGUtPndpZHRoKCku
aXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChpbmRp
Y2F0b3JTaXplLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JB
dXRvKCkpCisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhl
ZCkpOwogCi0gICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKKyAgICBpZiAoc3R5bGUu
aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoaW5kaWNh
dG9yU2l6ZSwgRml4ZWQpKTsKIH0KIAogc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVu
ZGVyVGhlbWVHdGsqIHRoZW1lLCBHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IGZ1bGxSZWN0KQpAQCAtMjc1LDcgKzI3NSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50VG9nZ2xlKGNv
bnN0IFJlbmRlclRoZW0KICAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwog
fQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0
eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBzZXRUb2dnbGVTaXplKGdldFN0eWxlQ29udGV4dChH
VEtfVFlQRV9DSEVDS19CVVRUT04pLCBzdHlsZSk7CiB9CkBAIC0yODYsNyArMjg2LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChjb25zdAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYg
c3R5bGUpIGNvbnN0CiB7CiAgICAgc2V0VG9nZ2xlU2l6ZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZ
UEVfUkFESU9fQlVUVE9OKSwgc3R5bGUpOwogfQpAQCAtMzc4LDE4ICszNzgsMTggQEAgYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oY29uc3QgUgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotc3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlKiBzdHlsZSwgR3Rr
Qm9yZGVyJiBib3JkZXIsIGludCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQorc3RhdGljIHZvaWQg
Z2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlJiBzdHlsZSwgR3RrQm9yZGVyJiBib3JkZXIs
IGludCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQogewogICAgIC8vIElmIHRoaXMgbWVudSBsaXN0
IGJ1dHRvbiBpc24ndCBkcmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3ZQogICAgIC8vIGRv
bid0IGFkZCBhbnkgZXh0cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3JlIGFscmVhZHkgdXNl
cy4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQorICAgIGlm
IChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTm9Db250cm9sUGFydCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X0NPTUJPX0JPWCk7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKIAogICAg
IGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVU
VE9OKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRp
Y19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUtPmRpcmVjdGlv
bigpKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3Rh
dGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS5kaXJlY3Rp
b24oKSkpKTsKIAogICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoY29udGV4dCwgc3Rh
dGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICZib3JkZXIpOwogCkBAIC00MDYsNyArNDA2LDcg
QEAgc3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eQogICAgIGNvbnRleHQg
PSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQQVJBVE9SKTsKICAgICBndGtfc3R5bGVfY29u
dGV4dF9zYXZlKGNvbnRleHQpOwogCi0gICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBz
dGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLT5kaXJl
Y3Rpb24oKSkpOworICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8
R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS5kaXJlY3Rpb24oKSkpOwog
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZGlyZWN0aW9uKTsK
ICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgInNlcGFyYXRvciIpOwog
CkBAIC00MjYsMjkgKzQyNiwyOSBAQCBzdGF0aWMgdm9pZCBnZXRDb21ib0JveE1ldHJpY3MoUmVu
ZGVyU3R5CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKIH0KIAotaW50
IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQo
UmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9
IHsgMCwgMCwgMCwgMCB9OwogICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGgg
PSAwOwogICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lk
dGgsIHNlcGFyYXRvcldpZHRoKTsKICAgICBpbnQgbGVmdCA9IGJvcmRlcldpZHRoLmxlZnQgKyBm
b2N1c1dpZHRoOwotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgIGlmIChz
dHlsZS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgIGxlZnQgKz0gc2VwYXJhdG9yV2lkdGgg
KyBtaW5BcnJvd1NpemU7CiAgICAgcmV0dXJuIGxlZnQ7CiB9CiAKLWludCBSZW5kZXJUaGVtZUd0
azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citp
bnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUm
IHN0eWxlKSBjb25zdAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwg
MCB9OwogICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwogICAgIGdl
dENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRv
cldpZHRoKTsKICAgICBpbnQgcmlnaHQgPSBib3JkZXJXaWR0aC5yaWdodCArIGZvY3VzV2lkdGg7
Ci0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgaWYgKHN0eWxlLmRpcmVj
dGlvbigpID09IExUUikKICAgICAgICAgcmlnaHQgKz0gc2VwYXJhdG9yV2lkdGggKyBtaW5BcnJv
d1NpemU7CiAgICAgcmV0dXJuIHJpZ2h0OwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJU
aGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OwogICAgIGlu
dCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwpAQCAtNDU2LDcgKzQ1Niw3IEBA
IGludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmcKICAgICByZXR1cm4gYm9y
ZGVyV2lkdGgudG9wICsgZm9jdXNXaWR0aDsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1
cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVu
ZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJiBzdHls
ZSkgY29uc3QKIHsKICAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsK
ICAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKQEAgLTcxMCw5ICs3
MTAsOSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKGNvCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNp
emUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVH
dGs6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBj
b25zdAogewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOworICAg
IENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS5hcHBlYXJhbmNlKCk7CiAgICAgaWYgKHBhcnQgIT0g
U2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBwYXJ0ICE9IFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0KQogICAgICAgICByZXR1cm47CiAKQEAgLTcyMiwxMyArNzIyLDEzIEBAIHZvaWQgUmVuZGVy
VGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2kKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInNsaWRlci1sZW5ndGgiLCAmc2xpZGVyTGVuZ3RoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMKTsKICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250
YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBG
aXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJXaWR0aCwgRml4
ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQp
KTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJXaWR0aCwgRml4ZWQpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVtYlZl
cnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLSAgICBz
dHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0
aChMZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0
aChzbGlkZXJMZW5ndGgsIEZpeGVkKSk7CiB9CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVO
VCkKQEAgLTc3Nyw3ICs3NzcsNyBAQCBzdGF0aWMgZ2ludCBzcGluQnV0dG9uQXJyb3dTaXplKEd0
a1N0eWxlCiAgICAgcmV0dXJuIGFycm93U2l6ZSAtIGFycm93U2l6ZSAlIDI7IC8vIEZvcmNlIGV2
ZW4uCiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgR3RrU3R5bGVD
b250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NQSU5fQlVUVE9OKTsK
IApAQCAtNzg1LDggKzc4NSw4IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3Bp
bkJ1dHQKICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGluZyhjb250ZXh0LCBzdGF0aWNf
Y2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJnBhZGRpbmcpOwogCiAgICAgaW50IHdpZHRoID0gc3Bp
bkJ1dHRvbkFycm93U2l6ZShjb250ZXh0KSArIHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQ7
Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+
c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExl
bmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgs
IEZpeGVkKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhaW50U3BpbkFycm93QnV0dG9uKFJlbmRlclRo
ZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QsIEd0a0Fycm93VHlwZSBhcnJvd1R5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2OCw5ICsxNjgsOSBAQCBzdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQ
YXJ0IGFwCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpzdXBwb3J0c0ZvY3VzUmlu
Zyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citib29sIFJlbmRlclRoZW1lR3RrOjpz
dXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7CisgICAgcmV0dXJuIHN1
cHBvcnRzRm9jdXMoc3R5bGUuYXBwZWFyYW5jZSgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0
azo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdApAQCAt
MjIwLDI1ICsyMjAsMjUgQEAgc3RhdGljIEd0a1N0YXRlVHlwZSBndGtJY29uU3RhdGUoUmVuZGVy
VAogICAgIHJldHVybiBHVEtfU1RBVEVfTk9STUFMOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3Rr
OjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBX
ZWJDb3JlOjpFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIFdlYkNvcmU6OkVsZW1l
bnQmKSBjb25zdAogewogICAgIC8vIFNvbWUgbGF5b3V0IHRlc3RzIGNoZWNrIGV4cGxpY2l0bHkg
dGhhdCBidXR0b25zIGlnbm9yZSBsaW5lLWhlaWdodC4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFu
Y2UoKSA9PSBQdXNoQnV0dG9uUGFydCkKLSAgICAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVu
ZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNl
KCkgPT0gUHVzaEJ1dHRvblBhcnQpCisgICAgICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVy
U3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjph
ZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxpc3RTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAg
ICAvLyBUaGUgdGVzdHMgY2hlY2sgZXhwbGljaXRseSB0aGF0IHNlbGVjdCBtZW51IGJ1dHRvbnMg
aWdub3JlIGxpbmUgaGVpZ2h0LgotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxl
Ojppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0
eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKIAogICAgIC8vIFdlIGNhbm5vdCBnaXZlIGEgcHJv
cGVyIHJlbmRlcmluZyB3aGVuIGJvcmRlciByYWRpdXMgaXMgYWN0aXZlLCB1bmZvcnR1bmF0ZWx5
LgotICAgIHN0eWxlLT5yZXNldEJvcmRlclJhZGl1cygpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVy
UmFkaXVzKCk7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JiBlKSBjb25zdAogewotICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoJnN0eWxlUmVzb2x2
ZXIsICZzdHlsZSwgJmUpOworICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGVSZXNvbHZlciwg
c3R5bGUsIGUpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0QnV0dG9u
RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
aW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjkzLDcgKzI5Myw3IEBAIHN0YXRpYyBH
dGtJY29uU2l6ZSBnZXRJY29uU2l6ZUZvclBpeGVsU2kKICAgICByZXR1cm4gR1RLX0lDT05fU0la
RV9ESUFMT0c7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSkgY29uc3QKIHsKICAgICBhZGp1c3RTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKIH0KQEAg
LTMwMywyNSArMzAzLDI1IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRS
ZXMKICAgICByZXR1cm4gcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChvLCBp
LCByZWN0KTsKIH0KIAotc3RhdGljIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoUmVu
ZGVyU3R5bGUqIHN0eWxlKQorc3RhdGljIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUo
UmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0
eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIHN0eWxl
LnJlc2V0UGFkZGluZygpOwogCiAgICAgLy8gR2V0IHRoZSBpY29uIHNpemUgYmFzZWQgb24gdGhl
IGZvbnQgc2l6ZS4KLSAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKKyAgICBp
bnQgZm9udFNpemUgPSBzdHlsZS5mb250U2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA8IGd0a0lj
b25TaXplTWVudSkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGZvbnRTaXplLCBG
aXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChmb250U2l6ZSwgRml4ZWQp
KTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGZvbnRTaXplLCBGaXhlZCkpOworICAg
ICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGZvbnRTaXplLCBGaXhlZCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGdpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwogICAgIGd0a19p
Y29uX3NpemVfbG9va3VwKGdldEljb25TaXplRm9yUGl4ZWxTaXplKGZvbnRTaXplKSwgJndpZHRo
LCAmaGVpZ2h0KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwot
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodCwgRml4ZWQpKTsKKyAgICBzdHlsZS5z
ZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0
aChoZWlnaHQsIEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIGFkanVzdFNlYXJjaEZpZWxk
SWNvblN0eWxlKHN0eWxlKTsKIH0KQEAgLTM2MCw3ICszNjAsNyBAQCBib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJl
bmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBhZGp1c3RTZWFy
Y2hGaWVsZEljb25TdHlsZShzdHlsZSk7CiB9CkBAIC0zNzksMTEgKzM3OSwxMSBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAvLyBXZSBjYW5ub3QgZ2l2ZSBhIHByb3Bl
ciByZW5kZXJpbmcgd2hlbiBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwgdW5mb3J0dW5hdGVseS4K
LSAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdo
dChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUucmVzZXRCb3Jk
ZXJSYWRpdXMoKTsKKyAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFs
TGluZUhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVs
ZChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcmVjdCkKQEAgLTQxNCwxNSArNDE0LDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
Q2Fwc0xvY2tJbmRpY2EKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRy
YWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNv
bnN0CiB7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRC
b3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRl
clRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGhlbWU6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwotICAg
IHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51
bGxwdHIpOwogfQogCiBkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmNhcmV0QmxpbmtJbnRlcnZhbCgp
IGNvbnN0CkBAIC01NzYsMTMgKzU3NiwxMyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1l
ZGlhVG9nZ2xlQ2xvCiB9CiAjZW5kaWYKIAotc3RhdGljIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlp
IGJvcmRlclJhZGlpRnJvbVN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBGbG9hdFJv
dW5kZWRSZWN0OjpSYWRpaSBib3JkZXJSYWRpaUZyb21TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUp
CiB7CiAgICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKAotICAgICAgICBJbnRTaXpl
KHN0eWxlLT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS0+
Ym9yZGVyVG9wTGVmdFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAotICAgICAgICBJbnRT
aXplKHN0eWxlLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5
bGUtPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCi0gICAgICAg
IEludFNpemUoc3R5bGUtPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVl
KCksIHN0eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSks
Ci0gICAgICAgIEludFNpemUoc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkud2lkdGgo
KS5pbnRWYWx1ZSgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS5oZWlnaHQoKS5p
bnRWYWx1ZSgpKSk7CisgICAgICAgIEludFNpemUoc3R5bGUuYm9yZGVyVG9wTGVmdFJhZGl1cygp
LndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyVG9wTGVmdFJhZGl1cygpLmhlaWdodCgp
LmludFZhbHVlKCkpLAorICAgICAgICBJbnRTaXplKHN0eWxlLmJvcmRlclRvcFJpZ2h0UmFkaXVz
KCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS5ib3JkZXJUb3BSaWdodFJhZGl1cygpLmhlaWdo
dCgpLmludFZhbHVlKCkpLAorICAgICAgICBJbnRTaXplKHN0eWxlLmJvcmRlckJvdHRvbUxlZnRS
YWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMo
KS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwKKyAgICAgICAgSW50U2l6ZShzdHlsZS5ib3JkZXJCb3R0
b21SaWdodFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyQm90dG9tUmln
aHRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtNTk3LDcgKzU5Nyw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmEKIAogICAgIGZsb2F0IG1l
ZGlhRHVyYXRpb24gPSBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7CiAgICAgZmxvYXQgdG90YWxU
cmFja1dpZHRoID0gci53aWR0aCgpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZvLnN0eWxl
KCk7CisgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gby5zdHlsZSgpOwogICAgIFJlZlB0cjxUaW1l
UmFuZ2VzPiB0aW1lUmFuZ2VzID0gbWVkaWFFbGVtZW50LT5idWZmZXJlZCgpOwogICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHRpbWVSYW5nZXMtPmxlbmd0aCgpOyArK2luZGV4
KSB7CiAgICAgICAgIGZsb2F0IHN0YXJ0ID0gdGltZVJhbmdlcy0+c3RhcnQoaW5kZXgsIElHTk9S
RV9FWENFUFRJT04pOwpAQCAtNjExLDcgKzYxMSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50TWVkaWFTbGlkZXJUcmEKICAgICAgICAgcmFuZ2VSZWN0LnNldFdpZHRoKGxlbmd0aFJhdGlv
ICogdG90YWxUcmFja1dpZHRoKTsKICAgICAgICAgaWYgKGluZGV4KQogICAgICAgICAgICAgcmFu
Z2VSZWN0Lm1vdmUoc3RhcnRSYXRpbyAqIHRvdGFsVHJhY2tXaWR0aCwgMCk7Ci0gICAgICAgIGNv
bnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHJhbmdlUmVjdCwgYm9yZGVy
UmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKSwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CisgICAgICAgIGNvbnRleHQtPmZp
bGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHJhbmdlUmVjdCwgYm9yZGVyUmFkaWlGcm9t
U3R5bGUoc3R5bGUpKSwgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpLCBzdHlsZS5jb2xvclNwYWNlKCkpOwogICAgIH0KIAogICAgIGNvbnRleHQtPnJlc3RvcmUo
KTsKQEAgLTYyMCw4ICs2MjAsOCBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xp
ZGVyVHJhCiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByKQogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZvLnN0eWxlKCk7Ci0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHIsIGJvcmRl
clJhZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgIFJlbmRlclN0eWxlJiBz
dHlsZSA9IG8uc3R5bGUoKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0
KEZsb2F0Um91bmRlZFJlY3QociwgYm9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUu
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS5jb2xvclNwYWNl
KCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjQ2LDEzICs2NDYsMTMgQEAgYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaQogCiAgICAgaW50IHJlY3RIZWlnaHQg
PSByZWN0LmhlaWdodCgpOwogICAgIGZsb2F0IHRyYWNrSGVpZ2h0ID0gcmVjdEhlaWdodCAqIHZv
bHVtZTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyT2JqZWN0LnN0eWxlKCk7Cisg
ICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyT2JqZWN0LnN0eWxlKCk7CiAgICAgSW50UmVj
dCB2b2x1bWVSZWN0KHJlY3QpOwogICAgIHZvbHVtZVJlY3QubW92ZSgwLCByZWN0SGVpZ2h0IC0g
dHJhY2tIZWlnaHQpOwogICAgIHZvbHVtZVJlY3Quc2V0SGVpZ2h0KGNlaWwodHJhY2tIZWlnaHQp
KTsKIAogICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHZvbHVt
ZVJlY3QsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksCi0gICAgICAgIHN0eWxlLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkp
OworICAgICAgICBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciks
IHN0eWxlLmNvbG9yU3BhY2UoKSk7CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogCiAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNjc1LDIxICs2NzUsMjEgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYUN1cnJlbnRUaQogI2VuZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkK
LXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0
cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiAvLyBUaGVzZSB2YWx1
ZXMgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAogc3Rh
dGljIGNvbnN0IGludCBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzID0gNTsKIHN0YXRpYyBjb25zdCBp
bnQgcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMgPSAxMDsKIHN0YXRpYyBjb25zdCBkb3VibGUgcHJv
Z3Jlc3NBbmltYXRpb25JbnRlcnZhbCA9IDAuMTI1OwotZG91YmxlIFJlbmRlclRoZW1lR3RrOjph
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29u
c3QKK2RvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHByb2dyZXNzQW5p
bWF0aW9uSW50ZXJ2YWw7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uRHVy
YXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citkb3VibGUgUmVuZGVy
VGhlbWVHdGs6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mm
KSBjb25zdAogewogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsICogcHJvZ3Jl
c3NBbmltYXRpb25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sgYW5kIGZvcnRoOwogfQpAQCAt
Njk3LDE2ICs2OTcsMTYgQEAgZG91YmxlIFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25EdXJhdGlv
bgogSW50UmVjdCBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiBmdWxsQmFyUmVjdCkKIHsK
ICAgICBJbnRSZWN0IHByb2dyZXNzUmVjdChmdWxsQmFyUmVjdCk7Ci0gICAgY29uc3QgUmVuZGVy
UHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcygmcmVuZGVyT2JqZWN0
KTsKLSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkgewotICAgICAgICBp
bnQgcHJvZ3Jlc3NXaWR0aCA9IHByb2dyZXNzUmVjdC53aWR0aCgpICogcmVuZGVyUHJvZ3Jlc3Mt
PnBvc2l0aW9uKCk7CisgICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3MmIHJlbmRlclByb2dyZXNzID0g
dG9SZW5kZXJQcm9ncmVzcyhyZW5kZXJPYmplY3QpOworICAgIGlmIChyZW5kZXJQcm9ncmVzcy5p
c0RldGVybWluYXRlKCkpIHsKKyAgICAgICAgaW50IHByb2dyZXNzV2lkdGggPSBwcm9ncmVzc1Jl
Y3Qud2lkdGgoKSAqIHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCk7CiAgICAgICAgIGlmIChyZW5k
ZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgICAgICBwcm9ncmVz
c1JlY3Quc2V0WChwcm9ncmVzc1JlY3QueCgpICsgcHJvZ3Jlc3NSZWN0LndpZHRoKCkgLSBwcm9n
cmVzc1dpZHRoKTsKICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFdpZHRoKHByb2dyZXNzV2lkdGgp
OwogICAgICAgICByZXR1cm4gcHJvZ3Jlc3NSZWN0OwogICAgIH0KIAotICAgIGRvdWJsZSBhbmlt
YXRpb25Qcm9ncmVzcyA9IHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpOworICAg
IGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcyA9IHJlbmRlclByb2dyZXNzLmFuaW1hdGlvblByb2dy
ZXNzKCk7CiAKICAgICAvLyBOZXZlciBsZXQgdGhlIHByb2dyZXNzIHJlY3Qgc2hyaW5rIHNtYWxs
ZXIgdGhhbiAyIHBpeGVscy4KICAgICBpbnQgbmV3V2lkdGggPSBzdGQ6Om1heCgyLCBwcm9ncmVz
c1JlY3Qud2lkdGgoKSAvIHByb2dyZXNzQWN0aXZpdHlCbG9ja3MpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgJKHJldmlzaW9uIDE3MDM3MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwxMCArNDQsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUg
dGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVy
ZWQuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
SG92ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0
aGUgZm9jdXMgcmluZy4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3Qg
UmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNG
b2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIEEg
bWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdp
bmRvdyBoYXMgZm9jdXMgb3Igbm90LgogICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNU
aW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCBvdmVycmlkZTsKQEAgLTExNSw1MCArMTE1
LDUwIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2Jv
eChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSop
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVy
U3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICBpbnQgcG9wdXBJ
bnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgaW50
IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsK
LSAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBj
b25zdCBvdmVycmlkZTsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0
eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQo
UmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRp
bmdUb3AoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIFRo
ZSBNYWMgcG9ydCBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHRoZSAibWVudSBsaXN0IiBhbmQgdGhl
ICJtZW51IGxpc3QgYnV0dG9uLiIKICAgICAvLyBUaGUgZm9ybWVyIGlzIHVzZWQgd2hlbiBhIG1l
bnUgbGlzdCBidXR0b24gaGFzIGJlZW4gc3R5bGVkLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlCiAg
ICAgLy8gQXF1YSB0aGVtZWQgY29udHJvbHMgd2hlbmV2ZXIgcG9zc2libGUuIFdlIGFsd2F5cyB3
YW50IHRvIHVzZSBHVEsrIHRoZW1pbmcsIHNvCiAgICAgLy8gd2UgZG9uJ3QgbWFpbnRhaW4gdGhp
cyBkaWZmZXJlbnRpYXRpb24uCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0
b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVt
Yihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVs
ZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIGlu
aXRNZWRpYUNvbG9ycygpOwpAQCAtMTgxLDIxICsxODEsMjEgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0
aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NC
YXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50
ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NC
YXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlm
CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJT
cGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldp
ZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBs
ZUZpbGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBsYXRmb3JtSW5pdCgp
OwotICAgIHN0YXRpYyB2b2lkIHNldFRleHRJbnB1dEJvcmRlcnMoUmVuZGVyU3R5bGUqKTsKKyAg
ICBzdGF0aWMgdm9pZCBzZXRUZXh0SW5wdXRCb3JkZXJzKFJlbmRlclN0eWxlJik7CiAgICAgc3Rh
dGljIGRvdWJsZSBnZXRTY3JlZW5EUEkoKTsKIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTIxNSw5
ICsyMTUsOSBAQCBwcml2YXRlOgogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiAgICAgdm9pZCBz
ZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCosIEd0a1dpZGdldCopIGNvbnN0
OwogICAgIHZvaWQgcmVmcmVzaENvbWJvQm94Q2hpbGRyZW4oKSBjb25zdDsKLSAgICB2b2lkIGdl
dENvbWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSosIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYg
cmlnaHQsIGludCYgYm90dG9tKSBjb25zdDsKKyAgICB2b2lkIGdldENvbWJvQm94UGFkZGluZyhS
ZW5kZXJTdHlsZSYsIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9t
KSBjb25zdDsKICAgICBpbnQgZ2V0Q29tYm9Cb3hTZXBhcmF0b3JXaWR0aCgpIGNvbnN0OwotICAg
IGludCBjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIGludCBjb21i
b0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCiAgICAgR3RrV2lkZ2V0KiBndGtC
dXR0b24oKSBjb25zdDsKICAgICBHdGtXaWRnZXQqIGd0a1RyZWVWaWV3KCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gMTcw
MzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0OTEsMTAgKzE0OTEsMTAgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50
T3V0bGluZShQYWludEluZgogCiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgp
OwogICAgIC8vIE9ubHkgcGFpbnQgdGhlIGZvY3VzIHJpbmcgYnkgaGFuZCBpZiB0aGUgdGhlbWUg
aXNuJ3QgYWJsZSB0byBkcmF3IGl0LgotICAgIGlmIChzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlz
QXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKCZzdHlsZVRvVXNlKSkKKyAgICBp
ZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0Zv
Y3VzUmluZyhzdHlsZVRvVXNlKSkKICAgICAgICAgcGFpbnRGb2N1c1JpbmcocGFpbnRJbmZvLCBw
YWludE9mZnNldCwgJnN0eWxlVG9Vc2UpOwogCi0gICAgaWYgKGhhc091dGxpbmVBbm5vdGF0aW9u
KCkgJiYgIXN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9y
dHNGb2N1c1JpbmcoJnN0eWxlVG9Vc2UpKQorICAgIGlmIChoYXNPdXRsaW5lQW5ub3RhdGlvbigp
ICYmICFzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRz
Rm9jdXNSaW5nKHN0eWxlVG9Vc2UpKQogICAgICAgICBhZGRQREZVUkxSZWN0KHBhaW50SW5mbywg
cGFpbnRPZmZzZXQpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQgPSBw
YWludEluZm8uY29udGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVkaWFDb250cm9scy5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAxLDEwICsxMDEsMTAgQEAgc3RhdGljIEZsb2F0UmVjdCBnZXRVbnpvb21lZFJlY3RBbmRBZGp1
cwogc3RhdGljIGNvbnN0IGludCBtZWRpYVNsaWRlclRodW1iV2lkdGggPSAxMzsKIHN0YXRpYyBj
b25zdCBpbnQgbWVkaWFTbGlkZXJUaHVtYkhlaWdodCA9IDE0OwogCi12b2lkIFJlbmRlck1lZGlh
Q29udHJvbHM6OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkK
K3ZvaWQgUmVuZGVyTWVkaWFDb250cm9sczo6YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVu
ZGVyU3R5bGUmIHN0eWxlKQogewogICAgIGludCBwYXJ0OwotICAgIHN3aXRjaCAoc3R5bGUtPmFw
cGVhcmFuY2UoKSkgeworICAgIHN3aXRjaCAoc3R5bGUuYXBwZWFyYW5jZSgpKSB7CiAgICAgY2Fz
ZSBNZWRpYVNsaWRlclRodW1iUGFydDoKICAgICAgICAgcGFydCA9IE1lZGlhU2xpZGVyVGh1bWI7
CiAgICAgICAgIGJyZWFrOwpAQCAtMTIxLDkgKzEyMSw5IEBAIHZvaWQgUmVuZGVyTWVkaWFDb250
cm9sczo6YWRqdXN0TWVkaWFTbGkKICAgICBDR1NpemUgc2l6ZTsKICAgICB3a01lYXN1cmVNZWRp
YVVJUGFydChwYXJ0LCAwLCAmc2l6ZSk7CiAKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBzdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc3RhdGljX2Nhc3Q8
aW50PihzaXplLndpZHRoICogem9vbUxldmVsKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0ICogem9vbUxldmVsKSwgRml4
ZWQpKTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBzdHlsZS5lZmZlY3RpdmVab29tKCk7CisgICAg
c3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2l6ZS53aWR0aCAqIHpvb21M
ZXZlbCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzdGF0aWNfY2FzdDxp
bnQ+KHNpemUuaGVpZ2h0ICogem9vbUxldmVsKSwgRml4ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJN
ZWRpYUNvbnRyb2xzOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhQ29udHJvbEVsZW1lbnRU
eXBlIHBhcnQsIGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVkaWFDb250cm9scy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZWRpYUNvbnRyb2xzLmgJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDcgKzQ2LDcgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHN0YXRpYyBib29s
IHBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUsIGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICBzdGF0
aWMgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSopOworICAgIHN0
YXRpYyB2b2lkIGFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJik7CiAjZW5k
aWYKICAgICBzdGF0aWMgSW50UG9pbnQgdm9sdW1lU2xpZGVyT2Zmc2V0RnJvbU11dGVCdXR0b24o
UmVuZGVyQm94KiwgY29uc3QgSW50U2l6ZSYpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTI1LDEwICsxMjUsMTAgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSgp
CiAgICAgICAgIGlubmVyU3R5bGUuc2V0QWxpZ25TZWxmKEFsaWduRmxleFN0YXJ0KTsKICAgICB9
CiAKLSAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0aCh0aGVtZSgpLnBvcHVwSW50
ZXJuYWxQYWRkaW5nTGVmdCgmc3R5bGUoKSksIEZpeGVkKSk7Ci0gICAgaW5uZXJTdHlsZS5zZXRQ
YWRkaW5nUmlnaHQoTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCgmc3R5
bGUoKSksIEZpeGVkKSk7Ci0gICAgaW5uZXJTdHlsZS5zZXRQYWRkaW5nVG9wKExlbmd0aCh0aGVt
ZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKCZzdHlsZSgpKSwgRml4ZWQpKTsKLSAgICBpbm5l
clN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRp
bmdCb3R0b20oJnN0eWxlKCkpLCBGaXhlZCkpOworICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ0xl
ZnQoTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KHN0eWxlKCkpLCBGaXhl
ZCkpOworICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ1JpZ2h0KExlbmd0aCh0aGVtZSgpLnBvcHVw
SW50ZXJuYWxQYWRkaW5nUmlnaHQoc3R5bGUoKSksIEZpeGVkKSk7CisgICAgaW5uZXJTdHlsZS5z
ZXRQYWRkaW5nVG9wKExlbmd0aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKHN0eWxl
KCkpLCBGaXhlZCkpOworICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ0JvdHRvbShMZW5ndGgodGhl
bWUoKS5wb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShzdHlsZSgpKSwgRml4ZWQpKTsKIAogICAg
IGlmIChkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkuc2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rp
b25Jc05hdHVyYWwoKSkgewogICAgICAgICAvLyBJdGVtcyBpbiB0aGUgcG9wdXAgd2lsbCBub3Qg
cmVzcGVjdCB0aGUgQ1NTIHRleHQtYWxpZ24gYW5kIGRpcmVjdGlvbiBwcm9wZXJ0aWVzLApAQCAt
MzI2LDcgKzMyNiw3IEBAIExheW91dFJlY3QgUmVuZGVyTWVudUxpc3Q6OmNvbnRyb2xDbGlwUmUK
IAogdm9pZCBSZW5kZXJNZW51TGlzdDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5
b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNv
bnN0CiB7Ci0gICAgbWF4TG9naWNhbFdpZHRoID0gc3RkOjptYXgobV9vcHRpb25zV2lkdGgsIHRo
ZW1lKCkubWluaW11bU1lbnVMaXN0U2l6ZSgmc3R5bGUoKSkpICsgbV9pbm5lckJsb2NrLT5wYWRk
aW5nTGVmdCgpICsgbV9pbm5lckJsb2NrLT5wYWRkaW5nUmlnaHQoKTsKKyAgICBtYXhMb2dpY2Fs
V2lkdGggPSBzdGQ6Om1heChtX29wdGlvbnNXaWR0aCwgdGhlbWUoKS5taW5pbXVtTWVudUxpc3RT
aXplKHN0eWxlKCkpKSArIG1faW5uZXJCbG9jay0+cGFkZGluZ0xlZnQoKSArIG1faW5uZXJCbG9j
ay0+cGFkZGluZ1JpZ2h0KCk7CiAgICAgaWYgKCFzdHlsZSgpLndpZHRoKCkuaXNQZXJjZW50KCkp
CiAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IG1heExvZ2ljYWxXaWR0aDsKIH0KQEAgLTU2OSw3
ICs1NjksNyBAQCBQb3B1cE1lbnVTdHlsZSBSZW5kZXJNZW51TGlzdDo6bWVudVN0eWxlCiAgICAg
cmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxlVG9Vc2UudmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpLCBzdHlsZVRvVXNlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvciksCiAgICAgICAgIHN0eWxlVG9Vc2UuZm9udCgpLCBzdHlsZVRv
VXNlLnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLCBzdHlsZVRvVXNlLmRpc3BsYXkoKSA9PSBOT05F
LCBzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSwgc3R5bGVUb1VzZS50ZXh0SW5kZW50KCksCiAgICAg
ICAgIHN0eWxlKCkuZGlyZWN0aW9uKCksIGlzT3ZlcnJpZGUoc3R5bGUoKS51bmljb2RlQmlkaSgp
KSwgUG9wdXBNZW51U3R5bGU6OkRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IsCi0gICAgICAgIFBvcHVw
TWVudVN0eWxlOjpTZWxlY3RQb3B1cCwgdGhlbWUoKS5wb3B1cE1lbnVTaXplKCZzdHlsZVRvVXNl
LCBhYnNCb3VuZHMpKTsKKyAgICAgICAgUG9wdXBNZW51U3R5bGU6OlNlbGVjdFBvcHVwLCB0aGVt
ZSgpLnBvcHVwTWVudVNpemUoc3R5bGVUb1VzZSwgYWJzQm91bmRzKSk7CiB9CiAKIEhvc3RXaW5k
b3cqIFJlbmRlck1lbnVMaXN0Ojpob3N0V2luZG93KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NyArNTQsNyBAQCB2b2lkIFJlbmRlck1ldGVyOjp1cGRhdGVMb2dpY2FsV2lkdGgoKQogewogICAg
IFJlbmRlckJveDo6dXBkYXRlTG9naWNhbFdpZHRoKCk7CiAKLSAgICBJbnRTaXplIGZyYW1lU2l6
ZSA9IHRoZW1lKCkubWV0ZXJTaXplRm9yQm91bmRzKHRoaXMsIHBpeGVsU25hcHBlZEludFJlY3Qo
ZnJhbWVSZWN0KCkpKTsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IHRoZW1lKCkubWV0ZXJTaXpl
Rm9yQm91bmRzKCp0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYW1lUmVjdCgpKSk7CiAgICAg
c2V0TG9naWNhbFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFtZVNpemUud2lk
dGgoKSA6IGZyYW1lU2l6ZS5oZWlnaHQoKSk7CiB9CiAKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBS
ZW5kZXJNZXRlcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTAogICAgICAgICBmcmFtZS5zZXRIZWln
aHQoY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQpOwogICAgIGVsc2UKICAgICAgICAgZnJhbWUuc2V0
V2lkdGgoY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQpOwotICAgIEludFNpemUgZnJhbWVTaXplID0g
dGhlbWUoKS5tZXRlclNpemVGb3JCb3VuZHModGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFt
ZSkpOworICAgIEludFNpemUgZnJhbWVTaXplID0gdGhlbWUoKS5tZXRlclNpemVGb3JCb3VuZHMo
KnRoaXMsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhbWUpKTsKICAgICBjb21wdXRlZFZhbHVlcy5t
X2V4dGVudCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmcmFtZVNpemUuaGVpZ2h0KCkg
OiBmcmFtZVNpemUud2lkdGgoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUzLDEwICsxMDUz
LDEwIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludE91dGxpbmUoUGFpbnRJbmYKICAgICBpbnQg
b3V0bGluZU9mZnNldCA9IHN0eWxlVG9Vc2Uub3V0bGluZU9mZnNldCgpOwogCiAgICAgLy8gT25s
eSBwYWludCB0aGUgZm9jdXMgcmluZyBieSBoYW5kIGlmIHRoZSB0aGVtZSBpc24ndCBhYmxlIHRv
IGRyYXcgaXQuCi0gICAgaWYgKHN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRo
ZW1lKCkuc3VwcG9ydHNGb2N1c1JpbmcoJnN0eWxlVG9Vc2UpKQorICAgIGlmIChzdHlsZVRvVXNl
Lm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKHN0eWxl
VG9Vc2UpKQogICAgICAgICBwYWludEZvY3VzUmluZyhwYWludEluZm8sIHBhaW50UmVjdC5sb2Nh
dGlvbigpLCAmc3R5bGVUb1VzZSk7CiAKLSAgICBpZiAoaGFzT3V0bGluZUFubm90YXRpb24oKSAm
JiAhc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0Zv
Y3VzUmluZygmc3R5bGVUb1VzZSkpCisgICAgaWYgKGhhc091dGxpbmVBbm5vdGF0aW9uKCkgJiYg
IXN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1
c1Jpbmcoc3R5bGVUb1VzZSkpCiAgICAgICAgIGFkZFBERlVSTFJlY3QocGFpbnRJbmZvLCBwYWlu
dFJlY3QubG9jYXRpb24oKSk7CiAKICAgICBpZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1
dG8oKSB8fCBzdHlsZVRvVXNlLm91dGxpbmVTdHlsZSgpID09IEJOT05FKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCShyZXZpc2lvbiAxNzAzNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MSw4ICs5MSw4IEBAIHZvaWQgUmVuZGVyUHJvZ3Jlc3M6OmFuaW1hdGlvblRp
bWVyRmlyZWQKIAogdm9pZCBSZW5kZXJQcm9ncmVzczo6dXBkYXRlQW5pbWF0aW9uU3RhdGUoKQog
ewotICAgIG1fYW5pbWF0aW9uRHVyYXRpb24gPSB0aGVtZSgpLmFuaW1hdGlvbkR1cmF0aW9uRm9y
UHJvZ3Jlc3NCYXIodGhpcyk7Ci0gICAgbV9hbmltYXRpb25SZXBlYXRJbnRlcnZhbCA9IHRoZW1l
KCkuYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcih0aGlzKTsKKyAgICBtX2Fu
aW1hdGlvbkR1cmF0aW9uID0gdGhlbWUoKS5hbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFy
KCp0aGlzKTsKKyAgICBtX2FuaW1hdGlvblJlcGVhdEludGVydmFsID0gdGhlbWUoKS5hbmltYXRp
b25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKCp0aGlzKTsKIAogICAgIGJvb2wgYW5pbWF0
aW5nID0gc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkgJiYgbV9hbmltYXRpb25EdXJhdGlvbiA+IDA7
CiAgICAgaWYgKGFuaW1hdGluZyA9PSBtX2FuaW1hdGluZykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyAr
ODEsNyBAQCBSZW5kZXJUaGVtZTo6UmVuZGVyVGhlbWUoKQogewogfQogCi12b2lkIFJlbmRlclRo
ZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQqIGUsIGJvb2wgVUFIYXNBcHBlYXJhbmNlLCBjb25zdCBCb3JkZXJE
YXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvcikKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSwgYm9vbCBV
QUhhc0FwcGVhcmFuY2UsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVy
JiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQogewogICAgIC8vIEZv
cmNlIGlubGluZSBhbmQgdGFibGUgZGlzcGxheSBzdHlsZXMgdG8gYmUgaW5saW5lLWJsb2NrIChl
eGNlcHQgZm9yIHRhYmxlLSB3aGljaCBpcyBibG9jaykKICAgICBDb250cm9sUGFydCBwYXJ0ID0g
c3R5bGUuYXBwZWFyYW5jZSgpOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RTdHlsZShTdHlsZVJlc29sCiAgICAgZWxzZSBpZiAoc3R5bGUuZGlzcGxheSgpID09IENP
TVBBQ1QgfHwgc3R5bGUuZGlzcGxheSgpID09IExJU1RfSVRFTSB8fCBzdHlsZS5kaXNwbGF5KCkg
PT0gVEFCTEUpCiAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoQkxPQ0spOwogCi0gICAgaWYgKFVB
SGFzQXBwZWFyYW5jZSAmJiBpc0NvbnRyb2xTdHlsZWQoJnN0eWxlLCBib3JkZXIsIGJhY2tncm91
bmQsIGJhY2tncm91bmRDb2xvcikpIHsKKyAgICBpZiAoVUFIYXNBcHBlYXJhbmNlICYmIGlzQ29u
dHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpKSB7
CiAgICAgICAgIGlmIChwYXJ0ID09IE1lbnVsaXN0UGFydCkgewogICAgICAgICAgICAgc3R5bGUu
c2V0QXBwZWFyYW5jZShNZW51bGlzdEJ1dHRvblBhcnQpOwogICAgICAgICAgICAgcGFydCA9IE1l
bnVsaXN0QnV0dG9uUGFydDsKQEAgLTE5MiwyNSArMTkyLDI1IEBAIHZvaWQgUmVuZGVyVGhlbWU6
OmFkanVzdFN0eWxlKFN0eWxlUmVzb2wKICAgICBzd2l0Y2ggKHN0eWxlLmFwcGVhcmFuY2UoKSkg
ewogI2lmICFVU0UoTkVXX1RIRU1FKQogICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgICAgICBy
ZXR1cm4gYWRqdXN0Q2hlY2tib3hTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAg
ICAgICAgcmV0dXJuIGFkanVzdENoZWNrYm94U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUp
OwogICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0UmFkaW9TdHlsZSgm
c3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFJhZGlvU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CiAg
ICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgogICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CiAg
ICAgY2FzZSBCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0QnV0dG9uU3R5bGUoJnN0
eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RCdXR0b25TdHls
ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0
OgotICAgICAgICByZXR1cm4gYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2
ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHls
ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAjZW5kaWYKICAgICBjYXNlIFRleHRGaWVsZFBh
cnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RUZXh0RmllbGRTdHlsZSgmc3R5bGVSZXNvbHZlciwg
JnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICAgICAgcmV0dXJu
IGFkanVzdFRleHRBcmVhU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAg
IHJldHVybiBhZGp1c3RUZXh0QXJlYVN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAg
ICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0U3R5bGUo
JnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RNZW51TGlz
dFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIE1lbnVsaXN0QnV0dG9u
UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNv
bHZlciwgc3R5bGUsICplKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgTWVkaWFQbGF5QnV0dG9uUGFy
dDoKICAgICBjYXNlIE1lZGlhQ3VycmVudFRpbWVQYXJ0OgogICAgIGNhc2UgTWVkaWFUaW1lUmVt
YWluaW5nUGFydDoKQEAgLTIxOCwyOSArMjE4LDI5IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dFN0eWxlKFN0eWxlUmVzb2wKICAgICBjYXNlIE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b25QYXJ0
OgogICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uUGFydDoKICAgICBjYXNlIE1lZGlhVm9sdW1lU2xp
ZGVyQ29udGFpbmVyUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lZGlhQ29udHJvbFN0eWxl
KCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0TWVkaWFD
b250cm9sU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgTWVkaWFTbGlk
ZXJQYXJ0OgogICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJQYXJ0OgogICAgIGNhc2UgTWVkaWFG
dWxsU2NyZWVuVm9sdW1lU2xpZGVyUGFydDoKICAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0
OgogICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2xp
ZGVyVHJhY2tTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJu
IGFkanVzdFNsaWRlclRyYWNrU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNh
c2UgU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydDoKICAgICBjYXNlIFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2xpZGVyVGh1bWJTdHlsZSgmc3R5bGVSZXNv
bHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNsaWRlclRodW1iU3R5bGUo
c3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgotICAg
ICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxl
LCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZl
ciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25QYXJ0OgotICAg
ICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSgmc3R5bGVSZXNv
bHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmll
bGREZWNvcmF0aW9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblBhcnRTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJu
IGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHls
ZSwgZSk7CiAgICAgY2FzZSBTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydDoKLSAgICAg
ICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoJnN0
eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAg
ICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBl
KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKHN0
eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAg
ICBjYXNlIFByb2dyZXNzQmFyUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFByb2dyZXNzQmFy
U3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RQ
cm9ncmVzc0JhclN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICNlbmRpZgogI2lmIEVO
QUJMRShNRVRFUl9FTEVNRU5UKQogICAgIGNhc2UgTWV0ZXJQYXJ0OgpAQCAtMjQ4LDExICsyNDgs
MTEgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgIGNhc2Ug
Q29udGludW91c0NhcGFjaXR5TGV2ZWxJbmRpY2F0b3JQYXJ0OgogICAgIGNhc2UgRGlzY3JldGVD
YXBhY2l0eUxldmVsSW5kaWNhdG9yUGFydDoKICAgICBjYXNlIFJhdGluZ0xldmVsSW5kaWNhdG9y
UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1ldGVyU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZz
dHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RNZXRlclN0eWxlKHN0eWxlUmVzb2x2ZXIs
IHN0eWxlLCBlKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgY2FzZSBJ
bnB1dFNwZWVjaEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVy
biBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUs
IGUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgY2FzZSBJbWFn
ZUNvbnRyb2xzQnV0dG9uUGFydDoKQEAgLTY5Myw5ICs2OTMsOSBAQCBib29sIFJlbmRlclRoZW1l
Ojppc0NvbnRyb2xDb250YWluZXIoQ29uCiAgICAgcmV0dXJuIGFwcGVhcmFuY2UgIT0gQ2hlY2ti
b3hQYXJ0ICYmIGFwcGVhcmFuY2UgIT0gUmFkaW9QYXJ0OwogfQogCi1ib29sIFJlbmRlclRoZW1l
Ojppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJE
YXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvcikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3Qg
RmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25z
dAogewotICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIHN3aXRjaCAoc3R5
bGUuYXBwZWFyYW5jZSgpKSB7CiAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKICAgICBjYXNlIFNx
dWFyZUJ1dHRvblBhcnQ6CiAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKQEAgLTcxMiw5ICs3
MTIsOSBAQCBib29sIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgCiAgICAgY2Fz
ZSBUZXh0RmllbGRQYXJ0OgogICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgogICAgICAgICAvLyBUZXN0
IHRoZSBzdHlsZSB0byBzZWUgaWYgdGhlIFVBIGJvcmRlciBhbmQgYmFja2dyb3VuZCBtYXRjaC4K
LSAgICAgICAgcmV0dXJuIChzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVyCi0gICAgICAgICAgICB8
fCAqc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNrZ3JvdW5kCi0gICAgICAgICAgICB8
fCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KSAhPSBiYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICByZXR1cm4gKHN0eWxlLmJvcmRlcigpICE9
IGJvcmRlcgorICAgICAgICAgICAgfHwgKnN0eWxlLmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNr
Z3JvdW5kCisgICAgICAgICAgICB8fCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpICE9IGJhY2tncm91bmRDb2xvcik7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTczMSwxNSArNzMxLDE1IEBAIHZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnMKICNlbmRpZgogfQogCi1ib29sIFJl
bmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Citib29sIFJlbmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpICYm
IHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gVGV4dEZpZWxkUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5j
ZSgpICE9IFRleHRBcmVhUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IE1lbnVsaXN0QnV0
dG9uUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IExpc3Rib3hQYXJ0KTsKKyAgICByZXR1
cm4gKHN0eWxlLmhhc0FwcGVhcmFuY2UoKSAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gVGV4dEZp
ZWxkUGFydCAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gVGV4dEFyZWFQYXJ0ICYmIHN0eWxlLmFw
cGVhcmFuY2UoKSAhPSBNZW51bGlzdEJ1dHRvblBhcnQgJiYgc3R5bGUuYXBwZWFyYW5jZSgpICE9
IExpc3Rib3hQYXJ0KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKGNvbnN0
IFJlbmRlck9iamVjdCYgbywgQ29udHJvbFN0YXRlczo6U3RhdGVzIHN0YXRlKSBjb25zdAogewog
ICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGUgY29udHJvbHMgZG9uJ3Qg
cmVzcG9uZCB0byBjaGFuZ2VzIGluIDpob3ZlciBzdGF0ZQotICAgIGlmIChzdGF0ZSA9PSBDb250
cm9sU3RhdGVzOjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVyKCZvLnN0eWxlKCkpKQorICAg
IGlmIChzdGF0ZSA9PSBDb250cm9sU3RhdGVzOjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVy
KG8uc3R5bGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEFzc3VtZSBwcmVz
c2VkIHN0YXRlIGlzIG9ubHkgcmVzcG9uZGVkIHRvIGlmIHRoZSBjb250cm9sIGlzIGVuYWJsZWQu
CkBAIC05MTAsNyArOTEwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNEZWZhdWx0KGNvbnN0IFJl
bmRlcgogCiAjaWYgIVVTRShORVdfVEhFTUUpCiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdENo
ZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIEEgc3Vt
bWFyeSBvZiB0aGUgcnVsZXMgZm9yIGNoZWNrYm94IGRlc2lnbmVkIHRvIG1hdGNoIFdpbklFOgog
ICAgIC8vIHdpZHRoL2hlaWdodCAtIGhvbm9yZWQgKFdpbklFIGFjdHVhbGx5IHNjYWxlcyBpdHMg
Y29udHJvbCBmb3Igc21hbGwgd2lkdGhzLCBidXQgbGV0cyBpdCBvdmVyZmxvdyBmb3Igc21hbGwg
aGVpZ2h0cy4pCkBAIC05MTgsMTYgKzkxOCwxNiBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RD
aGVja2JveFN0eWxlKFN0CiAgICAgc2V0Q2hlY2tib3hTaXplKHN0eWxlKTsKIAogICAgIC8vIHBh
ZGRpbmcgLSBub3QgaG9ub3JlZCBieSBXaW5JRSwgbmVlZHMgdG8gYmUgcmVtb3ZlZC4KLSAgICBz
dHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAgc3R5bGUucmVzZXRQYWRkaW5nKCk7CiAKICAgICAv
LyBib3JkZXIgLSBob25vcmVkIGJ5IFdpbklFLCBidXQgbG9va3MgdGVycmlibGUgKGp1c3QgcGFp
bnRzIGluIHRoZSBjb250cm9sIGJveCBhbmQgdHVybnMgb2ZmIHRoZSBXaW5kb3dzIFhQIHRoZW1l
KQogICAgIC8vIGZvciBub3csIHdlIHdpbGwgbm90IGhvbm9yIGl0LgotICAgIHN0eWxlLT5yZXNl
dEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKLSAgICBzdHlsZS0+c2V0Qm94
U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJh
ZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNv
bnN0CiB7CiAgICAgLy8gQSBzdW1tYXJ5IG9mIHRoZSBydWxlcyBmb3IgY2hlY2tib3ggZGVzaWdu
ZWQgdG8gbWF0Y2ggV2luSUU6CiAgICAgLy8gd2lkdGgvaGVpZ2h0IC0gaG9ub3JlZCAoV2luSUUg
YWN0dWFsbHkgc2NhbGVzIGl0cyBjb250cm9sIGZvciBzbWFsbCB3aWR0aHMsIGJ1dCBsZXRzIGl0
IG92ZXJmbG93IGZvciBzbWFsbCBoZWlnaHRzLikKQEAgLTkzNSwxNiArOTM1LDE2IEBAIHZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGUKICAgICBzZXRSYWRpb1NpemUoc3R5
bGUpOwogCiAgICAgLy8gcGFkZGluZyAtIG5vdCBob25vcmVkIGJ5IFdpbklFLCBuZWVkcyB0byBi
ZSByZW1vdmVkLgotICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBzdHlsZS5yZXNldFBh
ZGRpbmcoKTsKIAogICAgIC8vIGJvcmRlciAtIGhvbm9yZWQgYnkgV2luSUUsIGJ1dCBsb29rcyB0
ZXJyaWJsZSAoanVzdCBwYWludHMgaW4gdGhlIGNvbnRyb2wgYm94IGFuZCB0dXJucyBvZmYgdGhl
IFdpbmRvd3MgWFAgdGhlbWUpCiAgICAgLy8gZm9yIG5vdywgd2Ugd2lsbCBub3QgaG9ub3IgaXQu
Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKIAot
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93
KG51bGxwdHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIE1vc3QgcGxhdGZvcm1zIHdpbGwgY29t
cGxldGVseSBob25vciBhbGwgQ1NTLCBhbmQgc28gd2UgaGF2ZSBubyBuZWVkIHRvCiAgICAgLy8g
YWRqdXN0IHRoZSBzdHlsZSBhdCBhbGwgYnkgZGVmYXVsdC4gV2Ugd2lsbCBzdGlsbCBhbGxvdyB0
aGUgdGhlbWUgYSBjcmFjawpAQCAtOTUyLDI1ICs5NTIsMjUgQEAgdm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0QnV0dG9uU3R5bGUoU3R5bAogICAgIHNldEJ1dHRvblNpemUoc3R5bGUpOwogfQogCi12
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1l
bnQmKSBjb25zdAogewogfQogI2VuZGlmCiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRG
aWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFk
anVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRo
ZW1lOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAogI2lmIEVO
QUJMRShJTlBVVF9TUEVFQ0gpCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5k
ZXJJbnB1dFNwZWVjaDo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKIH0KQEAgLTk4MiwxMiArOTgyLDEyIEBAIGJvb2wgUmVu
ZGVyVGhlbWU6OnBhaW50SW5wdXRGaWVsZFNwZWVjaEIKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1F
VEVSX0VMRU1FTlQpCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxl
LCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwor
ICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotSW50U2l6ZSBSZW5kZXJUaGVt
ZTo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29uc3QgSW50UmVjdCYg
Ym91bmRzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZTo6bWV0ZXJTaXplRm9yQm91bmRzKGNv
bnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAogewogICAgIHJl
dHVybiBib3VuZHMuc2l6ZSgpOwogfQpAQCAtMTA5NCwxNyArMTA5NCwxNyBAQCB2b2lkIFJlbmRl
clRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9H
UkVTU19FTEVNRU5UKQotZG91YmxlIFJlbmRlclRoZW1lOjphbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVt
ZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZTo6YW5pbWF0
aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citkb3VibGUg
UmVuZGVyVGhlbWU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jl
c3MmKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAtMTExNCw0
OSArMTExNCw0OSBAQCBJbnRSZWN0IFJlbmRlclRoZW1lOjpwcm9ncmVzc0JhclJlY3RGb3JCCiB9
CiAjZW5kaWYKIAotYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxk
SGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50KSBjb25zdAogewot
ICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzU3RlcHBhYmxlKCkgJiYgIWlucHV0RWxlbWVudC0+
aXNSYW5nZUNvbnRyb2woKTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50LmlzU3RlcHBhYmxlKCkg
JiYgIWlucHV0RWxlbWVudC5pc1JhbmdlQ29udHJvbCgpOwogfQogCiB2b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZWRpYUNv
bnRyb2xTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0
eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGFkanVzdFNsaWRlclRodW1iU2l6
ZShzdHlsZSwgZWxlbWVudCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3QKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmgJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICAvLyBt
ZXRyaWNzIGFuZCBkZWZhdWx0cyBnaXZlbiB0aGUgY29udGVudHMgb2YgdGhlIHN0eWxlLiAgVGhp
cyBpbmNsdWRlcyBzb3BoaXN0aWNhdGVkIG9wZXJhdGlvbnMgbGlrZQogICAgIC8vIHNlbGVjdGlv
biBvZiBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LCB0aGUgZGlzYWJsaW5nIG9mIGFw
cGVhcmFuY2Ugd2hlbiBjZXJ0YWluIG90aGVyIHByb3BlcnRpZXMgbGlrZQogICAgIC8vICJib3Jk
ZXIiIGFyZSBzZXQsIG9yIGlmIHRoZSBhcHBlYXJhbmNlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhl
IHRoZW1lLgotICAgIHZvaWQgYWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCosICBib29sIFVBSGFzQXBwZWFyYW5jZSwgY29uc3QgQm9yZGVyRGF0YSYsIGNv
bnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpOworICAgIHZvaWQg
YWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYsICBib29s
IFVBSGFzQXBwZWFyYW5jZSwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNv
bnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIHRvIHBhaW50IHRoZSB3aWRnZXQgYXMgYSBiYWNrZ3JvdW5kIG9mIHRoZSBSZW5kZXJPYmpl
Y3QuICBBIHdpZGdldCdzIGZvcmVncm91bmQsIGUuZy4sIHRoZQogICAgIC8vIHRleHQgb2YgYSBi
dXR0b24sIGlzIGFsd2F5cyByZW5kZXJlZCBieSB0aGUgZW5naW5lIGl0c2VsZi4gIFRoZSBib29s
ZWFuIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCYp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgY29u
dHJvbCBoYXMgYmVlbiBzdHlsZWQgZW5vdWdoIGJ5IHRoZSBhdXRob3IgdG8gZGlzYWJsZSB0aGUg
bmF0aXZlIGFwcGVhcmFuY2UuCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25z
dCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25z
dCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250
cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZp
bGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0OwogCiAgICAgLy8g
QSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0
ZWQgYXQgYWxsLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMzUsMTAgKzEzNSwxMCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIHsgfQogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlm
IHRoZSB0aGVtZSBpcyBhYmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCi0gICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7CiAK
ICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkg
Y2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHBsYXRmb3Jt
IGlzIGFibGUgdG8gc2hvdyBkYXRhbGlzdCBzdWdnZXN0aW9ucyBmb3IgYSBnaXZlbiBpbnB1dCB0
eXBlLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RhdGFMaXN0VUkoY29uc3QgQXRvbWljU3Ry
aW5nJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3NywxNiArMTc3LDE2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRp
b24mKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihDU1NWYWx1ZUlE
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5
bGUqKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0
U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1l
bnQmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChS
ZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludCBwb3B1cElu
dGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKikgY29uc3Qg
eyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9t
KFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVw
SW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlJikgY29u
c3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9w
KFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVw
SW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gMDsgfQog
ICAgIHZpcnR1YWwgYm9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6
ZSBwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0eWxlKiwgSW50UmVjdCYpIGNvbnN0IHsgcmV0
dXJuIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXplTm9ybWFsOyB9CisgICAgdmlydHVhbCBQ
b3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0
eWxlJiwgSW50UmVjdCYpIGNvbnN0IHsgcmV0dXJuIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVT
aXplTm9ybWFsOyB9CiAKICAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9sbGJh
ckNvbnRyb2xTaXplRm9yUGFydChDb250cm9sUGFydCkgeyByZXR1cm4gUmVndWxhclNjcm9sbGJh
cjsgfQogCkBAIC0xOTUsOSArMTk1LDkgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFBST0dSRVNT
X0VMRU1FTlQpCiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmlt
YXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9u
UmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OworICAg
IHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVu
ZGVyUHJvZ3Jlc3MmKSBjb25zdDsKICAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUg
YW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dy
ZXNzJikgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0IHByb2dyZXNzQmFyUmVjdEZvckJvdW5k
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAjZW5kaWYKIApA
QCAtMjE5LDcgKzIxOSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX0VM
RU1FTlQpCi0gICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5k
ZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFNpemUgbWV0
ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0KSBjb25zdDsKICNl
bmRpZgogCkBAIC0yMzUsNyArMjM1LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZEhhdmVTcGluQnV0dG9uKEhU
TUxJbnB1dEVsZW1lbnQmKSBjb25zdDsKIAogICAgIC8vIEZ1bmN0aW9ucyBmb3IgPHNlbGVjdD4g
ZWxlbWVudHMuCiAgICAgdmlydHVhbCBib29sIGRlbGVnYXRlc01lbnVMaXN0UmVuZGVyaW5nKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI3MCwxOSArMjcwLDE5IEBAIHByb3RlY3RlZDoK
IAogI2lmICFVU0UoTkVXX1RIRU1FKQogICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5j
ZSB2YWx1ZS4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUmKSBjb25zdCB7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9T
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRl
clN0eWxlKikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVy
U3R5bGUmKSBjb25zdCB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJ
bm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCkBAIC0yOTAsMTUgKzI5MCwx
NSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW9EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbkRlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBF
bGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURlY29yYXRpb25zKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KIApAQCAtMzA5LDQ0ICszMDksNDQgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBw
YWludFNxdWFyZUJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICNpZiBFTkFCTEUo
TUVURVJfRUxFTUVOVCkKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jh
cihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludElucHV0RmllbGRT
cGVlY2hCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRy
YWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRo
dW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWJEZWNv
cmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYU92ZXJsYXlQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAkocmV2aXNpb24gMTcwMzcx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDkgKzM5LDkgQEAgY2xhc3MgUmVuZGVyVGhlbWVJT1MgOiBwdWJsaWMgUmVu
ZGVyVGhlbQogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVh
dGUoKTsKIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVy
U3R5bGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFk
ZGluZ1JpZ2h0KFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9p
ZCBhZGp1c3RSb3VuZEJvcmRlclJhZGl1cyhSZW5kZXJTdHlsZSYsIFJlbmRlckJveCopOworICAg
IHN0YXRpYyB2b2lkIGFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKFJlbmRlclN0eWxlJiwgUmVuZGVy
Qm94Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVz
Y3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNTIsMTkgKzUyLDE5IEBAIHB1YmxpYzoK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRl
ck9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5
ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUm
LCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIE1ldGhvZHMg
Zm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2ti
b3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
Ym9vbCBwYWludENoZWNrYm94RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lk
IGFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCBib29sIHBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRGaWxlVXBsb2FkSWNvbkRlY29yYXRpb25zKGNvbnN0IFJl
bmRlck9iamVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0JiBidXR0b25SZW5k
ZXJlciwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYsIEljb24qLCBGaWxlVXBsb2Fk
RGVjb3JhdGlvbnMpIG92ZXJyaWRlOwogCkBAIC03NCwxNyArNzQsMTcgQEAgcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlk
ZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVt
YlNpemUoUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUo
UFJPR1JFU1NfRUxFTUVOVCkKICAgICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2Yg
dGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBh
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxG
b3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwogICAgIC8vIFJl
dHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIu
Ci0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5k
ZXJQcm9ncmVzcyopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlv
bkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICNlbmRpZgpAQCAt
OTQsNyArOTQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBpbnQgc2xpZGVyVGlja09mZnNl
dEZyb21UcmFja0NlbnRlcigpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwogCiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHByb3RlY3Rl
ZDoKICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dQbGFjZWhvbGRlcldoZW5G
b2N1c2VkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEhhdmVTcGlu
QnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCYpIGNvbnN0IG92ZXJyaWRl
OwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0KCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1MywxNSArMzUzLDE1
IEBAIEZsb2F0UmVjdCBSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmQKICAgICByZXR1cm4g
Ym9yZGVyLnJlY3QoKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Q2hlY2tib3hT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgaWYgKCFzdHlsZS0+
d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkp
CisgICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhl
aWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMZW5ndGggbGVuZ3RoID0g
TGVuZ3RoKHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3RkOjptYXgoc3R5bGUtPmZvbnRTaXplKCks
IDEwKSkpLCBGaXhlZCk7CisgICAgTGVuZ3RoIGxlbmd0aCA9IExlbmd0aChzdGF0aWNfY2FzdDxp
bnQ+KGNlaWxmKHN0ZDo6bWF4KHN0eWxlLmZvbnRTaXplKCksIDEwKSkpLCBGaXhlZCk7CiAgICAg
Ci0gICAgc3R5bGUtPnNldFdpZHRoKGxlbmd0aCk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChsZW5n
dGgpOworICAgIHN0eWxlLnNldFdpZHRoKGxlbmd0aCk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KGxl
bmd0aCk7CiB9CiAKIHN0YXRpYyBDR1BvaW50IHNob3J0ZW5lZChDR1BvaW50IHN0YXJ0LCBDR1Bv
aW50IGVuZCwgZmxvYXQgd2lkdGgpCkBAIC00MzcsMjcgKzQzNywyNyBAQCBpbnQgUmVuZGVyVGhl
bWVJT1M6OmJhc2VsaW5lUG9zaXRpb24oY29uCiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpiYXNl
bGluZVBvc2l0aW9uKGJveCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OmlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwg
Y29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9y
KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZUlPUzo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5ZXIm
IGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7CiAgICAg
Ly8gQnV0dG9ucyBhbmQgTWVudWxpc3RCdXR0b25zIGFyZSBzdHlsZWQgaWYgdGhleSBjb250YWlu
IGEgYmFja2dyb3VuZCBpbWFnZS4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNo
QnV0dG9uUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkK
LSAgICAgICAgcmV0dXJuICFzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yKS5hbHBoYSgpIHx8IHN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCktPmhh
c0ltYWdlKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCB8
fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1
cm4gIXN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cikuYWxwaGEoKSB8fCBzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCktPmhhc0ltYWdlKCk7CiAKLSAg
ICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLT5hcHBl
YXJhbmNlKCkgPT0gVGV4dEFyZWFQYXJ0KQotICAgICAgICByZXR1cm4gKnN0eWxlLT5iYWNrZ3Jv
dW5kTGF5ZXJzKCkgIT0gYmFja2dyb3VuZDsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09
IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IFRleHRBcmVhUGFydCkKKyAg
ICAgICAgcmV0dXJuICpzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCkgIT0gYmFja2dyb3VuZDsKIAog
ICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJh
Y2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFk
anVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIGlmICgh
c3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlz
QXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFz
dHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGVuZ3RoIGxl
bmd0aCA9IExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHN0ZDo6bWF4KHN0eWxlLT5mb250
U2l6ZSgpLCAxMCkpKSwgRml4ZWQpOwotICAgIHN0eWxlLT5zZXRXaWR0aChsZW5ndGgpOwotICAg
IHN0eWxlLT5zZXRIZWlnaHQobGVuZ3RoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVzKElu
dFNpemUobGVuZ3RoLnZhbHVlKCkgLyAyLjBmLCBsZW5ndGgudmFsdWUoKSAvIDIuMGYpKTsKKyAg
ICBMZW5ndGggbGVuZ3RoID0gTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3RkOjptYXgo
c3R5bGUuZm9udFNpemUoKSwgMTApKSksIEZpeGVkKTsKKyAgICBzdHlsZS5zZXRXaWR0aChsZW5n
dGgpOworICAgIHN0eWxlLnNldEhlaWdodChsZW5ndGgpOworICAgIHN0eWxlLnNldEJvcmRlclJh
ZGl1cyhJbnRTaXplKGxlbmd0aC52YWx1ZSgpIC8gMi4wZiwgbGVuZ3RoLnZhbHVlKCkgLyAyLjBm
KSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UmFkaW9EZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCkBAIC01MTksMTAgKzUxOSwxMCBAQCBjb25zdCBmbG9hdCBNZW51TGlzdEFy
cm93V2lkdGggPSA3OwogY29uc3QgZmxvYXQgTWVudUxpc3RBcnJvd0hlaWdodCA9IDY7CiBjb25z
dCBmbG9hdCBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdodCA9IDE5OwogCi1pbnQgUmVuZGVyVGhl
bWVJT1M6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAoraW50IFJlbmRlclRoZW1lSU9TOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0
eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51
bGlzdEJ1dHRvblBhcnQpCi0gICAgICAgIHJldHVybiBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdo
dCArIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkg
PT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gTWVudUxpc3RCdXR0b25QYWRk
aW5nUmlnaHQgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpOwogICAgIHJldHVybiAwOwogfQogCkBA
IC02MTksMTAgKzYxOSw4IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdE1lbnVMaXN0QnV0
dG8KICAgICAvLyAiLXdlYmtpdC1hcHBlYXJhbmNlOiBtZW51bGlzdC1idXR0b24iLgogICAgIGlm
IChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3RUYWcpICYmICFlbGVtZW50Lmhh
c0F0dHJpYnV0ZShIVE1MTmFtZXM6Om11bHRpcGxlQXR0cikpCiAgICAgICAgIGFkanVzdFNlbGVj
dExpc3RCdXR0b25TdHlsZShzdHlsZSwgZWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZWxlbWVudC5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPigmZWxlbWVu
dCk7Ci0gICAgICAgIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWxlKHN0eWxlLCAqaW5wdXRF
bGVtZW50KTsKLSAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aW5wdXRUYWcpKQorICAgICAgICBhZGp1c3RJbnB1dEVsZW1lbnRCdXR0b25TdHlsZShzdHls
ZSwgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCY+KGlucHV0RWxlbWVudCkpOwogfQogCiBi
b29sIFJlbmRlclRoZW1lSU9TOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3Qg
UmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCkBAIC03MTcsMTQgKzcxNSwxNCBAQCBjb25zdCBDR0Zsb2F0IGtUcmFja1Ro
aWNrbmVzcyA9IDQuMDsKIGNvbnN0IENHRmxvYXQga1RyYWNrUmFkaXVzID0ga1RyYWNrVGhpY2tu
ZXNzIC8gMi4wOwogY29uc3QgaW50IGtEZWZhdWx0U2xpZGVyVGh1bWJTaXplID0gMTY7CiAKLXZv
aWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciog
c2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYg
c2VsZWN0b3IsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsK
ICAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShzZWxlY3Rvciwgc3R5bGUs
IGVsZW1lbnQpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgYmUgcmVseWluZyBvbiBi
b3JkZXIgcmFkaXVzIGZvciB0aGUgYXBwZWFyYW5jZSBvZiBvdXIgY29udHJvbHMgPHJkYXI6Ly9w
cm9ibGVtLzc2NzU0OTM+CiAgICAgTGVuZ3RoIHJhZGl1c1dpZHRoKHN0YXRpY19jYXN0PGludD4o
a1RyYWNrUmFkaXVzKSwgRml4ZWQpOwogICAgIExlbmd0aCByYWRpdXNIZWlnaHQoc3RhdGljX2Nh
c3Q8aW50PihrVHJhY2tSYWRpdXMpLCBGaXhlZCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclJhZGl1
cyhMZW5ndGhTaXplKHJhZGl1c1dpZHRoLCByYWRpdXNIZWlnaHQpKTsKKyAgICBzdHlsZS5zZXRC
b3JkZXJSYWRpdXMoTGVuZ3RoU2l6ZShyYWRpdXNXaWR0aCwgcmFkaXVzSGVpZ2h0KSk7CiB9CiAK
IGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0
JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpA
QCAtODA1LDIwICs4MDMsMjAgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUcmFj
ayhjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lSU9TOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxl
LCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBTbGlk
ZXJUaHVtYkhvcml6b250YWxQYXJ0ICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1
bWJWZXJ0aWNhbFBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSAhPSBTbGlkZXJUaHVt
Ykhvcml6b250YWxQYXJ0ICYmIHN0eWxlLmFwcGVhcmFuY2UoKSAhPSBTbGlkZXJUaHVtYlZlcnRp
Y2FsUGFydCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRW5mb3JjZSAiYm9yZGVyLXJhZGl1
czogNTAlIi4KICAgICBMZW5ndGggbGVuZ3RoKDUwLjBmLCBQZXJjZW50KTsKLSAgICBzdHlsZS0+
c2V0Qm9yZGVyUmFkaXVzKExlbmd0aFNpemUobGVuZ3RoLCBsZW5ndGgpKTsKKyAgICBzdHlsZS5z
ZXRCb3JkZXJSYWRpdXMoTGVuZ3RoU2l6ZShsZW5ndGgsIGxlbmd0aCkpOwogCiAgICAgLy8gRW5m
b3JjZSBhIDE2eDE2IHNpemUgaWYgbm8gc2l6ZSBpcyBwcm92aWRlZC4KLSAgICBpZiAoc3R5bGUt
PndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSB8fCBzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkp
IHsKKyAgICBpZiAoc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpIHx8IHN0eWxlLmhl
aWdodCgpLmlzQXV0bygpKSB7CiAgICAgICAgIExlbmd0aCBsZW5ndGggPSBMZW5ndGgoa0RlZmF1
bHRTbGlkZXJUaHVtYlNpemUsIEZpeGVkKTsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKGxlbmd0
aCk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQobGVuZ3RoKTsKKyAgICAgICAgc3R5bGUuc2V0
V2lkdGgobGVuZ3RoKTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KGxlbmd0aCk7CiAgICAgfQog
fQogCkBAIC04NDAsNyArODM4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJU
aHVtYkRlYwogfQogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi1kb3VibGUgUmVuZGVy
VGhlbWVJT1M6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MqKSBjb25zdAorZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25SZXBlYXRJbnRl
cnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1cm4g
MDsKIH0KQEAgLTk0NywxNCArOTQ1LDE0IEBAIGludCBSZW5kZXJUaGVtZUlPUzo6c2xpZGVyVGlj
a09mZnNldEZyb20KIH0KICNlbmRpZgogCi12b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RTZWFy
Y2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RTZWFy
Y2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSYgc3R5bGUs
IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJj
aEZpZWxkU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsKIAogICAgIGlmICghZWxlbWVu
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFzdHlsZS0+aGFzQm9yZGVyKCkpCisgICAg
aWYgKCFzdHlsZS5oYXNCb3JkZXIoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVuZGVyQm94
KiBib3ggPSBlbGVtZW50LT5yZW5kZXJCb3goKTsKQEAgLTk2OSw3ICs5NjcsNyBAQCBib29sIFJl
bmRlclRoZW1lSU9TOjpwYWludFNlYXJjaEZpZWxkRGVjCiAgICAgcmV0dXJuIHBhaW50VGV4dEZp
ZWxkRGVjb3JhdGlvbnMoYm94LCBwYWludEluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUlP
Uzo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc2VsZWN0b3IsIFJlbmRlclN0eWxl
JiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJUaGVtZTo6YWRq
dXN0QnV0dG9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsKIApAQCAtOTc5LDcgKzk3
Nyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFMKICAgICAvLyBh
bmQgdGhlIHJlbmRlciB2aWV3LgogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZW1TaXpl
ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgxLjAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
RU1TKTsKICAgICBpbnQgcGl4ZWxzID0gZW1TaXplLT5jb21wdXRlTGVuZ3RoPGludD4oQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YShzdHlsZSwgbnVsbHB0ciwgbnVsbHB0ciwgMS4wLCBmYWxzZSkp
OwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm94KExlbmd0aEJveCgwLCBwaXhlbHMsIDAsIHBpeGVs
cykpOworICAgIHN0eWxlLnNldFBhZGRpbmdCb3goTGVuZ3RoQm94KDAsIHBpeGVscywgMCwgcGl4
ZWxzKSk7CiAKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMTEsMTQg
KzEwMDksMTQgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQdXNoQnV0dG9uRGVjbwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6c2V0QnV0dG9uU2l6ZShS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjpzZXRCdXR0b25T
aXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgd2lkdGggYW5k
IGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgot
ICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhl
aWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0
bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gVXNlIHRoZSBmb250IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2Yg
dGhlIGNvbnRyb2wuCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50
PihDb250cm9sQmFzZUhlaWdodCAvIENvbnRyb2xCYXNlRm9udFNpemUgKiBzdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCkpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdo
dChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihDb250cm9sQmFzZUhlaWdodCAvIENvbnRyb2xCYXNl
Rm9udFNpemUgKiBzdHlsZS5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKSksIEZpeGVk
KSk7CiB9CiAKIGNvbnN0IGludCBrVGh1bWJuYWlsQm9yZGVyU3Ryb2tlV2lkdGggPSAxOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHJldmlzaW9uIDE3
MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBGbG9hdFJlY3QmKSBvdmVycmlk
ZTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUq
LCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tn
cm91bmRDb2xvcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5
ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBvdmVycmlkZTsKQEAgLTY5LDM2ICs2OSwzNiBAQCBw
dWJsaWM6CiAgICAgLy8gU3lzdGVtIGZvbnRzLgogICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250
KENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmly
dHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUmKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlk
ZTsKIAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIHZpcnR1YWwgSW50U2l6ZSBz
bGlkZXJUaWNrU2l6ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgaW50IHNsaWRlclRp
Y2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIoKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCi0gICAg
dmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5k
ZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQ
YWRkaW5nVG9wKFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBpbnQg
cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXplIHBvcHVwTWVudVNpemUo
Y29uc3QgUmVuZGVyU3R5bGUqLCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHls
ZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5n
VG9wKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJ
bnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXplIHBvcHVwTWVudVNpemUoY29uc3Qg
UmVuZGVyU3R5bGUmLCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcG9w
c01lbnVCeUFycm93S2V5cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogI2lm
IEVOQUJMRShNRVRFUl9FTEVNRU5UKQotICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNpemVGb3JC
b3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRl
ciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWV0ZXIoQ29udHJvbFBh
cnQpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVO
VCkKICAgICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhlIGFuaW1hdGlvbiBm
b3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJ
bnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihS
ZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwogICAgIC8vIFJldHVybnMgdGhlIGR1cmF0
aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBk
b3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJv
Z3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIElu
dFJlY3QgcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCkBAIC0xMjUsNDEgKzEyNSw0MSBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9ycygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRl
eHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
dmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFk
anVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVO
QUJMRShQUk9HUkVTU19FTEVNRU5UKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0Jh
clN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRl
clRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1i
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRl
OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25Q
YXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTE3NiwxNCArMTc2LDE0IEBAIHBy
aXZhdGU6CiAgICAgRmxvYXRSZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJP
YmplY3QmIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCYgcGFydFJlbmRlcmVyLCBj
b25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogCiAgICAg
Ly8gR2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LiBVc2VkIGJ5IHNvbWUg
b2YgdGhlIGNvbnRyb2xzIChsaWtlIGJ1dHRvbnMpLgotICAgIE5TQ29udHJvbFNpemUgY29udHJv
bFNpemVGb3JGb250KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgTlNDb250cm9sU2l6ZSBjb250
cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBOU0NvbnRyb2xT
aXplIGNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSYpIGNvbnN0OworICAgIE5TQ29udHJv
bFNpemUgY29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJikgY29uc3Q7CiAgICAg
TlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvckNlbGwoTlNDZWxsKiwgY29uc3QgSW50U2l6ZSog
c2l6ZXMsIGNvbnN0IEludFNpemUmIG1pblNpemUsIGZsb2F0IHpvb21MZXZlbCA9IDEuMGYpIGNv
bnN0OwogICAgIHZvaWQgc2V0Q29udHJvbFNpemUoTlNDZWxsKiwgY29uc3QgSW50U2l6ZSogc2l6
ZXMsIGNvbnN0IEludFNpemUmIG1pblNpemUsIGZsb2F0IHpvb21MZXZlbCA9IDEuMGYpOwotICAg
IHZvaWQgc2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMp
IGNvbnN0OwotICAgIEludFNpemUgc2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRT
aXplKiBzaXplcykgY29uc3Q7Ci0gICAgSW50U2l6ZSBzaXplRm9yU3lzdGVtRm9udChSZW5kZXJT
dHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKLSAgICB2b2lkIHNldEZvbnRGcm9t
Q29udHJvbFNpemUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgTlNDb250cm9sU2l6ZSkg
Y29uc3Q7CisgICAgdm9pZCBzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUmLCBjb25zdCBJbnRT
aXplKiBzaXplcykgY29uc3Q7CisgICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJTdHlsZSYs
IGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1G
b250KFJlbmRlclN0eWxlJiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAgIHZvaWQg
c2V0Rm9udEZyb21Db250cm9sU2l6ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBOU0Nv
bnRyb2xTaXplKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRlKE5TQ2VsbCos
IGNvbnN0IFJlbmRlck9iamVjdCYpOwogICAgIHZvaWQgdXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2Vs
bCosIGNvbnN0IFJlbmRlck9iamVjdCYpOwpAQCAtMjAzLDcgKzIwMyw3IEBAIHByaXZhdGU6CiAg
ICAgY29uc3QgSW50U2l6ZSogY2FuY2VsQnV0dG9uU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBJ
bnRTaXplKiByZXN1bHRzQnV0dG9uU2l6ZXMoKSBjb25zdDsKICAgICB2b2lkIHNldFNlYXJjaENl
bGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBz
ZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2b2lkIHNldFNlYXJj
aEZpZWxkU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCiAgICAgTlNQb3BVcEJ1dHRvbkNlbGwg
KnBvcHVwQnV0dG9uKCkgY29uc3Q7CiAgICAgTlNTZWFyY2hGaWVsZENlbGwgKnNlYXJjaCgpIGNv
bnN0OwpAQCAtMjE0LDExICsyMTQsMTEgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShNRVRFUl9F
TEVNRU5UKQogICAgIE5TTGV2ZWxJbmRpY2F0b3JTdHlsZSBsZXZlbEluZGljYXRvclN0eWxlRm9y
KENvbnRyb2xQYXJ0KSBjb25zdDsKLSAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCAqbGV2ZWxJbmRp
Y2F0b3JGb3IoY29uc3QgUmVuZGVyTWV0ZXIqKSBjb25zdDsKKyAgICBOU0xldmVsSW5kaWNhdG9y
Q2VsbCAqbGV2ZWxJbmRpY2F0b3JGb3IoY29uc3QgUmVuZGVyTWV0ZXImKSBjb25zdDsKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgaW50IG1pbmltdW1Qcm9ncmVz
c0JhckhlaWdodChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIGludCBtaW5pbXVtUHJvZ3Jlc3NC
YXJIZWlnaHQoUmVuZGVyU3R5bGUmKSBjb25zdDsKICAgICBjb25zdCBJbnRTaXplKiBwcm9ncmVz
c0JhclNpemVzKCkgY29uc3Q7CiAgICAgY29uc3QgaW50KiBwcm9ncmVzc0Jhck1hcmdpbnMoTlND
b250cm9sU2l6ZSkgY29uc3Q7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTk5LDE3ICs1
OTksMTcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6dXNlc1Rlc3RNb2RlRm9jdXNSaQogICAgIHJl
dHVybiBXZWJDb3JlOjp1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcigpOwogfQogCi1ib29sIFJl
bmRlclRoZW1lTWFjOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBCb3JkZXJEYXRhJiBib3JkZXIsCitib29sIFJlbmRlclRoZW1lTWFjOjppc0NvbnRyb2xT
dHlsZWQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsbExheWVyJiBi
YWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAogewotICAgIGlm
IChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFu
Y2UoKSA9PSBUZXh0QXJlYVBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFy
dCkKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5ib3JkZXIoKSAhPSBib3JkZXI7CisgICAgaWYgKHN0
eWxlLmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9
PSBUZXh0QXJlYVBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAg
ICAgICByZXR1cm4gc3R5bGUuYm9yZGVyKCkgIT0gYm9yZGVyOwogCiAgICAgLy8gRklYTUU6IFRo
aXMgaXMgaG9ycmlibGUsIGJ1dCB0aGVyZSBpcyBub3QgbXVjaCBlbHNlIHRoYXQgY2FuIGJlIGRv
bmUuICBNZW51IGxpc3RzIGNhbm5vdCBkcmF3IHByb3Blcmx5IHdoZW4KICAgICAvLyBzY2FsZWQu
ICBUaGV5IGNhbid0IHJlYWxseSBkcmF3IHByb3Blcmx5IHdoZW4gdHJhbnNmb3JtZWQgZWl0aGVy
LiAgV2UgY2FuJ3QgZGV0ZWN0IHRoZSB0cmFuc2Zvcm0gY2FzZSBhdCBzdHlsZQogICAgIC8vIGFk
anVzdG1lbnQgdGltZSBzbyB0aGF0IHdpbGwganVzdCBoYXZlIHRvIHN0YXkgYnJva2VuLiAgV2Ug
Y2FuIGhvd2V2ZXIgZGV0ZWN0IHRoYXQgd2UncmUgem9vbWluZy4gIElmIHpvb21pbmcKICAgICAv
LyBpcyBpbiBlZmZlY3Qgd2UgdHJlYXQgaXQgbGlrZSB0aGUgY29udHJvbCBpcyBzdHlsZWQuCi0g
ICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0ICYmIHN0eWxlLT5lZmZl
Y3RpdmVab29tKCkgIT0gMS4wZikKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVs
aXN0UGFydCAmJiBzdHlsZS5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwg
Ym9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpOwpAQCAtNzQzLDkgKzc0Myw5IEBA
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTdXBwb3J0c1RpbnQKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpemVGb3JGb250
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK05TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6
OmNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaW50
IGZvbnRTaXplID0gc3R5bGUtPmZvbnRTaXplKCk7CisgICAgaW50IGZvbnRTaXplID0gc3R5bGUu
Zm9udFNpemUoKTsKICAgICBpZiAoZm9udFNpemUgPj0gMTYpCiAgICAgICAgIHJldHVybiBOU1Jl
Z3VsYXJDb250cm9sU2l6ZTsKICAgICBpZiAoZm9udFNpemUgPj0gMTEpCkBAIC03NzMsMzUgKzc3
MywzNSBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRDb250cm9sU2l6ZShOU0NlCiAgICAgICAg
IFtjZWxsIHNldENvbnRyb2xTaXplOnNpemVdOwogfQogCi1JbnRTaXplIFJlbmRlclRoZW1lTWFj
OjpzaXplRm9yRm9udChSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBj
b25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKSAhPSAxLjBmKSB7CisgICAgaWYgKHN0eWxlLmVmZmVjdGl2ZVpvb20oKSAhPSAx
LjBmKSB7CiAgICAgICAgIEludFNpemUgcmVzdWx0ID0gc2l6ZXNbY29udHJvbFNpemVGb3JGb250
KHN0eWxlKV07Ci0gICAgICAgIHJldHVybiBJbnRTaXplKHJlc3VsdC53aWR0aCgpICogc3R5bGUt
PmVmZmVjdGl2ZVpvb20oKSwgcmVzdWx0LmhlaWdodCgpICogc3R5bGUtPmVmZmVjdGl2ZVpvb20o
KSk7CisgICAgICAgIHJldHVybiBJbnRTaXplKHJlc3VsdC53aWR0aCgpICogc3R5bGUuZWZmZWN0
aXZlWm9vbSgpLCByZXN1bHQuaGVpZ2h0KCkgKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogICAg
IH0KICAgICByZXR1cm4gc2l6ZXNbY29udHJvbFNpemVGb3JGb250KHN0eWxlKV07CiB9CiAKLUlu
dFNpemUgUmVuZGVyVGhlbWVNYWM6OnNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lTWFjOjpz
aXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVz
KSBjb25zdAogewotICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKKyAg
ICBpZiAoc3R5bGUuZWZmZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKICAgICAgICAgSW50U2l6ZSBy
ZXN1bHQgPSBzaXplc1tjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUpXTsKLSAgICAgICAg
cmV0dXJuIEludFNpemUocmVzdWx0LndpZHRoKCkgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpLCBy
ZXN1bHQuaGVpZ2h0KCkgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgcmV0dXJu
IEludFNpemUocmVzdWx0LndpZHRoKCkgKiBzdHlsZS5lZmZlY3RpdmVab29tKCksIHJlc3VsdC5o
ZWlnaHQoKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgfQogICAgIHJldHVybiBzaXpl
c1tjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUpXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6c2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSog
c2l6ZXMpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTaXplRnJvbUZvbnQoUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKIHsKICAgICAvLyBGSVhN
RTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13
aWR0aCBpbnRvIGFjY291bnQuCiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvckZvbnQoc3R5bGUs
IHNpemVzKTsKLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBz
aXplLndpZHRoKCkgPiAwKQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lk
dGgoKSwgRml4ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUu
aGVpZ2h0KCkgPiAwKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdo
dCgpLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgc2l6ZS53aWR0aCgpID4gMCkKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUu
d2lkdGgoKSwgRml4ZWQpKTsKKyAgICBpZiAoc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6
ZS5oZWlnaHQoKSA+IDApCisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWln
aHQoKSwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250
cm9sU2l6ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBOU0NvbnRyb2xTaXpl
IGNvbnRyb2xTaXplKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250
cm9sU2l6ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBOU0NvbnRyb2xTaXpl
IGNvbnRyb2xTaXplKSBjb25zdAogewogICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOwpAQCAtODA5
LDE5ICs4MDksMTkgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9sUwog
CiAgICAgTlNGb250KiBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lz
dGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpjb250cm9sU2l6ZV1dOwogICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRPbmVGYW1pbHkoW2ZvbnQgd2ViQ29yZUZhbWlseU5hbWVdKTsKLSAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShbZm9udCBw
b2ludFNpemVdICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgZm9udERlc2NyaXB0aW9u
LnNldENvbXB1dGVkU2l6ZShbZm9udCBwb2ludFNpemVdICogc3R5bGUuZWZmZWN0aXZlWm9vbSgp
KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShbZm9udCBwb2ludFNpemVd
ICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKIAogICAgIC8vIFJlc2V0IGxpbmUgaGVpZ2h0Ci0g
ICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkp
OworICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0
KCkpOwogCi0gICAgaWYgKHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KSkKLSAgICAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoMCk7CisgICAgaWYgKHN0eWxlLnNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKQorICAgICAgICBzdHlsZS5mb250KCkudXBk
YXRlKDApOwogfQogCi1OU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZv
clN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorTlNDb250cm9sU2l6ZSBSZW5k
ZXJUaGVtZU1hYzo6Y29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJiBzdHlsZSkg
Y29uc3QKIHsKLSAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKKyAgICBpbnQg
Zm9udFNpemUgPSBzdHlsZS5mb250U2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA+PSBbTlNGb250
IHN5c3RlbUZvbnRTaXplRm9yQ29udHJvbFNpemU6TlNSZWd1bGFyQ29udHJvbFNpemVdKQogICAg
ICAgICByZXR1cm4gTlNSZWd1bGFyQ29udHJvbFNpemU7CiAgICAgaWYgKGZvbnRTaXplID49IFtO
U0ZvbnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpOU1NtYWxsQ29udHJvbFNpemVdKQpA
QCAtODQ1LDcgKzg0NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEZpZWxkKGNv
bnMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRl
eHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKQEAgLTg2Nyw3ICs4Njcs
NyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFRleHRBcmVhKGNvbnN0CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZU1hYzo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAtOTEzLDcgKzkxMyw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50TWVudUxpc3QoY29uc3QKIAogICAgIC8vIE5vdyBpbmZsYXRlIGl0IHRv
IGFjY291bnQgZm9yIHRoZSBzaGFkb3cuCiAgICAgRmxvYXRSZWN0IGluZmxhdGVkUmVjdCA9IHJl
Y3Q7Ci0gICAgaWYgKHJlY3Qud2lkdGgoKSA+PSBtaW5pbXVtTWVudUxpc3RTaXplKCZyZW5kZXJl
ci5zdHlsZSgpKSkKKyAgICBpZiAocmVjdC53aWR0aCgpID49IG1pbmltdW1NZW51TGlzdFNpemUo
cmVuZGVyZXIuc3R5bGUoKSkpCiAgICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KHJl
Y3QsIHNpemUsIHBvcHVwQnV0dG9uTWFyZ2lucygpLCB6b29tTGV2ZWwpOwogCiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCk7CkBAIC05
NDMsOSArOTQzLDkgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdChjb25zdAog
CiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCiAKLUludFNpemUgUmVuZGVyVGhlbWVNYWM6Om1l
dGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciogcmVuZGVyTWV0ZXIsIGNvbnN0IElu
dFJlY3QmIGJvdW5kcykgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVNYWM6Om1ldGVyU2l6ZUZv
ckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciYgcmVuZGVyTWV0ZXIsIGNvbnN0IEludFJlY3QmIGJv
dW5kcykgY29uc3QKIHsKLSAgICBpZiAoTm9Db250cm9sUGFydCA9PSByZW5kZXJNZXRlci0+c3R5
bGUoKS5hcHBlYXJhbmNlKCkpCisgICAgaWYgKE5vQ29udHJvbFBhcnQgPT0gcmVuZGVyTWV0ZXIu
c3R5bGUoKS5hcHBlYXJhbmNlKCkpCiAgICAgICAgIHJldHVybiBib3VuZHMuc2l6ZSgpOwogCiAg
ICAgTlNMZXZlbEluZGljYXRvckNlbGwqIGNlbGwgPSBsZXZlbEluZGljYXRvckZvcihyZW5kZXJN
ZXRlcik7CkBAIC05NjIsNyArOTYyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZXRl
cihjb25zdCBSZQogCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4
dChwYWludEluZm8uY29udGV4dCk7CiAKLSAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCogY2VsbCA9
IGxldmVsSW5kaWNhdG9yRm9yKHRvUmVuZGVyTWV0ZXIoJnJlbmRlck9iamVjdCkpOworICAgIE5T
TGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJbmRpY2F0b3JGb3IodG9SZW5kZXJNZXRl
cihyZW5kZXJPYmplY3QpKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKIAogICAgIFtjZWxsIGRyYXdXaXRoRnJhbWU6cmVjdCBp
blZpZXc6ZG9jdW1lbnRWaWV3Rm9yKHJlbmRlck9iamVjdCldOwpAQCAtMTAwMSwxNiArMTAwMSwx
NiBAQCBOU0xldmVsSW5kaWNhdG9yU3R5bGUgUmVuZGVyVGhlbWVNYWM6OmxlCiAKIH0KIAotTlNM
ZXZlbEluZGljYXRvckNlbGwqIFJlbmRlclRoZW1lTWFjOjpsZXZlbEluZGljYXRvckZvcihjb25z
dCBSZW5kZXJNZXRlciogcmVuZGVyTWV0ZXIpIGNvbnN0CitOU0xldmVsSW5kaWNhdG9yQ2VsbCog
UmVuZGVyVGhlbWVNYWM6OmxldmVsSW5kaWNhdG9yRm9yKGNvbnN0IFJlbmRlck1ldGVyJiByZW5k
ZXJNZXRlcikgY29uc3QKIHsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJN
ZXRlci0+c3R5bGUoKTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJNZXRl
ci5zdHlsZSgpOwogICAgIEFTU0VSVChzdHlsZS5hcHBlYXJhbmNlKCkgIT0gTm9Db250cm9sUGFy
dCk7CiAKICAgICBpZiAoIW1fbGV2ZWxJbmRpY2F0b3IpCiAgICAgICAgIG1fbGV2ZWxJbmRpY2F0
b3IgPSBhZG9wdE5TKFtbTlNMZXZlbEluZGljYXRvckNlbGwgYWxsb2NdIGluaXRXaXRoTGV2ZWxJ
bmRpY2F0b3JTdHlsZTpOU0NvbnRpbnVvdXNDYXBhY2l0eUxldmVsSW5kaWNhdG9yU3R5bGVdKTsK
ICAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCogY2VsbCA9IG1fbGV2ZWxJbmRpY2F0b3IuZ2V0KCk7
CiAKLSAgICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyTWV0ZXItPm1ldGVyRWxl
bWVudCgpOworICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJNZXRlci5tZXRl
ckVsZW1lbnQoKTsKICAgICBkb3VibGUgdmFsdWUgPSBlbGVtZW50LT52YWx1ZSgpOwogCiAgICAg
Ly8gQmVjYXVzZSBOU0xldmVsSW5kaWNhdG9yQ2VsbCBkb2VzIG5vdCBzdXBwb3J0IG9wdGltdW0t
aW4tdGhlLW1pZGRsZSB0eXBlIGNvbG9yaW5nLApAQCAtMTA3MiwzNSArMTA3MiwzNSBAQCBJbnRS
ZWN0IFJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0JhclJlY3RGCiAgICAgICAgIHJldHVybiBwcm9n
cmVzc0JhckJvdW5kczsKIAogICAgIGZsb2F0IHpvb21MZXZlbCA9IHJlbmRlck9iamVjdC5zdHls
ZSgpLmVmZmVjdGl2ZVpvb20oKTsKLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29u
dHJvbFNpemVGb3JGb250KCZyZW5kZXJPYmplY3Quc3R5bGUoKSk7CisgICAgTlNDb250cm9sU2l6
ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChyZW5kZXJPYmplY3Quc3R5bGUoKSk7
CiAgICAgSW50U2l6ZSBzaXplID0gcHJvZ3Jlc3NCYXJTaXplcygpW2NvbnRyb2xTaXplXTsKICAg
ICBzaXplLnNldEhlaWdodChzaXplLmhlaWdodCgpICogem9vbUxldmVsKTsKICAgICBzaXplLnNl
dFdpZHRoKHByb2dyZXNzQmFyQm91bmRzLndpZHRoKCkpOwogCiAgICAgLy8gTm93IGluZmxhdGUg
aXQgdG8gYWNjb3VudCBmb3IgdGhlIHNoYWRvdy4KICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9
IHByb2dyZXNzQmFyQm91bmRzOwotICAgIGlmIChwcm9ncmVzc0JhckJvdW5kcy5oZWlnaHQoKSA8
PSBtaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQoJnJlbmRlck9iamVjdC5zdHlsZSgpKSkKKyAgICBp
ZiAocHJvZ3Jlc3NCYXJCb3VuZHMuaGVpZ2h0KCkgPD0gbWluaW11bVByb2dyZXNzQmFySGVpZ2h0
KHJlbmRlck9iamVjdC5zdHlsZSgpKSkKICAgICAgICAgaW5mbGF0ZWRSZWN0ID0gSW50UmVjdChp
bmZsYXRlUmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIHByb2dyZXNzQmFyTWFyZ2lucyhjb250cm9s
U2l6ZSksIHpvb21MZXZlbCkpOwogCiAgICAgcmV0dXJuIGluZmxhdGVkUmVjdDsKIH0KIAotaW50
IFJlbmRlclRoZW1lTWFjOjptaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lTWFjOjptaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQo
UmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIHJldHVybiBzaXplRm9yU3lzdGVtRm9u
dChzdHlsZSwgcHJvZ3Jlc3NCYXJTaXplcygpKS5oZWlnaHQoKTsKIH0KIAotZG91YmxlIFJlbmRl
clRoZW1lTWFjOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclBy
b2dyZXNzKikgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVtZU1hYzo6YW5pbWF0aW9uUmVwZWF0SW50
ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IHByb2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRlOwogfQogCi1kb3VibGUgUmVuZGVyVGhlbWVNYWM6
OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAor
ZG91YmxlIFJlbmRlclRoZW1lTWFjOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25OdW1G
cmFtZXMgKiBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lUmF0ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFByb2dyZXNzQmFy
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9
CiAKQEAgLTExMTAsNyArMTExMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jl
c3NCYXIoY28KICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBJbnRSZWN0IGluZmxhdGVkUmVj
dCA9IHByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhyZW5kZXJPYmplY3QsIHJlY3QpOwotICAgIE5T
Q29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoJnJlbmRlck9iamVj
dC5zdHlsZSgpKTsKKyAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVG
b3JGb250KHJlbmRlck9iamVjdC5zdHlsZSgpKTsKIAogICAgIGNvbnN0IFJlbmRlclByb2dyZXNz
JiByZW5kZXJQcm9ncmVzcyA9ICp0b1JlbmRlclByb2dyZXNzKCZyZW5kZXJPYmplY3QpOwogICAg
IEhJVGhlbWVUcmFja0RyYXdJbmZvIHRyYWNrSW5mbzsKQEAgLTEzMzcsMjIgKzEzMzcsMjIgQEAg
c3RhdGljIGNvbnN0IEludFNpemUqIG1lbnVMaXN0QnV0dG9uU2l6ZQogICAgIHJldHVybiBzaXpl
czsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSkgY29uc3QK
IHsKICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHN0
eWxlKTsKIAotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0eWxlLT5yZXNldFBhZGRp
bmcoKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0UGFkZGluZygp
OwogCiAgICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvLgotICAgIHN0eWxlLT5zZXRIZWln
aHQoTGVuZ3RoKEF1dG8pKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKIAog
ICAgIC8vIFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0byBwcmUKLSAgICBzdHlsZS0+c2V0V2hpdGVT
cGFjZShQUkUpOworICAgIHN0eWxlLnNldFdoaXRlU3BhY2UoUFJFKTsKIAogICAgIC8vIFNldCB0
aGUgZm9yZWdyb3VuZCBjb2xvciB0byBibGFjayBvciBncmF5IHdoZW4gd2UgaGF2ZSB0aGUgYXF1
YSBsb29rLgogICAgIC8vIENhc3QgdG8gUkdCMzIgaXMgdG8gd29yayBhcm91bmQgYSBjb21waWxl
ciBidWcuCi0gICAgc3R5bGUtPnNldENvbG9yKGUgJiYgIWUtPmlzRGlzYWJsZWRGb3JtQ29udHJv
bCgpID8gc3RhdGljX2Nhc3Q8UkdCQTMyPihDb2xvcjo6YmxhY2spIDogQ29sb3I6OmRhcmtHcmF5
KTsKKyAgICBzdHlsZS5zZXRDb2xvcighZS5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSA/IHN0YXRp
Y19jYXN0PFJHQkEzMj4oQ29sb3I6OmJsYWNrKSA6IENvbG9yOjpkYXJrR3JheSk7CiAKICAgICAv
LyBTZXQgdGhlIGJ1dHRvbidzIHZlcnRpY2FsIHNpemUuCiAgICAgc2V0U2l6ZUZyb21Gb250KHN0
eWxlLCBtZW51TGlzdEJ1dHRvblNpemVzKCkpOwpAQCAtMTM2Miw1MiArMTM2Miw1MiBAQCB2b2lk
IFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlCiAgICAgLy8gc3lzdGVtIGZvbnQg
Zm9yIHRoZSBjb250cm9sIHNpemUgaW5zdGVhZC4KICAgICBzZXRGb250RnJvbUNvbnRyb2xTaXpl
KHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBjb250cm9sU2l6ZSk7CiAKLSAgICBzdHlsZS0+c2V0Qm94
U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAot
aW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0xl
ZnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5j
ZSgpID09IE1lbnVsaXN0UGFydCkKLSAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhj
b250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtsZWZ0UGFkZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZl
Wm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFy
dCkKLSAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ0xlZnQgKiBzdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQor
ICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHls
ZSkpW2xlZnRQYWRkaW5nXSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoc3R5bGUu
YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKKyAgICAgICAgcmV0dXJuIHN0eWxl
ZFBvcHVwUGFkZGluZ0xlZnQgKiBzdHlsZS5lZmZlY3RpdmVab29tKCk7CiAgICAgcmV0dXJuIDA7
CiB9CiAKLWludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQ
YWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+
YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKLSAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9u
UGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtyaWdodFBhZGRpbmddICogc3R5bGUt
PmVmZmVjdGl2ZVpvb20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlz
dEJ1dHRvblBhcnQpIHsKLSAgICAgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXpl
KCkgLyBiYXNlRm9udFNpemU7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlz
dFBhcnQpCisgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JG
b250KHN0eWxlKSlbcmlnaHRQYWRkaW5nXSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBp
ZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgeworICAgICAgICBm
bG9hdCBmb250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplOwogICAgICAg
ICBmbG9hdCBhcnJvd1dpZHRoID0gYmFzZUFycm93V2lkdGggKiBmb250U2NhbGU7Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGFycm93V2lkdGggKyAoYXJyb3dQYWRkaW5n
TGVmdCArIGFycm93UGFkZGluZ1JpZ2h0ICsgcGFkZGluZ0JlZm9yZVNlcGFyYXRvcikgKiBzdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNl
aWxmKGFycm93V2lkdGggKyAoYXJyb3dQYWRkaW5nTGVmdCArIGFycm93UGFkZGluZ1JpZ2h0ICsg
cGFkZGluZ0JlZm9yZVNlcGFyYXRvcikgKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpKTsKICAgICB9
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdUb3AoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lTWFjOjpw
b3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAg
aWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4g
cG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW3RvcFBhZGRpbmdd
ICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9
PSBNZW51bGlzdEJ1dHRvblBhcnQpCi0gICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdU
b3AgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkg
PT0gTWVudWxpc3RQYXJ0KQorICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRy
b2xTaXplRm9yRm9udChzdHlsZSkpW3RvcFBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9vbSgp
OworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAg
ICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nVG9wICogc3R5bGUuZWZmZWN0aXZlWm9vbSgp
OwogICAgIHJldHVybiAwOwogfQogCi1pbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQ
YWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZU1h
Yzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAog
ewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKLSAgICAgICAg
cmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtib3R0
b21QYWRkaW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgaWYgKHN0eWxlLT5hcHBl
YXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQotICAgICAgICByZXR1cm4gc3R5bGVkUG9w
dXBQYWRkaW5nQm90dG9tICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoc3R5bGUu
YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9u
UGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtib3R0b21QYWRkaW5nXSAqIHN0eWxl
LmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0
QnV0dG9uUGFydCkKKyAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ0JvdHRvbSAqIHN0
eWxlLmVmZmVjdGl2ZVpvb20oKTsKICAgICByZXR1cm4gMDsKIH0KIAotUG9wdXBNZW51U3R5bGU6
OlBvcHVwTWVudVNpemUgUmVuZGVyVGhlbWVNYWM6OnBvcHVwTWVudVNpemUoY29uc3QgUmVuZGVy
U3R5bGUqIHN0eWxlLCBJbnRSZWN0JiByZWN0KSBjb25zdAorUG9wdXBNZW51U3R5bGU6OlBvcHVw
TWVudVNpemUgUmVuZGVyVGhlbWVNYWM6OnBvcHVwTWVudVNpemUoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBJbnRSZWN0JiByZWN0KSBjb25zdAogewogICAgIE5TUG9wVXBCdXR0b25DZWxsKiBw
b3B1cEJ1dHRvbiA9IHRoaXMtPnBvcHVwQnV0dG9uKCk7Ci0gICAgTlNDb250cm9sU2l6ZSBzaXpl
ID0gY29udHJvbFNpemVGb3JDZWxsKHBvcHVwQnV0dG9uLCBwb3B1cEJ1dHRvblNpemVzKCksIHJl
Y3Quc2l6ZSgpLCBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBOU0NvbnRyb2xTaXplIHNp
emUgPSBjb250cm9sU2l6ZUZvckNlbGwocG9wdXBCdXR0b24sIHBvcHVwQnV0dG9uU2l6ZXMoKSwg
cmVjdC5zaXplKCksIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgc3dpdGNoIChzaXplKSB7
CiAgICAgY2FzZSBOU1JlZ3VsYXJDb250cm9sU2l6ZToKICAgICAgICAgcmV0dXJuIFBvcHVwTWVu
dVN0eWxlOjpQb3B1cE1lbnVTaXplTm9ybWFsOwpAQCAtMTQ1Miw3ICsxNDUyLDcgQEAgY29uc3Qg
SW50U2l6ZSogUmVuZGVyVGhlbWVNYWM6Om1lbnVMaXN0UwogICAgIHJldHVybiBzaXplczsKIH0K
IAotaW50IFJlbmRlclRoZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZU1hYzo6bWluaW11bU1lbnVMaXN0U2l6ZShSZW5k
ZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNpemVGb3JTeXN0ZW1Gb250KHN0
eWxlLCBtZW51TGlzdFNpemVzKCkpLndpZHRoKCk7CiB9CkBAIC0xNDYwLDkgKzE0NjAsOSBAQCBp
bnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNpemUoCiBjb25zdCBpbnQgdHJhY2tX
aWR0aCA9IDU7CiBjb25zdCBpbnQgdHJhY2tSYWRpdXMgPSAyOwogCi12b2lkIFJlbmRlclRoZW1l
TWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVy
VHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50Jikg
Y29uc3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNl
dEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlk
ZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQpAQCAtMTUwNiwxMCArMTUwNiwxMCBAQCBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNsaWRlclRyYWNrKGNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBj
b25zdAogewogICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIp
OworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogY29uc3QgZmxvYXQgdmVy
dGljYWxTbGlkZXJIZWlnaHRQYWRkaW5nID0gMC4xZjsKQEAgLTE2MDgsNyArMTYwOCw3IEBAIHZv
aWQgUmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaENlbGxTdGF0ZSgKIHsKICAgICBOU1NlYXJjaEZp
ZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKLSAgICBbc2VhcmNoIHNldENvbnRy
b2xTaXplOmNvbnRyb2xTaXplRm9yRm9udCgmby5zdHlsZSgpKV07CisgICAgW3NlYXJjaCBzZXRD
b250cm9sU2l6ZTpjb250cm9sU2l6ZUZvckZvbnQoby5zdHlsZSgpKV07CiAKICAgICAvLyBVcGRh
dGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCiAgICAgdXBkYXRlRW5hYmxlZFN0
YXRlKHNlYXJjaCwgbyk7CkBAIC0xNjIxLDQ1ICsxNjIxLDQ1IEBAIGNvbnN0IEludFNpemUqIFJl
bmRlclRoZW1lTWFjOjpzZWFyY2hGaWUKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Cit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5bGUmIHN0
eWxlKSBjb25zdAogewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNw
ZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lk
dGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisg
ICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhlaWdo
dCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBVc2UgdGhlIGZvbnQgc2l6
ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJvbC4KICAgICBz
ZXRTaXplRnJvbUZvbnQoc3R5bGUsIHNlYXJjaEZpZWxkU2l6ZXMoKSk7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAvLyBPdmVy
cmlkZSBib3JkZXIuCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgY29uc3Qgc2hvcnQg
Ym9yZGVyV2lkdGggPSAyICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBzdHlsZS0+c2V0
Qm9yZGVyTGVmdFdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyTGVmdFN0
eWxlKElOU0VUKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmlnaHRXaWR0aChib3JkZXJXaWR0aCk7
Ci0gICAgc3R5bGUtPnNldEJvcmRlclJpZ2h0U3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRC
b3JkZXJCb3R0b21XaWR0aChib3JkZXJXaWR0aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlckJvdHRv
bVN0eWxlKElOU0VUKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyVG9wV2lkdGgoYm9yZGVyV2lkdGgp
OwotICAgIHN0eWxlLT5zZXRCb3JkZXJUb3BTdHlsZShJTlNFVCk7CisgICAgc3R5bGUucmVzZXRC
b3JkZXIoKTsKKyAgICBjb25zdCBzaG9ydCBib3JkZXJXaWR0aCA9IDIgKiBzdHlsZS5lZmZlY3Rp
dmVab29tKCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyTGVmdFdpZHRoKGJvcmRlcldpZHRoKTsKKyAg
ICBzdHlsZS5zZXRCb3JkZXJMZWZ0U3R5bGUoSU5TRVQpOworICAgIHN0eWxlLnNldEJvcmRlclJp
Z2h0V2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNldEJvcmRlclJpZ2h0U3R5bGUoSU5T
RVQpOworICAgIHN0eWxlLnNldEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlcldpZHRoKTsKKyAgICBz
dHlsZS5zZXRCb3JkZXJCb3R0b21TdHlsZShJTlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyVG9w
V2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNldEJvcmRlclRvcFN0eWxlKElOU0VUKTsK
IAogICAgIC8vIE92ZXJyaWRlIGhlaWdodC4KLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChB
dXRvKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CiAgICAgc2V0U2VhcmNo
RmllbGRTaXplKHN0eWxlKTsKIAogICAgIC8vIE92ZXJyaWRlIHBhZGRpbmcgc2l6ZSB0byBtYXRj
aCBBcHBLaXQgdGV4dCBwb3NpdGlvbmluZy4KLSAgICBjb25zdCBpbnQgcGFkZGluZyA9IDEgKiBz
dHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgo
cGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRk
aW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBG
aXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhl
ZCkpOworICAgIGNvbnN0IGludCBwYWRkaW5nID0gMSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsK
KyAgICBzdHlsZS5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBz
dHlsZS5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUu
c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRk
aW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwogCiAgICAgTlNDb250cm9sU2l6ZSBj
b250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7CiAgICAgc2V0Rm9udEZyb21D
b250cm9sU2l6ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgY29udHJvbFNpemUpOwogCi0gICAgc3R5
bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0
cik7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0
b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKQEAgLTE3MTgsMTIgKzE3MTgsMTIgQEAgY29uc3QgSW50U2l6ZSogUmVu
ZGVyVGhlbWVNYWM6OmNhbmNlbEJ1dAogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXpl
ID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIGNhbmNlbEJ1dHRvblNpemVzKCkpOwotICAgIHN0
eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEJv
eFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgp
LCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4
ZWQpKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKIGNvbnN0IEludFNp
emUqIFJlbmRlclRoZW1lTWFjOjpyZXN1bHRzQnV0dG9uU2l6ZXMoKSBjb25zdApAQCAtMTczMywx
MiArMTczMywxMiBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6cmVzdWx0c0J1CiB9
CiAKIGNvbnN0IGludCBlbXB0eVJlc3VsdHNPZmZzZXQgPSA5Owotdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNp
emVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUt
PnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgLSBlbXB0eVJlc3VsdHNPZmZzZXQsIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsK
LSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldFdpZHRoKExl
bmd0aChzaXplLndpZHRoKCkgLSBlbXB0eVJlc3VsdHNPZmZzZXQsIEZpeGVkKSk7CisgICAgc3R5
bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNl
dEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFy
Y2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKQpAQCAtMTc0NiwxMiArMTc0NiwxMiBAQCBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBh
cnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29u
c3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0
c0J1dHRvblNpemVzKCkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgp
LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZp
eGVkKSk7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRX
aWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChM
ZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVs
bHB0cik7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKQEAgLTE3NzksMTIgKzE3NzksMTIgQEAgYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlcwogfQogCiBjb25zdCBpbnQgcmVzdWx0
c0Fycm93V2lkdGggPSA1Owotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
JikgY29uc3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwg
cmVzdWx0c0J1dHRvblNpemVzKCkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53
aWR0aCgpICsgcmVzdWx0c0Fycm93V2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdo
dChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93
KG51bGxwdHIpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgKyByZXN1
bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUu
aGVpZ2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQog
CiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByKQpAQCAtMTkxNiwxMiArMTkxNiwxMiBAQCBpbnQgUmVuZGVyVGhlbWVNYWM6OnNsaWRl
clRpY2tPZmZzZXRGcm9tCiBjb25zdCBpbnQgc2xpZGVyVGh1bWJXaWR0aCA9IDE1OwogY29uc3Qg
aW50IHNsaWRlclRodW1iSGVpZ2h0ID0gMTU7CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVz
dFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHls
ZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgZmxvYXQgem9vbUxldmVsID0gc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYkhv
cml6b250YWxQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNh
bFBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+
KHNsaWRlclRodW1iV2lkdGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+
c2V0SGVpZ2h0KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRlclRodW1iSGVpZ2h0ICogem9v
bUxldmVsKSwgRml4ZWQpKTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBzdHlsZS5lZmZlY3RpdmVa
b29tKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYkhvcml6b250
YWxQYXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkg
eworICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihzbGlkZXJU
aHVtYldpZHRoICogem9vbUxldmVsKSwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0
KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRlclRodW1iSGVpZ2h0ICogem9vbUxldmVsKSwg
Rml4ZWQpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZVNhZmFyaS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lU2FmYXJpLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUy
LDE1ICsyNTIsMTUgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c3lzdGVtRm9udChDU1NWYQog
ICAgIGZvbnREZXNjcmlwdGlvbiA9ICpjYWNoZWREZXNjOwogfQogCi1ib29sIFJlbmRlclRoZW1l
U2FmYXJpOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBC
b3JkZXJEYXRhJiBib3JkZXIsCitib29sIFJlbmRlclRoZW1lU2FmYXJpOjppc0NvbnRyb2xTdHls
ZWQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsbExheWVyJiBiYWNr
Z3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAogewogICAgIC8vIElm
IHdlIGRpZG4ndCBmaW5kIFNhZmFyaVRoZW1lLmRsbCB3ZSB3b24ndCBiZSBhYmxlIHRvIHBhaW50
IGFueSB0aGVtZWQgY29udHJvbHMuCiAgICAgaWYgKCFTYWZhcmlUaGVtZUxpYnJhcnkoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0
RmllbGRQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEFyZWFQYXJ0IHx8IHN0eWxl
LT5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybiBzdHlsZS0+Ym9y
ZGVyKCkgIT0gYm9yZGVyOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxk
UGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gVGV4dEFyZWFQYXJ0IHx8IHN0eWxlLmFwcGVh
cmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAgcmV0dXJuIHN0eWxlLmJvcmRlcigpICE9
IGJvcmRlcjsKICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwg
Ym9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpOwogfQogCkBAIC0zMjMsOCArMzIz
LDggQEAgaW50IFJlbmRlclRoZW1lU2FmYXJpOjpiYXNlbGluZVBvc2l0aW9uKAogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIGlmIChvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFy
dCB8fCBvLnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkgewotICAgICAgICBjb25z
dCBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KCZvKTsKLSAgICAgICAgcmV0dXJuIGJveC0+
bWFyZ2luVG9wKCkgKyBib3gtPmhlaWdodCgpIC0gMjsgLy8gVGhlIGJhc2VsaW5lIGlzIDJweCB1
cCBmcm9tIHRoZSBib3R0b20gb2YgdGhlIGNoZWNrYm94L3JhZGlvIGluIEFwcEtpdC4KKyAgICAg
ICAgY29uc3QgUmVuZGVyQm94JiBib3ggPSB0b1JlbmRlckJveChvKTsKKyAgICAgICAgcmV0dXJu
IGJveC5tYXJnaW5Ub3AoKSArIGJveC5oZWlnaHQoKSAtIDI7IC8vIFRoZSBiYXNlbGluZSBpcyAy
cHggdXAgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBjaGVja2JveC9yYWRpbyBpbiBBcHBLaXQuCiAg
ICAgfQogCiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9uKG8pOwpAQCAt
MzQzLDkgKzM0Myw5IEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OmNvbnRyb2xTdXBwb3J0c1QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZVNhZmFyaTo6
Y29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK05TQ29udHJvbFNp
emUgUmVuZGVyVGhlbWVTYWZhcmk6OmNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSYgc3R5
bGUpIGNvbnN0CiB7Ci0gICAgaW50IGZvbnRTaXplID0gc3R5bGUtPmZvbnRTaXplKCk7CisgICAg
aW50IGZvbnRTaXplID0gc3R5bGUuZm9udFNpemUoKTsKICAgICBpZiAoZm9udFNpemUgPj0gMTYp
CiAgICAgICAgIHJldHVybiBOU1JlZ3VsYXJDb250cm9sU2l6ZTsKICAgICBpZiAoZm9udFNpemUg
Pj0gMTEpCkBAIC0zNjgsMjcgKzM2OCwyNyBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRD
b250cm9sU2l6ZShOCiAgICAgICAgIFtjZWxsIHNldENvbnRyb2xTaXplOnNpemVdOwogfQogKi8K
LUludFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6OnNpemVGb3JGb250KFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lU2FmYXJp
OjpzaXplRm9yRm9udChSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBj
b25zdAogewogICAgIHJldHVybiBzaXplc1tjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpXTsKIH0K
IAotSW50U2l6ZSBSZW5kZXJUaGVtZVNhZmFyaTo6c2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5
bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK0ludFNpemUgUmVuZGVyVGhl
bWVTYWZhcmk6OnNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgSW50
U2l6ZSogc2l6ZXMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNpemVzW2NvbnRyb2xTaXplRm9yU3lz
dGVtRm9udChzdHlsZSldOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRTaXplRnJv
bUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBDaGVjayBpcyBm
bGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8gYWNj
b3VudC4KICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yRm9udChzdHlsZSwgc2l6ZXMpOwotICAg
IGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmIHNpemUud2lkdGgoKSA+
IDApCi0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkp
OwotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDAp
Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7
CisgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndpZHRo
KCkgPiAwKQorICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhl
ZCkpOworICAgIGlmIChzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4g
MCkKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkp
OwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgTlNDb250cm9s
U2l6ZSBjb250cm9sU2l6ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldEZvbnRG
cm9tQ29udHJvbFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplKSBjb25zdAogewogICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1
dGVTaXplKHRydWUpOwpAQCAtNDAwLDE1ICs0MDAsMTUgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFy
aTo6c2V0Rm9udEZyb21Db250cgogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KGZvbnRTaXplKTsKIAogICAgIC8vIFJlc2V0IGxpbmUgaGVpZ2h0Ci0gICAgc3R5bGUtPnNldExp
bmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIHN0eWxlLnNl
dExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogCi0gICAgaWYg
KHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkKLSAgICAgICAgc3R5
bGUtPmZvbnQoKS51cGRhdGUoc3R5bGVSZXNvbHZlci0+Zm9udFNlbGVjdG9yKCkpOworICAgIGlm
IChzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkKKyAgICAgICAgc3R5
bGUuZm9udCgpLnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250U2VsZWN0b3IoKSk7CiB9CiAKLU5T
Q29udHJvbFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6OmNvbnRyb2xTaXplRm9yU3lzdGVtRm9udChS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lU2FmYXJp
Ojpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewot
ICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGludCBmb250U2l6ZSA9
IHN0eWxlLmZvbnRTaXplKCk7CiAgICAgaWYgKGZvbnRTaXplID49IDEzKQogICAgICAgICByZXR1
cm4gTlNSZWd1bGFyQ29udHJvbFNpemU7CiAgICAgaWYgKGZvbnRTaXplID49IDExKQpAQCAtNDQ1
LDEwICs0NDUsMTAgQEAgY29uc3QgaW50KiBSZW5kZXJUaGVtZVNhZmFyaTo6Y2hlY2tib3hNYQog
ICAgIHJldHVybiBtYXJnaW5zW2NvbnRyb2xTaXplXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNh
ZmFyaTo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVTYWZhcmk6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0
CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0
aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50
cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0
eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRv
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVy
bWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgpAQCAtNDg0LDE3ICs0ODQs
MTcgQEAgY29uc3QgaW50KiBSZW5kZXJUaGVtZVNhZmFyaTo6cmFkaW9NYXJnaQogICAgIHJldHVy
biBtYXJnaW5zW2NvbnRyb2xTaXplXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0
UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZh
cmk6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYg
dGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90
aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50cmlu
c2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgogICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgcmFk
aW9TaXplcygpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0QnV0dG9uUGFkZGlu
Z0Zyb21Db250cm9sU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNpemUgc2l6ZSkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldEJ1dHRvblBhZGRpbmdGcm9tQ29udHJv
bFNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBOU0NvbnRyb2xTaXplIHNpemUpIGNvbnN0CiB7CiAg
ICAgLy8gSnVzdCB1c2UgOHB4LiAgQXBwS2l0IHdhbnRzIHRvIHVzZSAxMXB4IGZvciBtaW5pIGJ1
dHRvbnMsIGJ1dCB0aGF0IHBhZGRpbmcgaXMganVzdCB0b28gbGFyZ2UKICAgICAvLyBmb3IgcmVh
bC13b3JsZCBXZWIgc2l0ZXMgKGNyZWF0aW5nIGEgaHVnZSBuZWNlc3NhcnkgbWluaW11bSB3aWR0
aCBmb3IgYnV0dG9ucyB3aG9zZSBzcGFjZSBpcwpAQCAtNTAyLDEzICs1MDIsMTMgQEAgdm9pZCBS
ZW5kZXJUaGVtZVNhZmFyaTo6c2V0QnV0dG9uUGFkZGluZwogICAgIC8vIFRoaXMgYWxzbyBndWFy
YW50ZWVzIHRoZSBIVE1MNCA8YnV0dG9uPiB3aWxsIG1hdGNoIG91ciByZW5kZXJpbmcgYnkgZGVm
YXVsdCwgc2luY2Ugd2UncmUgdXNpbmcgYSBjb25zaXN0ZW50CiAgICAgLy8gcGFkZGluZy4KICAg
ICBjb25zdCBpbnQgcGFkZGluZyA9IDg7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0
aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBh
ZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKDAsIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDAsIEZpeGVkKSk7CisgICAg
c3R5bGUuc2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUu
c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBh
ZGRpbmdUb3AoTGVuZ3RoKDAsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0JvdHRvbShM
ZW5ndGgoMCwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0QnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JiBlKSBjb25zdAogewogICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBhcHBlYXJhbmNlIGNv
bnN0YW50cyBmb3IgYnV0dG9ucy4KICAgICAvLyAoMSkgUHVzaC1idXR0b24gaXMgdGhlIGNvbnN0
YW50IGZvciB0aGUgZGVmYXVsdCBBcXVhIHN5c3RlbSBidXR0b24uICBQdXNoIGJ1dHRvbnMgd2ls
bCBub3Qgc2NhbGUgdmVydGljYWxseSBhbmQgd2lsbCBub3QgYWxsb3cKQEAgLTUyMiwxNSArNTIy
LDE1IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdEJ1dHRvblN0eWwKICAgICAvLyBE
ZXRlcm1pbmUgb3VyIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgb3VyIGZvbnQuCiAgICAgTlNDb250
cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7CiAKLSAgICBp
ZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkgeworICAgIGlmIChzdHls
ZS5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKICAgICAgICAgLy8gRGl0Y2ggdGhl
IGJvcmRlci4KLSAgICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgICAgIHN0eWxlLnJl
c2V0Qm9yZGVyKCk7CiAKICAgICAgICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvLgotICAg
ICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisgICAgICAgIHN0eWxlLnNldEhl
aWdodChMZW5ndGgoQXV0bykpOwogCiAgICAgICAgIC8vIFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0
byBwcmUKLSAgICAgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKyAgICAgICAgc3R5bGUu
c2V0V2hpdGVTcGFjZShQUkUpOwogCiAgICAgICAgIC8vIFNldCB0aGUgYnV0dG9uJ3MgdmVydGlj
YWwgc2l6ZS4KICAgICAgICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7CkBAIC01NDQsMTEgKzU0NCwx
MSBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RCdXR0b25TdHlsCiAgICAgICAgIHNl
dEZvbnRGcm9tQ29udHJvbFNpemUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGNvbnRyb2xTaXplKTsK
ICAgICB9IGVsc2UgewogICAgICAgICAvLyBTZXQgYSBtaW4taGVpZ2h0IHNvIHRoYXQgd2UgY2Fu
J3QgZ2V0IHNtYWxsZXIgdGhhbiB0aGUgbWluaSBidXR0b24uCi0gICAgICAgIHN0eWxlLT5zZXRN
aW5IZWlnaHQoTGVuZ3RoKDE1LCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRNaW5IZWlnaHQo
TGVuZ3RoKDE1LCBGaXhlZCkpOwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSB0b3AgYW5kIGJvdHRv
bSBib3JkZXJzLgotICAgICAgICBzdHlsZS0+cmVzZXRCb3JkZXJUb3AoKTsKLSAgICAgICAgc3R5
bGUtPnJlc2V0Qm9yZGVyQm90dG9tKCk7CisgICAgICAgIHN0eWxlLnJlc2V0Qm9yZGVyVG9wKCk7
CisgICAgICAgIHN0eWxlLnJlc2V0Qm9yZGVyQm90dG9tKCk7CiAgICAgfQogfQogCkBAIC01Njks
MTAgKzU2OSwxMCBAQCBjb25zdCBpbnQqIFJlbmRlclRoZW1lU2FmYXJpOjpidXR0b25NYXJnCiAg
ICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2Fm
YXJpOjpzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVTYWZhcmk6OnNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewog
ICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3
ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNp
Y09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgaWYgKCFzdHlsZS53
aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUg
dGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJvbC4KQEAgLTYyMCw3ICs2MjAsNyBAQCBi
b29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFRleHRGaWVsZChjCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCkBAIC02NDgsNyArNjQ4LDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZVNhZmFyaTo6cGFpbnRUZXh0QXJlYShjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6
OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0CiB7CiB9CiAKQEAgLTg2NCwyMiArODY0LDIyIEBAIGJvb2wgUmVuZGVyVGhlbWVT
YWZhcmk6OnBhaW50TWVudUxpc3RCdXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgTlND
b250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7CiAKLSAg
ICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAg
c3R5bGUucmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5yZXNldFBhZGRpbmcoKTsKICAgICAKICAg
ICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5n
dGgoQXV0bykpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoQXV0bykpOwogCiAgICAgLy8g
V2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBS
RSk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCiAgICAgLy8gU2V0IHRoZSBmb3Jl
Z3JvdW5kIGNvbG9yIHRvIGJsYWNrIG9yIGdyYXkgd2hlbiB3ZSBoYXZlIHRoZSBhcXVhIGxvb2su
CiAgICAgLy8gQ2FzdCB0byBSR0IzMiBpcyB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGVyIGJ1Zy4K
LSAgICBzdHlsZS0+c2V0Q29sb3IoZSAmJiAhZS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkgPyBz
dGF0aWNfY2FzdDxSR0JBMzI+KENvbG9yOjpibGFjaykgOiBDb2xvcjo6ZGFya0dyYXkpOworICAg
IHN0eWxlLnNldENvbG9yKGUgJiYgIWUtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpID8gc3RhdGlj
X2Nhc3Q8UkdCQTMyPihDb2xvcjo6YmxhY2spIDogQ29sb3I6OmRhcmtHcmF5KTsKIAogICAgIC8v
IFNldCB0aGUgYnV0dG9uJ3MgdmVydGljYWwgc2l6ZS4KICAgICBzZXRCdXR0b25TaXplKHN0eWxl
KTsKQEAgLTg5MCw1NiArODkwLDU2IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1l
bnVMaXN0U3QKICAgICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHN0eWxlUmVzb2x2ZXIsIHN0eWxl
LCBjb250cm9sU2l6ZSk7CiB9CiAKLWludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZVNh
ZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QK
IHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCisgICAgaWYg
KHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCiAgICAgICAgIHJldHVybiBwb3B1
cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbbGVmdFBhZGRpbmddOwot
ICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKKyAgICBp
ZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKICAgICAgICAgcmV0
dXJuIHN0eWxlZFBvcHVwUGFkZGluZ0xlZnQ7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5k
ZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmln
aHQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5j
ZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVs
aXN0UGFydCkKICAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZv
ckZvbnQoc3R5bGUpKVtyaWdodFBhZGRpbmddOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgp
ID09IE1lbnVsaXN0QnV0dG9uUGFydCkgewotICAgICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHls
ZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgp
ID09IE1lbnVsaXN0QnV0dG9uUGFydCkgeworICAgICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHls
ZS5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplOwogICAgICAgICBmbG9hdCBhcnJvd1dpZHRoID0g
YmFzZUFycm93V2lkdGggKiBmb250U2NhbGU7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KGNlaWxmKGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmln
aHQgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQog
Ci1pbnQgUmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdUb3AoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+YXBw
ZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09
IE1lbnVsaXN0UGFydCkKICAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9s
U2l6ZUZvckZvbnQoc3R5bGUpKVt0b3BQYWRkaW5nXTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFu
Y2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9
PSBNZW51bGlzdEJ1dHRvblBhcnQpCiAgICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdU
b3A7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRl
cm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRo
ZW1lU2FmYXJpOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYgc3R5bGUp
IGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQor
ICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQogICAgICAgICByZXR1
cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2JvdHRvbVBh
ZGRpbmddOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFy
dCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKICAg
ICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ0JvdHRvbTsKICAgICByZXR1cm4gMDsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgZmxvYXQgZm9udFNj
YWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemU7CisgICAgZmxvYXQgZm9udFNj
YWxlID0gc3R5bGUuZm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKICAgICAKLSAgICBzdHlsZS0+
cmVzZXRQYWRkaW5nKCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclJhZGl1cyhJbnRTaXplKGludChi
YXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSksIGludChiYXNlQm9yZGVyUmFkaXVzICsg
Zm9udFNjYWxlIC0gMSkpKTsgLy8gRklYTUU6IFJvdW5kIHVwPworICAgIHN0eWxlLnJlc2V0UGFk
ZGluZygpOworICAgIHN0eWxlLnNldEJvcmRlclJhZGl1cyhJbnRTaXplKGludChiYXNlQm9yZGVy
UmFkaXVzICsgZm9udFNjYWxlIC0gMSksIGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxl
IC0gMSkpKTsgLy8gRklYTUU6IFJvdW5kIHVwPwogCiAgICAgY29uc3QgaW50IG1pbkhlaWdodCA9
IDE1OwotICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQpKTsK
KyAgICBzdHlsZS5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQpKTsKICAgICAK
LSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQo
KSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWln
aHQoKSk7CiB9CiAKIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lU2FmYXJpOjptZW51TGlzdFNp
emVzKCkgY29uc3QKQEAgLTk0OCw3ICs5NDgsNyBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVt
ZVNhZmFyaTo6bWVudUxpCiAgICAgcmV0dXJuIHNpemVzOwogfQogCi1pbnQgUmVuZGVyVGhlbWVT
YWZhcmk6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50
IFJlbmRlclRoZW1lU2FmYXJpOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlJiBzdHls
ZSkgY29uc3QKIHsKICAgICByZXR1cm4gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIG1lbnVMaXN0
U2l6ZXMoKSkud2lkdGgoKTsKIH0KQEAgLTk4NywxMCArOTg3LDEwIEBAIGJvb2wgUmVuZGVyVGhl
bWVTYWZhcmk6OnBhaW50U2xpZGVyVHJhY2sKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdCAKK3Zv
aWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdCAK
IHsgCiAgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZl
ciwgc3R5bGUsIGUpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7IAorICAgIHN0
eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsgCiB9IAogCiBjb25zdCBmbG9hdCB2ZXJ0aWNhbFNs
aWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwpAQCAtMTAwNSwxNCArMTAwNSwxNCBAQCBib29sIFJl
bmRlclRoZW1lU2FmYXJpOjpwYWludFNsaWRlclRodW1iCiBjb25zdCBpbnQgc2xpZGVyVGh1bWJX
aWR0aCA9IDE1OwogY29uc3QgaW50IHNsaWRlclRodW1iSGVpZ2h0ID0gMTU7CiAKLXZvaWQgUmVu
ZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2xpZGVyVGh1
bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgaWYgKHN0
eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBzdHlsZS0+
YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxl
LT5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgc3R5
bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CisgICAgaWYg
KHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IHN0eWxl
LmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgeworICAgICAgICBzdHls
ZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5
bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKICAgICB9IAog
I2lmIEVOQUJMRShWSURFTykKLSAgICBlbHNlIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1l
ZGlhU2xpZGVyVGh1bWJQYXJ0KSAKKyAgICBlbHNlIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0g
TWVkaWFTbGlkZXJUaHVtYlBhcnQpIAogICAgICAgICBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1
c3RNZWRpYVNsaWRlclRodW1iU2l6ZShzdHlsZSk7CiAjZW5kaWYKIH0KQEAgLTEwMzEsNDAgKzEw
MzEsNDAgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVTYWZhcmk6OnNlYXJjaAogICAgIHJl
dHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0U2VhcmNoRmllbGRT
aXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNl
dFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYg
dGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90
aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIGlu
dHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJvbC4KICAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUs
IHNlYXJjaEZpZWxkU2l6ZXMoKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJT
dHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgLy8gT3ZlcnJpZGUgYm9yZGVy
LgotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAg
ICAgY29uc3Qgc2hvcnQgYm9yZGVyV2lkdGggPSAyOwotICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0
V2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0U3R5bGUoSU5TRVQp
OwotICAgIHN0eWxlLT5zZXRCb3JkZXJSaWdodFdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHls
ZS0+c2V0Qm9yZGVyUmlnaHRTdHlsZShJTlNFVCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlckJvdHRv
bVdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyQm90dG9tU3R5bGUoSU5T
RVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJXaWR0aCk7Ci0gICAgc3R5
bGUtPnNldEJvcmRlclRvcFN0eWxlKElOU0VUKTsgICAgCisgICAgc3R5bGUuc2V0Qm9yZGVyTGVm
dFdpZHRoKGJvcmRlcldpZHRoKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJMZWZ0U3R5bGUoSU5TRVQp
OworICAgIHN0eWxlLnNldEJvcmRlclJpZ2h0V2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxl
LnNldEJvcmRlclJpZ2h0U3R5bGUoSU5TRVQpOworICAgIHN0eWxlLnNldEJvcmRlckJvdHRvbVdp
ZHRoKGJvcmRlcldpZHRoKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJCb3R0b21TdHlsZShJTlNFVCk7
CisgICAgc3R5bGUuc2V0Qm9yZGVyVG9wV2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNl
dEJvcmRlclRvcFN0eWxlKElOU0VUKTsgICAgCiAgICAgCiAgICAgLy8gT3ZlcnJpZGUgaGVpZ2h0
LgotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKKyAgICBzdHlsZS5zZXRIZWln
aHQoTGVuZ3RoKEF1dG8pKTsKICAgICBzZXRTZWFyY2hGaWVsZFNpemUoc3R5bGUpOwogICAgIAog
ICAgIC8vIE92ZXJyaWRlIHBhZGRpbmcgc2l6ZSB0byBtYXRjaCBBcHBLaXQgdGV4dCBwb3NpdGlv
bmluZy4KICAgICBjb25zdCBpbnQgcGFkZGluZyA9IDE7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdM
ZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQo
TGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3Ro
KHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBh
ZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcs
IEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhl
ZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Cisg
ICAgc3R5bGUuc2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKICAgICAK
ICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHN0eWxl
KTsKICAgICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBjb250
cm9sU2l6ZSk7CkBAIC0xMDkyLDExICsxMDkyLDExIEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRo
ZW1lU2FmYXJpOjpjYW5jZWwKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
U2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6
ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCBjYW5jZWxCdXR0b25TaXplcygpKTsKLSAgICBz
dHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+
c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdp
ZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExl
bmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCiBjb25zdCBJbnRTaXplKiBSZW5kZXJU
aGVtZVNhZmFyaTo6cmVzdWx0c0J1dHRvblNpemVzKCkgY29uc3QKQEAgLTExMDYsMTEgKzExMDYs
MTEgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVTYWZhcmk6OnJlc3VsdAogfQogCiBjb25z
dCBpbnQgZW1wdHlSZXN1bHRzT2Zmc2V0ID0gOTsKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFk
anVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFk
anVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXpl
Rm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1dHRvblNpemVzKCkpOwotICAgIHN0eWxlLT5z
ZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpIC0gZW1wdHlSZXN1bHRzT2Zmc2V0LCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Cisg
ICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNl
dCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZp
eGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGREZWNv
cmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikKQEAgLTExMTgsMTEgKzExMTgsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6
cGFpbnRTZWFyY2hGaWVsZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7
CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0
b25TaXplcygpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4
ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkp
OworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAg
c3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCiBib29s
IFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmKQpAQCAtMTE0MiwxMSArMTE0MiwxMSBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJp
OjpwYWludFNlYXJjaEZpZWxkCiB9CiAKIGNvbnN0IGludCByZXN1bHRzQXJyb3dXaWR0aCA9IDU7
Ci12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAog
ewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0
dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgKyBy
ZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChz
aXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndp
ZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQo
TGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVTYWZh
cmk6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmKQpAQCAtMTE5MCw5ICsx
MTkwLDkgQEAgU3RyaW5nIFJlbmRlclRoZW1lU2FmYXJpOjptZWRpYUNvbnRyb2xzUwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFk
anVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RNZXRlclN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIHN0
eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxw
dHIpOwogfQogCiBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpzdXBwb3J0c01ldGVyKENvbnRyb2xQ
YXJ0IHBhcnQpIGNvbnN0CkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBib29sIFJlbmRlclRoZW1lU2Fm
YXJpOjpzdXBwb3J0c01ldGVyKENvCiAgICAgfQogfQogCi1JbnRTaXplIFJlbmRlclRoZW1lU2Fm
YXJpOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0
JiBib3VuZHMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lU2FmYXJpOjptZXRlclNpemVGb3JC
b3VuZHMoY29uc3QgUmVuZGVyTWV0ZXImLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7CiB9CkBAIC0xMjE3LDcgKzEyMTcsNyBAQCBib29s
IFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1ldGVyKGNvbnN0CiAgICAgaWYgKCFyZW5kZXJPYmpl
Y3QuaXNNZXRlcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEhUTUxNZXRlckVsZW1l
bnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKCZyZW5kZXJPYmplY3QpLT5tZXRlckVsZW1lbnQo
KTsKKyAgICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gdG9SZW5kZXJNZXRlcihyZW5kZXJP
YmplY3QpLm1ldGVyRWxlbWVudCgpOwogCiAgICAgaW50IHJlbWFpbmluZyA9IHN0YXRpY19jYXN0
PGludD4oKDEuMCAtIGVsZW1lbnQtPnZhbHVlUmF0aW8oKSkgKiBzdGF0aWNfY2FzdDxkb3VibGU+
KHJlY3Quc2l6ZSgpLndpZHRoKCkpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lU2FmYXJpLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lU2FmYXJpLmgJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3
ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChj
b25zdCBSZW5kZXJPYmplY3QmLCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250
cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsCisgICAgdmly
dHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEJvcmRl
ckRhdGEmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsbExheWVy
JiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CkBAIC03
NCw1NiArNzQsNTYgQEAgcHVibGljOgogICAgIC8vIFN5c3RlbSBmb250cy4KICAgICB2aXJ0dWFs
IHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlJikgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsgCisgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7IAogICAgIAotICAgIHZpcnR1YWwg
aW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZp
cnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSopIGNv
bnN0OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0
eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJl
bmRlclN0eWxlJikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdS
aWdodChSZW5kZXJTdHlsZSYpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQ
YWRkaW5nVG9wKFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRl
cm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAg
IC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHls
ZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUm
KSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFJh
ZGlvU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIFdlYkNvcmU6OkVsZW1lbnQq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgV2ViQ29yZTo6RWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5
bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSYp
IGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IEVsZW1lbnQmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogCiAgICAg
dmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxk
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogCi0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNv
cmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAg
CiAgICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpAQCAtMTM0LDkgKzEzNCw5
IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCi0gICAg
dmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNv
bnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEludFNpemUgbWV0ZXJT
aXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0KSBjb25z
dCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlk
ZTsKICNlbmRpZgogCkBAIC0xNTAsMTMgKzE1MCwxMyBAQCBwcml2YXRlOgogCiAgICAgLy8gR2V0
IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LiAgVXNlZCBieSBzb21lIG9mIHRo
ZSBjb250cm9scyAobGlrZSBidXR0b25zKS4KIAotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNp
emVGb3JGb250KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgTlNDb250cm9sU2l6ZSBjb250cm9s
U2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBOU0NvbnRyb2xTaXpl
IGNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSYpIGNvbnN0OworICAgIE5TQ29udHJvbFNp
emUgY29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJikgY29uc3Q7CiAgICAgLy92
b2lkIHNldENvbnRyb2xTaXplKE5TQ2VsbCosIGNvbnN0IEludFNpemUqIHNpemVzLCBjb25zdCBJ
bnRTaXplJiBtaW5TaXplKTsKLSAgICB2b2lkIHNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSos
IGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKLSAgICBJbnRTaXplIHNpemVGb3JGb250KFJl
bmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAgIEludFNpemUgc2l6
ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7
Ci0gICAgdm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIE5TQ29udHJvbFNpemUpIGNvbnN0OworICAgIHZvaWQgc2V0U2l6ZUZyb21Gb250KFJl
bmRlclN0eWxlJiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAgIEludFNpemUgc2l6
ZUZvckZvbnQoUmVuZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7CisgICAg
SW50U2l6ZSBzaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSYsIGNvbnN0IEludFNpemUqIHNp
emVzKSBjb25zdDsKKyAgICB2b2lkIHNldEZvbnRGcm9tQ29udHJvbFNpemUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7CiAKICAgICAvLyBIZWxwZXJz
IGZvciBhZGp1c3RpbmcgYXBwZWFyYW5jZSBhbmQgZm9yIHBhaW50aW5nCiAgICAgY29uc3QgSW50
U2l6ZSogY2hlY2tib3hTaXplcygpIGNvbnN0OwpAQCAtMTY1LDcgKzE2NSw3IEBAIHByaXZhdGU6
CiAgICAgY29uc3QgSW50U2l6ZSogcmFkaW9TaXplcygpIGNvbnN0OwogICAgIGNvbnN0IGludCog
cmFkaW9NYXJnaW5zKE5TQ29udHJvbFNpemUpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRCdXR0b25Q
YWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlKiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7
CisgICAgdm9pZCBzZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlJiwg
TlNDb250cm9sU2l6ZSkgY29uc3Q7CiAgICAgY29uc3QgSW50U2l6ZSogYnV0dG9uU2l6ZXMoKSBj
b25zdDsKICAgICBjb25zdCBpbnQqIGJ1dHRvbk1hcmdpbnMoTlNDb250cm9sU2l6ZSkgY29uc3Q7
CiAKQEAgLTE3OCw3ICsxNzgsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IEludFNpemUqIHNlYXJj
aEZpZWxkU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBJbnRTaXplKiBjYW5jZWxCdXR0b25TaXpl
cygpIGNvbnN0OwogICAgIGNvbnN0IEludFNpemUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0
OwotICAgIHZvaWQgc2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAg
dm9pZCBzZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5bGUmKSBjb25zdDsKIAogICAgIFRoZW1l
Q29udHJvbFN0YXRlIGRldGVybWluZVN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJl
dmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw3ICsyOTEsNyBAQCBTdHJpbmcgUmVuZGVyVGhl
bWVXaW46OmV4dHJhUXVpcmtzU3R5bGVTCiAgICAgcmV0dXJuIFN0cmluZyh0aGVtZVdpblF1aXJr
c1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVdpblF1aXJrc1VzZXJBZ2VudFN0eWxl
U2hlZXQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNIb3Zlcihjb25zdCBS
ZW5kZXJTdHlsZSopIGNvbnN0Citib29sIFJlbmRlclRoZW1lV2luOjpzdXBwb3J0c0hvdmVyKGNv
bnN0IFJlbmRlclN0eWxlJikgY29uc3QKIHsKICAgICAvLyBUaGUgQ2xhc3NpYy8yayBsb29rIGhh
cyBubyBob3ZlciBlZmZlY3RzLgogICAgIHJldHVybiBoYXZlVGhlbWU7CkBAIC00MjksOSArNDI5
LDkgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNGb2N1cyhDb250cgogICAgIH0KIH0K
IAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNGb2N1c1Jpbmco
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIHJldHVybiBzdXBwb3J0c0Zv
Y3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOworICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxl
LmFwcGVhcmFuY2UoKSk7CiB9CiAKIHVuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVD
bGFzc2ljU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBDb250cm9sU3ViUGFydCBzdWJQYXJ0
KQpAQCAtNzMwLDEzICs3MzAsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRCdXR0b24o
Y29uc3QgUgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRq
dXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6
YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
UmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewogICAgIGludCB3aWR0aCA9
IDo6R2V0U3lzdGVtTWV0cmljcyhTTV9DWFZTQ1JPTEwpOwogICAgIGlmICh3aWR0aCA8PSAwKQog
ICAgICAgICB3aWR0aCA9IDE3OyAvLyBWaXN0YSdzIGRlZmF1bHQuCi0gICAgc3R5bGUtPnNldFdp
ZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3Ro
KHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQp
KTsKKyAgICBzdHlsZS5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CiB9CiAKIGJv
b2wgUmVuZGVyVGhlbWVXaW46OnBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtNzU1LDI5ICs3
NTUsMjkgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRJbm5lclNwaW5CdXR0bwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6c2V0Q2hlY2tib3hTaXplKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OnNldENoZWNrYm94
U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFu
ZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4K
LSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5o
ZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1
dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIEZJWE1FOiAgQSBoYXJkLWNvZGVkIHNpemUgb2YgMTMgaXMgdXNlZC4gIFRoaXMgaXMgd3Jv
bmcgYnV0IG5lY2Vzc2FyeSBmb3Igbm93LiAgSXQgbWF0Y2hlcyBGaXJlZm94LgogICAgIC8vIEF0
IGRpZmZlcmVudCBEUEkgc2V0dGluZ3Mgb24gV2luZG93cywgcXVlcnlpbmcgdGhlIHRoZW1lIGdp
dmVzIHlvdSBhIGxhcmdlciBzaXplIHRoYXQgYWNjb3VudHMgZm9yCiAgICAgLy8gdGhlIGhpZ2hl
ciBEUEkuICBVbnRpbCBvdXIgZW50aXJlIGVuZ2luZSBob25vcnMgYSBEUEkgc2V0dGluZyBvdGhl
ciB0aGFuIDk2LCB3ZSBjYW4ndCByZWx5IG9uIHRoZSB0aGVtZSdzCiAgICAgLy8gbWV0cmljcy4K
LSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aCgxMywgRml4ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgp
LmlzQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCgxMywgRml4ZWQpKTsK
KyAgICBpZiAoc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHls
ZS5zZXRXaWR0aChMZW5ndGgoMTMsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLmlz
QXV0bygpKQorICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKDEzLCBGaXhlZCkpOwogfQog
Ci1ib29sIFJlbmRlclRoZW1lV2luOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhl
bWVXaW46OnBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJ
bmZvJiBpLCBjb25zdCBGbG9hdFJlY3QmIHIpCiB7Ci0gICAgZHJhd0NvbnRyb2woaS5jb250ZXh0
LCAgbywgdGV4dEZpZWxkVGhlbWUoKSwgZ2V0VGhlbWVEYXRhKG8pLCByKTsKKyAgICBkcmF3Q29u
dHJvbChpLmNvbnRleHQsICBvLCB0ZXh0RmllbGRUaGVtZSgpLCBnZXRUaGVtZURhdGEobyksIElu
dFJlY3QocikpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6
cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVXaW46
OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBIQU5ETEUgdGhl
bWU7CiAgICAgaW50IHBhcnQ7CkBAIC03OTIsNDYgKzc5Miw0NiBAQCBib29sIFJlbmRlclRoZW1l
V2luOjpwYWludE1lbnVMaXN0KGNvbnN0CiAgICAgICAgIHBhcnQgPSBURlBfVEVYVEZJRUxEOwog
ICAgIH0KIAotICAgIGRyYXdDb250cm9sKHBhaW50SW5mby5jb250ZXh0LCByZW5kZXJlciwgdGhl
bWUsIFRoZW1lRGF0YShwYXJ0LCBkZXRlcm1pbmVTdGF0ZShyZW5kZXJlcikpLCByZWN0KTsKKyAg
ICBkcmF3Q29udHJvbChwYWludEluZm8uY29udGV4dCwgcmVuZGVyZXIsIHRoZW1lLCBUaGVtZURh
dGEocGFydCwgZGV0ZXJtaW5lU3RhdGUocmVuZGVyZXIpKSwgSW50UmVjdChyZWN0KSk7CiAgICAg
CiAgICAgcmV0dXJuIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFp
bnRJbmZvLCBGbG9hdFJlY3QocmVjdCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1
c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdE1l
bnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0
eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAg
IHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAgICAgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShzdHls
ZVJlc29sdmVyLCBzdHlsZSwgZSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdE1l
bnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJT
dHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgLy8gVGhlc2UgYXJlIHRoZSBw
YWRkaW5ncyBuZWVkZWQgdG8gcGxhY2UgdGhlIHRleHQgY29ycmVjdGx5IGluIHRoZSA8c2VsZWN0
PiBib3gKICAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nVG9wICAgID0gMjsKLSAgICBj
b25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nUmlnaHQgID0gc3R5bGUtPmRpcmVjdGlvbigpID09
IExUUiA/IDQgKyBkcm9wRG93bkJ1dHRvbldpZHRoIDogNDsKKyAgICBjb25zdCBpbnQgZHJvcERv
d25Cb3hQYWRkaW5nUmlnaHQgID0gc3R5bGUuZGlyZWN0aW9uKCkgPT0gTFRSID8gNCArIGRyb3BE
b3duQnV0dG9uV2lkdGggOiA0OwogICAgIGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdCb3R0
b20gPSAyOwotICAgIGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdMZWZ0ICAgPSBzdHlsZS0+
ZGlyZWN0aW9uKCkgPT0gTFRSID8gNCA6IDQgKyBkcm9wRG93bkJ1dHRvbldpZHRoOworICAgIGNv
bnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdMZWZ0ICAgPSBzdHlsZS5kaXJlY3Rpb24oKSA9PSBM
VFIgPyA0IDogNCArIGRyb3BEb3duQnV0dG9uV2lkdGg7CiAgICAgLy8gVGhlIDxzZWxlY3Q+IGJv
eCBtdXN0IGJlIGF0IGxlYXN0IDEycHggaGlnaCBmb3IgdGhlIGJ1dHRvbiB0byByZW5kZXIgbmlj
ZWx5IG9uIFdpbmRvd3MKICAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hNaW5IZWlnaHQgPSAxMjsK
ICAgICAKICAgICAvLyBQb3NpdGlvbiB0aGUgdGV4dCBjb3JyZWN0bHkgd2l0aGluIHRoZSBzZWxl
Y3QgYm94IGFuZCBtYWtlIHRoZSBib3ggd2lkZSBlbm91Z2ggdG8gZml0IHRoZSBkcm9wZG93biBi
dXR0b24KLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5n
VG9wLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKGRyb3BEb3du
Qm94UGFkZGluZ1JpZ2h0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExl
bmd0aChkcm9wRG93bkJveFBhZGRpbmdCb3R0b20sIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdMZWZ0KExlbmd0aChkcm9wRG93bkJveFBhZGRpbmdMZWZ0LCBGaXhlZCkpOworICAgIHN0
eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ1RvcCwgRml4ZWQpKTsK
KyAgICBzdHlsZS5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ1JpZ2h0
LCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKGRyb3BEb3duQm94
UGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nTGVmdChMZW5ndGgo
ZHJvcERvd25Cb3hQYWRkaW5nTGVmdCwgRml4ZWQpKTsKIAogICAgIC8vIEhlaWdodCBpcyBsb2Nr
ZWQgdG8gYXV0bwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKKyAgICBzdHls
ZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKIAogICAgIC8vIENhbGN1bGF0ZSBvdXIgbWluLWhl
aWdodAotICAgIGludCBtaW5IZWlnaHQgPSBzdHlsZS0+Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsK
KyAgICBpbnQgbWluSGVpZ2h0ID0gc3R5bGUuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKICAgICBt
aW5IZWlnaHQgPSBtYXgobWluSGVpZ2h0LCBkcm9wRG93bkJveE1pbkhlaWdodCk7CiAKLSAgICBz
dHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChtaW5IZWlnaHQsIEZpeGVkKSk7CisgICAgc3R5bGUu
c2V0TWluSGVpZ2h0KExlbmd0aChtaW5IZWlnaHQsIEZpeGVkKSk7CiAKLSAgICBzdHlsZS0+c2V0
TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUu
c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAgICAgCiAg
ICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0eWxlLT5zZXRXaGl0ZVNw
YWNlKFBSRSk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogfQogCiBib29sIFJlbmRl
clRoZW1lV2luOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKQEAgLTg4NiwxNSArODg2LDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50
U2xpZGVyVGh1bWIoY28KIGNvbnN0IGludCBzbGlkZXJUaHVtYldpZHRoID0gNzsKIGNvbnN0IGlu
dCBzbGlkZXJUaHVtYkhlaWdodCA9IDE1OwogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RT
bGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVXaW46OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUs
IEVsZW1lbnQmKSBjb25zdAogewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFy
YW5jZSgpOworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS5hcHBlYXJhbmNlKCk7CiAgICAg
aWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNl
dFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5
bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOworICAgICAgICBz
dHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7CiAgICAgfSBl
bHNlIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpIHsKLSAgICAgICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOwotICAgICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKKyAgICAg
ICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7CisgICAg
ICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CiAg
ICAgfQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKENHKQogICAgIGVsc2UgaWYgKHBhcnQgPT0g
TWVkaWFTbGlkZXJUaHVtYlBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFy
dCkgCkBAIC05MDcsMTYgKzkwNywxNiBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJj
aEZpZWxkKGNvCiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwogfQogCi12b2lk
IFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewogICAg
IC8vIE92ZXJyaWRlIHBhZGRpbmdTaXplIHRvIG1hdGNoIEFwcEtpdCB0ZXh0IHBvc2l0aW9uaW5n
LgogICAgIGNvbnN0IGludCBwYWRkaW5nID0gMTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQo
TGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5n
dGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFk
ZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGlu
ZywgRml4ZWQpKTsKLSAgICBpZiAoZSAmJiBlLT5mb2N1c2VkKCkgJiYgZS0+ZG9jdW1lbnQoKS5m
cmFtZSgpLT5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkKLSAgICAgICAgc3R5bGUt
PnNldE91dGxpbmVPZmZzZXQoLTIpOworICAgIHN0eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0aChw
YWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGlu
ZywgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhl
ZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7
CisgICAgaWYgKGUuZm9jdXNlZCgpICYmIGUuZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24o
KS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkKKyAgICAgICAgc3R5bGUuc2V0T3V0bGluZU9mZnNldCgt
Mik7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0
b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKQEAgLTk0NCwzMCArOTQ0LDMwIEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46
OnBhaW50U2VhcmNoRmllbGRDYW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
V2luOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIFNjYWxlIHRoZSBi
dXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplCi0gICAgZmxvYXQgZm9udFNjYWxlID0g
c3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7CisgICAgZmxv
YXQgZm9udFNjYWxlID0gc3R5bGUuZm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVs
U2l6ZTsKICAgICBpbnQgY2FuY2VsQnV0dG9uU2l6ZSA9IGxyb3VuZGYobWluKG1heChtaW5DYW5j
ZWxCdXR0b25TaXplLCBkZWZhdWx0Q2FuY2VsQnV0dG9uU2l6ZSAqIGZvbnRTY2FsZSksIG1heENh
bmNlbEJ1dHRvblNpemUpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGNhbmNlbEJ1dHRv
blNpemUsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9u
U2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6
ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUs
IEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkRGVj
b3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
JikgY29uc3QKIHsKICAgICBJbnRTaXplIGVtcHR5U2l6ZSgxLCAxMSk7Ci0gICAgc3R5bGUtPnNl
dFdpZHRoKExlbmd0aChlbXB0eVNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChlbXB0eVNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0
V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhl
aWdodChMZW5ndGgoZW1wdHlTaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRl
clRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsK
ICAgICAvLyBTY2FsZSB0aGUgZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUK
LSAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9s
Rm9udFBpeGVsU2l6ZTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8g
ZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOwogICAgIGludCBtYWduaWZpZXJTaXplID0gbHJv
dW5kZihtaW4obWF4KG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplLCBkZWZhdWx0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgKiBmb250U2NhbGUpLCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uU2l6ZSkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4
ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkp
OworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOworICAg
IHN0eWxlLnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4ZWQpKTsKIH0KIAogYm9v
bCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChj
b25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByKQpAQCAtOTkzLDE1ICs5OTMsMTUgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFp
bnRTZWFyY2hGaWVsZFJlcwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2lu
OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAvLyBTY2FsZSB0aGUgYnV0
dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0
eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOworICAgIGZsb2F0
IGZvbnRTY2FsZSA9IHN0eWxlLmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNp
emU7CiAgICAgaW50IG1hZ25pZmllckhlaWdodCA9IGxyb3VuZGYobWluKG1heChtaW5TZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSwgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TaXplICogZm9udFNjYWxlKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1heFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKSk7CiAgICAgaW50IG1hZ25p
ZmllcldpZHRoID0gbHJvdW5kZihtYWduaWZpZXJIZWlnaHQgKiBkZWZhdWx0U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uV2lkdGggLyBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNp
emUpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyV2lkdGgsIEZpeGVkKSk7
Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVySGVpZ2h0LCBGaXhlZCkpOwor
ICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJXaWR0aCwgRml4ZWQpKTsKKyAgICBz
dHlsZS5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllckhlaWdodCwgRml4ZWQpKTsKIH0KIAogYm9v
bCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKQEAgLTExNTcsOSArMTE1Nyw5IEBAIFN0cmluZyBSZW5kZXJUaGVtZVdpbjo6bWVkaWFDb250
cm9sc1NjcmkKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCi12b2lkIFJlbmRl
clRoZW1lV2luOjphZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0TWV0ZXJT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QK
IHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNo
YWRvdyhudWxscHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNNZXRlcihD
b250cm9sUGFydCBwYXJ0KSBjb25zdApAQCAtMTE3Miw3ICsxMTcyLDcgQEAgYm9vbCBSZW5kZXJU
aGVtZVdpbjo6c3VwcG9ydHNNZXRlcihDb250cgogICAgIH0KIH0KIAotSW50U2l6ZSBSZW5kZXJU
aGVtZVdpbjo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29uc3QgSW50
UmVjdCYgYm91bmRzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZVdpbjo6bWV0ZXJTaXplRm9y
Qm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAog
ewogICAgIHJldHVybiBib3VuZHMuc2l6ZSgpOwogfQpAQCAtMTE4Miw3ICsxMTgyLDcgQEAgYm9v
bCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZXRlcihjb25zdCBSZQogICAgIGlmICghcmVuZGVyT2Jq
ZWN0LmlzTWV0ZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBIVE1MTWV0ZXJFbGVt
ZW50KiBlbGVtZW50ID0gdG9SZW5kZXJNZXRlcigmcmVuZGVyT2JqZWN0KS0+bWV0ZXJFbGVtZW50
KCk7CisgICAgSFRNTE1ldGVyRWxlbWVudCogZWxlbWVudCA9IHRvUmVuZGVyTWV0ZXIocmVuZGVy
T2JqZWN0KS5tZXRlckVsZW1lbnQoKTsKIAogICAgIFRoZW1lRGF0YSB0aGVtZSA9IGdldFRoZW1l
RGF0YShyZW5kZXJPYmplY3QpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVXaW4uaAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDc0ICs1NSw3NCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7CiAKICAg
ICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkgY2Fy
ZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1
YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZl
U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBwbGF0
Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rp
b25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIC8vIFN5c3RlbSBmb250cy4KLSAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NW
YWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHN5c3Rl
bUNvbG9yKENTU1ZhbHVlSUQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KENT
U1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Q29sb3Igc3lzdGVtQ29sb3IoQ1NTVmFsdWVJRCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2Jv
eChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcikgb3ZlcnJpZGUKICAgICB7IHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNv
bnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcikgb3ZlcnJpZGUKICAgICB7IHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsg
fQotICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAorICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dCBvdmVycmlkZQogICAgIHsgcmV0dXJuIHNldENoZWNrYm94U2l6ZShzdHlsZSk7IH0KIAotICAg
IHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGlu
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNv
bnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
KQorICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYgbywg
Y29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBGbG9hdFJlY3QmIHIpIG92ZXJyaWRlCiAgICAgeyBy
ZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1
dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVj
b3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxv
YXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
bGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNs
aWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXpl
KFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBi
b29sIHBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
RGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGREZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2Vk
KCk7CisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIG92ZXJyaWRlOwogCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZp
ZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHls
ZSwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RU
ZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0IG92
ZXJyaWRlIHsgfQogCiAgICAgc3RhdGljIHZvaWQgc2V0V2ViS2l0SXNCZWluZ1VubG9hZGVkKCk7
CiAKICAgICBzdGF0aWMgU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZShDRlN0cmluZ1Jl
ZiBuYW1lLCBDRlN0cmluZ1JlZiB0eXBlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Zv
Y3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAjaWYg
RU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0
KCkgb3ZlcnJpZGU7CkBAIC0xMzAsMTMgKzEzMCwxMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShNRVRFUl9FTEVNRU5UKQotICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNpemVGb3JC
b3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRl
ciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNNZXRlcihDb250cm9sUGFydCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKIHByaXZhdGU6CiAgICAgZW51bSBDb250
cm9sU3ViUGFydCB7CkBAIC0xNDgsNyArMTQ4LDcgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJUaGVt
ZVdpbigpOwogICAgIHZpcnR1YWwgflJlbmRlclRoZW1lV2luKCk7CiAKLSAgICB2b2lkIGFkZElu
dHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2b2lkIGFkZEludHJpbnNp
Y01hcmdpbnMoUmVuZGVyU3R5bGUmKSBjb25zdDsKICAgICB2b2lkIGNsb3NlKCk7CiAKICAgICB1
bnNpZ25lZCBkZXRlcm1pbmVTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233769</attachid>
            <date>2014-06-24 17:36:39 -0700</date>
            <delta_ts>2014-06-24 22:10:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134261-20140624173618.patch</filename>
            <type>text/plain</type>
            <size>215976</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1MyBAQAorMjAxNC0wNi0yNCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorICAgICAgICAgICAgQW5kIHBl
YXZvQG91dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5jb20+CisKKyAgICAgICAgVXNlIHJlZmVy
ZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycyBpbiBSZW5kZXJUaGVtZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDI2MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgor
ICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkSGF2ZVNwaW5CdXR0b24pOgorICAgICAgICAqIGh0
bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZWZs
L1JlbmRlclRoZW1lRWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTaXplQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6c3Vw
cG9ydHNGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFkanVz
dFNsaWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6
OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0Q2hlY2tib3hTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFk
anVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFk
anVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVFZmw6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9S
ZW5kZXJUaGVtZUVmbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1Jpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RTZWFyY2hGaWVs
ZEljb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpib3JkZXJSYWRpaUZyb21TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVGh1bWIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uUmVwZWF0SW50
ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGsuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGsyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFRvZ2dsZVNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lR3RrOjpjb21ib0JveEFycm93U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzZXRUb2dnbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpz
ZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnNldFJh
ZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRDb21ib0JveE1ldHJpY3MpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRp
bmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQ
YWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RT
bGlkZXJUaHVtYlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVz
dElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxp
c3Q6OmFkanVzdElubmVyU3R5bGUpOgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjptZW51U3R5
bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZXRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZXRlcjo6dXBkYXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1ldGVyOjpjb21wdXRlTG9naWNhbEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBhaW50
T3V0bGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjp1cGRhdGVBbmltYXRpb25TdGF0ZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjphZGp1c3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXND
b250cm9sU3R5bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzdXBwb3J0c0Zv
Y3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RSYWRpb1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjphZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1ldGVyU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6Om1ldGVyU2l6ZUZvckJvdW5kcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVz
c0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2hvdWxkSGF2ZVNwaW5CdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUcmFja1N0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNl
YXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
U3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnN1cHBvcnRzSG92ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6Om1pbmltdW1NZW51TGlzdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjpwb3B1cE1lbnVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjpzZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnNldFJhZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2V0QnV0dG9u
U2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OmFkanVzdENoZWNrYm94U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlP
Uzo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSU9TOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6c2V0QnV0dG9uU2l6ZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmlzQ29u
dHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNp
emVGb3JGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzaXplRm9yRm9u
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvclN5c3RlbUZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFNpemVGcm9tRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9sU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpemVGb3JTeXN0ZW1G
b250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEFyZWFT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXplRm9yQm91bmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1ldGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpsZXZlbEluZGljYXRvckZvcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjptaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlvblJlcGVhdEludGVydmFs
Rm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cE1lbnVTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNo
RmllbGREZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVy
VGh1bWJTaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmlzQ29udHJvbFN0eWxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YmFzZWxpbmVQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFNpemVGb3JGb250KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpzaXplRm9yRm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6c2l6ZUZvclN5c3RlbUZvbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnNldFNpemVGcm9tRm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Rm9udEZyb21Db250cm9sU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFNpemVGb3JTeXN0
ZW1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpzZXRDaGVja2Jv
eFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnNldFJhZGlvU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6c2V0QnV0dG9uUGFkZGlu
Z0Zyb21Db250cm9sU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6
YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6
OnNldEJ1dHRvblNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFk
anVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJp
OjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Fm
YXJpOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
U2FmYXJpOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRv
bSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6bWluaW11
bU1lbnVMaXN0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRq
dXN0U2xpZGVyVGh1bWJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFy
aTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
U2FmYXJpOjpzZXRTZWFyY2hGaWVsZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1ldGVyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6Om1ldGVyU2l6ZUZvckJv
dW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZXRlcik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
V2luOjpzdXBwb3J0c0hvdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpz
dXBwb3J0c0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRq
dXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVX
aW46OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6
cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50
TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdE1lbnVM
aXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdE1lbnVM
aXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVz
dFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVdpbjo6YWRqdXN0TWV0ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVdpbjo6bWV0ZXJTaXplRm9yQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lV2luOjpwYWludE1ldGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVX
aW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludENoZWNrYm94KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludFJhZGlvKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpzZXRSYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVXaW46OnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdEJ1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RUZXh0RmllbGRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRqdXN0VGV4dEFyZWFTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6c2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hl
bkZvY3VzZWQpOgorCiAyMDE0LTA2LTI0ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29t
PgogCiAgICAgICAgIFtNU0VdW01hY10gVW5jYXVnaHQgZXhjZXB0aW9uIHdoZW4gZGVhbGxvY2F0
aW5nIEFWU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMzIsOCArMTMzMiwxMCBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlCiAgICAgfQogCiAgICAgLy8gTGV0
IHRoZSB0aGVtZSBhbHNvIGhhdmUgYSBjcmFjayBhdCBhZGp1c3RpbmcgdGhlIHN0eWxlLgotICAg
IGlmIChzdHlsZS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0
VGhlbWUoKS0+YWRqdXN0U3R5bGUoKnRoaXMsIHN0eWxlLCBlLCBtX3N0YXRlLmhhc1VBQXBwZWFy
YW5jZSgpLCBtX3N0YXRlLmJvcmRlckRhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSgpLCBt
X3N0YXRlLmJhY2tncm91bmRDb2xvcigpKTsKKyAgICBpZiAoc3R5bGUuaGFzQXBwZWFyYW5jZSgp
KSB7CisgICAgICAgIEFTU0VSVChlKTsKKyAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLT5hZGp1c3RTdHlsZSgqdGhpcywgc3R5bGUsICplLCBtX3N0YXRlLmhhc1VBQXBwZWFyYW5j
ZSgpLCBtX3N0YXRlLmJvcmRlckRhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSgpLCBtX3N0
YXRlLmJhY2tncm91bmRDb2xvcigpKTsKKyAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0
LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0eWxlLgogICAgIGlmIChz
dHlsZS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzIsNyArMjMyLDcgQEAgYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZEhhdmVTcGluQgog
ewogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQoKS5kb2N1bWVudCgpOwogICAgIFJl
ZlB0cjxSZW5kZXJUaGVtZT4gdGhlbWUgPSBkb2N1bWVudC5wYWdlKCkgPyAmZG9jdW1lbnQucGFn
ZSgpLT50aGVtZSgpIDogUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpOwotICAgIHJldHVybiB0
aGVtZS0+c2hvdWxkSGF2ZVNwaW5CdXR0b24oJmVsZW1lbnQoKSk7CisgICAgcmV0dXJuIHRoZW1l
LT5zaG91bGRIYXZlU3BpbkJ1dHRvbihlbGVtZW50KCkpOwogfQogCiB2b2lkIFRleHRGaWVsZElu
cHV0VHlwZTo6Y3JlYXRlU2hhZG93U3VidHJlZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3MDM3MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDggKzk0LDEwIEBAIHZvaWQgUmVuZGVyU2xpZGVyVGh1bWI6OnVw
ZGF0ZUFwcGVhcmFuY2UKICAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1lZGlhVm9sdW1l
U2xpZGVyVGh1bWJQYXJ0KTsKICAgICBlbHNlIGlmIChwYXJlbnRTdHlsZS0+YXBwZWFyYW5jZSgp
ID09IE1lZGlhRnVsbFNjcmVlblZvbHVtZVNsaWRlclBhcnQpCiAgICAgICAgIHN0eWxlKCkuc2V0
QXBwZWFyYW5jZShNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwotICAgIGlm
IChzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkKLSAgICAgICAgdGhlbWUoKS5hZGp1c3RTbGlkZXJU
aHVtYlNpemUoJnN0eWxlKCksIGVsZW1lbnQoKSk7CisgICAgaWYgKHN0eWxlKCkuaGFzQXBwZWFy
YW5jZSgpKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50KCkpOworICAgICAgICB0aGVtZSgpLmFk
anVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSgpLCAqZWxlbWVudCgpKTsKKyAgICB9CiB9CiAKIGJv
b2wgUmVuZGVyU2xpZGVyVGh1bWI6OmlzU2xpZGVyVGh1bWIoKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwCShyZXZpc2lvbiAx
NzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMjcgKzEyNSwyNyBAQCBzdGF0aWMgYm9vbCBzZXRTb3Vy
Y2VHcm91cEZvckVkamVPYmplY3QoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVFZmw6OmFkanVzdFNpemVDb25zdHJhaW50cyhSZW5kZXJTdHlsZSogc3R5bGUsIEZvcm1U
eXBlIHR5cGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTaXplQ29uc3RyYWlu
dHMoUmVuZGVyU3R5bGUmIHN0eWxlLCBGb3JtVHlwZSB0eXBlKSBjb25zdAogewogICAgIGxvYWRU
aGVtZUlmTmVlZGVkKCk7CiAKICAgICAvLyBUaGVzZSBhcmUgYWx3YXlzIHZhbGlkLCBldmVuIGlm
IG5vIHRoZW1lIGNvdWxkIGJlIGxvYWRlZC4KICAgICBjb25zdCBUaGVtZVBhcnREZXNjKiBkZXNj
ID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KXR5cGU7CiAKLSAgICBpZiAoc3R5bGUtPm1pbldpZHRo
KCkuaXNJbnRyaW5zaWMoKSkKLSAgICAgICAgc3R5bGUtPnNldE1pbldpZHRoKGRlc2MtPm1pbi53
aWR0aCgpKTsKLSAgICBpZiAoc3R5bGUtPm1pbkhlaWdodCgpLmlzSW50cmluc2ljKCkpCi0gICAg
ICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKLQotICAgIGlmIChk
ZXNjLT5tYXgud2lkdGgoKS52YWx1ZSgpID4gMCAmJiBzdHlsZS0+bWF4V2lkdGgoKS5pc0ludHJp
bnNpY09yQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0TWF4V2lkdGgoZGVzYy0+bWF4LndpZHRo
KCkpOwotICAgIGlmIChkZXNjLT5tYXguaGVpZ2h0KCkudmFsdWUoKSA+IDAgJiYgc3R5bGUtPm1h
eEhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRNYXhIZWln
aHQoZGVzYy0+bWF4LmhlaWdodCgpKTsKLQotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKGRlc2Mt
PnBhZGRpbmcudG9wKCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKGRlc2MtPnBhZGRp
bmcuYm90dG9tKCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChkZXNjLT5wYWRkaW5nLmxl
ZnQoKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChkZXNjLT5wYWRkaW5nLnJpZ2h0KCkp
OworICAgIGlmIChzdHlsZS5taW5XaWR0aCgpLmlzSW50cmluc2ljKCkpCisgICAgICAgIHN0eWxl
LnNldE1pbldpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKKyAgICBpZiAoc3R5bGUubWluSGVpZ2h0
KCkuaXNJbnRyaW5zaWMoKSkKKyAgICAgICAgc3R5bGUuc2V0TWluSGVpZ2h0KGRlc2MtPm1pbi5o
ZWlnaHQoKSk7CisKKyAgICBpZiAoZGVzYy0+bWF4LndpZHRoKCkudmFsdWUoKSA+IDAgJiYgc3R5
bGUubWF4V2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHlsZS5zZXRNYXhX
aWR0aChkZXNjLT5tYXgud2lkdGgoKSk7CisgICAgaWYgKGRlc2MtPm1heC5oZWlnaHQoKS52YWx1
ZSgpID4gMCAmJiBzdHlsZS5tYXhIZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAg
ICBzdHlsZS5zZXRNYXhIZWlnaHQoZGVzYy0+bWF4LmhlaWdodCgpKTsKKworICAgIHN0eWxlLnNl
dFBhZGRpbmdUb3AoZGVzYy0+cGFkZGluZy50b3AoKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0Jv
dHRvbShkZXNjLT5wYWRkaW5nLmJvdHRvbSgpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nTGVmdChk
ZXNjLT5wYWRkaW5nLmxlZnQoKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ1JpZ2h0KGRlc2MtPnBh
ZGRpbmcucmlnaHQoKSk7CiB9CiAKIHN0YXRpYyBib29sIGlzRm9ybUVsZW1lbnRUb29MYXJnZVRv
RGlzcGxheShjb25zdCBJbnRTaXplJiBlbGVtZW50U2l6ZSkKQEAgLTM0Niw5ICszNDYsOSBAQCB2
b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZShFCiAgICAgfQogfQogCi1ib29s
IFJlbmRlclRoZW1lRWZsOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
LCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwg
Y29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6
OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRh
dGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFj
a2dyb3VuZENvbG9yKSBjb25zdAogewotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9s
U3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcikgfHwgc3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQ7CisgICAgcmV0dXJuIFJlbmRl
clRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dy
b3VuZENvbG9yKSB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0Owog
fQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRoZW1lUGFydChjb25zdCBSZW5kZXJPYmpl
Y3QmIG9iamVjdCwgRm9ybVR5cGUgdHlwZSwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQpAQCAtNjI3LDkgKzYyNyw5IEBAIHN0YXRpYyBib29sIHN1cHBvcnRzRm9j
dXMoQ29udHJvbFBhcnQgYXAKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnN1cHBv
cnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2Jvb2wgUmVuZGVy
VGhlbWVFZmw6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29u
c3QKIHsKLSAgICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS0+YXBwZWFyYW5jZSgpKTsKKyAg
ICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS5hcHBlYXJhbmNlKCkpOwogfQogCiBib29sIFJl
bmRlclRoZW1lRWZsOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmIG9i
amVjdCkgY29uc3QKQEAgLTY5OSwyNiArNjk5LDI2IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBh
aW50U2xpZGVyVHJhY2soY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTbGlk
ZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQm
KSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUu
c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RT
bGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclRoZW1l
OjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsK
LSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRv
dyhudWxscHRyKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVGh1bWJT
aXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
RWZsOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50Jikg
Y29uc3QKIHsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAg
ICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFyYW5jZSgpOwogICAgIGlmIChwYXJ0ID09
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5n
dGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldFdpZHRo
KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0SGVp
Z2h0KExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOwogICAgIH0gZWxzZSBpZiAocGFy
dCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0
aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhl
aWdodChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNl
dFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOworICAgICAgICBzdHlsZS5z
ZXRIZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOwogICAgIH0KIH0KIApA
QCAtNzY2LDcgKzc2Niw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2xpZGVyVGh1bWIo
Y28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdENo
ZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0
Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYgZWxl
bWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNfY2Fz
dDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5h
ZGp1c3RDaGVja2JveFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKQEAgLTc3
NSwxMyArNzc1LDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdENoZWNrYm94U3R5bGUK
IAogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgQ2hlY2tCb3gpOwogCi0gICAgc3R5
bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKIAogICAgIGNvbnN0
IFRoZW1lUGFydERlc2MqIGRlc2MgPSBtX3BhcnREZXNjcyArIChzaXplX3QpQ2hlY2tCb3g7Ci0g
ICAgaWYgKHN0eWxlLT53aWR0aCgpLnZhbHVlKCkgPCBkZXNjLT5taW4ud2lkdGgoKS52YWx1ZSgp
KQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoZGVzYy0+bWluLndpZHRoKCkpOwotICAgIGlmIChz
dHlsZS0+aGVpZ2h0KCkudmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgpKQotICAg
ICAgICBzdHlsZS0+c2V0SGVpZ2h0KGRlc2MtPm1pbi5oZWlnaHQoKSk7CisgICAgaWYgKHN0eWxl
LndpZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1pbi53aWR0aCgpLnZhbHVlKCkpCisgICAgICAgIHN0
eWxlLnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKKyAgICBpZiAoc3R5bGUuaGVpZ2h0KCku
dmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgpKQorICAgICAgICBzdHlsZS5zZXRI
ZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFp
bnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtNzg5LDcgKzc4OSw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVFZmw6OnBhaW50Q2hlY2tib3goY29uc3QKICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQo
b2JqZWN0LCBDaGVja0JveCwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6
OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYg
ZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgp
KS5hZGp1c3RSYWRpb1N0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKQEAgLTc5
OCwxMyArNzk4LDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFJhZGlvU3R5bGUoU3QK
IAogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgUmFkaW9CdXR0b24pOwogCi0gICAg
c3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKIAogICAgIGNv
bnN0IFRoZW1lUGFydERlc2MqIGRlc2MgPSBtX3BhcnREZXNjcyArIChzaXplX3QpUmFkaW9CdXR0
b247Ci0gICAgaWYgKHN0eWxlLT53aWR0aCgpLnZhbHVlKCkgPCBkZXNjLT5taW4ud2lkdGgoKS52
YWx1ZSgpKQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoZGVzYy0+bWluLndpZHRoKCkpOwotICAg
IGlmIChzdHlsZS0+aGVpZ2h0KCkudmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgp
KQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KGRlc2MtPm1pbi5oZWlnaHQoKSk7CisgICAgaWYg
KHN0eWxlLndpZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1pbi53aWR0aCgpLnZhbHVlKCkpCisgICAg
ICAgIHN0eWxlLnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKKyAgICBpZiAoc3R5bGUuaGVp
Z2h0KCkudmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgpKQorICAgICAgICBzdHls
ZS5zZXRIZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVm
bDo6cGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtODEyLDcgKzgxMiw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVFZmw6OnBhaW50UmFkaW8oY29uc3QgUmUKICAgICByZXR1cm4gcGFpbnRUaGVtZVBh
cnQob2JqZWN0LCBSYWRpb0J1dHRvbiwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAoIW1f
cGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7CiAgICAgICAg
IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkt
PnRoZW1lKCkpLmFkanVzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50
KTsKQEAgLTgyMCw3ICs4MjAsNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RCdXR0b25T
dHlsZShTCiAgICAgfQogCiAgICAgLy8gYWRqdXN0U2l6ZUNvbnN0cmFpbnMgY2FuIG1ha2UgU3F1
YXJlQnV0dG9uUGFydCdzIHNpemUgd3JvbmcgKGJ5IGFkanVzdGluZyBwYWRkaW5ncyksIHNvIGNh
bGwgaXQgb25seSBmb3IgUHVzaEJ1dHRvblBhcnQgYW5kIEJ1dHRvblBhcnQKLSAgICBpZiAoc3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgp
ID09IEJ1dHRvblBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9u
UGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gQnV0dG9uUGFydCkKICAgICAgICAgYWRqdXN0
U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBCdXR0b24pOwogfQogCkBAIC04MjksMTcgKzgyOSwxNyBA
QCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludEJ1dHRvbihjb25zdCBSCiAgICAgcmV0dXJuIHBh
aW50VGhlbWVQYXJ0KG9iamVjdCwgQnV0dG9uLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lRWZsOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7
CiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQo
KS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5
bGUsIGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFkanVzdFNpemVDb25z
dHJhaW50cyhzdHlsZSwgQ29tYm9Cb3gpOwotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAg
IHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKKyAg
ICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdo
dChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhl
bWVFZmw6OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgaW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtODY4LDE0ICs4NjgsMTQg
QEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIHJldHVybiBw
YWludE1lbnVMaXN0KG9iamVjdCwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVF
Zmw6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAo
IW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7CiAgICAg
ICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdl
KCktPnRoZW1lKCkpLmFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBl
bGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXplQ29uc3RyYWlu
dHMoc3R5bGUsIFRleHRGaWVsZCk7Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5
bGUucmVzZXRCb3JkZXIoKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0Rmll
bGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29u
c3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtODgzLDcgKzg4Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVF
Zmw6OnBhaW50VGV4dEZpZWxkKGNvbnMKICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0
LCBUZXh0RmllbGQsIGluZm8sIEludFJlY3QocmVjdCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1l
RWZsOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEFyZWFTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAt
ODkyLDIxICs4OTIsMjEgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0QXJlYShjb25z
dAogICAgIHJldHVybiBwYWludFRleHRGaWVsZChvYmplY3QsIGluZm8sIHJlY3QpOwogfQogCi12
b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYg
ZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgp
KS5hZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHls
ZSwgZWxlbWVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYWRqdXN0U2l6ZUNvbnN0
cmFpbnRzKHN0eWxlLCBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24pOwotICAgIHN0eWxlLT5yZXNl
dEJvcmRlcigpOwotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUucmVz
ZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKLSAgICBmbG9hdCBm
b250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKKyAgICBmbG9h
dCBmb250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdEZvbnRTaXplOwogICAgIGlu
dCBkZWNvcmF0aW9uU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluU2VhcmNoRGVj
b3JhdGlvbkJ1dHRvblNpemUsIGRlZmF1bHRGb250U2l6ZSAqIGZvbnRTY2FsZSksIG1heFNlYXJj
aERlY29yYXRpb25CdXR0b25TaXplKSk7CiAKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGRl
Y29yYXRpb25TaXplICsgc2VhcmNoRmllbGREZWNvcmF0aW9uQnV0dG9uT2Zmc2V0LCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGRlY29yYXRpb25TaXplLCBGaXhlZCkpOwor
ICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChkZWNvcmF0aW9uU2l6ZSArIHNlYXJjaEZpZWxkRGVj
b3JhdGlvbkJ1dHRvbk9mZnNldCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3Ro
KGRlY29yYXRpb25TaXplLCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtOTE0LDIxICs5MTQs
MjEgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVsZFJlcwogICAgIHJldHVy
biBwYWludFRoZW1lUGFydChvYmplY3QsIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbiwgaW5mbywg
cmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVu
dCgpLnBhZ2UoKSkgewogICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1l
bnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOwotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAg
IHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKKyAg
ICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKLSAgICBmbG9hdCBmb250U2NhbGUgPSBzdHls
ZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBz
dHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdEZvbnRTaXplOwogICAgIGludCBkZWNvcmF0aW9uU2l6
ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluU2VhcmNoRGVjb3JhdGlvbkJ1dHRvblNp
emUsIGRlZmF1bHRGb250U2l6ZSAqIGZvbnRTY2FsZSksIG1heFNlYXJjaERlY29yYXRpb25CdXR0
b25TaXplKSk7CiAKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGRlY29yYXRpb25TaXplICsg
c2VhcmNoRmllbGREZWNvcmF0aW9uQnV0dG9uT2Zmc2V0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKGRlY29yYXRpb25TaXplLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdp
ZHRoKExlbmd0aChkZWNvcmF0aW9uU2l6ZSArIHNlYXJjaEZpZWxkRGVjb3JhdGlvbkJ1dHRvbk9m
ZnNldCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGRlY29yYXRpb25TaXpl
LCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC05MzYsMjMgKzkzNiwyMyBAQCBi
b29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIHBhaW50
VGhlbWVQYXJ0KG9iamVjdCwgU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbiwgaW5mbywgcmVj
dCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewogICAgICAg
ICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgp
LT50aGVtZSgpKS5hZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2
ZXIsIHN0eWxlLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RT
aXplQ29uc3RyYWludHMoc3R5bGUsIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKTsKLSAgICBzdHls
ZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgIHN0
eWxlLnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCiAgICAg
Ly8gTG9naWMgdGFrZW4gZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtLmNwcC4KICAgICAvLyBTY2Fs
ZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZS4KLSAgICBmbG9hdCBmb250
U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKKyAgICBmbG9hdCBm
b250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdEZvbnRTaXplOwogICAgIGludCBj
YW5jZWxCdXR0b25TaXplID0gbHJvdW5kZihzdGQ6Om1pbihzdGQ6Om1heChtaW5DYW5jZWxCdXR0
b25TaXplLCBkZWZhdWx0Rm9udFNpemUgKiBmb250U2NhbGUpLCBtYXhDYW5jZWxCdXR0b25TaXpl
KSk7CiAKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQp
KTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsK
KyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CiB9
CiAKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKQEAgLTk2MCwxNSArOTYwLDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBh
aW50U2VhcmNoRmllbGRDYW4KICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbiwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVF
Zmw6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewog
ICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCku
cGFnZSgpLT50aGVtZSgpKS5hZGp1c3RTZWFyY2hGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXplQ29u
c3RyYWludHMoc3R5bGUsIFNlYXJjaEZpZWxkKTsKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsK
LSAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7
CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZs
OjpwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC05NzYsNyArOTc2LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVsZChjbwogICAgIHJldHVybiBwYWludFRo
ZW1lUGFydChvYmplY3QsIFNlYXJjaEZpZWxkLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZUVmbDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50
KSBjb25zdAogewogICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1l
bnQoKS5wYWdlKCkpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVt
ZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwpAQCAtMTAwOCw5ICsxMDA4LDkgQEAg
dm9pZCBSZW5kZXJUaGVtZUVmbDo6c3lzdGVtRm9udChDU1NWYWx1ZQogfQogCiAjaWYgRU5BQkxF
KFBST0dSRVNTX0VMRU1FTlQpCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RQcm9ncmVzc0Jh
clN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+
c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsK
IH0KIAogZG91YmxlIFJlbmRlclRoZW1lRWZsOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclBy
b2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuaAkod29ya2luZyBjb3B5KQpA
QCAtNjgsMTMgKzY4LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJU
aGVtZT4gY3JlYXRlKFBhZ2UqKTsKIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhl
bWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQu
Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92
ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAK
ICAgICAvLyBBIG1ldGhvZCBSZXR1cm5pbmcgd2hldGhlciB0aGUgY29udHJvbCBpcyBzdHlsZWQg
YnkgY3NzIG9yIG5vdCBlLmcgc3BlY2lmeWluZyBiYWNrZ3JvdW5kLWNvbG9yLgotICAgIHZpcnR1
YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJE
YXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xv
ciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIEEgbWV0aG9kIGFz
a2luZyBpZiB0aGUgdGhlbWUgaXMgYWJsZSB0byBkcmF3IHRoZSBmb2N1cyByaW5nLgotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJT
dHlsZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBj
b250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3Qu
CiAgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVj
dCYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTA0LDUwICsxMDQsNTAgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0RW50cnlUZXh0Q29sb3IoaW50IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50
IGZvcmVBLCBpbnQgYmFja1IsIGludCBiYWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpOwogICAg
IHZvaWQgc2V0U2VhcmNoVGV4dENvbG9yKGludCBmb3JlUiwgaW50IGZvcmVHLCBpbnQgZm9yZUIs
IGludCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGludCBiYWNrQiwgaW50IGJhY2tBKTsK
IAotICAgIHZvaWQgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlKiwgRm9ybVR5cGUp
IGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlJiwgRm9y
bVR5cGUpIGNvbnN0OwogCiAgICAgLy8gU3lzdGVtIGZvbnRzLgogICAgIHZpcnR1YWwgdm9pZCBz
eXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4
dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJy
aWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25Q
YXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xp
ZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShEQVRBTElTVF9F
TEVNRU5UKQogICAgIHZpcnR1YWwgSW50U2l6ZSBzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0IG92ZXJy
aWRlOwpAQCAtMTU5LDEzICsxNTksMTMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHBh
aW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3Bp
bkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICBzdGF0
aWMgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50IGZvbnRzaXplKTsKIAogI2lmIEVOQUJMRShQ
Uk9HUkVTU19FTEVNRU5UKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29s
IHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJl
cGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzKikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MiwxOCArMTQyLDE4IEBAIHN0YXRpYyBHdGtTdGF0ZVR5cGUgZ2V0R3RrU3Rh
dGVUeXBlKFJlbmQKICAgICByZXR1cm4gR1RLX1NUQVRFX05PUk1BTDsKIH0KIAotc3RhdGljIHZv
aWQgc2V0VG9nZ2xlU2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0ayosIFJlbmRlclN0eWxlKiBzdHls
ZSwgR3RrV2lkZ2V0KiB3aWRnZXQpCitzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKGNvbnN0IFJl
bmRlclRoZW1lR3RrKiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBHdGtXaWRnZXQqIHdpZGdldCkKIHsK
ICAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNo
b3VsZG4ndCBjaGFuZ2UgdGhlbS4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2lj
T3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndp
ZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGdpbnQgaW5kaWNhdG9yU2l6ZTsKICAgICBndGtfd2lkZ2V0
X3N0eWxlX2dldCh3aWRnZXQsICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBOVUxM
KTsKLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwotICAgIGlmIChz
dHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KGluZGljYXRvclNpemUsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5z
aWNPckF1dG8oKSkKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUs
IEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHls
ZS5zZXRIZWlnaHQoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7CiB9CiAKIHN0YXRpYyB2
b2lkIHBhaW50VG9nZ2xlKFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCwgR3RrV2lkZ2V0KiB3aWRnZXQpCkBAIC0xOTQsNyArMTk0LDcgQEAgc3RhdGljIHZvaWQgcGFp
bnRUb2dnbGUoUmVuZGVyVGhlbWVHdGsqIAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0
azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAg
ICAgc2V0VG9nZ2xlU2l6ZSh0aGlzLCBzdHlsZSwgZ3RrQ2hlY2tCdXR0b24oKSk7CiB9CkBAIC0y
MDUsNyArMjA1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChjb25zdAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldFJhZGlv
U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgc2V0VG9nZ2xlU2l6ZSh0aGlz
LCBzdHlsZSwgZ3RrUmFkaW9CdXR0b24oKSk7CiB9CkBAIC0yODksMTEgKzI4OSwxMSBAQCBpbnQg
UmVuZGVyVGhlbWVHdGs6OmdldENvbWJvQm94U2VwYXJhdG9yCiAgICAgcmV0dXJuIGd0a193aWRn
ZXRfZ2V0X3N0eWxlKHNlcGFyYXRvciktPnh0aGlja25lc3M7CiB9CiAKLWludCBSZW5kZXJUaGVt
ZUd0azo6Y29tYm9Cb3hBcnJvd1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJl
bmRlclRoZW1lR3RrOjpjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0
CiB7CiAgICAgLy8gVGFraW5nIHRoZSBmb250IHNpemUgYW5kIHJldmVyc2luZyB0aGUgRFBJIGNv
bnZlcnNpb24gc2VlbXMgdG8gbWF0Y2gKICAgICAvLyBHVEsrIHJlbmRlcmluZyBhcyBjbG9zZWx5
IGFzIHBvc3NpYmxlLgotICAgIHJldHVybiBzdHlsZS0+Zm9udCgpLnNpemUoKSAqICg3Mi4wIC8g
UmVuZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQSSgpKTsKKyAgICByZXR1cm4gc3R5bGUuZm9udCgp
LnNpemUoKSAqICg3Mi4wIC8gUmVuZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQSSgpKTsKIH0KIAog
c3RhdGljIHZvaWQgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoR3RrV2lkZ2V0KiBidXR0b24sIGludCYg
bGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKQpAQCAtMzE2LDExICszMTYs
MTEgQEAgc3RhdGljIHZvaWQgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoR3RrV2lkZwogfQogCiAKLXZv
aWQgUmVuZGVyVGhlbWVHdGs6OmdldENvbWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUs
IGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKFJlbmRlclN0eWxlJiBzdHlsZSwg
aW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20pIGNvbnN0CiB7CiAg
ICAgLy8gSWYgdGhpcyBtZW51IGxpc3QgYnV0dG9uIGlzbid0IGRyYXduIHVzaW5nIHRoZSBuYXRp
dmUgdGhlbWUsIHdlCiAgICAgLy8gZG9uJ3QgYWRkIGFueSBleHRyYSBwYWRkaW5nIGJleW9uZCB3
aGF0IFdlYkNvcmUgYWxyZWFkeSB1c2VzLgotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09
IE5vQ29udHJvbFBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQ
YXJ0KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBBIGNvbWJvIGJveCBidXR0b24gaXMgYSBi
dXR0b24gd2l0aCB3aWRnZXRzIHBhY2tlZCBpbnRvIGl0LgpAQCAtMzMyLDM0ICszMzIsMzQgQEAg
dm9pZCBSZW5kZXJUaGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKAogICAgIGludCBhcnJvd0Fu
ZFNlcGVyYXRvckxlbmd0aCA9IGNvbWJvQm94QXJyb3dTaXplKHN0eWxlKSArCiAgICAgICAgIGdl
dENvbWJvQm94U2VwYXJhdG9yV2lkdGgoKSArICgzICogYnV0dG9uV2lkZ2V0U3R5bGUtPnh0aGlj
a25lc3MpOwogCi0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgaWYgKHN0
eWxlLmRpcmVjdGlvbigpID09IFJUTCkKICAgICAgICAgbGVmdCArPSBhcnJvd0FuZFNlcGVyYXRv
ckxlbmd0aDsKICAgICBlbHNlCiAgICAgICAgIHJpZ2h0ICs9IGFycm93QW5kU2VwZXJhdG9yTGVu
Z3RoOwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJu
YWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQg
PSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7CiAgICAgZ2V0Q29tYm9Cb3hQYWRk
aW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIHJldHVybiBsZWZ0Owog
fQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFk
ZGluZ1JpZ2h0KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IDAs
IHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKICAgICBnZXRDb21ib0JveFBhZGRpbmco
c3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgcmV0dXJuIHJpZ2h0OwogfQog
Ci1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdU
b3AoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIGludCBsZWZ0ID0gMCwgdG9wID0g
MCwgcmlnaHQgPSAwLCBib3R0b20gPSAwOwogICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwg
bGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICByZXR1cm4gdG9wOwogfQogCi1pbnQgUmVu
ZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20o
UmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwg
cmlnaHQgPSAwLCBib3R0b20gPSAwOwogICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tKTsKQEAgLTM4MSwxMiArMzgxLDEyIEBAIGJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50TWVudUxpc3QoY29uc3QKIAogICAgIGludCBsZWZ0Qm9yZGVyID0gMCwg
cmlnaHRCb3JkZXIgPSAwLCBib3R0b21Cb3JkZXIgPSAwLCB0b3BCb3JkZXIgPSAwOwogICAgIGdl
dEJ1dHRvbklubmVyQm9yZGVyKGd0a0NvbWJvQm94QnV0dG9uKCksIGxlZnRCb3JkZXIsIHRvcEJv
cmRlciwgcmlnaHRCb3JkZXIsIGJvdHRvbUJvcmRlcik7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gJm9iamVjdC5zdHlsZSgpOworICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IG9iamVjdC5zdHls
ZSgpOwogICAgIGludCBhcnJvd1NpemUgPSBjb21ib0JveEFycm93U2l6ZShzdHlsZSk7CiAgICAg
R3RrU3R5bGUqIGJ1dHRvblN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrQ29tYm9Cb3hC
dXR0b24oKSk7CiAKICAgICBJbnRSZWN0IGFycm93UmVjdCgwLCAocmVjdC5oZWlnaHQoKSAtIGFy
cm93U2l6ZSkgLyAyLCBhcnJvd1NpemUsIGFycm93U2l6ZSk7Ci0gICAgaWYgKHN0eWxlLT5kaXJl
Y3Rpb24oKSA9PSBSVEwpCisgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigpID09IFJUTCkKICAgICAg
ICAgYXJyb3dSZWN0LnNldFgobGVmdEJvcmRlciArIGJ1dHRvblN0eWxlLT54dGhpY2tuZXNzKTsK
ICAgICBlbHNlCiAgICAgICAgIGFycm93UmVjdC5zZXRYKHJlY3Qud2lkdGgoKSAtIHJpZ2h0Qm9y
ZGVyIC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBhcnJvd1NpemUpOwpAQCAtNDEwLDcgKzQx
MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoY29uc3QKICAgICBib3R0
b21Cb3JkZXIgKz0gZm9jdXNQYWRkaW5nICsgZm9jdXNXaWR0aDsKICAgICBpbnQgc2VwYXJhdG9y
V2lkdGggPSBnZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCk7CiAgICAgSW50UmVjdCBzZXBhcmF0
b3JSZWN0KDAsIHRvcEJvcmRlciwgc2VwYXJhdG9yV2lkdGgsIHJlY3QuaGVpZ2h0KCkgLSB0b3BC
b3JkZXIgLSBib3R0b21Cb3JkZXIpOwotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRM
KQorICAgIGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgIHNlcGFyYXRvclJl
Y3Quc2V0WChhcnJvd1JlY3QueCgpICsgYXJyb3dSZWN0LndpZHRoKCkgKyBidXR0b25TdHlsZS0+
eHRoaWNrbmVzcyArIHNlcGFyYXRvcldpZHRoKTsKICAgICBlbHNlCiAgICAgICAgIHNlcGFyYXRv
clJlY3Quc2V0WChhcnJvd1JlY3QueCgpIC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBzZXBh
cmF0b3JXaWR0aCk7CkBAIC01MjgsOSArNTI4LDkgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRTbGlkZXJUaHVtYihjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0g
c3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFy
YW5jZSgpOwogICAgIGlmIChwYXJ0ICE9IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgJiYgcGFy
dCAhPSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDIs
MTMgKzU0MiwxMyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAKICAgICBpZiAocGFydCA9PSBTbGlkZXJU
aHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobGVu
Z3RoLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCh3aWR0aCwgRml4
ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAg
ICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8
fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLSAgICBzdHlsZS0+c2V0V2lk
dGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxl
bmd0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7
CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVkKSk7CiB9CiAKICNpZiBF
TkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKQEAgLTU3NCw3ICs1NzQsNyBAQCBib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKGNvCiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJ
bm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JikgY29uc3QKIHsKICAgICBHdGtTdHlsZSogZ3RrU3R5bGUgPSBndGtfd2lkZ2V0X2dl
dF9zdHlsZShndGtTcGluQnV0dG9uKCkpOwogICAgIGNvbnN0IFBhbmdvRm9udERlc2NyaXB0aW9u
KiBmb250RGVzY3JpcHRpb24gPSBndGtTdHlsZS0+Zm9udF9kZXNjOwpAQCAtNTg1LDggKzU4NSw4
IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHQKICAgICBpbnQgd2lk
dGggPSBzdGQ6Om1heChQQU5HT19QSVhFTFMoZm9udFNpemUpLCBtaW5TcGluQnV0dG9uQXJyb3dT
aXplKTsKICAgICB3aWR0aCArPSAtKCh3aWR0aCAlIDIpIC0gMSkgKyBndGtTdHlsZS0+eHRoaWNr
bmVzczsKIAotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAg
c3R5bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRX
aWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0TWluV2lkdGgoTGVuZ3Ro
KHdpZHRoLCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludElubmVyU3Bp
bkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAkocmV2aXNpb24gMTcwMzcxKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwMSwxMCArMjAxLDEwIEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dFJlcGFpbnRSZWN0KGMKICAgICBhZGp1c3RSZWN0Rm9yRm9jdXMoY29udGV4dCwgcmVjdCk7CiB9
CiAKLXN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBS
ZW5kZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29u
dGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIC8vIFRoZSB3aWR0aCBh
bmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgc28gd2Ugc2hvdWxkbid0IGNoYW5nZSB0aGVt
LgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUt
PmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09y
QXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gT3RoZXIgcG9ydHMgaGFyZC1jb2RlIHRoaXMgdG8gMTMgd2hpY2ggaXMgYWxzbyB0aGUg
ZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSysuCkBAIC0yMTMsMTEgKzIxMywxMSBAQCBzdGF0
aWMgdm9pZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29udGV4CiAgICAgZ2ludCBpbmRpY2F0b3JT
aXplOwogICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9y
LXNpemUiLCAmaW5kaWNhdG9yU2l6ZSwgTlVMTCk7CiAKLSAgICBpZiAoc3R5bGUtPndpZHRoKCku
aXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChpbmRp
Y2F0b3JTaXplLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JB
dXRvKCkpCisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhl
ZCkpOwogCi0gICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKKyAgICBpZiAoc3R5bGUu
aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoaW5kaWNh
dG9yU2l6ZSwgRml4ZWQpKTsKIH0KIAogc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVu
ZGVyVGhlbWVHdGsqIHRoZW1lLCBHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IGZ1bGxSZWN0KQpAQCAtMjc1LDcgKzI3NSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50VG9nZ2xlKGNv
bnN0IFJlbmRlclRoZW0KICAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwog
fQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0
eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBzZXRUb2dnbGVTaXplKGdldFN0eWxlQ29udGV4dChH
VEtfVFlQRV9DSEVDS19CVVRUT04pLCBzdHlsZSk7CiB9CkBAIC0yODYsNyArMjg2LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChjb25zdAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYg
c3R5bGUpIGNvbnN0CiB7CiAgICAgc2V0VG9nZ2xlU2l6ZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZ
UEVfUkFESU9fQlVUVE9OKSwgc3R5bGUpOwogfQpAQCAtMzc4LDE4ICszNzgsMTggQEAgYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oY29uc3QgUgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotc3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlKiBzdHlsZSwgR3Rr
Qm9yZGVyJiBib3JkZXIsIGludCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQorc3RhdGljIHZvaWQg
Z2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlJiBzdHlsZSwgR3RrQm9yZGVyJiBib3JkZXIs
IGludCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQogewogICAgIC8vIElmIHRoaXMgbWVudSBsaXN0
IGJ1dHRvbiBpc24ndCBkcmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3ZQogICAgIC8vIGRv
bid0IGFkZCBhbnkgZXh0cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3JlIGFscmVhZHkgdXNl
cy4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQorICAgIGlm
IChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTm9Db250cm9sUGFydCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X0NPTUJPX0JPWCk7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKIAogICAg
IGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVU
VE9OKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRp
Y19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUtPmRpcmVjdGlv
bigpKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3Rh
dGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS5kaXJlY3Rp
b24oKSkpKTsKIAogICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoY29udGV4dCwgc3Rh
dGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICZib3JkZXIpOwogCkBAIC00MDYsNyArNDA2LDcg
QEAgc3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eQogICAgIGNvbnRleHQg
PSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQQVJBVE9SKTsKICAgICBndGtfc3R5bGVfY29u
dGV4dF9zYXZlKGNvbnRleHQpOwogCi0gICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBz
dGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLT5kaXJl
Y3Rpb24oKSkpOworICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8
R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS5kaXJlY3Rpb24oKSkpOwog
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZGlyZWN0aW9uKTsK
ICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgInNlcGFyYXRvciIpOwog
CkBAIC00MjYsMjkgKzQyNiwyOSBAQCBzdGF0aWMgdm9pZCBnZXRDb21ib0JveE1ldHJpY3MoUmVu
ZGVyU3R5CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKIH0KIAotaW50
IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQo
UmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9
IHsgMCwgMCwgMCwgMCB9OwogICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGgg
PSAwOwogICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lk
dGgsIHNlcGFyYXRvcldpZHRoKTsKICAgICBpbnQgbGVmdCA9IGJvcmRlcldpZHRoLmxlZnQgKyBm
b2N1c1dpZHRoOwotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgIGlmIChz
dHlsZS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgIGxlZnQgKz0gc2VwYXJhdG9yV2lkdGgg
KyBtaW5BcnJvd1NpemU7CiAgICAgcmV0dXJuIGxlZnQ7CiB9CiAKLWludCBSZW5kZXJUaGVtZUd0
azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citp
bnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUm
IHN0eWxlKSBjb25zdAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwg
MCB9OwogICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwogICAgIGdl
dENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRv
cldpZHRoKTsKICAgICBpbnQgcmlnaHQgPSBib3JkZXJXaWR0aC5yaWdodCArIGZvY3VzV2lkdGg7
Ci0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgaWYgKHN0eWxlLmRpcmVj
dGlvbigpID09IExUUikKICAgICAgICAgcmlnaHQgKz0gc2VwYXJhdG9yV2lkdGggKyBtaW5BcnJv
d1NpemU7CiAgICAgcmV0dXJuIHJpZ2h0OwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJU
aGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OwogICAgIGlu
dCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwpAQCAtNDU2LDcgKzQ1Niw3IEBA
IGludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmcKICAgICByZXR1cm4gYm9y
ZGVyV2lkdGgudG9wICsgZm9jdXNXaWR0aDsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1
cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVu
ZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJiBzdHls
ZSkgY29uc3QKIHsKICAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsK
ICAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKQEAgLTcxMCw5ICs3
MTAsOSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKGNvCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNp
emUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVH
dGs6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBj
b25zdAogewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOworICAg
IENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS5hcHBlYXJhbmNlKCk7CiAgICAgaWYgKHBhcnQgIT0g
U2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBwYXJ0ICE9IFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0KQogICAgICAgICByZXR1cm47CiAKQEAgLTcyMiwxMyArNzIyLDEzIEBAIHZvaWQgUmVuZGVy
VGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2kKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInNsaWRlci1sZW5ndGgiLCAmc2xpZGVyTGVuZ3RoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMKTsKICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250
YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBG
aXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJXaWR0aCwgRml4
ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQp
KTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJXaWR0aCwgRml4ZWQpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVtYlZl
cnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLSAgICBz
dHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0
aChMZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0
aChzbGlkZXJMZW5ndGgsIEZpeGVkKSk7CiB9CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVO
VCkKQEAgLTc3Nyw3ICs3NzcsNyBAQCBzdGF0aWMgZ2ludCBzcGluQnV0dG9uQXJyb3dTaXplKEd0
a1N0eWxlCiAgICAgcmV0dXJuIGFycm93U2l6ZSAtIGFycm93U2l6ZSAlIDI7IC8vIEZvcmNlIGV2
ZW4uCiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgR3RrU3R5bGVD
b250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NQSU5fQlVUVE9OKTsK
IApAQCAtNzg1LDggKzc4NSw4IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3Bp
bkJ1dHQKICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGluZyhjb250ZXh0LCBzdGF0aWNf
Y2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJnBhZGRpbmcpOwogCiAgICAgaW50IHdpZHRoID0gc3Bp
bkJ1dHRvbkFycm93U2l6ZShjb250ZXh0KSArIHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQ7
Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+
c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExl
bmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgs
IEZpeGVkKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhaW50U3BpbkFycm93QnV0dG9uKFJlbmRlclRo
ZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QsIEd0a0Fycm93VHlwZSBhcnJvd1R5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2OCw5ICsxNjgsOSBAQCBzdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQ
YXJ0IGFwCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpzdXBwb3J0c0ZvY3VzUmlu
Zyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citib29sIFJlbmRlclRoZW1lR3RrOjpz
dXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7CisgICAgcmV0dXJuIHN1
cHBvcnRzRm9jdXMoc3R5bGUuYXBwZWFyYW5jZSgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0
azo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdApAQCAt
MjIwLDI1ICsyMjAsMjUgQEAgc3RhdGljIEd0a1N0YXRlVHlwZSBndGtJY29uU3RhdGUoUmVuZGVy
VAogICAgIHJldHVybiBHVEtfU1RBVEVfTk9STUFMOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3Rr
OjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBX
ZWJDb3JlOjpFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIFdlYkNvcmU6OkVsZW1l
bnQmKSBjb25zdAogewogICAgIC8vIFNvbWUgbGF5b3V0IHRlc3RzIGNoZWNrIGV4cGxpY2l0bHkg
dGhhdCBidXR0b25zIGlnbm9yZSBsaW5lLWhlaWdodC4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFu
Y2UoKSA9PSBQdXNoQnV0dG9uUGFydCkKLSAgICAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVu
ZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNl
KCkgPT0gUHVzaEJ1dHRvblBhcnQpCisgICAgICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVy
U3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjph
ZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxpc3RTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAg
ICAvLyBUaGUgdGVzdHMgY2hlY2sgZXhwbGljaXRseSB0aGF0IHNlbGVjdCBtZW51IGJ1dHRvbnMg
aWdub3JlIGxpbmUgaGVpZ2h0LgotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxl
Ojppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0
eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKIAogICAgIC8vIFdlIGNhbm5vdCBnaXZlIGEgcHJv
cGVyIHJlbmRlcmluZyB3aGVuIGJvcmRlciByYWRpdXMgaXMgYWN0aXZlLCB1bmZvcnR1bmF0ZWx5
LgotICAgIHN0eWxlLT5yZXNldEJvcmRlclJhZGl1cygpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVy
UmFkaXVzKCk7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JiBlKSBjb25zdAogewotICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoJnN0eWxlUmVzb2x2
ZXIsICZzdHlsZSwgJmUpOworICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGVSZXNvbHZlciwg
c3R5bGUsIGUpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0QnV0dG9u
RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
aW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjkzLDcgKzI5Myw3IEBAIHN0YXRpYyBH
dGtJY29uU2l6ZSBnZXRJY29uU2l6ZUZvclBpeGVsU2kKICAgICByZXR1cm4gR1RLX0lDT05fU0la
RV9ESUFMT0c7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSkgY29uc3QKIHsKICAgICBhZGp1c3RTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKIH0KQEAg
LTMwMywyNSArMzAzLDI1IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRS
ZXMKICAgICByZXR1cm4gcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChvLCBp
LCByZWN0KTsKIH0KIAotc3RhdGljIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoUmVu
ZGVyU3R5bGUqIHN0eWxlKQorc3RhdGljIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUo
UmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0
eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIHN0eWxl
LnJlc2V0UGFkZGluZygpOwogCiAgICAgLy8gR2V0IHRoZSBpY29uIHNpemUgYmFzZWQgb24gdGhl
IGZvbnQgc2l6ZS4KLSAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKKyAgICBp
bnQgZm9udFNpemUgPSBzdHlsZS5mb250U2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA8IGd0a0lj
b25TaXplTWVudSkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGZvbnRTaXplLCBG
aXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChmb250U2l6ZSwgRml4ZWQp
KTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGZvbnRTaXplLCBGaXhlZCkpOworICAg
ICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGZvbnRTaXplLCBGaXhlZCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGdpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwogICAgIGd0a19p
Y29uX3NpemVfbG9va3VwKGdldEljb25TaXplRm9yUGl4ZWxTaXplKGZvbnRTaXplKSwgJndpZHRo
LCAmaGVpZ2h0KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwot
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodCwgRml4ZWQpKTsKKyAgICBzdHlsZS5z
ZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0
aChoZWlnaHQsIEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIGFkanVzdFNlYXJjaEZpZWxk
SWNvblN0eWxlKHN0eWxlKTsKIH0KQEAgLTM2MCw3ICszNjAsNyBAQCBib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJl
bmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBhZGp1c3RTZWFy
Y2hGaWVsZEljb25TdHlsZShzdHlsZSk7CiB9CkBAIC0zNzksMTEgKzM3OSwxMSBAQCBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAvLyBXZSBjYW5ub3QgZ2l2ZSBhIHByb3Bl
ciByZW5kZXJpbmcgd2hlbiBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwgdW5mb3J0dW5hdGVseS4K
LSAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdo
dChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUucmVzZXRCb3Jk
ZXJSYWRpdXMoKTsKKyAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFs
TGluZUhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVs
ZChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcmVjdCkKQEAgLTQxNCwxNSArNDE0LDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
Q2Fwc0xvY2tJbmRpY2EKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRy
YWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNv
bnN0CiB7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRC
b3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRl
clRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGhlbWU6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwotICAg
IHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51
bGxwdHIpOwogfQogCiBkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmNhcmV0QmxpbmtJbnRlcnZhbCgp
IGNvbnN0CkBAIC01NzYsMTMgKzU3NiwxMyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1l
ZGlhVG9nZ2xlQ2xvCiB9CiAjZW5kaWYKIAotc3RhdGljIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlp
IGJvcmRlclJhZGlpRnJvbVN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBGbG9hdFJv
dW5kZWRSZWN0OjpSYWRpaSBib3JkZXJSYWRpaUZyb21TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUp
CiB7CiAgICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKAotICAgICAgICBJbnRTaXpl
KHN0eWxlLT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS0+
Ym9yZGVyVG9wTGVmdFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAotICAgICAgICBJbnRT
aXplKHN0eWxlLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5
bGUtPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCi0gICAgICAg
IEludFNpemUoc3R5bGUtPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVl
KCksIHN0eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSks
Ci0gICAgICAgIEludFNpemUoc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkud2lkdGgo
KS5pbnRWYWx1ZSgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS5oZWlnaHQoKS5p
bnRWYWx1ZSgpKSk7CisgICAgICAgIEludFNpemUoc3R5bGUuYm9yZGVyVG9wTGVmdFJhZGl1cygp
LndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyVG9wTGVmdFJhZGl1cygpLmhlaWdodCgp
LmludFZhbHVlKCkpLAorICAgICAgICBJbnRTaXplKHN0eWxlLmJvcmRlclRvcFJpZ2h0UmFkaXVz
KCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS5ib3JkZXJUb3BSaWdodFJhZGl1cygpLmhlaWdo
dCgpLmludFZhbHVlKCkpLAorICAgICAgICBJbnRTaXplKHN0eWxlLmJvcmRlckJvdHRvbUxlZnRS
YWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMo
KS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwKKyAgICAgICAgSW50U2l6ZShzdHlsZS5ib3JkZXJCb3R0
b21SaWdodFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyQm90dG9tUmln
aHRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtNTk3LDcgKzU5Nyw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmEKIAogICAgIGZsb2F0IG1l
ZGlhRHVyYXRpb24gPSBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7CiAgICAgZmxvYXQgdG90YWxU
cmFja1dpZHRoID0gci53aWR0aCgpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZvLnN0eWxl
KCk7CisgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gby5zdHlsZSgpOwogICAgIFJlZlB0cjxUaW1l
UmFuZ2VzPiB0aW1lUmFuZ2VzID0gbWVkaWFFbGVtZW50LT5idWZmZXJlZCgpOwogICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHRpbWVSYW5nZXMtPmxlbmd0aCgpOyArK2luZGV4
KSB7CiAgICAgICAgIGZsb2F0IHN0YXJ0ID0gdGltZVJhbmdlcy0+c3RhcnQoaW5kZXgsIElHTk9S
RV9FWENFUFRJT04pOwpAQCAtNjExLDcgKzYxMSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50TWVkaWFTbGlkZXJUcmEKICAgICAgICAgcmFuZ2VSZWN0LnNldFdpZHRoKGxlbmd0aFJhdGlv
ICogdG90YWxUcmFja1dpZHRoKTsKICAgICAgICAgaWYgKGluZGV4KQogICAgICAgICAgICAgcmFu
Z2VSZWN0Lm1vdmUoc3RhcnRSYXRpbyAqIHRvdGFsVHJhY2tXaWR0aCwgMCk7Ci0gICAgICAgIGNv
bnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHJhbmdlUmVjdCwgYm9yZGVy
UmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKSwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CisgICAgICAgIGNvbnRleHQtPmZp
bGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHJhbmdlUmVjdCwgYm9yZGVyUmFkaWlGcm9t
U3R5bGUoc3R5bGUpKSwgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpLCBzdHlsZS5jb2xvclNwYWNlKCkpOwogICAgIH0KIAogICAgIGNvbnRleHQtPnJlc3RvcmUo
KTsKQEAgLTYyMCw4ICs2MjAsOCBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xp
ZGVyVHJhCiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByKQogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZvLnN0eWxlKCk7Ci0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHIsIGJvcmRl
clJhZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgIFJlbmRlclN0eWxlJiBz
dHlsZSA9IG8uc3R5bGUoKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0
KEZsb2F0Um91bmRlZFJlY3QociwgYm9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUu
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS5jb2xvclNwYWNl
KCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjQ2LDEzICs2NDYsMTMgQEAgYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaQogCiAgICAgaW50IHJlY3RIZWlnaHQg
PSByZWN0LmhlaWdodCgpOwogICAgIGZsb2F0IHRyYWNrSGVpZ2h0ID0gcmVjdEhlaWdodCAqIHZv
bHVtZTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyT2JqZWN0LnN0eWxlKCk7Cisg
ICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyT2JqZWN0LnN0eWxlKCk7CiAgICAgSW50UmVj
dCB2b2x1bWVSZWN0KHJlY3QpOwogICAgIHZvbHVtZVJlY3QubW92ZSgwLCByZWN0SGVpZ2h0IC0g
dHJhY2tIZWlnaHQpOwogICAgIHZvbHVtZVJlY3Quc2V0SGVpZ2h0KGNlaWwodHJhY2tIZWlnaHQp
KTsKIAogICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHZvbHVt
ZVJlY3QsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksCi0gICAgICAgIHN0eWxlLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkp
OworICAgICAgICBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciks
IHN0eWxlLmNvbG9yU3BhY2UoKSk7CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogCiAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNjc1LDIxICs2NzUsMjEgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYUN1cnJlbnRUaQogI2VuZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkK
LXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0
cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiAvLyBUaGVzZSB2YWx1
ZXMgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAogc3Rh
dGljIGNvbnN0IGludCBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzID0gNTsKIHN0YXRpYyBjb25zdCBp
bnQgcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMgPSAxMDsKIHN0YXRpYyBjb25zdCBkb3VibGUgcHJv
Z3Jlc3NBbmltYXRpb25JbnRlcnZhbCA9IDAuMTI1OwotZG91YmxlIFJlbmRlclRoZW1lR3RrOjph
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29u
c3QKK2RvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHByb2dyZXNzQW5p
bWF0aW9uSW50ZXJ2YWw7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uRHVy
YXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citkb3VibGUgUmVuZGVy
VGhlbWVHdGs6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mm
KSBjb25zdAogewogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsICogcHJvZ3Jl
c3NBbmltYXRpb25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sgYW5kIGZvcnRoOwogfQpAQCAt
Njk3LDE2ICs2OTcsMTYgQEAgZG91YmxlIFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25EdXJhdGlv
bgogSW50UmVjdCBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiBmdWxsQmFyUmVjdCkKIHsK
ICAgICBJbnRSZWN0IHByb2dyZXNzUmVjdChmdWxsQmFyUmVjdCk7Ci0gICAgY29uc3QgUmVuZGVy
UHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcygmcmVuZGVyT2JqZWN0
KTsKLSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkgewotICAgICAgICBp
bnQgcHJvZ3Jlc3NXaWR0aCA9IHByb2dyZXNzUmVjdC53aWR0aCgpICogcmVuZGVyUHJvZ3Jlc3Mt
PnBvc2l0aW9uKCk7CisgICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3MmIHJlbmRlclByb2dyZXNzID0g
dG9SZW5kZXJQcm9ncmVzcyhyZW5kZXJPYmplY3QpOworICAgIGlmIChyZW5kZXJQcm9ncmVzcy5p
c0RldGVybWluYXRlKCkpIHsKKyAgICAgICAgaW50IHByb2dyZXNzV2lkdGggPSBwcm9ncmVzc1Jl
Y3Qud2lkdGgoKSAqIHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCk7CiAgICAgICAgIGlmIChyZW5k
ZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgICAgICBwcm9ncmVz
c1JlY3Quc2V0WChwcm9ncmVzc1JlY3QueCgpICsgcHJvZ3Jlc3NSZWN0LndpZHRoKCkgLSBwcm9n
cmVzc1dpZHRoKTsKICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFdpZHRoKHByb2dyZXNzV2lkdGgp
OwogICAgICAgICByZXR1cm4gcHJvZ3Jlc3NSZWN0OwogICAgIH0KIAotICAgIGRvdWJsZSBhbmlt
YXRpb25Qcm9ncmVzcyA9IHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpOworICAg
IGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcyA9IHJlbmRlclByb2dyZXNzLmFuaW1hdGlvblByb2dy
ZXNzKCk7CiAKICAgICAvLyBOZXZlciBsZXQgdGhlIHByb2dyZXNzIHJlY3Qgc2hyaW5rIHNtYWxs
ZXIgdGhhbiAyIHBpeGVscy4KICAgICBpbnQgbmV3V2lkdGggPSBzdGQ6Om1heCgyLCBwcm9ncmVz
c1JlY3Qud2lkdGgoKSAvIHByb2dyZXNzQWN0aXZpdHlCbG9ja3MpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgJKHJldmlzaW9uIDE3MDM3MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwxMCArNDQsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUg
dGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVy
ZWQuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
SG92ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0
aGUgZm9jdXMgcmluZy4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3Qg
UmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNG
b2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIEEg
bWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdp
bmRvdyBoYXMgZm9jdXMgb3Igbm90LgogICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNU
aW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCBvdmVycmlkZTsKQEAgLTExNSw1MCArMTE1
LDUwIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2Jv
eChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSop
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVy
U3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICBpbnQgcG9wdXBJ
bnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgaW50
IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsK
LSAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBj
b25zdCBvdmVycmlkZTsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0
eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQo
UmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRp
bmdUb3AoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIFRo
ZSBNYWMgcG9ydCBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHRoZSAibWVudSBsaXN0IiBhbmQgdGhl
ICJtZW51IGxpc3QgYnV0dG9uLiIKICAgICAvLyBUaGUgZm9ybWVyIGlzIHVzZWQgd2hlbiBhIG1l
bnUgbGlzdCBidXR0b24gaGFzIGJlZW4gc3R5bGVkLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlCiAg
ICAgLy8gQXF1YSB0aGVtZWQgY29udHJvbHMgd2hlbmV2ZXIgcG9zc2libGUuIFdlIGFsd2F5cyB3
YW50IHRvIHVzZSBHVEsrIHRoZW1pbmcsIHNvCiAgICAgLy8gd2UgZG9uJ3QgbWFpbnRhaW4gdGhp
cyBkaWZmZXJlbnRpYXRpb24uCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0
b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVt
Yihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVs
ZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIGlu
aXRNZWRpYUNvbG9ycygpOwpAQCAtMTgxLDIxICsxODEsMjEgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0
aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NC
YXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50
ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NC
YXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlm
CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJT
cGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldp
ZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBs
ZUZpbGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBsYXRmb3JtSW5pdCgp
OwotICAgIHN0YXRpYyB2b2lkIHNldFRleHRJbnB1dEJvcmRlcnMoUmVuZGVyU3R5bGUqKTsKKyAg
ICBzdGF0aWMgdm9pZCBzZXRUZXh0SW5wdXRCb3JkZXJzKFJlbmRlclN0eWxlJik7CiAgICAgc3Rh
dGljIGRvdWJsZSBnZXRTY3JlZW5EUEkoKTsKIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTIxNSw5
ICsyMTUsOSBAQCBwcml2YXRlOgogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiAgICAgdm9pZCBz
ZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCosIEd0a1dpZGdldCopIGNvbnN0
OwogICAgIHZvaWQgcmVmcmVzaENvbWJvQm94Q2hpbGRyZW4oKSBjb25zdDsKLSAgICB2b2lkIGdl
dENvbWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSosIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYg
cmlnaHQsIGludCYgYm90dG9tKSBjb25zdDsKKyAgICB2b2lkIGdldENvbWJvQm94UGFkZGluZyhS
ZW5kZXJTdHlsZSYsIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9t
KSBjb25zdDsKICAgICBpbnQgZ2V0Q29tYm9Cb3hTZXBhcmF0b3JXaWR0aCgpIGNvbnN0OwotICAg
IGludCBjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIGludCBjb21i
b0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCiAgICAgR3RrV2lkZ2V0KiBndGtC
dXR0b24oKSBjb25zdDsKICAgICBHdGtXaWRnZXQqIGd0a1RyZWVWaWV3KCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkocmV2aXNpb24gMTcw
MzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6bGF5b3V0KCkK
ICAgICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0KCk7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIG5vdCBiZSBhZGp1c3Rpbmcgc3R5bGVzIGR1cmluZyBsYXlvdXQuIFNlZSA8cmRhcjovL3By
b2JsZW0vNzY3NTQ5Mz4uCi0gICAgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFJvdW5kQm9yZGVyUmFk
aXVzKHN0eWxlKCksIHRoaXMpOworICAgIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSb3VuZEJvcmRl
clJhZGl1cyhzdHlsZSgpLCAqdGhpcyk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDkxLDEwICsxNDkxLDEwIEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmUoUGFpbnRJ
bmYKIAogICAgIFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICAvLyBPbmx5
IHBhaW50IHRoZSBmb2N1cyByaW5nIGJ5IGhhbmQgaWYgdGhlIHRoZW1lIGlzbid0IGFibGUgdG8g
ZHJhdyBpdC4KLSAgICBpZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhl
bWUoKS5zdXBwb3J0c0ZvY3VzUmluZygmc3R5bGVUb1VzZSkpCisgICAgaWYgKHN0eWxlVG9Vc2Uu
b3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1c1Jpbmcoc3R5bGVU
b1VzZSkpCiAgICAgICAgIHBhaW50Rm9jdXNSaW5nKHBhaW50SW5mbywgcGFpbnRPZmZzZXQsICZz
dHlsZVRvVXNlKTsKIAotICAgIGlmIChoYXNPdXRsaW5lQW5ub3RhdGlvbigpICYmICFzdHlsZVRv
VXNlLm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKCZz
dHlsZVRvVXNlKSkKKyAgICBpZiAoaGFzT3V0bGluZUFubm90YXRpb24oKSAmJiAhc3R5bGVUb1Vz
ZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZyhzdHls
ZVRvVXNlKSkKICAgICAgICAgYWRkUERGVVJMUmVjdChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsK
IAogICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRl
eHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29u
dHJvbHMuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVkaWFDb250cm9scy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMCArMTAxLDEw
IEBAIHN0YXRpYyBGbG9hdFJlY3QgZ2V0VW56b29tZWRSZWN0QW5kQWRqdXMKIHN0YXRpYyBjb25z
dCBpbnQgbWVkaWFTbGlkZXJUaHVtYldpZHRoID0gMTM7CiBzdGF0aWMgY29uc3QgaW50IG1lZGlh
U2xpZGVyVGh1bWJIZWlnaHQgPSAxNDsKIAotdm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1
c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIFJlbmRlck1l
ZGlhQ29udHJvbHM6OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHls
ZSkKIHsKICAgICBpbnQgcGFydDsKLSAgICBzd2l0Y2ggKHN0eWxlLT5hcHBlYXJhbmNlKCkpIHsK
KyAgICBzd2l0Y2ggKHN0eWxlLmFwcGVhcmFuY2UoKSkgewogICAgIGNhc2UgTWVkaWFTbGlkZXJU
aHVtYlBhcnQ6CiAgICAgICAgIHBhcnQgPSBNZWRpYVNsaWRlclRodW1iOwogICAgICAgICBicmVh
azsKQEAgLTEyMSw5ICsxMjEsOSBAQCB2b2lkIFJlbmRlck1lZGlhQ29udHJvbHM6OmFkanVzdE1l
ZGlhU2xpCiAgICAgQ0dTaXplIHNpemU7CiAgICAgd2tNZWFzdXJlTWVkaWFVSVBhcnQocGFydCwg
MCwgJnNpemUpOwogCi0gICAgZmxvYXQgem9vbUxldmVsID0gc3R5bGUtPmVmZmVjdGl2ZVpvb20o
KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2l6ZS53aWR0
aCAqIHpvb21MZXZlbCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc3Rh
dGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCAqIHpvb21MZXZlbCksIEZpeGVkKSk7CisgICAgZmxv
YXQgem9vbUxldmVsID0gc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIHN0eWxlLnNldFdpZHRo
KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGggKiB6b29tTGV2ZWwpLCBGaXhlZCkp
OworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdo
dCAqIHpvb21MZXZlbCksIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyTWVkaWFDb250cm9sczo6
cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBwYXJ0LCBjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJv
bHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFD
b250cm9scy5oCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVkaWFDb250cm9scy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1
YmxpYzoKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBzdGF0aWMgYm9vbCBwYWludE1lZGlhQ29u
dHJvbHNQYXJ0KE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlLCBjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgc3RhdGljIHZvaWQgYWRqdXN0
TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqKTsKKyAgICBzdGF0aWMgdm9pZCBhZGp1
c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYpOwogI2VuZGlmCiAgICAgc3RhdGlj
IEludFBvaW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCosIGNv
bnN0IEludFNpemUmKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxMCArMTI1LDEw
IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmFkanVzdElubmVyU3R5bGUoKQogICAgICAgICBpbm5l
clN0eWxlLnNldEFsaWduU2VsZihBbGlnbkZsZXhTdGFydCk7CiAgICAgfQogCi0gICAgaW5uZXJT
dHlsZS5zZXRQYWRkaW5nTGVmdChMZW5ndGgodGhlbWUoKS5wb3B1cEludGVybmFsUGFkZGluZ0xl
ZnQoJnN0eWxlKCkpLCBGaXhlZCkpOwotICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ1JpZ2h0KExl
bmd0aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoJnN0eWxlKCkpLCBGaXhlZCkp
OwotICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ1RvcChMZW5ndGgodGhlbWUoKS5wb3B1cEludGVy
bmFsUGFkZGluZ1RvcCgmc3R5bGUoKSksIEZpeGVkKSk7Ci0gICAgaW5uZXJTdHlsZS5zZXRQYWRk
aW5nQm90dG9tKExlbmd0aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKCZzdHls
ZSgpKSwgRml4ZWQpKTsKKyAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0aCh0aGVt
ZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChzdHlsZSgpKSwgRml4ZWQpKTsKKyAgICBpbm5l
clN0eWxlLnNldFBhZGRpbmdSaWdodChMZW5ndGgodGhlbWUoKS5wb3B1cEludGVybmFsUGFkZGlu
Z1JpZ2h0KHN0eWxlKCkpLCBGaXhlZCkpOworICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ1RvcChM
ZW5ndGgodGhlbWUoKS5wb3B1cEludGVybmFsUGFkZGluZ1RvcChzdHlsZSgpKSwgRml4ZWQpKTsK
KyAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRl
cm5hbFBhZGRpbmdCb3R0b20oc3R5bGUoKSksIEZpeGVkKSk7CiAKICAgICBpZiAoZG9jdW1lbnQo
KS5wYWdlKCktPmNocm9tZSgpLnNlbGVjdEl0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkp
IHsKICAgICAgICAgLy8gSXRlbXMgaW4gdGhlIHBvcHVwIHdpbGwgbm90IHJlc3BlY3QgdGhlIENT
UyB0ZXh0LWFsaWduIGFuZCBkaXJlY3Rpb24gcHJvcGVydGllcywKQEAgLTMyNiw3ICszMjYsNyBA
QCBMYXlvdXRSZWN0IFJlbmRlck1lbnVMaXN0Ojpjb250cm9sQ2xpcFJlCiAKIHZvaWQgUmVuZGVy
TWVudUxpc3Q6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxv
Z2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdAogewotICAgIG1h
eExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KG1fb3B0aW9uc1dpZHRoLCB0aGVtZSgpLm1pbmltdW1N
ZW51TGlzdFNpemUoJnN0eWxlKCkpKSArIG1faW5uZXJCbG9jay0+cGFkZGluZ0xlZnQoKSArIG1f
aW5uZXJCbG9jay0+cGFkZGluZ1JpZ2h0KCk7CisgICAgbWF4TG9naWNhbFdpZHRoID0gc3RkOjpt
YXgobV9vcHRpb25zV2lkdGgsIHRoZW1lKCkubWluaW11bU1lbnVMaXN0U2l6ZShzdHlsZSgpKSkg
KyBtX2lubmVyQmxvY2stPnBhZGRpbmdMZWZ0KCkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdSaWdo
dCgpOwogICAgIGlmICghc3R5bGUoKS53aWR0aCgpLmlzUGVyY2VudCgpKQogICAgICAgICBtaW5M
b2dpY2FsV2lkdGggPSBtYXhMb2dpY2FsV2lkdGg7CiB9CkBAIC01NjksNyArNTY5LDcgQEAgUG9w
dXBNZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Om1lbnVTdHlsZQogICAgIHJldHVybiBQb3B1cE1l
bnVTdHlsZShzdHlsZVRvVXNlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9y
KSwgc3R5bGVUb1VzZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3IpLAogICAgICAgICBzdHlsZVRvVXNlLmZvbnQoKSwgc3R5bGVUb1VzZS52aXNpYmlsaXR5
KCkgPT0gVklTSUJMRSwgc3R5bGVUb1VzZS5kaXNwbGF5KCkgPT0gTk9ORSwgc3R5bGUoKS5oYXNB
cHBlYXJhbmNlKCksIHN0eWxlVG9Vc2UudGV4dEluZGVudCgpLAogICAgICAgICBzdHlsZSgpLmRp
cmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxlKCkudW5pY29kZUJpZGkoKSksIFBvcHVwTWVudVN0
eWxlOjpEZWZhdWx0QmFja2dyb3VuZENvbG9yLAotICAgICAgICBQb3B1cE1lbnVTdHlsZTo6U2Vs
ZWN0UG9wdXAsIHRoZW1lKCkucG9wdXBNZW51U2l6ZSgmc3R5bGVUb1VzZSwgYWJzQm91bmRzKSk7
CisgICAgICAgIFBvcHVwTWVudVN0eWxlOjpTZWxlY3RQb3B1cCwgdGhlbWUoKS5wb3B1cE1lbnVT
aXplKHN0eWxlVG9Vc2UsIGFic0JvdW5kcykpOwogfQogCiBIb3N0V2luZG93KiBSZW5kZXJNZW51
TGlzdDo6aG9zdFdpbmRvdygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZXRlci5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgdm9p
ZCBSZW5kZXJNZXRlcjo6dXBkYXRlTG9naWNhbFdpZHRoKCkKIHsKICAgICBSZW5kZXJCb3g6OnVw
ZGF0ZUxvZ2ljYWxXaWR0aCgpOwogCi0gICAgSW50U2l6ZSBmcmFtZVNpemUgPSB0aGVtZSgpLm1l
dGVyU2l6ZUZvckJvdW5kcyh0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYW1lUmVjdCgpKSk7
CisgICAgSW50U2l6ZSBmcmFtZVNpemUgPSB0aGVtZSgpLm1ldGVyU2l6ZUZvckJvdW5kcygqdGhp
cywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFtZVJlY3QoKSkpOwogICAgIHNldExvZ2ljYWxXaWR0
aChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZnJhbWVTaXplLndpZHRoKCkgOiBmcmFtZVNp
emUuaGVpZ2h0KCkpOwogfQogCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgUmVuZGVyTWV0ZXI6OmNv
bXB1dGVMb2dpY2FsSGVpZ2h0KEwKICAgICAgICAgZnJhbWUuc2V0SGVpZ2h0KGNvbXB1dGVkVmFs
dWVzLm1fZXh0ZW50KTsKICAgICBlbHNlCiAgICAgICAgIGZyYW1lLnNldFdpZHRoKGNvbXB1dGVk
VmFsdWVzLm1fZXh0ZW50KTsKLSAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IHRoZW1lKCkubWV0ZXJT
aXplRm9yQm91bmRzKHRoaXMsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhbWUpKTsKKyAgICBJbnRT
aXplIGZyYW1lU2l6ZSA9IHRoZW1lKCkubWV0ZXJTaXplRm9yQm91bmRzKCp0aGlzLCBwaXhlbFNu
YXBwZWRJbnRSZWN0KGZyYW1lKSk7CiAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgPSBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gZnJhbWVTaXplLmhlaWdodCgpIDogZnJhbWVTaXplLndp
ZHRoKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1MywxMCArMTA1MywxMCBAQCB2b2lkIFJl
bmRlck9iamVjdDo6cGFpbnRPdXRsaW5lKFBhaW50SW5mCiAgICAgaW50IG91dGxpbmVPZmZzZXQg
PSBzdHlsZVRvVXNlLm91dGxpbmVPZmZzZXQoKTsKIAogICAgIC8vIE9ubHkgcGFpbnQgdGhlIGZv
Y3VzIHJpbmcgYnkgaGFuZCBpZiB0aGUgdGhlbWUgaXNuJ3QgYWJsZSB0byBkcmF3IGl0LgotICAg
IGlmIChzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRz
Rm9jdXNSaW5nKCZzdHlsZVRvVXNlKSkKKyAgICBpZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJ
c0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZyhzdHlsZVRvVXNlKSkKICAgICAg
ICAgcGFpbnRGb2N1c1JpbmcocGFpbnRJbmZvLCBwYWludFJlY3QubG9jYXRpb24oKSwgJnN0eWxl
VG9Vc2UpOwogCi0gICAgaWYgKGhhc091dGxpbmVBbm5vdGF0aW9uKCkgJiYgIXN0eWxlVG9Vc2Uu
b3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1c1JpbmcoJnN0eWxl
VG9Vc2UpKQorICAgIGlmIChoYXNPdXRsaW5lQW5ub3RhdGlvbigpICYmICFzdHlsZVRvVXNlLm91
dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKHN0eWxlVG9V
c2UpKQogICAgICAgICBhZGRQREZVUkxSZWN0KHBhaW50SW5mbywgcGFpbnRSZWN0LmxvY2F0aW9u
KCkpOwogCiAgICAgaWYgKHN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgfHwgc3R5bGVU
b1VzZS5vdXRsaW5lU3R5bGUoKSA9PSBCTk9ORSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
OCArOTEsOCBAQCB2b2lkIFJlbmRlclByb2dyZXNzOjphbmltYXRpb25UaW1lckZpcmVkCiAKIHZv
aWQgUmVuZGVyUHJvZ3Jlc3M6OnVwZGF0ZUFuaW1hdGlvblN0YXRlKCkKIHsKLSAgICBtX2FuaW1h
dGlvbkR1cmF0aW9uID0gdGhlbWUoKS5hbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKHRo
aXMpOwotICAgIG1fYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWwgPSB0aGVtZSgpLmFuaW1hdGlvblJl
cGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIodGhpcyk7CisgICAgbV9hbmltYXRpb25EdXJhdGlv
biA9IHRoZW1lKCkuYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcigqdGhpcyk7CisgICAg
bV9hbmltYXRpb25SZXBlYXRJbnRlcnZhbCA9IHRoZW1lKCkuYW5pbWF0aW9uUmVwZWF0SW50ZXJ2
YWxGb3JQcm9ncmVzc0JhcigqdGhpcyk7CiAKICAgICBib29sIGFuaW1hdGluZyA9IHN0eWxlKCku
aGFzQXBwZWFyYW5jZSgpICYmIG1fYW5pbWF0aW9uRHVyYXRpb24gPiAwOwogICAgIGlmIChhbmlt
YXRpbmcgPT0gbV9hbmltYXRpbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMTcw
MzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgbm90IGJlIGFkanVzdGluZyBzdHlsZXMgZHVyaW5nIGxheW91dC4gPHJk
YXI6Ly9wcm9ibGVtLzc2NzU0OTM+CiAgICAgaWYgKGlucHV0RWxlbWVudCgpLmlzU2VhcmNoRmll
bGQoKSkKLSAgICAgICAgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKHN0
eWxlKCksIHRoaXMpOworICAgICAgICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91bmRCb3JkZXJS
YWRpdXMoc3R5bGUoKSwgKnRoaXMpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyAr
ODEsNyBAQCBSZW5kZXJUaGVtZTo6UmVuZGVyVGhlbWUoKQogewogfQogCi12b2lkIFJlbmRlclRo
ZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQqIGUsIGJvb2wgVUFIYXNBcHBlYXJhbmNlLCBjb25zdCBCb3JkZXJE
YXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvcikKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSwgYm9vbCBV
QUhhc0FwcGVhcmFuY2UsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVy
JiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQogewogICAgIC8vIEZv
cmNlIGlubGluZSBhbmQgdGFibGUgZGlzcGxheSBzdHlsZXMgdG8gYmUgaW5saW5lLWJsb2NrIChl
eGNlcHQgZm9yIHRhYmxlLSB3aGljaCBpcyBibG9jaykKICAgICBDb250cm9sUGFydCBwYXJ0ID0g
c3R5bGUuYXBwZWFyYW5jZSgpOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RTdHlsZShTdHlsZVJlc29sCiAgICAgZWxzZSBpZiAoc3R5bGUuZGlzcGxheSgpID09IENP
TVBBQ1QgfHwgc3R5bGUuZGlzcGxheSgpID09IExJU1RfSVRFTSB8fCBzdHlsZS5kaXNwbGF5KCkg
PT0gVEFCTEUpCiAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoQkxPQ0spOwogCi0gICAgaWYgKFVB
SGFzQXBwZWFyYW5jZSAmJiBpc0NvbnRyb2xTdHlsZWQoJnN0eWxlLCBib3JkZXIsIGJhY2tncm91
bmQsIGJhY2tncm91bmRDb2xvcikpIHsKKyAgICBpZiAoVUFIYXNBcHBlYXJhbmNlICYmIGlzQ29u
dHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpKSB7
CiAgICAgICAgIGlmIChwYXJ0ID09IE1lbnVsaXN0UGFydCkgewogICAgICAgICAgICAgc3R5bGUu
c2V0QXBwZWFyYW5jZShNZW51bGlzdEJ1dHRvblBhcnQpOwogICAgICAgICAgICAgcGFydCA9IE1l
bnVsaXN0QnV0dG9uUGFydDsKQEAgLTE5MiwyNSArMTkyLDI1IEBAIHZvaWQgUmVuZGVyVGhlbWU6
OmFkanVzdFN0eWxlKFN0eWxlUmVzb2wKICAgICBzd2l0Y2ggKHN0eWxlLmFwcGVhcmFuY2UoKSkg
ewogI2lmICFVU0UoTkVXX1RIRU1FKQogICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgICAgICBy
ZXR1cm4gYWRqdXN0Q2hlY2tib3hTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAg
ICAgICAgcmV0dXJuIGFkanVzdENoZWNrYm94U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUp
OwogICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0UmFkaW9TdHlsZSgm
c3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFJhZGlvU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CiAg
ICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgogICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CiAg
ICAgY2FzZSBCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0QnV0dG9uU3R5bGUoJnN0
eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RCdXR0b25TdHls
ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0
OgotICAgICAgICByZXR1cm4gYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2
ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHls
ZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAjZW5kaWYKICAgICBjYXNlIFRleHRGaWVsZFBh
cnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RUZXh0RmllbGRTdHlsZSgmc3R5bGVSZXNvbHZlciwg
JnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICAgICAgcmV0dXJu
IGFkanVzdFRleHRBcmVhU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAg
IHJldHVybiBhZGp1c3RUZXh0QXJlYVN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAg
ICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0U3R5bGUo
JnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RNZW51TGlz
dFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIE1lbnVsaXN0QnV0dG9u
UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNv
bHZlciwgc3R5bGUsICplKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgTWVkaWFQbGF5QnV0dG9uUGFy
dDoKICAgICBjYXNlIE1lZGlhQ3VycmVudFRpbWVQYXJ0OgogICAgIGNhc2UgTWVkaWFUaW1lUmVt
YWluaW5nUGFydDoKQEAgLTIxOCwyOSArMjE4LDI5IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dFN0eWxlKFN0eWxlUmVzb2wKICAgICBjYXNlIE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b25QYXJ0
OgogICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uUGFydDoKICAgICBjYXNlIE1lZGlhVm9sdW1lU2xp
ZGVyQ29udGFpbmVyUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lZGlhQ29udHJvbFN0eWxl
KCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0TWVkaWFD
b250cm9sU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgTWVkaWFTbGlk
ZXJQYXJ0OgogICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJQYXJ0OgogICAgIGNhc2UgTWVkaWFG
dWxsU2NyZWVuVm9sdW1lU2xpZGVyUGFydDoKICAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0
OgogICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2xp
ZGVyVHJhY2tTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJu
IGFkanVzdFNsaWRlclRyYWNrU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNh
c2UgU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydDoKICAgICBjYXNlIFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2xpZGVyVGh1bWJTdHlsZSgmc3R5bGVSZXNv
bHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNsaWRlclRodW1iU3R5bGUo
c3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgotICAg
ICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxl
LCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZl
ciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25QYXJ0OgotICAg
ICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSgmc3R5bGVSZXNv
bHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmll
bGREZWNvcmF0aW9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblBhcnRTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJu
IGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHls
ZSwgZSk7CiAgICAgY2FzZSBTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydDoKLSAgICAg
ICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoJnN0
eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAg
ICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBl
KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKHN0
eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAg
ICBjYXNlIFByb2dyZXNzQmFyUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFByb2dyZXNzQmFy
U3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RQ
cm9ncmVzc0JhclN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICNlbmRpZgogI2lmIEVO
QUJMRShNRVRFUl9FTEVNRU5UKQogICAgIGNhc2UgTWV0ZXJQYXJ0OgpAQCAtMjQ4LDExICsyNDgs
MTEgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgIGNhc2Ug
Q29udGludW91c0NhcGFjaXR5TGV2ZWxJbmRpY2F0b3JQYXJ0OgogICAgIGNhc2UgRGlzY3JldGVD
YXBhY2l0eUxldmVsSW5kaWNhdG9yUGFydDoKICAgICBjYXNlIFJhdGluZ0xldmVsSW5kaWNhdG9y
UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1ldGVyU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZz
dHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RNZXRlclN0eWxlKHN0eWxlUmVzb2x2ZXIs
IHN0eWxlLCBlKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgY2FzZSBJ
bnB1dFNwZWVjaEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVy
biBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUs
IGUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgY2FzZSBJbWFn
ZUNvbnRyb2xzQnV0dG9uUGFydDoKQEAgLTY5Myw5ICs2OTMsOSBAQCBib29sIFJlbmRlclRoZW1l
Ojppc0NvbnRyb2xDb250YWluZXIoQ29uCiAgICAgcmV0dXJuIGFwcGVhcmFuY2UgIT0gQ2hlY2ti
b3hQYXJ0ICYmIGFwcGVhcmFuY2UgIT0gUmFkaW9QYXJ0OwogfQogCi1ib29sIFJlbmRlclRoZW1l
Ojppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJE
YXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvcikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3Qg
RmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25z
dAogewotICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIHN3aXRjaCAoc3R5
bGUuYXBwZWFyYW5jZSgpKSB7CiAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKICAgICBjYXNlIFNx
dWFyZUJ1dHRvblBhcnQ6CiAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKQEAgLTcxMiw5ICs3
MTIsOSBAQCBib29sIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgCiAgICAgY2Fz
ZSBUZXh0RmllbGRQYXJ0OgogICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgogICAgICAgICAvLyBUZXN0
IHRoZSBzdHlsZSB0byBzZWUgaWYgdGhlIFVBIGJvcmRlciBhbmQgYmFja2dyb3VuZCBtYXRjaC4K
LSAgICAgICAgcmV0dXJuIChzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVyCi0gICAgICAgICAgICB8
fCAqc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNrZ3JvdW5kCi0gICAgICAgICAgICB8
fCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KSAhPSBiYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICByZXR1cm4gKHN0eWxlLmJvcmRlcigpICE9
IGJvcmRlcgorICAgICAgICAgICAgfHwgKnN0eWxlLmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNr
Z3JvdW5kCisgICAgICAgICAgICB8fCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpICE9IGJhY2tncm91bmRDb2xvcik7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTczMSwxNSArNzMxLDE1IEBAIHZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnMKICNlbmRpZgogfQogCi1ib29sIFJl
bmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Citib29sIFJlbmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpICYm
IHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gVGV4dEZpZWxkUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5j
ZSgpICE9IFRleHRBcmVhUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IE1lbnVsaXN0QnV0
dG9uUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IExpc3Rib3hQYXJ0KTsKKyAgICByZXR1
cm4gKHN0eWxlLmhhc0FwcGVhcmFuY2UoKSAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gVGV4dEZp
ZWxkUGFydCAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gVGV4dEFyZWFQYXJ0ICYmIHN0eWxlLmFw
cGVhcmFuY2UoKSAhPSBNZW51bGlzdEJ1dHRvblBhcnQgJiYgc3R5bGUuYXBwZWFyYW5jZSgpICE9
IExpc3Rib3hQYXJ0KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKGNvbnN0
IFJlbmRlck9iamVjdCYgbywgQ29udHJvbFN0YXRlczo6U3RhdGVzIHN0YXRlKSBjb25zdAogewog
ICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGUgY29udHJvbHMgZG9uJ3Qg
cmVzcG9uZCB0byBjaGFuZ2VzIGluIDpob3ZlciBzdGF0ZQotICAgIGlmIChzdGF0ZSA9PSBDb250
cm9sU3RhdGVzOjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVyKCZvLnN0eWxlKCkpKQorICAg
IGlmIChzdGF0ZSA9PSBDb250cm9sU3RhdGVzOjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVy
KG8uc3R5bGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEFzc3VtZSBwcmVz
c2VkIHN0YXRlIGlzIG9ubHkgcmVzcG9uZGVkIHRvIGlmIHRoZSBjb250cm9sIGlzIGVuYWJsZWQu
CkBAIC05MTAsNyArOTEwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNEZWZhdWx0KGNvbnN0IFJl
bmRlcgogCiAjaWYgIVVTRShORVdfVEhFTUUpCiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdENo
ZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIEEgc3Vt
bWFyeSBvZiB0aGUgcnVsZXMgZm9yIGNoZWNrYm94IGRlc2lnbmVkIHRvIG1hdGNoIFdpbklFOgog
ICAgIC8vIHdpZHRoL2hlaWdodCAtIGhvbm9yZWQgKFdpbklFIGFjdHVhbGx5IHNjYWxlcyBpdHMg
Y29udHJvbCBmb3Igc21hbGwgd2lkdGhzLCBidXQgbGV0cyBpdCBvdmVyZmxvdyBmb3Igc21hbGwg
aGVpZ2h0cy4pCkBAIC05MTgsMTYgKzkxOCwxNiBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RD
aGVja2JveFN0eWxlKFN0CiAgICAgc2V0Q2hlY2tib3hTaXplKHN0eWxlKTsKIAogICAgIC8vIHBh
ZGRpbmcgLSBub3QgaG9ub3JlZCBieSBXaW5JRSwgbmVlZHMgdG8gYmUgcmVtb3ZlZC4KLSAgICBz
dHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAgc3R5bGUucmVzZXRQYWRkaW5nKCk7CiAKICAgICAv
LyBib3JkZXIgLSBob25vcmVkIGJ5IFdpbklFLCBidXQgbG9va3MgdGVycmlibGUgKGp1c3QgcGFp
bnRzIGluIHRoZSBjb250cm9sIGJveCBhbmQgdHVybnMgb2ZmIHRoZSBXaW5kb3dzIFhQIHRoZW1l
KQogICAgIC8vIGZvciBub3csIHdlIHdpbGwgbm90IGhvbm9yIGl0LgotICAgIHN0eWxlLT5yZXNl
dEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKLSAgICBzdHlsZS0+c2V0Qm94
U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJh
ZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNv
bnN0CiB7CiAgICAgLy8gQSBzdW1tYXJ5IG9mIHRoZSBydWxlcyBmb3IgY2hlY2tib3ggZGVzaWdu
ZWQgdG8gbWF0Y2ggV2luSUU6CiAgICAgLy8gd2lkdGgvaGVpZ2h0IC0gaG9ub3JlZCAoV2luSUUg
YWN0dWFsbHkgc2NhbGVzIGl0cyBjb250cm9sIGZvciBzbWFsbCB3aWR0aHMsIGJ1dCBsZXRzIGl0
IG92ZXJmbG93IGZvciBzbWFsbCBoZWlnaHRzLikKQEAgLTkzNSwxNiArOTM1LDE2IEBAIHZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGUKICAgICBzZXRSYWRpb1NpemUoc3R5
bGUpOwogCiAgICAgLy8gcGFkZGluZyAtIG5vdCBob25vcmVkIGJ5IFdpbklFLCBuZWVkcyB0byBi
ZSByZW1vdmVkLgotICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBzdHlsZS5yZXNldFBh
ZGRpbmcoKTsKIAogICAgIC8vIGJvcmRlciAtIGhvbm9yZWQgYnkgV2luSUUsIGJ1dCBsb29rcyB0
ZXJyaWJsZSAoanVzdCBwYWludHMgaW4gdGhlIGNvbnRyb2wgYm94IGFuZCB0dXJucyBvZmYgdGhl
IFdpbmRvd3MgWFAgdGhlbWUpCiAgICAgLy8gZm9yIG5vdywgd2Ugd2lsbCBub3QgaG9ub3IgaXQu
Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKIAot
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93
KG51bGxwdHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIE1vc3QgcGxhdGZvcm1zIHdpbGwgY29t
cGxldGVseSBob25vciBhbGwgQ1NTLCBhbmQgc28gd2UgaGF2ZSBubyBuZWVkIHRvCiAgICAgLy8g
YWRqdXN0IHRoZSBzdHlsZSBhdCBhbGwgYnkgZGVmYXVsdC4gV2Ugd2lsbCBzdGlsbCBhbGxvdyB0
aGUgdGhlbWUgYSBjcmFjawpAQCAtOTUyLDI1ICs5NTIsMjUgQEAgdm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0QnV0dG9uU3R5bGUoU3R5bAogICAgIHNldEJ1dHRvblNpemUoc3R5bGUpOwogfQogCi12
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1l
bnQmKSBjb25zdAogewogfQogI2VuZGlmCiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRG
aWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFk
anVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRo
ZW1lOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAogI2lmIEVO
QUJMRShJTlBVVF9TUEVFQ0gpCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5k
ZXJJbnB1dFNwZWVjaDo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKIH0KQEAgLTk4MiwxMiArOTgyLDEyIEBAIGJvb2wgUmVu
ZGVyVGhlbWU6OnBhaW50SW5wdXRGaWVsZFNwZWVjaEIKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1F
VEVSX0VMRU1FTlQpCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxl
LCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwor
ICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotSW50U2l6ZSBSZW5kZXJUaGVt
ZTo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29uc3QgSW50UmVjdCYg
Ym91bmRzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZTo6bWV0ZXJTaXplRm9yQm91bmRzKGNv
bnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAogewogICAgIHJl
dHVybiBib3VuZHMuc2l6ZSgpOwogfQpAQCAtMTA5NCwxNyArMTA5NCwxNyBAQCB2b2lkIFJlbmRl
clRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9H
UkVTU19FTEVNRU5UKQotZG91YmxlIFJlbmRlclRoZW1lOjphbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVt
ZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZTo6YW5pbWF0
aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citkb3VibGUg
UmVuZGVyVGhlbWU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jl
c3MmKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAtMTExNCw0
OSArMTExNCw0OSBAQCBJbnRSZWN0IFJlbmRlclRoZW1lOjpwcm9ncmVzc0JhclJlY3RGb3JCCiB9
CiAjZW5kaWYKIAotYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxk
SGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50KSBjb25zdAogewot
ICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzU3RlcHBhYmxlKCkgJiYgIWlucHV0RWxlbWVudC0+
aXNSYW5nZUNvbnRyb2woKTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50LmlzU3RlcHBhYmxlKCkg
JiYgIWlucHV0RWxlbWVudC5pc1JhbmdlQ29udHJvbCgpOwogfQogCiB2b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZWRpYUNv
bnRyb2xTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0
eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGFkanVzdFNsaWRlclRodW1iU2l6
ZShzdHlsZSwgZWxlbWVudCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3QKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmgJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICAvLyBt
ZXRyaWNzIGFuZCBkZWZhdWx0cyBnaXZlbiB0aGUgY29udGVudHMgb2YgdGhlIHN0eWxlLiAgVGhp
cyBpbmNsdWRlcyBzb3BoaXN0aWNhdGVkIG9wZXJhdGlvbnMgbGlrZQogICAgIC8vIHNlbGVjdGlv
biBvZiBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LCB0aGUgZGlzYWJsaW5nIG9mIGFw
cGVhcmFuY2Ugd2hlbiBjZXJ0YWluIG90aGVyIHByb3BlcnRpZXMgbGlrZQogICAgIC8vICJib3Jk
ZXIiIGFyZSBzZXQsIG9yIGlmIHRoZSBhcHBlYXJhbmNlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhl
IHRoZW1lLgotICAgIHZvaWQgYWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCosICBib29sIFVBSGFzQXBwZWFyYW5jZSwgY29uc3QgQm9yZGVyRGF0YSYsIGNv
bnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpOworICAgIHZvaWQg
YWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYsICBib29s
IFVBSGFzQXBwZWFyYW5jZSwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNv
bnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIHRvIHBhaW50IHRoZSB3aWRnZXQgYXMgYSBiYWNrZ3JvdW5kIG9mIHRoZSBSZW5kZXJPYmpl
Y3QuICBBIHdpZGdldCdzIGZvcmVncm91bmQsIGUuZy4sIHRoZQogICAgIC8vIHRleHQgb2YgYSBi
dXR0b24sIGlzIGFsd2F5cyByZW5kZXJlZCBieSB0aGUgZW5naW5lIGl0c2VsZi4gIFRoZSBib29s
ZWFuIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCYp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgY29u
dHJvbCBoYXMgYmVlbiBzdHlsZWQgZW5vdWdoIGJ5IHRoZSBhdXRob3IgdG8gZGlzYWJsZSB0aGUg
bmF0aXZlIGFwcGVhcmFuY2UuCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25z
dCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25z
dCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250
cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZp
bGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0OwogCiAgICAgLy8g
QSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0
ZWQgYXQgYWxsLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMzUsMTAgKzEzNSwxMCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIHsgfQogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlm
IHRoZSB0aGVtZSBpcyBhYmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCi0gICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7CiAK
ICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkg
Y2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHBsYXRmb3Jt
IGlzIGFibGUgdG8gc2hvdyBkYXRhbGlzdCBzdWdnZXN0aW9ucyBmb3IgYSBnaXZlbiBpbnB1dCB0
eXBlLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RhdGFMaXN0VUkoY29uc3QgQXRvbWljU3Ry
aW5nJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3NywxNiArMTc3LDE2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRp
b24mKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihDU1NWYWx1ZUlE
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5
bGUqKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0
U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1l
bnQmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChS
ZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludCBwb3B1cElu
dGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKikgY29uc3Qg
eyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9t
KFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVw
SW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlJikgY29u
c3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9w
KFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVw
SW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gMDsgfQog
ICAgIHZpcnR1YWwgYm9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6
ZSBwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0eWxlKiwgSW50UmVjdCYpIGNvbnN0IHsgcmV0
dXJuIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXplTm9ybWFsOyB9CisgICAgdmlydHVhbCBQ
b3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0
eWxlJiwgSW50UmVjdCYpIGNvbnN0IHsgcmV0dXJuIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVT
aXplTm9ybWFsOyB9CiAKICAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9sbGJh
ckNvbnRyb2xTaXplRm9yUGFydChDb250cm9sUGFydCkgeyByZXR1cm4gUmVndWxhclNjcm9sbGJh
cjsgfQogCkBAIC0xOTUsOSArMTk1LDkgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFBST0dSRVNT
X0VMRU1FTlQpCiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmlt
YXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9u
UmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OworICAg
IHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVu
ZGVyUHJvZ3Jlc3MmKSBjb25zdDsKICAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUg
YW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dy
ZXNzJikgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0IHByb2dyZXNzQmFyUmVjdEZvckJvdW5k
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAjZW5kaWYKIApA
QCAtMjE5LDcgKzIxOSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX0VM
RU1FTlQpCi0gICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5k
ZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFNpemUgbWV0
ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0KSBjb25zdDsKICNl
bmRpZgogCkBAIC0yMzUsNyArMjM1LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZEhhdmVTcGluQnV0dG9uKEhU
TUxJbnB1dEVsZW1lbnQmKSBjb25zdDsKIAogICAgIC8vIEZ1bmN0aW9ucyBmb3IgPHNlbGVjdD4g
ZWxlbWVudHMuCiAgICAgdmlydHVhbCBib29sIGRlbGVnYXRlc01lbnVMaXN0UmVuZGVyaW5nKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI3MCwxOSArMjcwLDE5IEBAIHByb3RlY3RlZDoK
IAogI2lmICFVU0UoTkVXX1RIRU1FKQogICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5j
ZSB2YWx1ZS4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUmKSBjb25zdCB7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9T
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRl
clN0eWxlKikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVy
U3R5bGUmKSBjb25zdCB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJ
bm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCkBAIC0yOTAsMTUgKzI5MCwx
NSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW9EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbkRlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBF
bGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURlY29yYXRpb25zKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KIApAQCAtMzA5LDQ0ICszMDksNDQgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBw
YWludFNxdWFyZUJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICNpZiBFTkFCTEUo
TUVURVJfRUxFTUVOVCkKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jh
cihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludElucHV0RmllbGRT
cGVlY2hCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRy
YWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRo
dW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWJEZWNv
cmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYU92ZXJsYXlQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAkocmV2aXNpb24gMTcwMzcx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDkgKzM5LDkgQEAgY2xhc3MgUmVuZGVyVGhlbWVJT1MgOiBwdWJsaWMgUmVu
ZGVyVGhlbQogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVh
dGUoKTsKIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVy
U3R5bGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFk
ZGluZ1JpZ2h0KFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9p
ZCBhZGp1c3RSb3VuZEJvcmRlclJhZGl1cyhSZW5kZXJTdHlsZSYsIFJlbmRlckJveCopOworICAg
IHN0YXRpYyB2b2lkIGFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKFJlbmRlclN0eWxlJiwgUmVuZGVy
Qm94Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVz
Y3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNTIsMTkgKzUyLDE5IEBAIHB1YmxpYzoK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRl
ck9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5
ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUm
LCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIE1ldGhvZHMg
Zm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2ti
b3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
Ym9vbCBwYWludENoZWNrYm94RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lk
IGFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCBib29sIHBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRGaWxlVXBsb2FkSWNvbkRlY29yYXRpb25zKGNvbnN0IFJl
bmRlck9iamVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0JiBidXR0b25SZW5k
ZXJlciwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYsIEljb24qLCBGaWxlVXBsb2Fk
RGVjb3JhdGlvbnMpIG92ZXJyaWRlOwogCkBAIC03NCwxNyArNzQsMTcgQEAgcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlk
ZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVt
YlNpemUoUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUo
UFJPR1JFU1NfRUxFTUVOVCkKICAgICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2Yg
dGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBh
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxG
b3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwogICAgIC8vIFJl
dHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIu
Ci0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5k
ZXJQcm9ncmVzcyopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlv
bkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICNlbmRpZgpAQCAt
OTQsNyArOTQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBpbnQgc2xpZGVyVGlja09mZnNl
dEZyb21UcmFja0NlbnRlcigpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwogCiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHByb3RlY3Rl
ZDoKICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dQbGFjZWhvbGRlcldoZW5G
b2N1c2VkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEhhdmVTcGlu
QnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCYpIGNvbnN0IG92ZXJyaWRl
OwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0KCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1MywxNSArMzUzLDE1
IEBAIEZsb2F0UmVjdCBSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmQKICAgICByZXR1cm4g
Ym9yZGVyLnJlY3QoKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Q2hlY2tib3hT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgaWYgKCFzdHlsZS0+
d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkp
CisgICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhl
aWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMZW5ndGggbGVuZ3RoID0g
TGVuZ3RoKHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3RkOjptYXgoc3R5bGUtPmZvbnRTaXplKCks
IDEwKSkpLCBGaXhlZCk7CisgICAgTGVuZ3RoIGxlbmd0aCA9IExlbmd0aChzdGF0aWNfY2FzdDxp
bnQ+KGNlaWxmKHN0ZDo6bWF4KHN0eWxlLmZvbnRTaXplKCksIDEwKSkpLCBGaXhlZCk7CiAgICAg
Ci0gICAgc3R5bGUtPnNldFdpZHRoKGxlbmd0aCk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChsZW5n
dGgpOworICAgIHN0eWxlLnNldFdpZHRoKGxlbmd0aCk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KGxl
bmd0aCk7CiB9CiAKIHN0YXRpYyBDR1BvaW50IHNob3J0ZW5lZChDR1BvaW50IHN0YXJ0LCBDR1Bv
aW50IGVuZCwgZmxvYXQgd2lkdGgpCkBAIC00MzcsMjcgKzQzNywyNyBAQCBpbnQgUmVuZGVyVGhl
bWVJT1M6OmJhc2VsaW5lUG9zaXRpb24oY29uCiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpiYXNl
bGluZVBvc2l0aW9uKGJveCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OmlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwg
Y29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9y
KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZUlPUzo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5ZXIm
IGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7CiAgICAg
Ly8gQnV0dG9ucyBhbmQgTWVudWxpc3RCdXR0b25zIGFyZSBzdHlsZWQgaWYgdGhleSBjb250YWlu
IGEgYmFja2dyb3VuZCBpbWFnZS4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNo
QnV0dG9uUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkK
LSAgICAgICAgcmV0dXJuICFzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yKS5hbHBoYSgpIHx8IHN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCktPmhh
c0ltYWdlKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCB8
fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1
cm4gIXN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cikuYWxwaGEoKSB8fCBzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCktPmhhc0ltYWdlKCk7CiAKLSAg
ICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLT5hcHBl
YXJhbmNlKCkgPT0gVGV4dEFyZWFQYXJ0KQotICAgICAgICByZXR1cm4gKnN0eWxlLT5iYWNrZ3Jv
dW5kTGF5ZXJzKCkgIT0gYmFja2dyb3VuZDsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09
IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IFRleHRBcmVhUGFydCkKKyAg
ICAgICAgcmV0dXJuICpzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCkgIT0gYmFja2dyb3VuZDsKIAog
ICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJh
Y2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFk
anVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIGlmICgh
c3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlz
QXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFz
dHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGVuZ3RoIGxl
bmd0aCA9IExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHN0ZDo6bWF4KHN0eWxlLT5mb250
U2l6ZSgpLCAxMCkpKSwgRml4ZWQpOwotICAgIHN0eWxlLT5zZXRXaWR0aChsZW5ndGgpOwotICAg
IHN0eWxlLT5zZXRIZWlnaHQobGVuZ3RoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVzKElu
dFNpemUobGVuZ3RoLnZhbHVlKCkgLyAyLjBmLCBsZW5ndGgudmFsdWUoKSAvIDIuMGYpKTsKKyAg
ICBMZW5ndGggbGVuZ3RoID0gTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3RkOjptYXgo
c3R5bGUuZm9udFNpemUoKSwgMTApKSksIEZpeGVkKTsKKyAgICBzdHlsZS5zZXRXaWR0aChsZW5n
dGgpOworICAgIHN0eWxlLnNldEhlaWdodChsZW5ndGgpOworICAgIHN0eWxlLnNldEJvcmRlclJh
ZGl1cyhJbnRTaXplKGxlbmd0aC52YWx1ZSgpIC8gMi4wZiwgbGVuZ3RoLnZhbHVlKCkgLyAyLjBm
KSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UmFkaW9EZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCkBAIC01MTksMjEgKzUxOSwyMSBAQCBjb25zdCBmbG9hdCBNZW51TGlzdEFy
cm93V2lkdGggPSA3OwogY29uc3QgZmxvYXQgTWVudUxpc3RBcnJvd0hlaWdodCA9IDY7CiBjb25z
dCBmbG9hdCBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdodCA9IDE5OwogCi1pbnQgUmVuZGVyVGhl
bWVJT1M6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAoraW50IFJlbmRlclRoZW1lSU9TOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0
eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51
bGlzdEJ1dHRvblBhcnQpCi0gICAgICAgIHJldHVybiBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdo
dCArIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkg
PT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gTWVudUxpc3RCdXR0b25QYWRk
aW5nUmlnaHQgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpOwogICAgIHJldHVybiAwOwogfQogCi12
b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSb3VuZEJvcmRlclJhZGl1cyhSZW5kZXJTdHlsZSYg
c3R5bGUsIFJlbmRlckJveCogYm94KQordm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91bmRC
b3JkZXJSYWRpdXMoUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJCb3gmIGJveCkKIHsKICAgICBp
ZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQgfHwgc3R5bGUuYmFja2dyb3Vu
ZExheWVycygpLT5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG5vdCBiZSByZWx5aW5nIG9uIGJvcmRlciByYWRpdXMgZm9yIHRoZSBhcHBlYXJh
bmNlIG9mIG91ciBjb250cm9scyA8cmRhcjovL3Byb2JsZW0vNzY3NTQ5Mz4KLSAgICBMZW5ndGgg
cmFkaXVzV2lkdGgoc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1pbihib3gtPndpZHRoKCksIGJveC0+
aGVpZ2h0KCkpIC8gMi4wKSwgRml4ZWQpOwotICAgIExlbmd0aCByYWRpdXNIZWlnaHQoc3RhdGlj
X2Nhc3Q8aW50Pihib3gtPmhlaWdodCgpIC8gMi4wKSwgRml4ZWQpOworICAgIExlbmd0aCByYWRp
dXNXaWR0aChzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bWluKGJveC53aWR0aCgpLCBib3guaGVpZ2h0
KCkpIC8gMi4wKSwgRml4ZWQpOworICAgIExlbmd0aCByYWRpdXNIZWlnaHQoc3RhdGljX2Nhc3Q8
aW50Pihib3guaGVpZ2h0KCkgLyAyLjApLCBGaXhlZCk7CiAgICAgc3R5bGUuc2V0Qm9yZGVyUmFk
aXVzKExlbmd0aFNpemUocmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCkpOwogfQogCkBAIC02MTks
MTAgKzYxOSw4IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdE1lbnVMaXN0QnV0dG8KICAg
ICAvLyAiLXdlYmtpdC1hcHBlYXJhbmNlOiBtZW51bGlzdC1idXR0b24iLgogICAgIGlmIChlbGVt
ZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3RUYWcpICYmICFlbGVtZW50Lmhhc0F0dHJp
YnV0ZShIVE1MTmFtZXM6Om11bHRpcGxlQXR0cikpCiAgICAgICAgIGFkanVzdFNlbGVjdExpc3RC
dXR0b25TdHlsZShzdHlsZSwgZWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPigmZWxlbWVudCk7Ci0g
ICAgICAgIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWxlKHN0eWxlLCAqaW5wdXRFbGVtZW50
KTsKLSAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5w
dXRUYWcpKQorICAgICAgICBhZGp1c3RJbnB1dEVsZW1lbnRCdXR0b25TdHlsZShzdHlsZSwgc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCY+KGVsZW1lbnQpKTsKIH0KIAogYm9vbCBSZW5kZXJU
aGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVj
dCYgYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQpAQCAtNzE3LDE0ICs3MTUsMTQgQEAgY29uc3QgQ0dGbG9hdCBrVHJhY2tUaGlja25lc3MgPSA0
LjA7CiBjb25zdCBDR0Zsb2F0IGtUcmFja1JhZGl1cyA9IGtUcmFja1RoaWNrbmVzcyAvIDIuMDsK
IGNvbnN0IGludCBrRGVmYXVsdFNsaWRlclRodW1iU2l6ZSA9IDE2OwogCi12b2lkIFJlbmRlclRo
ZW1lSU9TOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lSU9TOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVy
VGhlbWU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsK
IAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGJlIHJlbHlpbmcgb24gYm9yZGVyIHJhZGl1
cyBmb3IgdGhlIGFwcGVhcmFuY2Ugb2Ygb3VyIGNvbnRyb2xzIDxyZGFyOi8vcHJvYmxlbS83Njc1
NDkzPgogICAgIExlbmd0aCByYWRpdXNXaWR0aChzdGF0aWNfY2FzdDxpbnQ+KGtUcmFja1JhZGl1
cyksIEZpeGVkKTsKICAgICBMZW5ndGggcmFkaXVzSGVpZ2h0KHN0YXRpY19jYXN0PGludD4oa1Ry
YWNrUmFkaXVzKSwgRml4ZWQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSYWRpdXMoTGVuZ3RoU2l6
ZShyYWRpdXNXaWR0aCwgcmFkaXVzSGVpZ2h0KSk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmFkaXVz
KExlbmd0aFNpemUocmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCkpOwogfQogCiBib29sIFJlbmRl
clRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTgwNSwyMCAr
ODAzLDIwIEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVHJhY2soY28KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNsaWRlclRodW1i
U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUlPUzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYp
IGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJIb3Jp
em9udGFsUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0KQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJIb3Jpem9udGFs
UGFydCAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIEVuZm9yY2UgImJvcmRlci1yYWRpdXM6IDUwJSIuCiAg
ICAgTGVuZ3RoIGxlbmd0aCg1MC4wZiwgUGVyY2VudCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclJh
ZGl1cyhMZW5ndGhTaXplKGxlbmd0aCwgbGVuZ3RoKSk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmFk
aXVzKExlbmd0aFNpemUobGVuZ3RoLCBsZW5ndGgpKTsKIAogICAgIC8vIEVuZm9yY2UgYSAxNngx
NiBzaXplIGlmIG5vIHNpemUgaXMgcHJvdmlkZWQuCi0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlz
SW50cmluc2ljT3JBdXRvKCkgfHwgc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKSB7CisgICAgaWYg
KHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSB8fCBzdHlsZS5oZWlnaHQoKS5pc0F1
dG8oKSkgewogICAgICAgICBMZW5ndGggbGVuZ3RoID0gTGVuZ3RoKGtEZWZhdWx0U2xpZGVyVGh1
bWJTaXplLCBGaXhlZCk7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChsZW5ndGgpOwotICAgICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KGxlbmd0aCk7CisgICAgICAgIHN0eWxlLnNldFdpZHRoKGxlbmd0
aCk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChsZW5ndGgpOwogICAgIH0KIH0KIApAQCAtODQw
LDEyICs4MzgsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUaHVtYkRlYwog
fQogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi1kb3VibGUgUmVuZGVyVGhlbWVJT1M6
OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBj
b25zdAorZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclBy
b2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAot
ZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzKikgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVtZUlPUzo6YW5pbWF0aW9uRHVy
YXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IDA7CiB9CkBAIC05NDcsMjEgKzk0NSwxOCBAQCBpbnQgUmVuZGVyVGhlbWVJT1M6OnNsaWRlclRp
Y2tPZmZzZXRGcm9tCiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2Vh
cmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2Vh
cmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzZWxlY3RvciwgUmVuZGVyU3R5bGUmIHN0eWxl
LCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFy
Y2hGaWVsZFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CiAKLSAgICBpZiAoIWVsZW1l
bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc3R5bGUtPmhhc0JvcmRlcigpKQorICAg
IGlmICghc3R5bGUuaGFzQm9yZGVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlckJv
eCogYm94ID0gZWxlbWVudC0+cmVuZGVyQm94KCk7CisgICAgUmVuZGVyQm94KiBib3ggPSBlbGVt
ZW50LnJlbmRlckJveCgpOwogICAgIGlmICghYm94KQogICAgICAgICByZXR1cm47CiAKLSAgICBh
ZGp1c3RSb3VuZEJvcmRlclJhZGl1cygqc3R5bGUsIGJveCk7CisgICAgYWRqdXN0Um91bmRCb3Jk
ZXJSYWRpdXMoc3R5bGUsICpib3gpOwogfQogCiBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNl
YXJjaEZpZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtOTY5LDcgKzk2NCw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWMKICAgICByZXR1cm4gcGFp
bnRUZXh0RmllbGREZWNvcmF0aW9ucyhib3gsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9y
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclRo
ZW1lOjphZGp1c3RCdXR0b25TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwogCkBAIC05
NzgsMTcgKzk3MywxNCBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZShT
CiAgICAgLy8gU2luY2UgdGhlIGVsZW1lbnQgbWlnaHQgbm90IGJlIGluIGEgZG9jdW1lbnQsIGp1
c3QgcGFzcyBudWxscHRyIGZvciB0aGUgcm9vdCBlbGVtZW50IHN0eWxlCiAgICAgLy8gYW5kIHRo
ZSByZW5kZXIgdmlldy4KICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGVtU2l6ZSA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMS4wLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7
Ci0gICAgaW50IHBpeGVscyA9IGVtU2l6ZS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEoc3R5bGUsIG51bGxwdHIsIG51bGxwdHIsIDEuMCwgZmFsc2UpKTsKLSAg
ICBzdHlsZS0+c2V0UGFkZGluZ0JveChMZW5ndGhCb3goMCwgcGl4ZWxzLCAwLCBwaXhlbHMpKTsK
LQotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgIGludCBwaXhlbHMgPSBl
bVNpemUtPmNvbXB1dGVMZW5ndGg8aW50PihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCZzdHls
ZSwgbnVsbHB0ciwgbnVsbHB0ciwgMS4wLCBmYWxzZSkpOworICAgIHN0eWxlLnNldFBhZGRpbmdC
b3goTGVuZ3RoQm94KDAsIHBpeGVscywgMCwgcGl4ZWxzKSk7CiAKLSAgICBSZW5kZXJCb3gqIGJv
eCA9IGVsZW1lbnQtPnJlbmRlckJveCgpOworICAgIFJlbmRlckJveCogYm94ID0gZWxlbWVudC5y
ZW5kZXJCb3goKTsKICAgICBpZiAoIWJveCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYWRqdXN0
Um91bmRCb3JkZXJSYWRpdXMoKnN0eWxlLCBib3gpOworICAgIGFkanVzdFJvdW5kQm9yZGVyUmFk
aXVzKHN0eWxlLCAqYm94KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRCdXR0b25E
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0xMDExLDE0ICsxMDAzLDE0IEBAIGJvb2wg
UmVuZGVyVGhlbWVJT1M6OnBhaW50UHVzaEJ1dHRvbkRlY28KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OnNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUlPUzo6c2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSYg
c3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGgg
c3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53
aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkK
KyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVp
Z2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSB0aGUgZm9udCBz
aXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgotICAg
IHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oQ29udHJvbEJhc2VIZWln
aHQgLyBDb250cm9sQmFzZUZvbnRTaXplICogc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1
dGVkU2l6ZSgpKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19j
YXN0PGludD4oQ29udHJvbEJhc2VIZWlnaHQgLyBDb250cm9sQmFzZUZvbnRTaXplICogc3R5bGUu
Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCkpLCBGaXhlZCkpOwogfQogCiBjb25zdCBp
bnQga1RodW1ibmFpbEJvcmRlclN0cm9rZVdpZHRoID0gMTsKQEAgLTEwODcsNyArMTA3OSw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVJT1M6OnNob3VsZFNob3dQbGFjZWhvbGQKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6c2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElu
cHV0RWxlbWVudCopIGNvbnN0Citib29sIFJlbmRlclRoZW1lSU9TOjpzaG91bGRIYXZlU3BpbkJ1
dHRvbihIVE1MSW5wdXRFbGVtZW50JikgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkocmV2aXNpb24g
MTcwMzcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIEZsb2F0UmVjdCYpIG92ZXJy
aWRlOwogCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYgYmFj
a2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9s
U3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxM
YXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNjksMzYgKzY5LDM2IEBA
IHB1YmxpYzoKICAgICAvLyBTeXN0ZW0gZm9udHMuCiAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZv
bnQoQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2
aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSYpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJy
aWRlOwogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgdmlydHVhbCBJbnRTaXpl
IHNsaWRlclRpY2tTaXplKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBpbnQgc2xpZGVy
VGlja09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKLSAg
ICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJl
bmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGlu
dCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNpemUgcG9wdXBNZW51U2l6
ZShjb25zdCBSZW5kZXJTdHlsZSosIEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0
eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRp
bmdUb3AoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBwb3B1
cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNpemUgcG9wdXBNZW51U2l6ZShjb25z
dCBSZW5kZXJTdHlsZSYsIEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBw
b3BzTWVudUJ5QXJyb3dLZXlzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAj
aWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCi0gICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZv
ckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1l
dGVyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBw
YWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihDb250cm9s
UGFydCkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVN
RU5UKQogICAgIC8vIFJldHVybnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5pbWF0aW9u
IGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVh
dEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFy
KFJlbmRlclByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgLy8gUmV0dXJucyB0aGUgZHVy
YXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFs
IGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQ
cm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
SW50UmVjdCBwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKQEAgLTEyNSw0MSArMTI1LDQx
IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3JzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAjaWYg
RU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNz
QmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xp
ZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1
bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBh
cnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJp
ZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMTc2LDE0ICsxNzYsMTQgQEAg
cHJpdmF0ZToKICAgICBGbG9hdFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJlbmRl
ck9iamVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0JiBwYXJ0UmVuZGVyZXIs
IGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKICAg
ICAvLyBHZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIGZvbnQuIFVzZWQgYnkgc29t
ZSBvZiB0aGUgY29udHJvbHMgKGxpa2UgYnV0dG9ucykuCi0gICAgTlNDb250cm9sU2l6ZSBjb250
cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBOU0NvbnRyb2xTaXplIGNv
bnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIE5TQ29udHJv
bFNpemUgY29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgTlNDb250
cm9sU2l6ZSBjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmKSBjb25zdDsKICAg
ICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yQ2VsbChOU0NlbGwqLCBjb25zdCBJbnRTaXpl
KiBzaXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0gMS4wZikg
Y29uc3Q7CiAgICAgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBjb25zdCBJbnRTaXplKiBz
aXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0gMS4wZik7Ci0g
ICAgdm9pZCBzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXpl
cykgY29uc3Q7Ci0gICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IElu
dFNpemUqIHNpemVzKSBjb25zdDsKLSAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJlbmRl
clN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAgIHZvaWQgc2V0Rm9udEZy
b21Db250cm9sU2l6ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBOU0NvbnRyb2xTaXpl
KSBjb25zdDsKKyAgICB2b2lkIHNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSYsIGNvbnN0IElu
dFNpemUqIHNpemVzKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVGb3JGb250KFJlbmRlclN0eWxl
JiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAgIEludFNpemUgc2l6ZUZvclN5c3Rl
bUZvbnQoUmVuZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7CisgICAgdm9p
ZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIE5T
Q29udHJvbFNpemUpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxs
KiwgY29uc3QgUmVuZGVyT2JqZWN0Jik7CiAgICAgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoTlND
ZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Jik7CkBAIC0yMDMsNyArMjAzLDcgQEAgcHJpdmF0ZToK
ICAgICBjb25zdCBJbnRTaXplKiBjYW5jZWxCdXR0b25TaXplcygpIGNvbnN0OwogICAgIGNvbnN0
IEludFNpemUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VhcmNo
Q2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lk
IHNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZvaWQgc2V0U2Vh
cmNoRmllbGRTaXplKFJlbmRlclN0eWxlJikgY29uc3Q7CiAKICAgICBOU1BvcFVwQnV0dG9uQ2Vs
bCAqcG9wdXBCdXR0b24oKSBjb25zdDsKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCAqc2VhcmNoKCkg
Y29uc3Q7CkBAIC0yMTQsMTEgKzIxNCwxMSBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKE1FVEVS
X0VMRU1FTlQpCiAgICAgTlNMZXZlbEluZGljYXRvclN0eWxlIGxldmVsSW5kaWNhdG9yU3R5bGVG
b3IoQ29udHJvbFBhcnQpIGNvbnN0OwotICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsICpsZXZlbElu
ZGljYXRvckZvcihjb25zdCBSZW5kZXJNZXRlciopIGNvbnN0OworICAgIE5TTGV2ZWxJbmRpY2F0
b3JDZWxsICpsZXZlbEluZGljYXRvckZvcihjb25zdCBSZW5kZXJNZXRlciYpIGNvbnN0OwogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICBpbnQgbWluaW11bVByb2dy
ZXNzQmFySGVpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgaW50IG1pbmltdW1Qcm9ncmVz
c0JhckhlaWdodChSZW5kZXJTdHlsZSYpIGNvbnN0OwogICAgIGNvbnN0IEludFNpemUqIHByb2dy
ZXNzQmFyU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBpbnQqIHByb2dyZXNzQmFyTWFyZ2lucyhO
U0NvbnRyb2xTaXplKSBjb25zdDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OTksMTcg
KzU5OSwxNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjp1c2VzVGVzdE1vZGVGb2N1c1JpCiAgICAg
cmV0dXJuIFdlYkNvcmU6OnVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKCk7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWVNYWM6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OmlzQ29udHJv
bFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXIm
IGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7Ci0gICAg
aWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkUGFydCB8fCBzdHlsZS0+YXBwZWFy
YW5jZSgpID09IFRleHRBcmVhUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IExpc3Rib3hQ
YXJ0KQotICAgICAgICByZXR1cm4gc3R5bGUtPmJvcmRlcigpICE9IGJvcmRlcjsKKyAgICBpZiAo
c3R5bGUuYXBwZWFyYW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgp
ID09IFRleHRBcmVhUGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisg
ICAgICAgIHJldHVybiBzdHlsZS5ib3JkZXIoKSAhPSBib3JkZXI7CiAKICAgICAvLyBGSVhNRTog
VGhpcyBpcyBob3JyaWJsZSwgYnV0IHRoZXJlIGlzIG5vdCBtdWNoIGVsc2UgdGhhdCBjYW4gYmUg
ZG9uZS4gIE1lbnUgbGlzdHMgY2Fubm90IGRyYXcgcHJvcGVybHkgd2hlbgogICAgIC8vIHNjYWxl
ZC4gIFRoZXkgY2FuJ3QgcmVhbGx5IGRyYXcgcHJvcGVybHkgd2hlbiB0cmFuc2Zvcm1lZCBlaXRo
ZXIuICBXZSBjYW4ndCBkZXRlY3QgdGhlIHRyYW5zZm9ybSBjYXNlIGF0IHN0eWxlCiAgICAgLy8g
YWRqdXN0bWVudCB0aW1lIHNvIHRoYXQgd2lsbCBqdXN0IGhhdmUgdG8gc3RheSBicm9rZW4uICBX
ZSBjYW4gaG93ZXZlciBkZXRlY3QgdGhhdCB3ZSdyZSB6b29taW5nLiAgSWYgem9vbWluZwogICAg
IC8vIGlzIGluIGVmZmVjdCB3ZSB0cmVhdCBpdCBsaWtlIHRoZSBjb250cm9sIGlzIHN0eWxlZC4K
LSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQgJiYgc3R5bGUtPmVm
ZmVjdGl2ZVpvb20oKSAhPSAxLjBmKQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVu
dWxpc3RQYXJ0ICYmIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSAhPSAxLjBmKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxl
LCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CkBAIC03NDMsOSArNzQzLDkg
QEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFN1cHBvcnRzVGludAogICAgIHJldHVybiB0
cnVlOwogfQogCi1OU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvckZv
bnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1h
Yzo6Y29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBp
bnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKKyAgICBpbnQgZm9udFNpemUgPSBzdHls
ZS5mb250U2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA+PSAxNikKICAgICAgICAgcmV0dXJuIE5T
UmVndWxhckNvbnRyb2xTaXplOwogICAgIGlmIChmb250U2l6ZSA+PSAxMSkKQEAgLTc3MywzNSAr
NzczLDM1IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldENvbnRyb2xTaXplKE5TQ2UKICAgICAg
ICAgW2NlbGwgc2V0Q29udHJvbFNpemU6c2l6ZV07CiB9CiAKLUludFNpemUgUmVuZGVyVGhlbWVN
YWM6OnNpemVGb3JGb250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMp
IGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lTWFjOjpzaXplRm9yRm9udChSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKKyAgICBpZiAoc3R5bGUuZWZmZWN0aXZlWm9vbSgpICE9
IDEuMGYpIHsKICAgICAgICAgSW50U2l6ZSByZXN1bHQgPSBzaXplc1tjb250cm9sU2l6ZUZvckZv
bnQoc3R5bGUpXTsKLSAgICAgICAgcmV0dXJuIEludFNpemUocmVzdWx0LndpZHRoKCkgKiBzdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpLCByZXN1bHQuaGVpZ2h0KCkgKiBzdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpKTsKKyAgICAgICAgcmV0dXJuIEludFNpemUocmVzdWx0LndpZHRoKCkgKiBzdHlsZS5lZmZl
Y3RpdmVab29tKCksIHJlc3VsdC5oZWlnaHQoKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAg
ICAgfQogICAgIHJldHVybiBzaXplc1tjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpXTsKIH0KIAot
SW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVNYWM6
OnNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6
ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikgewor
ICAgIGlmIChzdHlsZS5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikgewogICAgICAgICBJbnRTaXpl
IHJlc3VsdCA9IHNpemVzW2NvbnRyb2xTaXplRm9yU3lzdGVtRm9udChzdHlsZSldOwotICAgICAg
ICByZXR1cm4gSW50U2l6ZShyZXN1bHQud2lkdGgoKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCks
IHJlc3VsdC5oZWlnaHQoKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICByZXR1
cm4gSW50U2l6ZShyZXN1bHQud2lkdGgoKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSwgcmVzdWx0
LmhlaWdodCgpICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHNp
emVzW2NvbnRyb2xTaXplRm9yU3lzdGVtRm9udChzdHlsZSldOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lTWFjOjpzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXpl
KiBzaXplcykgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNpemVGcm9tRm9udChSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAogewogICAgIC8vIEZJ
WE1FOiBDaGVjayBpcyBmbGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4
LXdpZHRoIGludG8gYWNjb3VudC4KICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yRm9udChzdHls
ZSwgc2l6ZXMpOwotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYm
IHNpemUud2lkdGgoKSA+IDApCi0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53
aWR0aCgpLCBGaXhlZCkpOwotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6
ZS5oZWlnaHQoKSA+IDApCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVp
Z2h0KCksIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KSAmJiBzaXplLndpZHRoKCkgPiAwKQorICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2l6
ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSAmJiBz
aXplLmhlaWdodCgpID4gMCkKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhl
aWdodCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNv
bnRyb2xTaXplKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNp
emUgY29udHJvbFNpemUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNv
bnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIE5TQ29udHJvbFNp
emUgY29udHJvbFNpemUpIGNvbnN0CiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CkBAIC04
MDksMTkgKzgwOSwxOSBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xT
CiAKICAgICBOU0ZvbnQqIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBz
eXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOmNvbnRyb2xTaXplXV07CiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldE9uZUZhbWlseShbZm9udCB3ZWJDb3JlRmFtaWx5TmFtZV0pOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoW2ZvbnQgcG9pbnRTaXplXSAqIHN0eWxlLT5lZmZl
Y3RpdmVab29tKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKFtmb250
IHBvaW50U2l6ZV0gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBmb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS5lZmZlY3RpdmVab29t
KCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKFtmb250IHBvaW50U2l6
ZV0gKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogCiAgICAgLy8gUmVzZXQgbGluZSBoZWlnaHQK
LSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQo
KSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWln
aHQoKSk7CiAKLSAgICBpZiAoc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pKQotICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICBpZiAoc3R5bGUuc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCisgICAgICAgIHN0eWxlLmZvbnQoKS51
cGRhdGUoMCk7CiB9CiAKLU5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTaXpl
Rm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitOU0NvbnRyb2xTaXplIFJl
bmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxl
KSBjb25zdAogewotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGlu
dCBmb250U2l6ZSA9IHN0eWxlLmZvbnRTaXplKCk7CiAgICAgaWYgKGZvbnRTaXplID49IFtOU0Zv
bnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpOU1JlZ3VsYXJDb250cm9sU2l6ZV0pCiAg
ICAgICAgIHJldHVybiBOU1JlZ3VsYXJDb250cm9sU2l6ZTsKICAgICBpZiAoZm9udFNpemUgPj0g
W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOk5TU21hbGxDb250cm9sU2l6ZV0p
CkBAIC04NDUsNyArODQ1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQo
Y29ucwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAtODY3LDcgKzg2
Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEoY29uc3QKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRBcmVhU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCkBAIC05MTMsNyArOTEzLDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdChjb25zdAogCiAgICAgLy8gTm93IGluZmxhdGUgaXQg
dG8gYWNjb3VudCBmb3IgdGhlIHNoYWRvdy4KICAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0ID0g
cmVjdDsKLSAgICBpZiAocmVjdC53aWR0aCgpID49IG1pbmltdW1NZW51TGlzdFNpemUoJnJlbmRl
cmVyLnN0eWxlKCkpKQorICAgIGlmIChyZWN0LndpZHRoKCkgPj0gbWluaW11bU1lbnVMaXN0U2l6
ZShyZW5kZXJlci5zdHlsZSgpKSkKICAgICAgICAgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZVJlY3Qo
cmVjdCwgc2l6ZSwgcG9wdXBCdXR0b25NYXJnaW5zKCksIHpvb21MZXZlbCk7CiAKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKQEAg
LTk0Myw5ICs5NDMsOSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KGNvbnN0
CiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKIAotSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6
bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiByZW5kZXJNZXRlciwgY29uc3Qg
SW50UmVjdCYgYm91bmRzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXpl
Rm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiByZW5kZXJNZXRlciwgY29uc3QgSW50UmVjdCYg
Ym91bmRzKSBjb25zdAogewotICAgIGlmIChOb0NvbnRyb2xQYXJ0ID09IHJlbmRlck1ldGVyLT5z
dHlsZSgpLmFwcGVhcmFuY2UoKSkKKyAgICBpZiAoTm9Db250cm9sUGFydCA9PSByZW5kZXJNZXRl
ci5zdHlsZSgpLmFwcGVhcmFuY2UoKSkKICAgICAgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7CiAK
ICAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCogY2VsbCA9IGxldmVsSW5kaWNhdG9yRm9yKHJlbmRl
ck1ldGVyKTsKQEAgLTk2Miw3ICs5NjIsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1l
dGVyKGNvbnN0IFJlCiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250
ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKIAotICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxs
ID0gbGV2ZWxJbmRpY2F0b3JGb3IodG9SZW5kZXJNZXRlcigmcmVuZGVyT2JqZWN0KSk7CisgICAg
TlNMZXZlbEluZGljYXRvckNlbGwqIGNlbGwgPSBsZXZlbEluZGljYXRvckZvcih0b1JlbmRlck1l
dGVyKHJlbmRlck9iamVjdCkpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCiAgICAgW2NlbGwgZHJhd1dpdGhGcmFtZTpyZWN0
IGluVmlldzpkb2N1bWVudFZpZXdGb3IocmVuZGVyT2JqZWN0KV07CkBAIC0xMDAxLDE2ICsxMDAx
LDE2IEBAIE5TTGV2ZWxJbmRpY2F0b3JTdHlsZSBSZW5kZXJUaGVtZU1hYzo6bGUKIAogfQogCi1O
U0xldmVsSW5kaWNhdG9yQ2VsbCogUmVuZGVyVGhlbWVNYWM6OmxldmVsSW5kaWNhdG9yRm9yKGNv
bnN0IFJlbmRlck1ldGVyKiByZW5kZXJNZXRlcikgY29uc3QKK05TTGV2ZWxJbmRpY2F0b3JDZWxs
KiBSZW5kZXJUaGVtZU1hYzo6bGV2ZWxJbmRpY2F0b3JGb3IoY29uc3QgUmVuZGVyTWV0ZXImIHJl
bmRlck1ldGVyKSBjb25zdAogewotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRl
ck1ldGVyLT5zdHlsZSgpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlck1l
dGVyLnN0eWxlKCk7CiAgICAgQVNTRVJUKHN0eWxlLmFwcGVhcmFuY2UoKSAhPSBOb0NvbnRyb2xQ
YXJ0KTsKIAogICAgIGlmICghbV9sZXZlbEluZGljYXRvcikKICAgICAgICAgbV9sZXZlbEluZGlj
YXRvciA9IGFkb3B0TlMoW1tOU0xldmVsSW5kaWNhdG9yQ2VsbCBhbGxvY10gaW5pdFdpdGhMZXZl
bEluZGljYXRvclN0eWxlOk5TQ29udGludW91c0NhcGFjaXR5TGV2ZWxJbmRpY2F0b3JTdHlsZV0p
OwogICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbV9sZXZlbEluZGljYXRvci5nZXQo
KTsKIAotICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJNZXRlci0+bWV0ZXJF
bGVtZW50KCk7CisgICAgSFRNTE1ldGVyRWxlbWVudCogZWxlbWVudCA9IHJlbmRlck1ldGVyLm1l
dGVyRWxlbWVudCgpOwogICAgIGRvdWJsZSB2YWx1ZSA9IGVsZW1lbnQtPnZhbHVlKCk7CiAKICAg
ICAvLyBCZWNhdXNlIE5TTGV2ZWxJbmRpY2F0b3JDZWxsIGRvZXMgbm90IHN1cHBvcnQgb3B0aW11
bS1pbi10aGUtbWlkZGxlIHR5cGUgY29sb3JpbmcsCkBAIC0xMDcyLDM1ICsxMDcyLDM1IEBAIElu
dFJlY3QgUmVuZGVyVGhlbWVNYWM6OnByb2dyZXNzQmFyUmVjdEYKICAgICAgICAgcmV0dXJuIHBy
b2dyZXNzQmFyQm91bmRzOwogCiAgICAgZmxvYXQgem9vbUxldmVsID0gcmVuZGVyT2JqZWN0LnN0
eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBj
b250cm9sU2l6ZUZvckZvbnQoJnJlbmRlck9iamVjdC5zdHlsZSgpKTsKKyAgICBOU0NvbnRyb2xT
aXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHJlbmRlck9iamVjdC5zdHlsZSgp
KTsKICAgICBJbnRTaXplIHNpemUgPSBwcm9ncmVzc0JhclNpemVzKClbY29udHJvbFNpemVdOwog
ICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwogICAgIHNpemUu
c2V0V2lkdGgocHJvZ3Jlc3NCYXJCb3VuZHMud2lkdGgoKSk7CiAKICAgICAvLyBOb3cgaW5mbGF0
ZSBpdCB0byBhY2NvdW50IGZvciB0aGUgc2hhZG93LgogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0
ID0gcHJvZ3Jlc3NCYXJCb3VuZHM7Ci0gICAgaWYgKHByb2dyZXNzQmFyQm91bmRzLmhlaWdodCgp
IDw9IG1pbmltdW1Qcm9ncmVzc0JhckhlaWdodCgmcmVuZGVyT2JqZWN0LnN0eWxlKCkpKQorICAg
IGlmIChwcm9ncmVzc0JhckJvdW5kcy5oZWlnaHQoKSA8PSBtaW5pbXVtUHJvZ3Jlc3NCYXJIZWln
aHQocmVuZGVyT2JqZWN0LnN0eWxlKCkpKQogICAgICAgICBpbmZsYXRlZFJlY3QgPSBJbnRSZWN0
KGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcHJvZ3Jlc3NCYXJNYXJnaW5zKGNvbnRy
b2xTaXplKSwgem9vbUxldmVsKSk7CiAKICAgICByZXR1cm4gaW5mbGF0ZWRSZWN0OwogfQogCi1p
bnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1Qcm9ncmVzc0JhckhlaWdodChSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1Qcm9ncmVzc0JhckhlaWdo
dChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNpemVGb3JTeXN0ZW1G
b250KHN0eWxlLCBwcm9ncmVzc0JhclNpemVzKCkpLmhlaWdodCgpOwogfQogCi1kb3VibGUgUmVu
ZGVyVGhlbWVNYWM6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVy
UHJvZ3Jlc3MqKSBjb25zdAorZG91YmxlIFJlbmRlclRoZW1lTWFjOjphbmltYXRpb25SZXBlYXRJ
bnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1
cm4gcHJvZ3Jlc3NBbmltYXRpb25GcmFtZVJhdGU7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZU1h
Yzo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0
Citkb3VibGUgUmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIo
UmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogewogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbk51
bUZyYW1lcyAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRlOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lTWFjOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jlc3NC
YXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsK
IH0KIApAQCAtMTExMCw3ICsxMTEwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9n
cmVzc0JhcihjbwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEludFJlY3QgaW5mbGF0ZWRS
ZWN0ID0gcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKHJlbmRlck9iamVjdCwgcmVjdCk7Ci0gICAg
TlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udCgmcmVuZGVyT2Jq
ZWN0LnN0eWxlKCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6
ZUZvckZvbnQocmVuZGVyT2JqZWN0LnN0eWxlKCkpOwogCiAgICAgY29uc3QgUmVuZGVyUHJvZ3Jl
c3MmIHJlbmRlclByb2dyZXNzID0gKnRvUmVuZGVyUHJvZ3Jlc3MoJnJlbmRlck9iamVjdCk7CiAg
ICAgSElUaGVtZVRyYWNrRHJhd0luZm8gdHJhY2tJbmZvOwpAQCAtMTMzNywyMiArMTMzNywyMiBA
QCBzdGF0aWMgY29uc3QgSW50U2l6ZSogbWVudUxpc3RCdXR0b25TaXplCiAgICAgcmV0dXJuIHNp
emVzOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25z
dAogewogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQo
c3R5bGUpOwogCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5bGUtPnJlc2V0UGFk
ZGluZygpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRQYWRkaW5n
KCk7CiAKICAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0gICAgc3R5bGUtPnNldEhl
aWdodChMZW5ndGgoQXV0bykpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoQXV0bykpOwog
CiAgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0eWxlLT5zZXRXaGl0
ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCiAgICAgLy8gU2V0
IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHRvIGJsYWNrIG9yIGdyYXkgd2hlbiB3ZSBoYXZlIHRoZSBh
cXVhIGxvb2suCiAgICAgLy8gQ2FzdCB0byBSR0IzMiBpcyB0byB3b3JrIGFyb3VuZCBhIGNvbXBp
bGVyIGJ1Zy4KLSAgICBzdHlsZS0+c2V0Q29sb3IoZSAmJiAhZS0+aXNEaXNhYmxlZEZvcm1Db250
cm9sKCkgPyBzdGF0aWNfY2FzdDxSR0JBMzI+KENvbG9yOjpibGFjaykgOiBDb2xvcjo6ZGFya0dy
YXkpOworICAgIHN0eWxlLnNldENvbG9yKCFlLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpID8gc3Rh
dGljX2Nhc3Q8UkdCQTMyPihDb2xvcjo6YmxhY2spIDogQ29sb3I6OmRhcmtHcmF5KTsKIAogICAg
IC8vIFNldCB0aGUgYnV0dG9uJ3MgdmVydGljYWwgc2l6ZS4KICAgICBzZXRTaXplRnJvbUZvbnQo
c3R5bGUsIG1lbnVMaXN0QnV0dG9uU2l6ZXMoKSk7CkBAIC0xMzYyLDUyICsxMzYyLDUyIEBAIHZv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUKICAgICAvLyBzeXN0ZW0gZm9u
dCBmb3IgdGhlIGNvbnRyb2wgc2l6ZSBpbnN0ZWFkLgogICAgIHNldEZvbnRGcm9tQ29udHJvbFNp
emUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGNvbnRyb2xTaXplKTsKIAotICAgIHN0eWxlLT5zZXRC
b3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQog
Ci1pbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
TGVmdChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5n
KGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2xlZnRQYWRkaW5nXSAqIHN0eWxlLT5lZmZlY3Rp
dmVab29tKCk7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25Q
YXJ0KQotICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCAqIHN0eWxlLT5lZmZl
Y3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQp
CisgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0
eWxlKSlbbGVmdFBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHls
ZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gc3R5
bGVkUG9wdXBQYWRkaW5nTGVmdCAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKICAgICByZXR1cm4g
MDsKIH0KIAotaW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxl
LT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gcG9wdXBCdXR0
b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW3JpZ2h0UGFkZGluZ10gKiBzdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVs
aXN0QnV0dG9uUGFydCkgewotICAgICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNp
emUoKSAvIGJhc2VGb250U2l6ZTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVs
aXN0UGFydCkKKyAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZv
ckZvbnQoc3R5bGUpKVtyaWdodFBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAg
IGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KSB7CisgICAgICAg
IGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemU7CiAgICAg
ICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRTY2FsZTsKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY2VpbGYoYXJyb3dXaWR0aCArIChhcnJvd1BhZGRp
bmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAqIHN0
eWxlLT5lZmZlY3RpdmVab29tKCkpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
Y2VpbGYoYXJyb3dXaWR0aCArIChhcnJvd1BhZGRpbmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQg
KyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSkpOwogICAg
IH0KICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFs
UGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6
OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAg
ICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCi0gICAgICAgIHJldHVy
biBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbdG9wUGFkZGlu
Z10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgp
ID09IE1lbnVsaXN0QnV0dG9uUGFydCkKLSAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGlu
Z1RvcCAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdFBhcnQpCisgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29u
dHJvbFNpemVGb3JGb250KHN0eWxlKSlbdG9wUGFkZGluZ10gKiBzdHlsZS5lZmZlY3RpdmVab29t
KCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisg
ICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdUb3AgKiBzdHlsZS5lZmZlY3RpdmVab29t
KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1l
TWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0
CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAg
ICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2Jv
dHRvbVBhZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBpZiAoc3R5bGUtPmFw
cGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCi0gICAgICAgIHJldHVybiBzdHlsZWRQ
b3B1cFBhZGRpbmdCb3R0b20gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHls
ZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQorICAgICAgICByZXR1cm4gcG9wdXBCdXR0
b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2JvdHRvbVBhZGRpbmddICogc3R5
bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxp
c3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nQm90dG9tICog
c3R5bGUuZWZmZWN0aXZlWm9vbSgpOwogICAgIHJldHVybiAwOwogfQogCi1Qb3B1cE1lbnVTdHls
ZTo6UG9wdXBNZW51U2l6ZSBSZW5kZXJUaGVtZU1hYzo6cG9wdXBNZW51U2l6ZShjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEludFJlY3QmIHJlY3QpIGNvbnN0CitQb3B1cE1lbnVTdHlsZTo6UG9w
dXBNZW51U2l6ZSBSZW5kZXJUaGVtZU1hYzo6cG9wdXBNZW51U2l6ZShjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgTlNQb3BVcEJ1dHRvbkNlbGwq
IHBvcHVwQnV0dG9uID0gdGhpcy0+cG9wdXBCdXR0b24oKTsKLSAgICBOU0NvbnRyb2xTaXplIHNp
emUgPSBjb250cm9sU2l6ZUZvckNlbGwocG9wdXBCdXR0b24sIHBvcHVwQnV0dG9uU2l6ZXMoKSwg
cmVjdC5zaXplKCksIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOworICAgIE5TQ29udHJvbFNpemUg
c2l6ZSA9IGNvbnRyb2xTaXplRm9yQ2VsbChwb3B1cEJ1dHRvbiwgcG9wdXBCdXR0b25TaXplcygp
LCByZWN0LnNpemUoKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICBzd2l0Y2ggKHNpemUp
IHsKICAgICBjYXNlIE5TUmVndWxhckNvbnRyb2xTaXplOgogICAgICAgICByZXR1cm4gUG9wdXBN
ZW51U3R5bGU6OlBvcHVwTWVudVNpemVOb3JtYWw7CkBAIC0xNDUyLDcgKzE0NTIsNyBAQCBjb25z
dCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6bWVudUxpc3RTCiAgICAgcmV0dXJuIHNpemVzOwog
fQogCi1pbnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKFJl
bmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gc2l6ZUZvclN5c3RlbUZvbnQo
c3R5bGUsIG1lbnVMaXN0U2l6ZXMoKSkud2lkdGgoKTsKIH0KQEAgLTE0NjAsOSArMTQ2MCw5IEBA
IGludCBSZW5kZXJUaGVtZU1hYzo6bWluaW11bU1lbnVMaXN0U2l6ZSgKIGNvbnN0IGludCB0cmFj
a1dpZHRoID0gNTsKIGNvbnN0IGludCB0cmFja1JhZGl1cyA9IDI7CiAKLXZvaWQgUmVuZGVyVGhl
bWVNYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlk
ZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQm
KSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUu
c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNs
aWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCkBAIC0xNTA2LDEwICsxNTA2LDEwIEBAIGJvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQp
IGNvbnN0CiB7CiAgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0
cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBjb25zdCBmbG9hdCB2
ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwpAQCAtMTYwOCw3ICsxNjA4LDcgQEAg
dm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoQ2VsbFN0YXRlKAogewogICAgIE5TU2VhcmNo
RmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIAotICAgIFtzZWFyY2ggc2V0Q29u
dHJvbFNpemU6Y29udHJvbFNpemVGb3JGb250KCZvLnN0eWxlKCkpXTsKKyAgICBbc2VhcmNoIHNl
dENvbnRyb2xTaXplOmNvbnRyb2xTaXplRm9yRm9udChvLnN0eWxlKCkpXTsKIAogICAgIC8vIFVw
ZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1cGRhdGVFbmFibGVk
U3RhdGUoc2VhcmNoLCBvKTsKQEAgLTE2MjEsNDUgKzE2MjEsNDUgQEAgY29uc3QgSW50U2l6ZSog
UmVuZGVyVGhlbWVNYWM6OnNlYXJjaEZpZQogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSYg
c3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGgg
c3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53
aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkK
KyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVp
Z2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSB0aGUgZm9udCBz
aXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgogICAg
IHNldFNpemVGcm9tRm9udChzdHlsZSwgc2VhcmNoRmllbGRTaXplcygpKTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIE92
ZXJyaWRlIGJvcmRlci4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBjb25zdCBzaG9y
dCBib3JkZXJXaWR0aCA9IDIgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIHN0eWxlLT5z
ZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0
U3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSaWdodFdpZHRoKGJvcmRlcldpZHRo
KTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmlnaHRTdHlsZShJTlNFVCk7Ci0gICAgc3R5bGUtPnNl
dEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyQm90
dG9tU3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJXaWR0
aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclRvcFN0eWxlKElOU0VUKTsKKyAgICBzdHlsZS5yZXNl
dEJvcmRlcigpOworICAgIGNvbnN0IHNob3J0IGJvcmRlcldpZHRoID0gMiAqIHN0eWxlLmVmZmVj
dGl2ZVpvb20oKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOwor
ICAgIHN0eWxlLnNldEJvcmRlckxlZnRTdHlsZShJTlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVy
UmlnaHRXaWR0aChib3JkZXJXaWR0aCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmlnaHRTdHlsZShJ
TlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyQm90dG9tV2lkdGgoYm9yZGVyV2lkdGgpOworICAg
IHN0eWxlLnNldEJvcmRlckJvdHRvbVN0eWxlKElOU0VUKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJU
b3BXaWR0aChib3JkZXJXaWR0aCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyVG9wU3R5bGUoSU5TRVQp
OwogCiAgICAgLy8gT3ZlcnJpZGUgaGVpZ2h0LgotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KEF1dG8pKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKICAgICBzZXRTZWFy
Y2hGaWVsZFNpemUoc3R5bGUpOwogCiAgICAgLy8gT3ZlcnJpZGUgcGFkZGluZyBzaXplIHRvIG1h
dGNoIEFwcEtpdCB0ZXh0IHBvc2l0aW9uaW5nLgotICAgIGNvbnN0IGludCBwYWRkaW5nID0gMSAq
IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0
aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBh
ZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcs
IEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZp
eGVkKSk7CisgICAgY29uc3QgaW50IHBhZGRpbmcgPSAxICogc3R5bGUuZWZmZWN0aXZlWm9vbSgp
OworICAgIHN0eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAg
IHN0eWxlLnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHls
ZS5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBh
ZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CiAKICAgICBOU0NvbnRyb2xTaXpl
IGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHN0eWxlKTsKICAgICBzZXRGb250RnJv
bUNvbnRyb2xTaXplKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBjb250cm9sU2l6ZSk7CiAKLSAgICBz
dHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxs
cHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQpAQCAtMTcxOCwxMiArMTcxOCwxMiBAQCBjb25zdCBJbnRTaXplKiBS
ZW5kZXJUaGVtZU1hYzo6Y2FuY2VsQnV0CiAgICAgcmV0dXJuIHNpemVzOwogfQogCi12b2lkIFJl
bmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBJbnRTaXplIHNp
emUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgY2FuY2VsQnV0dG9uU2l6ZXMoKSk7Ci0gICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRo
KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBG
aXhlZCkpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogY29uc3QgSW50
U2l6ZSogUmVuZGVyVGhlbWVNYWM6OnJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0CkBAIC0xNzMz
LDEyICsxNzMzLDEyIEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lTWFjOjpyZXN1bHRzQnUK
IH0KIAogY29uc3QgaW50IGVtcHR5UmVzdWx0c09mZnNldCA9IDk7Ci12b2lkIFJlbmRlclRoZW1l
TWFjOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFj
OjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0g
c2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKLSAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4
ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0V2lkdGgo
TGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKKyAgICBz
dHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUu
c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNl
YXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpCkBAIC0xNzQ2LDEyICsxNzQ2LDEyIEBAIGJvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGREZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBj
b25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1
bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRo
KCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNl
dFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0
KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhu
dWxscHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtMTc3OSwxMiArMTc3OSwxMiBAQCBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzCiB9CiAKIGNvbnN0IGludCByZXN1
bHRzQXJyb3dXaWR0aCA9IDU7Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1l
bnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxl
LCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXpl
LndpZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFk
b3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSArIHJl
c3VsdHNBcnJvd1dpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2l6
ZS5oZWlnaHQoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9
CiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCkBAIC0xOTE2LDEyICsxOTE2LDEyIEBAIGludCBSZW5kZXJUaGVtZU1hYzo6c2xp
ZGVyVGlja09mZnNldEZyb20KIGNvbnN0IGludCBzbGlkZXJUaHVtYldpZHRoID0gMTU7CiBjb25z
dCBpbnQgc2xpZGVyVGh1bWJIZWlnaHQgPSAxNTsKIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0
eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBzdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1i
SG9yaXpvbnRhbFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRp
Y2FsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGlu
dD4oc2xpZGVyVGh1bWJXaWR0aCAqIHpvb21MZXZlbCksIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxl
LT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6
b29tTGV2ZWwpLCBGaXhlZCkpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IHN0eWxlLmVmZmVjdGl2
ZVpvb20oKTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpv
bnRhbFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0
KSB7CisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRl
clRodW1iV2lkdGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRIZWln
aHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6b29tTGV2ZWwp
LCBGaXhlZCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lU2FmYXJpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCShyZXZpc2lvbiAxNzAzNzEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTIsMjEgKzI1MiwyMSBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzeXN0ZW1Gb250KENTU1Zh
CiAgICAgZm9udERlc2NyaXB0aW9uID0gKmNhY2hlZERlc2M7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVTYWZhcmk6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0
IEJvcmRlckRhdGEmIGJvcmRlciwKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OmlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXImIGJh
Y2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7CiAgICAgLy8g
SWYgd2UgZGlkbid0IGZpbmQgU2FmYXJpVGhlbWUuZGxsIHdlIHdvbid0IGJlIGFibGUgdG8gcGFp
bnQgYW55IHRoZW1lZCBjb250cm9scy4KICAgICBpZiAoIVNhZmFyaVRoZW1lTGlicmFyeSgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFRl
eHRGaWVsZFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0QXJlYVBhcnQgfHwgc3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5i
b3JkZXIoKSAhPSBib3JkZXI7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBUZXh0Rmll
bGRQYXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBUZXh0QXJlYVBhcnQgfHwgc3R5bGUuYXBw
ZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm4gc3R5bGUuYm9yZGVyKCkg
IT0gYm9yZGVyOwogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxl
LCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKIHZvaWQgUmVuZGVy
VGhlbWVTYWZhcmk6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgSW50
UmVjdCYgcikKIHsKLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVG
b3JGb250KCZvLnN0eWxlKCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250
cm9sU2l6ZUZvckZvbnQoby5zdHlsZSgpKTsKIAogICAgIHN3aXRjaCAoby5zdHlsZSgpLmFwcGVh
cmFuY2UoKSkgewogICAgICAgICBjYXNlIENoZWNrYm94UGFydDogewpAQCAtMzIzLDggKzMyMyw4
IEBAIGludCBSZW5kZXJUaGVtZVNhZmFyaTo6YmFzZWxpbmVQb3NpdGlvbigKICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQg
fHwgby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpIHsKLSAgICAgICAgY29uc3Qg
UmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveCgmbyk7Ci0gICAgICAgIHJldHVybiBib3gtPm1h
cmdpblRvcCgpICsgYm94LT5oZWlnaHQoKSAtIDI7IC8vIFRoZSBiYXNlbGluZSBpcyAycHggdXAg
ZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBjaGVja2JveC9yYWRpbyBpbiBBcHBLaXQuCisgICAgICAg
IGNvbnN0IFJlbmRlckJveCYgYm94ID0gdG9SZW5kZXJCb3gobyk7CisgICAgICAgIHJldHVybiBi
b3gubWFyZ2luVG9wKCkgKyBib3guaGVpZ2h0KCkgLSAyOyAvLyBUaGUgYmFzZWxpbmUgaXMgMnB4
IHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgY2hlY2tib3gvcmFkaW8gaW4gQXBwS2l0LgogICAg
IH0KIAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihvKTsKQEAgLTM0
Myw5ICszNDMsOSBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpjb250cm9sU3VwcG9ydHNUCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLU5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6OmNv
bnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitOU0NvbnRyb2xTaXpl
IFJlbmRlclRoZW1lU2FmYXJpOjpjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmIHN0eWxl
KSBjb25zdAogewotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGlu
dCBmb250U2l6ZSA9IHN0eWxlLmZvbnRTaXplKCk7CiAgICAgaWYgKGZvbnRTaXplID49IDE2KQog
ICAgICAgICByZXR1cm4gTlNSZWd1bGFyQ29udHJvbFNpemU7CiAgICAgaWYgKGZvbnRTaXplID49
IDExKQpAQCAtMzY4LDI3ICszNjgsMjcgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Q29u
dHJvbFNpemUoTgogICAgICAgICBbY2VsbCBzZXRDb250cm9sU2l6ZTpzaXplXTsKIH0KICovCi1J
bnRTaXplIFJlbmRlclRoZW1lU2FmYXJpOjpzaXplRm9yRm9udChSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZVNhZmFyaTo6
c2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29u
c3QKIHsKICAgICByZXR1cm4gc2l6ZXNbY29udHJvbFNpemVGb3JGb250KHN0eWxlKV07CiB9CiAK
LUludFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6OnNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxl
KiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1l
U2FmYXJpOjpzaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEludFNp
emUqIHNpemVzKSBjb25zdAogewogICAgIHJldHVybiBzaXplc1tjb250cm9sU2l6ZUZvclN5c3Rl
bUZvbnQoc3R5bGUpXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0U2l6ZUZyb21G
b250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lU2FmYXJpOjpzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKIHsKICAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxh
d2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291
bnQuCiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvckZvbnQoc3R5bGUsIHNpemVzKTsKLSAgICBp
ZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndpZHRoKCkgPiAw
KQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsK
LSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0KCkgPiAwKQot
ICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwor
ICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgp
ID4gMCkKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQp
KTsKKyAgICBpZiAoc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDAp
CisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Rm9udEZyb21Db250cm9sU2l6ZShTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNp
emUgY29udHJvbFNpemUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRGb250RnJv
bUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBz
dHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgY29uc3QKIHsKICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRl
U2l6ZSh0cnVlKTsKQEAgLTQwMCwxNSArNDAwLDE1IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6
OnNldEZvbnRGcm9tQ29udHIKICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShm
b250U2l6ZSk7CiAKICAgICAvLyBSZXNldCBsaW5lIGhlaWdodAotICAgIHN0eWxlLT5zZXRMaW5l
SGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBzdHlsZS5zZXRM
aW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKIAotICAgIGlmIChz
dHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCi0gICAgICAgIHN0eWxl
LT5mb250KCkudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsKKyAgICBpZiAo
c3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCisgICAgICAgIHN0eWxl
LmZvbnQoKS51cGRhdGUoc3R5bGVSZXNvbHZlci5mb250U2VsZWN0b3IoKSk7CiB9CiAKLU5TQ29u
dHJvbFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6OmNvbnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0CitOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lU2FmYXJpOjpj
b250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAg
IGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGludCBmb250U2l6ZSA9IHN0
eWxlLmZvbnRTaXplKCk7CiAgICAgaWYgKGZvbnRTaXplID49IDEzKQogICAgICAgICByZXR1cm4g
TlNSZWd1bGFyQ29udHJvbFNpemU7CiAgICAgaWYgKGZvbnRTaXplID49IDExKQpAQCAtNDIwLDcg
KzQyMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50Q2hlY2tib3goY28KIHsKICAg
ICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwogCi0gICAgTlNDb250cm9sU2l6ZSBjb250
cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udCgmby5zdHlsZSgpKTsKKyAgICBOU0NvbnRyb2xT
aXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KG8uc3R5bGUoKSk7CiAKICAgICBJ
bnRSZWN0IGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KHIsIGNoZWNrYm94U2l6ZXMoKVtjb250
cm9sU2l6ZV0sIGNoZWNrYm94TWFyZ2lucyhjb250cm9sU2l6ZSkpOyAgCiAgICAgcGFpbnRUaGVt
ZVBhcnQoU2FmYXJpVGhlbWU6OkNoZWNrYm94UGFydCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLCBpbmZsYXRlZFJlY3QsIGNvbnRyb2xTaXplLCBkZXRlcm1pbmVTdGF0ZShv
KSk7CkBAIC00NDUsMTAgKzQ0NSwxMCBAQCBjb25zdCBpbnQqIFJlbmRlclRoZW1lU2FmYXJpOjpj
aGVja2JveE1hCiAgICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOwogfQogCi12b2lkIFJl
bmRlclRoZW1lU2FmYXJpOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJiBz
dHlsZSkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBz
cGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmICghc3R5bGUtPndp
ZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQor
ICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS5oZWln
aHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVXNlIHRoZSBmb250IHNp
emUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGNvbnRyb2wuCkBAIC00
NTksNyArNDU5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRSYWRpbyhjb25zdAog
ewogICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7CiAKLSAgICBOU0NvbnRyb2xTaXpl
IGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KCZvLnN0eWxlKCkpOworICAgIE5TQ29u
dHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoby5zdHlsZSgpKTsKICAK
ICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KHIsIHJhZGlvU2l6ZXMoKVtj
b250cm9sU2l6ZV0sIHJhZGlvTWFyZ2lucyhjb250cm9sU2l6ZSkpOyAgICAKICAgICBwYWludFRo
ZW1lUGFydChSYWRpb0J1dHRvblBhcnQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSwgaW5mbGF0ZWRSZWN0LCBjb250cm9sU2l6ZSwgZGV0ZXJtaW5lU3RhdGUobykpOwpAQCAt
NDg0LDE3ICs0ODQsMTcgQEAgY29uc3QgaW50KiBSZW5kZXJUaGVtZVNhZmFyaTo6cmFkaW9NYXJn
aQogICAgIHJldHVybiBtYXJnaW5zW2NvbnRyb2xTaXplXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZVNhZmFyaTo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVTYWZhcmk6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7
CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVu
IHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmlu
c2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxl
LndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWlu
ZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgogICAgIHNldFNpemVGcm9tRm9u
dChzdHlsZSwgcmFkaW9TaXplcygpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0
QnV0dG9uUGFkZGluZ0Zyb21Db250cm9sU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJv
bFNpemUgc2l6ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldEJ1dHRvblBhZGRp
bmdGcm9tQ29udHJvbFNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBOU0NvbnRyb2xTaXplIHNpemUp
IGNvbnN0CiB7CiAgICAgLy8gSnVzdCB1c2UgOHB4LiAgQXBwS2l0IHdhbnRzIHRvIHVzZSAxMXB4
IGZvciBtaW5pIGJ1dHRvbnMsIGJ1dCB0aGF0IHBhZGRpbmcgaXMganVzdCB0b28gbGFyZ2UKICAg
ICAvLyBmb3IgcmVhbC13b3JsZCBXZWIgc2l0ZXMgKGNyZWF0aW5nIGEgaHVnZSBuZWNlc3Nhcnkg
bWluaW11bSB3aWR0aCBmb3IgYnV0dG9ucyB3aG9zZSBzcGFjZSBpcwpAQCAtNTAyLDEzICs1MDIs
MTMgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0QnV0dG9uUGFkZGluZwogICAgIC8vIFRo
aXMgYWxzbyBndWFyYW50ZWVzIHRoZSBIVE1MNCA8YnV0dG9uPiB3aWxsIG1hdGNoIG91ciByZW5k
ZXJpbmcgYnkgZGVmYXVsdCwgc2luY2Ugd2UncmUgdXNpbmcgYSBjb25zaXN0ZW50CiAgICAgLy8g
cGFkZGluZy4KICAgICBjb25zdCBpbnQgcGFkZGluZyA9IDg7Ci0gICAgc3R5bGUtPnNldFBhZGRp
bmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmln
aHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVu
Z3RoKDAsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDAsIEZp
eGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7
CisgICAgc3R5bGUuc2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAg
IHN0eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3RoKDAsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFk
ZGluZ0JvdHRvbShMZW5ndGgoMCwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFy
aTo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6
YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewogICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBh
cHBlYXJhbmNlIGNvbnN0YW50cyBmb3IgYnV0dG9ucy4KICAgICAvLyAoMSkgUHVzaC1idXR0b24g
aXMgdGhlIGNvbnN0YW50IGZvciB0aGUgZGVmYXVsdCBBcXVhIHN5c3RlbSBidXR0b24uICBQdXNo
IGJ1dHRvbnMgd2lsbCBub3Qgc2NhbGUgdmVydGljYWxseSBhbmQgd2lsbCBub3QgYWxsb3cKQEAg
LTUyMiwxNSArNTIyLDE1IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdEJ1dHRvblN0
eWwKICAgICAvLyBEZXRlcm1pbmUgb3VyIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgb3VyIGZvbnQu
CiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHls
ZSk7CiAKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkgewor
ICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKICAgICAgICAg
Ly8gRGl0Y2ggdGhlIGJvcmRlci4KLSAgICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAg
ICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKICAgICAgICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0
byBhdXRvLgotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisgICAgICAg
IHN0eWxlLnNldEhlaWdodChMZW5ndGgoQXV0bykpOwogCiAgICAgICAgIC8vIFdoaXRlLXNwYWNl
IGlzIGxvY2tlZCB0byBwcmUKLSAgICAgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKyAg
ICAgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCiAgICAgICAgIC8vIFNldCB0aGUgYnV0
dG9uJ3MgdmVydGljYWwgc2l6ZS4KICAgICAgICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7CkBAIC01
NDQsMTEgKzU0NCwxMSBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RCdXR0b25TdHls
CiAgICAgICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGNv
bnRyb2xTaXplKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBTZXQgYSBtaW4taGVpZ2h0IHNv
IHRoYXQgd2UgY2FuJ3QgZ2V0IHNtYWxsZXIgdGhhbiB0aGUgbWluaSBidXR0b24uCi0gICAgICAg
IHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKDE1LCBGaXhlZCkpOworICAgICAgICBzdHlsZS5z
ZXRNaW5IZWlnaHQoTGVuZ3RoKDE1LCBGaXhlZCkpOwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSB0
b3AgYW5kIGJvdHRvbSBib3JkZXJzLgotICAgICAgICBzdHlsZS0+cmVzZXRCb3JkZXJUb3AoKTsK
LSAgICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyQm90dG9tKCk7CisgICAgICAgIHN0eWxlLnJlc2V0
Qm9yZGVyVG9wKCk7CisgICAgICAgIHN0eWxlLnJlc2V0Qm9yZGVyQm90dG9tKCk7CiAgICAgfQog
fQogCkBAIC01NjksMTAgKzU2OSwxMCBAQCBjb25zdCBpbnQqIFJlbmRlclRoZW1lU2FmYXJpOjpi
dXR0b25NYXJnCiAgICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOwogfQogCi12b2lkIFJl
bmRlclRoZW1lU2FmYXJpOjpzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUmIHN0eWxl
KSBjb25zdAogewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNp
ZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgo
KS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAg
aWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhlaWdodCgp
LmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0
byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJvbC4KQEAgLTYyMCw3
ICs2MjAsNyBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFRleHRGaWVsZChjCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RUZXh0Rmll
bGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCkBAIC02NDgsNyArNjQ4LDcg
QEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRUZXh0QXJlYShjbwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0VGV4dEFyZWFTdHlsZShT
dHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVTYWZhcmk6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKQEAgLTY5MCw3ICs2OTAsNyBAQCBib29sIFJl
bmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0KGNvCiAgICAgc2l6ZS5zZXRXaWR0aChyLndp
ZHRoKCkpOwogCiAgICAgLy8gTm93IGluZmxhdGUgaXQgdG8gYWNjb3VudCBmb3IgdGhlIHNoYWRv
dy4KLSAgICBpZiAoci53aWR0aCgpID49IG1pbmltdW1NZW51TGlzdFNpemUoJm8uc3R5bGUoKSkp
CisgICAgaWYgKHIud2lkdGgoKSA+PSBtaW5pbXVtTWVudUxpc3RTaXplKG8uc3R5bGUoKSkpCiAg
ICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcG9w
dXBCdXR0b25NYXJnaW5zKGNvbnRyb2xTaXplKSk7CiAKICAgICBwYWludFRoZW1lUGFydChEcm9w
RG93bkJ1dHRvblBhcnQsIGluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGluZmxhdGVk
UmVjdCwgY29udHJvbFNpemUsIGRldGVybWluZVN0YXRlKG8pKTsKQEAgLTg2NCwyMiArODY0LDIy
IEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RCdXQKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0U3R5bGUo
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RTdHlsZShT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQm
IGUpIGNvbnN0CiB7CiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXpl
Rm9yRm9udChzdHlsZSk7CiAKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+
cmVzZXRQYWRkaW5nKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5yZXNl
dFBhZGRpbmcoKTsKICAgICAKICAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0gICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5n
dGgoQXV0bykpOwogCiAgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0
eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwog
CiAgICAgLy8gU2V0IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHRvIGJsYWNrIG9yIGdyYXkgd2hlbiB3
ZSBoYXZlIHRoZSBhcXVhIGxvb2suCiAgICAgLy8gQ2FzdCB0byBSR0IzMiBpcyB0byB3b3JrIGFy
b3VuZCBhIGNvbXBpbGVyIGJ1Zy4KLSAgICBzdHlsZS0+c2V0Q29sb3IoZSAmJiAhZS0+aXNEaXNh
YmxlZEZvcm1Db250cm9sKCkgPyBzdGF0aWNfY2FzdDxSR0JBMzI+KENvbG9yOjpibGFjaykgOiBD
b2xvcjo6ZGFya0dyYXkpOworICAgIHN0eWxlLnNldENvbG9yKCFlLmlzRGlzYWJsZWRGb3JtQ29u
dHJvbCgpID8gc3RhdGljX2Nhc3Q8UkdCQTMyPihDb2xvcjo6YmxhY2spIDogQ29sb3I6OmRhcmtH
cmF5KTsKIAogICAgIC8vIFNldCB0aGUgYnV0dG9uJ3MgdmVydGljYWwgc2l6ZS4KICAgICBzZXRC
dXR0b25TaXplKHN0eWxlKTsKQEAgLTg5MCw1NiArODkwLDU2IEBAIHZvaWQgUmVuZGVyVGhlbWVT
YWZhcmk6OmFkanVzdE1lbnVMaXN0U3QKICAgICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHN0eWxl
UmVzb2x2ZXIsIHN0eWxlLCBjb250cm9sU2l6ZSk7CiB9CiAKLWludCBSZW5kZXJUaGVtZVNhZmFy
aTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2lu
dCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxl
JiBzdHlsZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlz
dFBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCiAgICAg
ICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlb
bGVmdFBhZGRpbmddOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0
dG9uUGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFy
dCkKICAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ0xlZnQ7CiAgICAgcmV0dXJuIDA7
CiB9CiAKLWludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlmIChz
dHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFy
YW5jZSgpID09IE1lbnVsaXN0UGFydCkKICAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGlu
Zyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtyaWdodFBhZGRpbmddOwotICAgIGlmIChzdHls
ZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgewotICAgICAgICBmbG9hdCBm
b250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKKyAgICBpZiAoc3R5
bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgeworICAgICAgICBmbG9hdCBm
b250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplOwogICAgICAgICBmbG9h
dCBhcnJvd1dpZHRoID0gYmFzZUFycm93V2lkdGggKiBmb250U2NhbGU7CiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICsg
YXJyb3dQYWRkaW5nUmlnaHQgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSk7CiAgICAgfQogICAg
IHJldHVybiAwOwogfQogCi1pbnQgUmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZVNhZmFyaTo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAg
IGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICBpZiAoc3R5bGUu
YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKICAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9u
UGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVt0b3BQYWRkaW5nXTsKLSAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisgICAgaWYgKHN0eWxl
LmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCiAgICAgICAgIHJldHVybiBzdHls
ZWRQb3B1cFBhZGRpbmdUb3A7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUaGVtZVNh
ZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAoraW50IFJlbmRlclRoZW1lU2FmYXJpOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5k
ZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0g
TWVudWxpc3RQYXJ0KQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0
KQogICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChz
dHlsZSkpW2JvdHRvbVBhZGRpbmddOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1l
bnVsaXN0QnV0dG9uUGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0
QnV0dG9uUGFydCkKICAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ0JvdHRvbTsKICAg
ICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0g
ICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemU7Cisg
ICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUuZm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKICAg
ICAKLSAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclJhZGl1
cyhJbnRTaXplKGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSksIGludChiYXNl
Qm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSkpKTsgLy8gRklYTUU6IFJvdW5kIHVwPworICAg
IHN0eWxlLnJlc2V0UGFkZGluZygpOworICAgIHN0eWxlLnNldEJvcmRlclJhZGl1cyhJbnRTaXpl
KGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSksIGludChiYXNlQm9yZGVyUmFk
aXVzICsgZm9udFNjYWxlIC0gMSkpKTsgLy8gRklYTUU6IFJvdW5kIHVwPwogCiAgICAgY29uc3Qg
aW50IG1pbkhlaWdodCA9IDE1OwotICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhl
aWdodCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwg
Rml4ZWQpKTsKICAgICAKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6
aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lU2Fm
YXJpOjptZW51TGlzdFNpemVzKCkgY29uc3QKQEAgLTk0OCw3ICs5NDgsNyBAQCBjb25zdCBJbnRT
aXplKiBSZW5kZXJUaGVtZVNhZmFyaTo6bWVudUxpCiAgICAgcmV0dXJuIHNpemVzOwogfQogCi1p
bnQgUmVuZGVyVGhlbWVTYWZhcmk6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lU2FmYXJpOjptaW5pbXVtTWVudUxpc3RTaXplKFJl
bmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gc2l6ZUZvclN5c3RlbUZvbnQo
c3R5bGUsIG1lbnVMaXN0U2l6ZXMoKSkud2lkdGgoKTsKIH0KQEAgLTk4NywxMCArOTg3LDEwIEBA
IGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2xpZGVyVHJhY2sKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNsaWRlclRodW1iU3R5bGUo
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KiBlKSBjb25zdCAKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNsaWRlclRodW1iU3R5
bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVt
ZW50JiBlKSBjb25zdCAKIHsgCiAgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVs
bHB0cik7IAorICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsgCiB9IAogCiBjb25zdCBm
bG9hdCB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwpAQCAtMTAwNSwxNCArMTAw
NSwxNCBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNsaWRlclRodW1iCiBjb25zdCBp
bnQgc2xpZGVyVGh1bWJXaWR0aCA9IDE1OwogY29uc3QgaW50IHNsaWRlclRodW1iSGVpZ2h0ID0g
MTU7CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6
YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0
CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFs
UGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7
Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQp
KTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZp
eGVkKSk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYkhvcml6b250
YWxQYXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkg
eworICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQp
KTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4
ZWQpKTsKICAgICB9IAogI2lmIEVOQUJMRShWSURFTykKLSAgICBlbHNlIGlmIChzdHlsZS0+YXBw
ZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KSAKKyAgICBlbHNlIGlmIChzdHlsZS5h
cHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJUaHVtYlBhcnQpIAogICAgICAgICBSZW5kZXJNZWRp
YUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShzdHlsZSk7CiAjZW5kaWYKIH0K
QEAgLTEwMzEsNDAgKzEwMzEsNDAgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVTYWZhcmk6
OnNlYXJjaAogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6
c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVTYWZhcmk6OnNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0
CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0
aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50
cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0
eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRv
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBk
ZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJvbC4KICAgICBzZXRTaXpl
RnJvbUZvbnQoc3R5bGUsIHNlYXJjaEZpZWxkU2l6ZXMoKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgLy8g
T3ZlcnJpZGUgYm9yZGVyLgotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJl
c2V0Qm9yZGVyKCk7CiAgICAgY29uc3Qgc2hvcnQgYm9yZGVyV2lkdGggPSAyOwotICAgIHN0eWxl
LT5zZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJM
ZWZ0U3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSaWdodFdpZHRoKGJvcmRlcldp
ZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmlnaHRTdHlsZShJTlNFVCk7Ci0gICAgc3R5bGUt
PnNldEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVy
Qm90dG9tU3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJX
aWR0aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclRvcFN0eWxlKElOU0VUKTsgICAgCisgICAgc3R5
bGUuc2V0Qm9yZGVyTGVmdFdpZHRoKGJvcmRlcldpZHRoKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJM
ZWZ0U3R5bGUoSU5TRVQpOworICAgIHN0eWxlLnNldEJvcmRlclJpZ2h0V2lkdGgoYm9yZGVyV2lk
dGgpOworICAgIHN0eWxlLnNldEJvcmRlclJpZ2h0U3R5bGUoSU5TRVQpOworICAgIHN0eWxlLnNl
dEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlcldpZHRoKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJCb3R0
b21TdHlsZShJTlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyVG9wV2lkdGgoYm9yZGVyV2lkdGgp
OworICAgIHN0eWxlLnNldEJvcmRlclRvcFN0eWxlKElOU0VUKTsgICAgCiAgICAgCiAgICAgLy8g
T3ZlcnJpZGUgaGVpZ2h0LgotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKKyAg
ICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKICAgICBzZXRTZWFyY2hGaWVsZFNpemUo
c3R5bGUpOwogICAgIAogICAgIC8vIE92ZXJyaWRlIHBhZGRpbmcgc2l6ZSB0byBtYXRjaCBBcHBL
aXQgdGV4dCBwb3NpdGlvbmluZy4KICAgICBjb25zdCBpbnQgcGFkZGluZyA9IDE7Ci0gICAgc3R5
bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5z
ZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdC
b3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0xlZnQo
TGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ1JpZ2h0KExlbmd0
aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRp
bmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywg
Rml4ZWQpKTsKICAgICAKICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNp
emVGb3JGb250KHN0eWxlKTsKICAgICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHN0eWxlUmVzb2x2
ZXIsIHN0eWxlLCBjb250cm9sU2l6ZSk7CkBAIC0xMDkyLDExICsxMDkyLDExIEBAIGNvbnN0IElu
dFNpemUqIFJlbmRlclRoZW1lU2FmYXJpOjpjYW5jZWwKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewog
ICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCBjYW5jZWxCdXR0b25T
aXplcygpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwor
ICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5
bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCiBjb25zdCBJ
bnRTaXplKiBSZW5kZXJUaGVtZVNhZmFyaTo6cmVzdWx0c0J1dHRvblNpemVzKCkgY29uc3QKQEAg
LTExMDYsMTEgKzExMDYsMTEgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVTYWZhcmk6OnJl
c3VsdAogfQogCiBjb25zdCBpbnQgZW1wdHlSZXN1bHRzT2Zmc2V0ID0gOTsKLXZvaWQgUmVuZGVy
VGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBJbnRT
aXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1dHRvblNpemVzKCkp
OwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpIC0gZW1wdHlSZXN1bHRz
T2Zmc2V0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0
KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVt
cHR5UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNp
emUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50
U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikKQEAgLTExMTgsMTEgKzExMTgsMTEgQEAgYm9vbCBSZW5k
ZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxl
bWVudCYpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5
bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNp
emUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhl
aWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCks
IEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhl
ZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmKQpAQCAtMTE0MiwxMSArMTE0MiwxMSBAQCBib29sIFJl
bmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkCiB9CiAKIGNvbnN0IGludCByZXN1bHRz
QXJyb3dXaWR0aCA9IDU7Ci12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVs
ZW1lbnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0
eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChz
aXplLndpZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRo
KExlbmd0aChzaXplLndpZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKKyAgICBz
dHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKIGJvb2wg
UmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJl
bmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
KQpAQCAtMTE5MCw5ICsxMTkwLDkgQEAgU3RyaW5nIFJlbmRlclRoZW1lU2FmYXJpOjptZWRpYUNv
bnRyb2xzUwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKLXZvaWQgUmVuZGVy
VGhlbWVTYWZhcmk6OmFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RN
ZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBj
b25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0
Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpzdXBwb3J0
c01ldGVyKENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0CkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBib29s
IFJlbmRlclRoZW1lU2FmYXJpOjpzdXBwb3J0c01ldGVyKENvCiAgICAgfQogfQogCi1JbnRTaXpl
IFJlbmRlclRoZW1lU2FmYXJpOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIq
LCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lU2FmYXJp
OjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXImLCBjb25zdCBJbnRSZWN0JiBi
b3VuZHMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7CiB9CkBAIC0xMjE3LDcg
KzEyMTcsNyBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1ldGVyKGNvbnN0CiAgICAg
aWYgKCFyZW5kZXJPYmplY3QuaXNNZXRlcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKCZyZW5kZXJPYmplY3Qp
LT5tZXRlckVsZW1lbnQoKTsKKyAgICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gdG9SZW5k
ZXJNZXRlcihyZW5kZXJPYmplY3QpLm1ldGVyRWxlbWVudCgpOwogCiAgICAgaW50IHJlbWFpbmlu
ZyA9IHN0YXRpY19jYXN0PGludD4oKDEuMCAtIGVsZW1lbnQtPnZhbHVlUmF0aW8oKSkgKiBzdGF0
aWNfY2FzdDxkb3VibGU+KHJlY3Quc2l6ZSgpLndpZHRoKCkpKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgJKHJldmlzaW9uIDE3MDM3MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVy
RGF0YSYsCisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHls
ZSYsIGNvbnN0IEJvcmRlckRhdGEmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkgY29uc3Q7CkBAIC03NCw1NiArNzQsNTYgQEAgcHVibGljOgogICAgIC8vIFN5c3RlbSBmb250
cy4KICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRp
b24mKSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRl
clN0eWxlJikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXpl
KFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
bGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsgCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHls
ZSYsIEVsZW1lbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7IAogICAg
IAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSop
IGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVy
U3R5bGUqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChS
ZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5n
Qm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJ
bnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSYpIGNvbnN0OworICAgIHZpcnR1YWwgaW50
IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgdmlydHVh
bCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmKSBjb25zdDsKIAog
cHJvdGVjdGVkOgogICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94
U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNp
emUoUmVuZGVyU3R5bGUmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIFdl
YkNvcmU6OkVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgV2ViQ29yZTo6RWxlbWVudCYpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJ1dHRv
blNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6
ZShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxk
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVz
dFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9u
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZp
cnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRE
ZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFy
dFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAgCiAgICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3Io
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpA
QCAtMTM0LDkgKzEzNCw5IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVS
X0VMRU1FTlQpCi0gICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBS
ZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50
UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENv
bnRyb2xQYXJ0KSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBw
YWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKICNlbmRpZgogCkBAIC0xNTAsMTMgKzE1MCwxMyBAQCBwcml2YXRl
OgogCiAgICAgLy8gR2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LiAgVXNl
ZCBieSBzb21lIG9mIHRoZSBjb250cm9scyAobGlrZSBidXR0b25zKS4KIAotICAgIE5TQ29udHJv
bFNpemUgY29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgTlNDb250
cm9sU2l6ZSBjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAg
ICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSYpIGNvbnN0Owor
ICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJikg
Y29uc3Q7CiAgICAgLy92b2lkIHNldENvbnRyb2xTaXplKE5TQ2VsbCosIGNvbnN0IEludFNpemUq
IHNpemVzLCBjb25zdCBJbnRTaXplJiBtaW5TaXplKTsKLSAgICB2b2lkIHNldFNpemVGcm9tRm9u
dChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKLSAgICBJbnRTaXpl
IHNpemVGb3JGb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0Owot
ICAgIEludFNpemUgc2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXpl
KiBzaXplcykgY29uc3Q7Ci0gICAgdm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIE5TQ29udHJvbFNpemUpIGNvbnN0OworICAgIHZvaWQgc2V0
U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlJiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0Owor
ICAgIEludFNpemUgc2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBzaXpl
cykgY29uc3Q7CisgICAgSW50U2l6ZSBzaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSYsIGNv
bnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKKyAgICB2b2lkIHNldEZvbnRGcm9tQ29udHJvbFNp
emUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7CiAK
ICAgICAvLyBIZWxwZXJzIGZvciBhZGp1c3RpbmcgYXBwZWFyYW5jZSBhbmQgZm9yIHBhaW50aW5n
CiAgICAgY29uc3QgSW50U2l6ZSogY2hlY2tib3hTaXplcygpIGNvbnN0OwpAQCAtMTY1LDcgKzE2
NSw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgSW50U2l6ZSogcmFkaW9TaXplcygpIGNvbnN0Owog
ICAgIGNvbnN0IGludCogcmFkaW9NYXJnaW5zKE5TQ29udHJvbFNpemUpIGNvbnN0OwogCi0gICAg
dm9pZCBzZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlKiwgTlNDb250
cm9sU2l6ZSkgY29uc3Q7CisgICAgdm9pZCBzZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXpl
KFJlbmRlclN0eWxlJiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7CiAgICAgY29uc3QgSW50U2l6ZSog
YnV0dG9uU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBpbnQqIGJ1dHRvbk1hcmdpbnMoTlNDb250
cm9sU2l6ZSkgY29uc3Q7CiAKQEAgLTE3OCw3ICsxNzgsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0
IEludFNpemUqIHNlYXJjaEZpZWxkU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBJbnRTaXplKiBj
YW5jZWxCdXR0b25TaXplcygpIGNvbnN0OwogICAgIGNvbnN0IEludFNpemUqIHJlc3VsdHNCdXR0
b25TaXplcygpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxl
KikgY29uc3Q7CisgICAgdm9pZCBzZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5bGUmKSBjb25z
dDsKIAogICAgIFRoZW1lQ29udHJvbFN0YXRlIGRldGVybWluZVN0YXRlKGNvbnN0IFJlbmRlck9i
amVjdCYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZVdpbi5jcHAJKHJldmlzaW9uIDE3MDM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw3ICsyOTEsNyBAQCBT
dHJpbmcgUmVuZGVyVGhlbWVXaW46OmV4dHJhUXVpcmtzU3R5bGVTCiAgICAgcmV0dXJuIFN0cmlu
Zyh0aGVtZVdpblF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVdpblF1aXJr
c1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9y
dHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0Citib29sIFJlbmRlclRoZW1lV2luOjpz
dXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QKIHsKICAgICAvLyBUaGUgQ2xh
c3NpYy8yayBsb29rIGhhcyBubyBob3ZlciBlZmZlY3RzLgogICAgIHJldHVybiBoYXZlVGhlbWU7
CkBAIC00MjksOSArNDI5LDkgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNGb2N1cyhD
b250cgogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNGb2N1c1Jpbmco
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3Vw
cG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIHJl
dHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOworICAgIHJldHVybiBzdXBw
b3J0c0ZvY3VzKHN0eWxlLmFwcGVhcmFuY2UoKSk7CiB9CiAKIHVuc2lnbmVkIFJlbmRlclRoZW1l
V2luOjpkZXRlcm1pbmVDbGFzc2ljU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBDb250cm9s
U3ViUGFydCBzdWJQYXJ0KQpAQCAtNzMwLDEzICs3MzAsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZVdp
bjo6cGFpbnRCdXR0b24oY29uc3QgUgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZVdpbjo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZVdpbjo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewog
ICAgIGludCB3aWR0aCA9IDo6R2V0U3lzdGVtTWV0cmljcyhTTV9DWFZTQ1JPTEwpOwogICAgIGlm
ICh3aWR0aCA8PSAwKQogICAgICAgICB3aWR0aCA9IDE3OyAvLyBWaXN0YSdzIGRlZmF1bHQuCi0g
ICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0
aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgsIEZp
eGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50SW5uZXJTcGluQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
KQpAQCAtNzU1LDI5ICs3NTUsMjkgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRJbm5lclNw
aW5CdXR0bwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6c2V0
Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVX
aW46OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8g
SWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUg
bm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRv
KCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCku
aXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIEZJWE1FOiAgQSBoYXJkLWNvZGVkIHNpemUgb2YgMTMgaXMgdXNl
ZC4gIFRoaXMgaXMgd3JvbmcgYnV0IG5lY2Vzc2FyeSBmb3Igbm93LiAgSXQgbWF0Y2hlcyBGaXJl
Zm94LgogICAgIC8vIEF0IGRpZmZlcmVudCBEUEkgc2V0dGluZ3Mgb24gV2luZG93cywgcXVlcnlp
bmcgdGhlIHRoZW1lIGdpdmVzIHlvdSBhIGxhcmdlciBzaXplIHRoYXQgYWNjb3VudHMgZm9yCiAg
ICAgLy8gdGhlIGhpZ2hlciBEUEkuICBVbnRpbCBvdXIgZW50aXJlIGVuZ2luZSBob25vcnMgYSBE
UEkgc2V0dGluZyBvdGhlciB0aGFuIDk2LCB3ZSBjYW4ndCByZWx5IG9uIHRoZSB0aGVtZSdzCiAg
ICAgLy8gbWV0cmljcy4KLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCgxMywgRml4ZWQpKTsKLSAgICBpZiAo
c3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0
aCgxMywgRml4ZWQpKTsKKyAgICBpZiAoc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygp
KQorICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoMTMsIEZpeGVkKSk7CisgICAgaWYgKHN0
eWxlLmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKDEz
LCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpwYWludFRleHRGaWVsZChjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikK
K2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYg
bywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBGbG9hdFJlY3QmIHIpCiB7Ci0gICAgZHJhd0Nv
bnRyb2woaS5jb250ZXh0LCAgbywgdGV4dEZpZWxkVGhlbWUoKSwgZ2V0VGhlbWVEYXRhKG8pLCBy
KTsKKyAgICBkcmF3Q29udHJvbChpLmNvbnRleHQsICBvLCB0ZXh0RmllbGRUaGVtZSgpLCBnZXRU
aGVtZURhdGEobyksIEludFJlY3QocikpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVy
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wg
UmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJl
ciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
ICAgICBIQU5ETEUgdGhlbWU7CiAgICAgaW50IHBhcnQ7CkBAIC03OTIsNDYgKzc5Miw0NiBAQCBi
b29sIFJlbmRlclRoZW1lV2luOjpwYWludE1lbnVMaXN0KGNvbnN0CiAgICAgICAgIHBhcnQgPSBU
RlBfVEVYVEZJRUxEOwogICAgIH0KIAotICAgIGRyYXdDb250cm9sKHBhaW50SW5mby5jb250ZXh0
LCByZW5kZXJlciwgdGhlbWUsIFRoZW1lRGF0YShwYXJ0LCBkZXRlcm1pbmVTdGF0ZShyZW5kZXJl
cikpLCByZWN0KTsKKyAgICBkcmF3Q29udHJvbChwYWludEluZm8uY29udGV4dCwgcmVuZGVyZXIs
IHRoZW1lLCBUaGVtZURhdGEocGFydCwgZGV0ZXJtaW5lU3RhdGUocmVuZGVyZXIpKSwgSW50UmVj
dChyZWN0KSk7CiAgICAgCiAgICAgcmV0dXJuIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9u
cyhyZW5kZXJlciwgcGFpbnRJbmZvLCBGbG9hdFJlY3QocmVjdCkpOwogfQogCi12b2lkIFJlbmRl
clRoZW1lV2luOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVXaW46OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
UmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewotICAgIHN0eWxlLT5yZXNl
dEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAgICAgYWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVXaW46OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZVdpbjo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgLy8g
VGhlc2UgYXJlIHRoZSBwYWRkaW5ncyBuZWVkZWQgdG8gcGxhY2UgdGhlIHRleHQgY29ycmVjdGx5
IGluIHRoZSA8c2VsZWN0PiBib3gKICAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nVG9w
ICAgID0gMjsKLSAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nUmlnaHQgID0gc3R5bGUt
PmRpcmVjdGlvbigpID09IExUUiA/IDQgKyBkcm9wRG93bkJ1dHRvbldpZHRoIDogNDsKKyAgICBj
b25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nUmlnaHQgID0gc3R5bGUuZGlyZWN0aW9uKCkgPT0g
TFRSID8gNCArIGRyb3BEb3duQnV0dG9uV2lkdGggOiA0OwogICAgIGNvbnN0IGludCBkcm9wRG93
bkJveFBhZGRpbmdCb3R0b20gPSAyOwotICAgIGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdM
ZWZ0ICAgPSBzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gNCA6IDQgKyBkcm9wRG93bkJ1dHRv
bldpZHRoOworICAgIGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdMZWZ0ICAgPSBzdHlsZS5k
aXJlY3Rpb24oKSA9PSBMVFIgPyA0IDogNCArIGRyb3BEb3duQnV0dG9uV2lkdGg7CiAgICAgLy8g
VGhlIDxzZWxlY3Q+IGJveCBtdXN0IGJlIGF0IGxlYXN0IDEycHggaGlnaCBmb3IgdGhlIGJ1dHRv
biB0byByZW5kZXIgbmljZWx5IG9uIFdpbmRvd3MKICAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hN
aW5IZWlnaHQgPSAxMjsKICAgICAKICAgICAvLyBQb3NpdGlvbiB0aGUgdGV4dCBjb3JyZWN0bHkg
d2l0aGluIHRoZSBzZWxlY3QgYm94IGFuZCBtYWtlIHRoZSBib3ggd2lkZSBlbm91Z2ggdG8gZml0
IHRoZSBkcm9wZG93biBidXR0b24KLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoZHJv
cERvd25Cb3hQYWRkaW5nVG9wLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQo
TGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ1JpZ2h0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQ
YWRkaW5nQm90dG9tKExlbmd0aChkcm9wRG93bkJveFBhZGRpbmdCb3R0b20sIEZpeGVkKSk7Ci0g
ICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChkcm9wRG93bkJveFBhZGRpbmdMZWZ0LCBG
aXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGlu
Z1RvcCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKGRyb3BEb3du
Qm94UGFkZGluZ1JpZ2h0LCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVu
Z3RoKGRyb3BEb3duQm94UGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRk
aW5nTGVmdChMZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5nTGVmdCwgRml4ZWQpKTsKIAogICAgIC8v
IEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0bwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1
dG8pKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKIAogICAgIC8vIENhbGN1
bGF0ZSBvdXIgbWluLWhlaWdodAotICAgIGludCBtaW5IZWlnaHQgPSBzdHlsZS0+Zm9udE1ldHJp
Y3MoKS5oZWlnaHQoKTsKKyAgICBpbnQgbWluSGVpZ2h0ID0gc3R5bGUuZm9udE1ldHJpY3MoKS5o
ZWlnaHQoKTsKICAgICBtaW5IZWlnaHQgPSBtYXgobWluSGVpZ2h0LCBkcm9wRG93bkJveE1pbkhl
aWdodCk7CiAKLSAgICBzdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChtaW5IZWlnaHQsIEZpeGVk
KSk7CisgICAgc3R5bGUuc2V0TWluSGVpZ2h0KExlbmd0aChtaW5IZWlnaHQsIEZpeGVkKSk7CiAK
LSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQo
KSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWln
aHQoKSk7CiAgICAgCiAgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0
eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwog
fQogCiBib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTg4NiwxNSArODg2LDE1IEBAIGJvb2wgUmVuZGVy
VGhlbWVXaW46OnBhaW50U2xpZGVyVGh1bWIoY28KIGNvbnN0IGludCBzbGlkZXJUaHVtYldpZHRo
ID0gNzsKIGNvbnN0IGludCBzbGlkZXJUaHVtYkhlaWdodCA9IDE1OwogCi12b2lkIFJlbmRlclRo
ZW1lV2luOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5k
ZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIENvbnRyb2xQYXJ0IHBhcnQg
PSBzdHlsZS0+YXBwZWFyYW5jZSgpOworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS5hcHBl
YXJhbmNlKCk7CiAgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKLSAg
ICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsK
LSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQp
KTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhl
ZCkpOworICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZp
eGVkKSk7CiAgICAgfSBlbHNlIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQp
IHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhl
ZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwg
Rml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgs
IEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJIZWln
aHQsIEZpeGVkKSk7CiAgICAgfQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKENHKQogICAgIGVs
c2UgaWYgKHBhcnQgPT0gTWVkaWFTbGlkZXJUaHVtYlBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVt
ZVNsaWRlclRodW1iUGFydCkgCkBAIC05MDcsMTYgKzkwNywxNiBAQCBib29sIFJlbmRlclRoZW1l
V2luOjpwYWludFNlYXJjaEZpZWxkKGNvCiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGks
IHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBl
KSBjb25zdAogewogICAgIC8vIE92ZXJyaWRlIHBhZGRpbmdTaXplIHRvIG1hdGNoIEFwcEtpdCB0
ZXh0IHBvc2l0aW9uaW5nLgogICAgIGNvbnN0IGludCBwYWRkaW5nID0gMTsKLSAgICBzdHlsZS0+
c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGlu
Z1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRv
bShMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBpZiAoZSAmJiBlLT5mb2N1c2VkKCkgJiYg
ZS0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkK
LSAgICAgICAgc3R5bGUtPnNldE91dGxpbmVPZmZzZXQoLTIpOworICAgIHN0eWxlLnNldFBhZGRp
bmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdSaWdo
dChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nVG9wKExlbmd0
aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBh
ZGRpbmcsIEZpeGVkKSk7CisgICAgaWYgKGUuZm9jdXNlZCgpICYmIGUuZG9jdW1lbnQoKS5mcmFt
ZSgpLT5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkKKyAgICAgICAgc3R5bGUuc2V0
T3V0bGluZU9mZnNldCgtMik7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNo
RmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKQEAgLTk0NCwzMCArOTQ0LDMwIEBAIGJvb2wg
UmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRDYW4KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAg
IC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplCi0gICAgZmxv
YXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhl
bFNpemU7CisgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUuZm9udFNpemUoKSAvIGRlZmF1bHRD
b250cm9sRm9udFBpeGVsU2l6ZTsKICAgICBpbnQgY2FuY2VsQnV0dG9uU2l6ZSA9IGxyb3VuZGYo
bWluKG1heChtaW5DYW5jZWxCdXR0b25TaXplLCBkZWZhdWx0Q2FuY2VsQnV0dG9uU2l6ZSAqIGZv
bnRTY2FsZSksIG1heENhbmNlbEJ1dHRvblNpemUpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVu
Z3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5n
dGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgo
Y2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGNh
bmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVz
dFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNl
YXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBJbnRTaXplIGVtcHR5U2l6ZSgxLCAxMSk7
Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChlbXB0eVNpemUud2lkdGgoKSwgRml4ZWQpKTsK
LSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChlbXB0eVNpemUuaGVpZ2h0KCksIEZpeGVkKSk7
CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0aCgpLCBGaXhlZCkpOwor
ICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoZW1wdHlTaXplLmhlaWdodCgpLCBGaXhlZCkpOwog
fQogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVt
ZW50JikgY29uc3QKIHsKICAgICAvLyBTY2FsZSB0aGUgZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9u
IHRoZSBmb250IHNpemUKLSAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAv
IGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHls
ZS5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOwogICAgIGludCBtYWdu
aWZpZXJTaXplID0gbHJvdW5kZihtaW4obWF4KG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25TaXplLCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgKiBmb250U2Nh
bGUpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFn
bmlmaWVyU2l6ZSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZp
ZXJTaXplLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJTaXpl
LCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4
ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtOTkzLDE1ICs5OTMsMTUgQEAgYm9vbCBSZW5k
ZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlcwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAv
LyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQotICAgIGZsb2F0
IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxT
aXplOworICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLmZvbnRTaXplKCkgLyBkZWZhdWx0Q29u
dHJvbEZvbnRQaXhlbFNpemU7CiAgICAgaW50IG1hZ25pZmllckhlaWdodCA9IGxyb3VuZGYobWlu
KG1heChtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSwgZGVmYXVsdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25TaXplICogZm9udFNjYWxlKSwgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1heFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKSk7
CiAgICAgaW50IG1hZ25pZmllcldpZHRoID0gbHJvdW5kZihtYWduaWZpZXJIZWlnaHQgKiBkZWZh
dWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggLyBkZWZhdWx0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblNpemUpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVy
V2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVySGVp
Z2h0LCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJXaWR0aCwg
Rml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllckhlaWdodCwgRml4
ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKQEAgLTExNTcsOSArMTE1Nyw5IEBAIFN0cmluZyBSZW5kZXJUaGVt
ZVdpbjo6bWVkaWFDb250cm9sc1NjcmkKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1F
TlQpCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdp
bjo6YWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAg
IHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6
c3VwcG9ydHNNZXRlcihDb250cm9sUGFydCBwYXJ0KSBjb25zdApAQCAtMTE3Miw3ICsxMTcyLDcg
QEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNNZXRlcihDb250cgogICAgIH0KIH0KIAot
SW50U2l6ZSBSZW5kZXJUaGVtZVdpbjo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1l
dGVyKiwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZVdp
bjo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYg
Ym91bmRzKSBjb25zdAogewogICAgIHJldHVybiBib3VuZHMuc2l6ZSgpOwogfQpAQCAtMTE4Miw3
ICsxMTgyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZXRlcihjb25zdCBSZQogICAg
IGlmICghcmVuZGVyT2JqZWN0LmlzTWV0ZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gdG9SZW5kZXJNZXRlcigmcmVuZGVyT2JqZWN0
KS0+bWV0ZXJFbGVtZW50KCk7CisgICAgSFRNTE1ldGVyRWxlbWVudCogZWxlbWVudCA9IHRvUmVu
ZGVyTWV0ZXIocmVuZGVyT2JqZWN0KS5tZXRlckVsZW1lbnQoKTsKIAogICAgIFRoZW1lRGF0YSB0
aGVtZSA9IGdldFRoZW1lRGF0YShyZW5kZXJPYmplY3QpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaAkocmV2aXNpb24gMTcwMzcxKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDc0ICs1NSw3NCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFRdWlya3NTdHls
ZVNoZWV0KCk7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJv
bHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0
aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBw
bGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmly
dHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZv
cm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIC8vIFN5c3RlbSBmb250cy4KLSAgICB2aXJ0dWFsIHZvaWQg
c3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICB2aXJ0
dWFsIENvbG9yIHN5c3RlbUNvbG9yKENTU1ZhbHVlSUQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBzeXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoQ1NTVmFsdWVJRCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcikgb3ZlcnJpZGUKICAgICB7IHJldHVybiBwYWludEJ1dHRvbihv
LCBpLCByKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhjb25zdCBSZW5k
ZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikgb3ZlcnJpZGUKICAgICB7IHJldHVybiBwYWludEJ1
dHRvbihvLCBpLCByKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAorICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5
bGUmIHN0eWxlKSBjb25zdCBvdmVycmlkZQogICAgIHsgcmV0dXJuIHNldENoZWNrYm94U2l6ZShz
dHlsZSk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IHBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5C
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3Bp
bkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBw
YWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByKQorICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJl
bmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBGbG9hdFJlY3QmIHIpIG92
ZXJyaWRlCiAgICAgeyByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAg
dmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51
TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
bnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdmlydHVhbCBib29sIHBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4
dEluZGVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBi
b29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBv
dmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgdGhlbWVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIG92ZXJy
aWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxl
bWVudCYpIGNvbnN0IG92ZXJyaWRlIHsgfQogCiAgICAgc3RhdGljIHZvaWQgc2V0V2ViS2l0SXNC
ZWluZ1VubG9hZGVkKCk7CiAKICAgICBzdGF0aWMgU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09m
RmlsZShDRlN0cmluZ1JlZiBuYW1lLCBDRlN0cmluZ1JlZiB0eXBlKTsKIAotICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IG92
ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhQ29u
dHJvbHNTdHlsZVNoZWV0KCkgb3ZlcnJpZGU7CkBAIC0xMzAsMTMgKzEzMCwxMyBAQCBwdWJsaWM6
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5UKQotICAgIHZpcnR1YWwgSW50U2l6
ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhj
b25zdCBSZW5kZXJNZXRlciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihDb250cm9sUGFydCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RN
ZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYKIAot
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVy
V2hlbkZvY3VzZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKIHByaXZhdGU6
CiAgICAgZW51bSBDb250cm9sU3ViUGFydCB7CkBAIC0xNDgsNyArMTQ4LDcgQEAgcHJpdmF0ZToK
ICAgICBSZW5kZXJUaGVtZVdpbigpOwogICAgIHZpcnR1YWwgflJlbmRlclRoZW1lV2luKCk7CiAK
LSAgICB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2
b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUmKSBjb25zdDsKICAgICB2b2lkIGNs
b3NlKCk7CiAKICAgICB1bnNpZ25lZCBkZXRlcm1pbmVTdGF0ZShjb25zdCBSZW5kZXJPYmplY3Qm
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233787</attachid>
            <date>2014-06-24 22:11:02 -0700</date>
            <delta_ts>2014-06-25 09:47:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134261-20140624221040.patch</filename>
            <type>text/plain</type>
            <size>218955</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2MyBAQAorMjAxNC0wNi0yNCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorICAgICAgICAgICAgQW5kIHBl
YXZvQG91dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5jb20+CisKKyAgICAgICAgVXNlIHJlZmVy
ZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycyBpbiBSZW5kZXJUaGVtZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDI2MQorCisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRq
dXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkSGF2ZVNwaW5CdXR0
b24pOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lRWZsOjphZGp1c3RTaXplQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVFZmw6OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUVmbDo6c3VwcG9ydHNGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVFZmw6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVFZmw6OmFkanVzdFNsaWRlclRodW1iU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVFZmw6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0Q2hlY2tib3hTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVFZmw6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVFZmw6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lRWZsOjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUd0azo6c3VwcG9ydHNGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVH
dGs6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3Rr
OjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3Rr
OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjphZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0
azo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpib3JkZXJSYWRp
aUZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRp
YVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1l
ZGlhU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0
azo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUd0azo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFRv
Z2dsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpjb21ib0JveEFycm93U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
UmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQ
YWRkaW5nVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVy
bmFsUGFkZGluZ0JvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xp
ZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RJ
bm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1l
R3RrMy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRUb2dnbGVTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lR3RrOjpzZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHdGs6OnNldFJhZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRD
b21ib0JveE1ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1
dHRvbjo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OmFkanVz
dElubmVyU3R5bGUpOgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OmNvbXB1dGVJbnRyaW5zaWNM
b2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjptZW51U3R5bGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNZXRlcjo6dXBkYXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1l
dGVyOjpjb21wdXRlTG9naWNhbEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBhaW50T3V0bGluZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclByb2dyZXNzOjp1cGRhdGVBbmltYXRpb25TdGF0ZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1
c3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjphZGp1c3RSYWRpb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OmFkanVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjphZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjphZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OmFkanVzdE1ldGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6Om1ldGVyU2l6ZUZvckJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2hvdWxkSGF2ZVNwaW5CdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkRGVj
b3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnN1cHBvcnRzSG92ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6Om1p
bmltdW1NZW51TGlzdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cG9w
dXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lOjpwb3B1cE1lbnVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzZXRD
aGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnNldFJhZGlvU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2V0QnV0dG9uU2l6ZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OmFkanVz
dENoZWNrYm94U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OmlzQ29u
dHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0UmFk
aW9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0
Um91bmRCb3JkZXJSYWRpdXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OmFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUlPUzo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jh
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2VhcmNoRmllbGRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0QnV0dG9uU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnNldEJ1dHRvblNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnNob3VsZEhhdmVTcGluQnV0dG9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
aXNDb250cm9sU3R5bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpjb250
cm9sU2l6ZUZvckZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNpemVG
b3JGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzaXplRm9yU3lzdGVt
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0U2l6ZUZyb21Gb250
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvclN5
c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRG
aWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0
QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjptZXRlclNpemVGb3JCb3Vu
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWV0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmxldmVsSW5kaWNhdG9yRm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6Om1pbmltdW1Qcm9ncmVzc0JhckhlaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YW5pbWF0aW9uUmVwZWF0SW50
ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBvcHVwTWVudVNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaENlbGxTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoRmllbGRTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RT
ZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RT
bGlkZXJUaHVtYlNpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6aXNDb250cm9sU3R5bGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RSZXBhaW50UmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YmFzZWxpbmVQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFNpemVGb3JG
b250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpzaXplRm9yRm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6c2l6ZUZvclN5c3RlbUZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnNldFNpemVGcm9tRm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Rm9udEZyb21Db250cm9s
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6Y29udHJvbFNpemVG
b3JTeXN0ZW1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpwYWlu
dENoZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpzZXRDaGVj
a2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50UmFk
aW8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnNldFJhZGlvU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6c2V0QnV0dG9uUGFkZGluZ0Zy
b21Db250cm9sU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRq
dXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnNl
dEJ1dHRvblNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVz
dFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjph
ZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJp
OjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjph
ZGp1c3RNZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJp
Ojpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RCdXR0b25T
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6bWluaW11bU1lbnVM
aXN0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2xp
ZGVyVGh1bWJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRq
dXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJp
OjpzZXRTZWFyY2hGaWVsZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZh
cmk6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBh
cnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1ldGVyU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6Om1ldGVyU2l6ZUZvckJvdW5kcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZXRlcik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpz
dXBwb3J0c0hvdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpzdXBwb3J0
c0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRqdXN0SW5u
ZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnNl
dENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6cGFpbnRU
ZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdE1lbnVMaXN0U3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdE1lbnVMaXN0QnV0
dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdFNsaWRl
clRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2Vh
cmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRqdXN0
U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVdpbjo6YWRqdXN0TWV0ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVdpbjo6bWV0ZXJTaXplRm9yQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
V2luOjpwYWludE1ldGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludENoZWNrYm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludFJhZGlvKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lV2luOjpzZXRSYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVXaW46OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVXaW46OnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RUZXh0RmllbGRTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRqdXN0VGV4dEFyZWFTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6c2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3Vz
ZWQpOgorCiAyMDE0LTA2LTI0ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTcwNDE0LgpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTcwNDE3KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMyLDgg
KzEzMzIsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZQogICAg
IH0KIAogICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZlIGEgY3JhY2sgYXQgYWRqdXN0aW5n
IHRoZSBzdHlsZS4KLSAgICBpZiAoc3R5bGUuaGFzQXBwZWFyYW5jZSgpKQotICAgICAgICBSZW5k
ZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0eWxlKCp0aGlzLCBzdHlsZSwgZSwgbV9z
dGF0ZS5oYXNVQUFwcGVhcmFuY2UoKSwgbV9zdGF0ZS5ib3JkZXJEYXRhKCksIG1fc3RhdGUuYmFj
a2dyb3VuZERhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgaWYgKHN0eWxl
Lmhhc0FwcGVhcmFuY2UoKSkgeworICAgICAgICBBU1NFUlQoZSk7CisgICAgICAgIFJlbmRlclRo
ZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUoKnRoaXMsIHN0eWxlLCAqZSwgbV9zdGF0
ZS5oYXNVQUFwcGVhcmFuY2UoKSwgbV9zdGF0ZS5ib3JkZXJEYXRhKCksIG1fc3RhdGUuYmFja2dy
b3VuZERhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgfQogCiAgICAgLy8g
SWYgd2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBz
dHlsZS4KICAgICBpZiAoc3R5bGUuaGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE3
MDQxNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpz
aG91bGRIYXZlU3BpbkIKIHsKICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50KCkuZG9j
dW1lbnQoKTsKICAgICBSZWZQdHI8UmVuZGVyVGhlbWU+IHRoZW1lID0gZG9jdW1lbnQucGFnZSgp
ID8gJmRvY3VtZW50LnBhZ2UoKS0+dGhlbWUoKSA6IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUo
KTsKLSAgICByZXR1cm4gdGhlbWUtPnNob3VsZEhhdmVTcGluQnV0dG9uKCZlbGVtZW50KCkpOwor
ICAgIHJldHVybiB0aGVtZS0+c2hvdWxkSGF2ZVNwaW5CdXR0b24oZWxlbWVudCgpKTsKIH0KIAog
dm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZVNoYWRvd1N1YnRyZWUoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNzA0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVt
YkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw4ICs5NCwxMCBAQCB2b2lkIFJlbmRl
clNsaWRlclRodW1iOjp1cGRhdGVBcHBlYXJhbmNlCiAgICAgICAgIHN0eWxlKCkuc2V0QXBwZWFy
YW5jZShNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7CiAgICAgZWxzZSBpZiAocGFyZW50U3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYUZ1bGxTY3JlZW5Wb2x1bWVTbGlkZXJQYXJ0KQogICAg
ICAgICBzdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyVGh1
bWJQYXJ0KTsKLSAgICBpZiAoc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIHRoZW1l
KCkuYWRqdXN0U2xpZGVyVGh1bWJTaXplKCZzdHlsZSgpLCBlbGVtZW50KCkpOworICAgIGlmIChz
dHlsZSgpLmhhc0FwcGVhcmFuY2UoKSkgeworICAgICAgICBBU1NFUlQoZWxlbWVudCgpKTsKKyAg
ICAgICAgdGhlbWUoKS5hZGp1c3RTbGlkZXJUaHVtYlNpemUoc3R5bGUoKSwgKmVsZW1lbnQoKSk7
CisgICAgfQogfQogCiBib29sIFJlbmRlclNsaWRlclRodW1iOjppc1NsaWRlclRodW1iKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZs
LmNwcAkocmV2aXNpb24gMTcwNDE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Jl
bmRlclRoZW1lRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDI3ICsxMjUsMjcgQEAgc3Rh
dGljIGJvb2wgc2V0U291cmNlR3JvdXBGb3JFZGplT2JqZWN0KAogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTaXplQ29uc3RyYWludHMoUmVuZGVyU3R5
bGUqIHN0eWxlLCBGb3JtVHlwZSB0eXBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRq
dXN0U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlJiBzdHlsZSwgRm9ybVR5cGUgdHlwZSkgY29u
c3QKIHsKICAgICBsb2FkVGhlbWVJZk5lZWRlZCgpOwogCiAgICAgLy8gVGhlc2UgYXJlIGFsd2F5
cyB2YWxpZCwgZXZlbiBpZiBubyB0aGVtZSBjb3VsZCBiZSBsb2FkZWQuCiAgICAgY29uc3QgVGhl
bWVQYXJ0RGVzYyogZGVzYyA9IG1fcGFydERlc2NzICsgKHNpemVfdCl0eXBlOwogCi0gICAgaWYg
KHN0eWxlLT5taW5XaWR0aCgpLmlzSW50cmluc2ljKCkpCi0gICAgICAgIHN0eWxlLT5zZXRNaW5X
aWR0aChkZXNjLT5taW4ud2lkdGgoKSk7Ci0gICAgaWYgKHN0eWxlLT5taW5IZWlnaHQoKS5pc0lu
dHJpbnNpYygpKQotICAgICAgICBzdHlsZS0+c2V0TWluSGVpZ2h0KGRlc2MtPm1pbi5oZWlnaHQo
KSk7Ci0KLSAgICBpZiAoZGVzYy0+bWF4LndpZHRoKCkudmFsdWUoKSA+IDAgJiYgc3R5bGUtPm1h
eFdpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldE1heFdpZHRo
KGRlc2MtPm1heC53aWR0aCgpKTsKLSAgICBpZiAoZGVzYy0+bWF4LmhlaWdodCgpLnZhbHVlKCkg
PiAwICYmIHN0eWxlLT5tYXhIZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQotICAgICAgICBz
dHlsZS0+c2V0TWF4SGVpZ2h0KGRlc2MtPm1heC5oZWlnaHQoKSk7Ci0KLSAgICBzdHlsZS0+c2V0
UGFkZGluZ1RvcChkZXNjLT5wYWRkaW5nLnRvcCgpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0Jv
dHRvbShkZXNjLT5wYWRkaW5nLmJvdHRvbSgpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQo
ZGVzYy0+cGFkZGluZy5sZWZ0KCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoZGVzYy0+
cGFkZGluZy5yaWdodCgpKTsKKyAgICBpZiAoc3R5bGUubWluV2lkdGgoKS5pc0ludHJpbnNpYygp
KQorICAgICAgICBzdHlsZS5zZXRNaW5XaWR0aChkZXNjLT5taW4ud2lkdGgoKSk7CisgICAgaWYg
KHN0eWxlLm1pbkhlaWdodCgpLmlzSW50cmluc2ljKCkpCisgICAgICAgIHN0eWxlLnNldE1pbkhl
aWdodChkZXNjLT5taW4uaGVpZ2h0KCkpOworCisgICAgaWYgKGRlc2MtPm1heC53aWR0aCgpLnZh
bHVlKCkgPiAwICYmIHN0eWxlLm1heFdpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAgICAg
ICAgc3R5bGUuc2V0TWF4V2lkdGgoZGVzYy0+bWF4LndpZHRoKCkpOworICAgIGlmIChkZXNjLT5t
YXguaGVpZ2h0KCkudmFsdWUoKSA+IDAgJiYgc3R5bGUubWF4SGVpZ2h0KCkuaXNJbnRyaW5zaWNP
ckF1dG8oKSkKKyAgICAgICAgc3R5bGUuc2V0TWF4SGVpZ2h0KGRlc2MtPm1heC5oZWlnaHQoKSk7
CisKKyAgICBzdHlsZS5zZXRQYWRkaW5nVG9wKGRlc2MtPnBhZGRpbmcudG9wKCkpOworICAgIHN0
eWxlLnNldFBhZGRpbmdCb3R0b20oZGVzYy0+cGFkZGluZy5ib3R0b20oKSk7CisgICAgc3R5bGUu
c2V0UGFkZGluZ0xlZnQoZGVzYy0+cGFkZGluZy5sZWZ0KCkpOworICAgIHN0eWxlLnNldFBhZGRp
bmdSaWdodChkZXNjLT5wYWRkaW5nLnJpZ2h0KCkpOwogfQogCiBzdGF0aWMgYm9vbCBpc0Zvcm1F
bGVtZW50VG9vTGFyZ2VUb0Rpc3BsYXkoY29uc3QgSW50U2l6ZSYgZWxlbWVudFNpemUpCkBAIC0z
NDYsOSArMzQ2LDkgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6YXBwbHlFZGplUlRMU3RhdGUoRQog
ICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUaGVtZUVmbDo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5
ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Citib29s
IFJlbmRlclRoZW1lRWZsOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwg
Y29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKIHsKLSAgICByZXR1cm4gUmVuZGVy
VGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3Jv
dW5kQ29sb3IpIHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0Owor
ICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJh
Y2tncm91bmQsIGJhY2tncm91bmRDb2xvcikgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVs
aXN0QnV0dG9uUGFydDsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRUaGVtZVBhcnQo
Y29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIEZvcm1UeXBlIHR5cGUsIGNvbnN0IFBhaW50SW5m
byYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTYyNyw5ICs2MjcsOSBAQCBzdGF0aWMg
Ym9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwCiAgICAgfQogfQogCi1ib29sIFJlbmRl
clRoZW1lRWZsOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Citib29sIFJlbmRlclRoZW1lRWZsOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFw
cGVhcmFuY2UoKSk7CisgICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUuYXBwZWFyYW5jZSgp
KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3Qg
UmVuZGVyT2JqZWN0JiBvYmplY3QpIGNvbnN0CkBAIC02OTksMjYgKzY5OSwyNiBAQCBib29sIFJl
bmRlclRoZW1lRWZsOjpwYWludFNsaWRlclRyYWNrKGNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUVmbDo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxw
dHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZUVmbDo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lRWZsOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsK
ICAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShzdHlsZVJlc29sdmVyLCBz
dHlsZSwgZWxlbWVudCk7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBz
dHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFk
anVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBz
dHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5h
cHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLmFwcGVhcmFuY2UoKTsK
ICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgewotICAgICAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOwotICAgICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOworICAgICAg
ICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CisgICAg
ICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKICAg
ICB9IGVsc2UgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgewotICAgICAg
ICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7Ci0gICAg
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOwor
ICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsK
KyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQp
KTsKICAgICB9CiB9CiAKQEAgLTc2NiwyMiArNzY2LDIyIEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6
OnBhaW50U2xpZGVyVGh1bWIoY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVFZmw6OmFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZUVmbDo6YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAg
aWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewot
ICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCku
cGFnZSgpLT50aGVtZSgpKS5hZGp1c3RDaGVja2JveFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxl
LCBlbGVtZW50KTsKKyAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgp
KSB7CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC5kb2N1bWVu
dCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0Q2hlY2tib3hTdHlsZShzdHlsZVJlc29sdmVyLCBz
dHlsZSwgZWxlbWVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhZGp1c3RTaXpl
Q29uc3RyYWludHMoc3R5bGUsIENoZWNrQm94KTsKIAotICAgIHN0eWxlLT5yZXNldEJvcmRlcigp
OworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKICAgICBjb25zdCBUaGVtZVBhcnREZXNjKiBk
ZXNjID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KUNoZWNrQm94OwotICAgIGlmIChzdHlsZS0+d2lk
dGgoKS52YWx1ZSgpIDwgZGVzYy0+bWluLndpZHRoKCkudmFsdWUoKSkKLSAgICAgICAgc3R5bGUt
PnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLnZh
bHVlKCkgPCBkZXNjLT5taW4uaGVpZ2h0KCkudmFsdWUoKSkKLSAgICAgICAgc3R5bGUtPnNldEhl
aWdodChkZXNjLT5taW4uaGVpZ2h0KCkpOworICAgIGlmIChzdHlsZS53aWR0aCgpLnZhbHVlKCkg
PCBkZXNjLT5taW4ud2lkdGgoKS52YWx1ZSgpKQorICAgICAgICBzdHlsZS5zZXRXaWR0aChkZXNj
LT5taW4ud2lkdGgoKSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLnZhbHVlKCkgPCBkZXNjLT5t
aW4uaGVpZ2h0KCkudmFsdWUoKSkKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KGRlc2MtPm1pbi5o
ZWlnaHQoKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50Q2hlY2tib3goY29uc3Qg
UmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKQEAgLTc4OSwyMiArNzg5LDIyIEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50
Q2hlY2tib3goY29uc3QKICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBDaGVja0Jv
eCwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFJhZGlvU3R5
bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UmFkaW9TdHls
ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1l
bnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVt
ZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVt
ZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1c3RSYWRpb1N0
eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBpZiAoIW1fcGFnZSAmJiBl
bGVtZW50LmRvY3VtZW50KCkucGFnZSgpKSB7CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRo
ZW1lRWZsJj4oZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0UmFkaW9T
dHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIFJhZGlvQnV0dG9uKTsKIAot
ICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKICAg
ICBjb25zdCBUaGVtZVBhcnREZXNjKiBkZXNjID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KVJhZGlv
QnV0dG9uOwotICAgIGlmIChzdHlsZS0+d2lkdGgoKS52YWx1ZSgpIDwgZGVzYy0+bWluLndpZHRo
KCkudmFsdWUoKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsK
LSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLnZhbHVlKCkgPCBkZXNjLT5taW4uaGVpZ2h0KCkudmFs
dWUoKSkKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChkZXNjLT5taW4uaGVpZ2h0KCkpOworICAg
IGlmIChzdHlsZS53aWR0aCgpLnZhbHVlKCkgPCBkZXNjLT5taW4ud2lkdGgoKS52YWx1ZSgpKQor
ICAgICAgICBzdHlsZS5zZXRXaWR0aChkZXNjLT5taW4ud2lkdGgoKSk7CisgICAgaWYgKHN0eWxl
LmhlaWdodCgpLnZhbHVlKCkgPCBkZXNjLT5taW4uaGVpZ2h0KCkudmFsdWUoKSkKKyAgICAgICAg
c3R5bGUuc2V0SGVpZ2h0KGRlc2MtPm1pbi5oZWlnaHQoKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhl
bWVFZmw6OnBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTgxMiwxNSArODEyLDE1IEBAIGJv
b2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50UmFkaW8oY29uc3QgUmUKICAgICByZXR1cm4gcGFpbnRU
aGVtZVBhcnQob2JqZWN0LCBSYWRpb0J1dHRvbiwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVFZmw6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVFZmw6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7Ci0g
ICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5w
YWdlKCktPnRoZW1lKCkpLmFkanVzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBl
bGVtZW50KTsKKyAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKSB7
CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC5kb2N1bWVudCgp
LnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUs
IGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gYWRqdXN0U2l6ZUNv
bnN0cmFpbnMgY2FuIG1ha2UgU3F1YXJlQnV0dG9uUGFydCdzIHNpemUgd3JvbmcgKGJ5IGFkanVz
dGluZyBwYWRkaW5ncyksIHNvIGNhbGwgaXQgb25seSBmb3IgUHVzaEJ1dHRvblBhcnQgYW5kIEJ1
dHRvblBhcnQKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCB8
fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IEJ1dHRvblBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVh
cmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gQnV0dG9u
UGFydCkKICAgICAgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBCdXR0b24pOwogfQog
CkBAIC04MjksMTcgKzgyOSwxNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludEJ1dHRvbihj
b25zdCBSCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgQnV0dG9uLCBpbmZvLCBy
ZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYg
ZWxlbWVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQt
PmRvY3VtZW50KCkucGFnZSgpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZs
Jj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdE1lbnVMaXN0U3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgIGlmICghbV9wYWdlICYmIGVs
ZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCkpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhl
bWVFZmwmPihlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1c3RNZW51TGlz
dFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIENvbWJvQm94KTsKLSAgICBz
dHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAg
IHN0eWxlLnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCi0g
ICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkp
OworICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0
KCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRl
ck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKQEAgLTg2MCw3ICs4NjAsNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RNZW51
TGlzdEJ1dHRvCiAgICAgbWluSGVpZ2h0ID0gc3RkOjptYXgobWluSGVpZ2h0LCBkcm9wRG93bkJv
eE1pbkhlaWdodCk7CiAgICAgc3R5bGUuc2V0TWluSGVpZ2h0KExlbmd0aChtaW5IZWlnaHQsIEZp
eGVkKSk7CiAKLSAgICBhZGp1c3RNZW51TGlzdFN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUs
ICZlbGVtZW50KTsKKyAgICBhZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxl
LCBlbGVtZW50KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRNZW51TGlzdEJ1dHRv
bkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8m
IGluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTg2OCwxNCArODY4LDE0IEBAIGJvb2wg
UmVuZGVyVGhlbWVFZmw6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICByZXR1cm4gcGFpbnRNZW51
TGlzdChvYmplY3QsIGluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1
c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjph
ZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJT
dHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2Ug
JiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewotICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVt
ZSgpKS5hZGp1c3RUZXh0RmllbGRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7
CisgICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKSkgeworICAgICAg
ICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCkt
PnRoZW1lKCkpLmFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVt
ZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMo
c3R5bGUsIFRleHRGaWVsZCk7Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUu
cmVzZXRCb3JkZXIoKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0RmllbGQo
Y29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQpAQCAtODgzLDcgKzg4Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6
OnBhaW50VGV4dEZpZWxkKGNvbnMKICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBU
ZXh0RmllbGQsIGluZm8sIEludFJlY3QocmVjdCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZs
OjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAtODky
LDIxICs4OTIsMjEgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0QXJlYShjb25zdAog
ICAgIHJldHVybiBwYWludFRleHRGaWVsZChvYmplY3QsIGluZm8sIHJlY3QpOwogfQogCi12b2lk
IFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2UgJiYgZWxl
bWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewotICAgICAgICBzdGF0aWNfY2Fz
dDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5h
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwg
ZWxlbWVudCk7CisgICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKSkg
eworICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQuZG9jdW1lbnQo
KS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKHN0
eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbik7
Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJF
KTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnNldFdoaXRlU3BhY2UoUFJF
KTsKIAotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdEZv
bnRTaXplOworICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLmZvbnRTaXplKCkgLyBkZWZhdWx0
Rm9udFNpemU7CiAgICAgaW50IGRlY29yYXRpb25TaXplID0gbHJvdW5kZihzdGQ6Om1pbihzdGQ6
Om1heChtaW5TZWFyY2hEZWNvcmF0aW9uQnV0dG9uU2l6ZSwgZGVmYXVsdEZvbnRTaXplICogZm9u
dFNjYWxlKSwgbWF4U2VhcmNoRGVjb3JhdGlvbkJ1dHRvblNpemUpKTsKIAotICAgIHN0eWxlLT5z
ZXRXaWR0aChMZW5ndGgoZGVjb3JhdGlvblNpemUgKyBzZWFyY2hGaWVsZERlY29yYXRpb25CdXR0
b25PZmZzZXQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZGVjb3JhdGlv
blNpemUsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGRlY29yYXRpb25TaXpl
ICsgc2VhcmNoRmllbGREZWNvcmF0aW9uQnV0dG9uT2Zmc2V0LCBGaXhlZCkpOworICAgIHN0eWxl
LnNldEhlaWdodChMZW5ndGgoZGVjb3JhdGlvblNpemUsIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVu
ZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CkBAIC05MTQsMjEgKzkxNCwyMSBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZp
ZWxkUmVzCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFy
dFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwg
RWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYm
IGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRl
clRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUs
IGVsZW1lbnQpOworICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCkp
IHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LmRvY3VtZW50
KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFy
dFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb24pOwotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0eWxlLT5zZXRX
aGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5zZXRX
aGl0ZVNwYWNlKFBSRSk7CiAKLSAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUo
KSAvIGRlZmF1bHRGb250U2l6ZTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS5mb250U2l6
ZSgpIC8gZGVmYXVsdEZvbnRTaXplOwogICAgIGludCBkZWNvcmF0aW9uU2l6ZSA9IGxyb3VuZGYo
c3RkOjptaW4oc3RkOjptYXgobWluU2VhcmNoRGVjb3JhdGlvbkJ1dHRvblNpemUsIGRlZmF1bHRG
b250U2l6ZSAqIGZvbnRTY2FsZSksIG1heFNlYXJjaERlY29yYXRpb25CdXR0b25TaXplKSk7CiAK
LSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGRlY29yYXRpb25TaXplICsgc2VhcmNoRmllbGRE
ZWNvcmF0aW9uQnV0dG9uT2Zmc2V0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKGRlY29yYXRpb25TaXplLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChk
ZWNvcmF0aW9uU2l6ZSArIHNlYXJjaEZpZWxkRGVjb3JhdGlvbkJ1dHRvbk9mZnNldCwgRml4ZWQp
KTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGRlY29yYXRpb25TaXplLCBGaXhlZCkpOwog
fQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC05MzYsMjMgKzkzNiwyMyBAQCBib29sIFJlbmRlclRo
ZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9i
amVjdCwgU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbiwgaW5mbywgcmVjdCk7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
bGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2UgJiYgZWxl
bWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewotICAgICAgICBzdGF0aWNfY2Fz
dDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5h
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBl
bGVtZW50KTsKKyAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKSB7
CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC5kb2N1bWVudCgp
LnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShzdHls
ZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
YWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik7Ci0g
ICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsK
KyAgICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnNldFdoaXRlU3BhY2UoUFJFKTsK
IAogICAgIC8vIExvZ2ljIHRha2VuIGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bS5jcHAuCiAgICAg
Ly8gU2NhbGUgdGhlIGJ1dHRvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUuCi0gICAgZmxv
YXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Rm9udFNpemU7CisgICAg
ZmxvYXQgZm9udFNjYWxlID0gc3R5bGUuZm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKICAg
ICBpbnQgY2FuY2VsQnV0dG9uU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluQ2Fu
Y2VsQnV0dG9uU2l6ZSwgZGVmYXVsdEZvbnRTaXplICogZm9udFNjYWxlKSwgbWF4Q2FuY2VsQnV0
dG9uU2l6ZSkpOwogCi0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChjYW5jZWxCdXR0b25TaXpl
LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUs
IEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZp
eGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhl
ZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCkBAIC05NjAsMTUgKzk2MCwxNSBAQCBib29sIFJlbmRlclRoZW1l
RWZsOjpwYWludFNlYXJjaEZpZWxkQ2FuCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVj
dCwgU2VhcmNoRmllbGRDYW5jZWxCdXR0b24sIGluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRl
clRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAog
ewotICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdl
KCkpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LT5kb2N1
bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0U2VhcmNoRmllbGRTdHlsZShzdHlsZVJlc29s
dmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudC5kb2N1bWVu
dCgpLnBhZ2UoKSkgeworICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1l
bnQuZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoc3R5
bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgU2VhcmNoRmllbGQpOwotICAgIHN0eWxlLT5y
ZXNldEJvcmRlcigpOwotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUu
cmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiB9CiAKIGJvb2wg
UmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTk3Niwx
MCArOTc2LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGQoY28KICAg
ICByZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBTZWFyY2hGaWVsZCwgaW5mbywgcmVjdCk7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdElubmVyU3BpbkJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwg
RWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYm
IGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRl
clRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdElu
bmVyU3BpbkJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBp
ZiAoIW1fcGFnZSAmJiBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKSB7CisgICAgICAgIHN0YXRp
Y19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUo
KSkuYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1l
bnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhz
dHlsZSwgU3Bpbm5lcik7CkBAIC0xMDA4LDkgKzEwMDgsOSBAQCB2b2lkIFJlbmRlclRoZW1lRWZs
OjpzeXN0ZW1Gb250KENTU1ZhbHVlCiB9CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkK
LXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
RWZsOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0
cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBkb3VibGUgUmVuZGVy
VGhlbWVFZmw6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MqKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRo
ZW1lRWZsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRl
clRoZW1lRWZsLmgJKHJldmlzaW9uIDE3MDQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9SZW5kZXJUaGVtZUVmbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMyArNjgsMTMgQEAg
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoUGFnZSop
OwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVh
bGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KLSAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHls
ZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIC8vIEEgbWV0aG9kIFJl
dHVybmluZyB3aGV0aGVyIHRoZSBjb250cm9sIGlzIHN0eWxlZCBieSBjc3Mgb3Igbm90IGUuZyBz
cGVjaWZ5aW5nIGJhY2tncm91bmQtY29sb3IuCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5
ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9y
ZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3Ip
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSBp
cyBhYmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRz
Rm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMg
dGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KICAgICB2aXJ0dWFsIGJvb2wg
Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Qgb3ZlcnJpZGU7
CkBAIC0xMDQsNTAgKzEwNCw1MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFbnRyeVRleHRDb2xv
cihpbnQgZm9yZVIsIGludCBmb3JlRywgaW50IGZvcmVCLCBpbnQgZm9yZUEsIGludCBiYWNrUiwg
aW50IGJhY2tHLCBpbnQgYmFja0IsIGludCBiYWNrQSk7CiAgICAgdm9pZCBzZXRTZWFyY2hUZXh0
Q29sb3IoaW50IGZvcmVSLCBpbnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQgYmFj
a1IsIGludCBiYWNrRywgaW50IGJhY2tCLCBpbnQgYmFja0EpOwogCi0gICAgdm9pZCBhZGp1c3RT
aXplQ29uc3RyYWludHMoUmVuZGVyU3R5bGUqLCBGb3JtVHlwZSkgY29uc3Q7CisgICAgdm9pZCBh
ZGp1c3RTaXplQ29uc3RyYWludHMoUmVuZGVyU3R5bGUmLCBGb3JtVHlwZSkgY29uc3Q7CiAKICAg
ICAvLyBTeXN0ZW0gZm9udHMuCiAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoQ1NTVmFsdWVJ
RCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVz
dEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgYm9vbCBwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4
dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVu
dUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBi
b29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJp
ZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlk
ZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0IG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgdmlydHVh
bCBJbnRTaXplIHNsaWRlclRpY2tTaXplKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xNTksMTYgKzE1
OSwxNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJp
ZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBh
aW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRG
b250U2l6ZShpbnQgZm9udHNpemUpOwogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1l
bnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZG91
YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYp
IGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAkocmV2aXNp
b24gMTcwNDE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3Rr
Mi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MiwxOCArMTQyLDE4IEBAIHN0YXRpYyBHdGtTdGF0
ZVR5cGUgZ2V0R3RrU3RhdGVUeXBlKFJlbmQKICAgICByZXR1cm4gR1RLX1NUQVRFX05PUk1BTDsK
IH0KIAotc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0ayosIFJl
bmRlclN0eWxlKiBzdHlsZSwgR3RrV2lkZ2V0KiB3aWRnZXQpCitzdGF0aWMgdm9pZCBzZXRUb2dn
bGVTaXplKGNvbnN0IFJlbmRlclRoZW1lR3RrKiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBHdGtXaWRn
ZXQqIHdpZGdldCkKIHsKICAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVj
aWZpZWQsIHNvIHdlIHNob3VsZG4ndCBjaGFuZ2UgdGhlbS4KLSAgICBpZiAoIXN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAg
ICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0
KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGdpbnQgaW5kaWNhdG9yU2l6ZTsK
ICAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRp
Y2F0b3JTaXplLCBOVUxMKTsKLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1
dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhl
ZCkpOwotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLndp
ZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3Ro
KGluZGljYXRvclNpemUsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygp
KQorICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7
CiB9CiAKIHN0YXRpYyB2b2lkIHBhaW50VG9nZ2xlKFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQpCkBAIC0xOTQsNyArMTk0LDcgQEAg
c3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoUmVuZGVyVGhlbWVHdGsqIAogICAgIH0KIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSYgc3R5
bGUpIGNvbnN0CiB7CiAgICAgc2V0VG9nZ2xlU2l6ZSh0aGlzLCBzdHlsZSwgZ3RrQ2hlY2tCdXR0
b24oKSk7CiB9CkBAIC0yMDUsNyArMjA1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRD
aGVja2JveChjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0
azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVHdGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgc2V0
VG9nZ2xlU2l6ZSh0aGlzLCBzdHlsZSwgZ3RrUmFkaW9CdXR0b24oKSk7CiB9CkBAIC0yODksMTEg
KzI4OSwxMSBAQCBpbnQgUmVuZGVyVGhlbWVHdGs6OmdldENvbWJvQm94U2VwYXJhdG9yCiAgICAg
cmV0dXJuIGd0a193aWRnZXRfZ2V0X3N0eWxlKHNlcGFyYXRvciktPnh0aGlja25lc3M7CiB9CiAK
LWludCBSZW5kZXJUaGVtZUd0azo6Y29tYm9Cb3hBcnJvd1NpemUoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAoraW50IFJlbmRlclRoZW1lR3RrOjpjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHls
ZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gVGFraW5nIHRoZSBmb250IHNpemUgYW5kIHJldmVy
c2luZyB0aGUgRFBJIGNvbnZlcnNpb24gc2VlbXMgdG8gbWF0Y2gKICAgICAvLyBHVEsrIHJlbmRl
cmluZyBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLgotICAgIHJldHVybiBzdHlsZS0+Zm9udCgpLnNp
emUoKSAqICg3Mi4wIC8gUmVuZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQSSgpKTsKKyAgICByZXR1
cm4gc3R5bGUuZm9udCgpLnNpemUoKSAqICg3Mi4wIC8gUmVuZGVyVGhlbWVHdGs6OmdldFNjcmVl
bkRQSSgpKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoR3RrV2lkZ2V0
KiBidXR0b24sIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKQpA
QCAtMzE2LDExICszMTYsMTEgQEAgc3RhdGljIHZvaWQgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoR3Rr
V2lkZwogfQogCiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmdldENvbWJvQm94UGFkZGluZyhSZW5k
ZXJTdHlsZSogc3R5bGUsIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90
dG9tKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKFJlbmRl
clN0eWxlJiBzdHlsZSwgaW50JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0
b20pIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhpcyBtZW51IGxpc3QgYnV0dG9uIGlzbid0IGRyYXdu
IHVzaW5nIHRoZSBuYXRpdmUgdGhlbWUsIHdlCiAgICAgLy8gZG9uJ3QgYWRkIGFueSBleHRyYSBw
YWRkaW5nIGJleW9uZCB3aGF0IFdlYkNvcmUgYWxyZWFkeSB1c2VzLgotICAgIGlmIChzdHlsZS0+
YXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2Uo
KSA9PSBOb0NvbnRyb2xQYXJ0KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBBIGNvbWJvIGJv
eCBidXR0b24gaXMgYSBidXR0b24gd2l0aCB3aWRnZXRzIHBhY2tlZCBpbnRvIGl0LgpAQCAtMzMy
LDM0ICszMzIsMzQgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKAog
ICAgIGludCBhcnJvd0FuZFNlcGVyYXRvckxlbmd0aCA9IGNvbWJvQm94QXJyb3dTaXplKHN0eWxl
KSArCiAgICAgICAgIGdldENvbWJvQm94U2VwYXJhdG9yV2lkdGgoKSArICgzICogYnV0dG9uV2lk
Z2V0U3R5bGUtPnh0aGlja25lc3MpOwogCi0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBS
VEwpCisgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigpID09IFJUTCkKICAgICAgICAgbGVmdCArPSBh
cnJvd0FuZFNlcGVyYXRvckxlbmd0aDsKICAgICBlbHNlCiAgICAgICAgIHJpZ2h0ICs9IGFycm93
QW5kU2VwZXJhdG9yTGVuZ3RoOwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJu
YWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVH
dGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7
CiAgICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7CiAgICAg
Z2V0Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAg
IHJldHVybiBsZWZ0OwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lR3RrOjpw
b3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAg
ICBpbnQgbGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKICAgICBnZXRD
b21ib0JveFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgcmV0
dXJuIHJpZ2h0OwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
VG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJ
bnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIGludCBs
ZWZ0ID0gMCwgdG9wID0gMCwgcmlnaHQgPSAwLCBib3R0b20gPSAwOwogICAgIGdldENvbWJvQm94
UGFkZGluZyhzdHlsZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICByZXR1cm4gdG9w
OwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIGludCBsZWZ0
ID0gMCwgdG9wID0gMCwgcmlnaHQgPSAwLCBib3R0b20gPSAwOwogICAgIGdldENvbWJvQm94UGFk
ZGluZyhzdHlsZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKQEAgLTM4MSwxMiArMzgxLDEy
IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoY29uc3QKIAogICAgIGludCBs
ZWZ0Qm9yZGVyID0gMCwgcmlnaHRCb3JkZXIgPSAwLCBib3R0b21Cb3JkZXIgPSAwLCB0b3BCb3Jk
ZXIgPSAwOwogICAgIGdldEJ1dHRvbklubmVyQm9yZGVyKGd0a0NvbWJvQm94QnV0dG9uKCksIGxl
ZnRCb3JkZXIsIHRvcEJvcmRlciwgcmlnaHRCb3JkZXIsIGJvdHRvbUJvcmRlcik7Ci0gICAgUmVu
ZGVyU3R5bGUqIHN0eWxlID0gJm9iamVjdC5zdHlsZSgpOworICAgIFJlbmRlclN0eWxlJiBzdHls
ZSA9IG9iamVjdC5zdHlsZSgpOwogICAgIGludCBhcnJvd1NpemUgPSBjb21ib0JveEFycm93U2l6
ZShzdHlsZSk7CiAgICAgR3RrU3R5bGUqIGJ1dHRvblN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5
bGUoZ3RrQ29tYm9Cb3hCdXR0b24oKSk7CiAKICAgICBJbnRSZWN0IGFycm93UmVjdCgwLCAocmVj
dC5oZWlnaHQoKSAtIGFycm93U2l6ZSkgLyAyLCBhcnJvd1NpemUsIGFycm93U2l6ZSk7Ci0gICAg
aWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigp
ID09IFJUTCkKICAgICAgICAgYXJyb3dSZWN0LnNldFgobGVmdEJvcmRlciArIGJ1dHRvblN0eWxl
LT54dGhpY2tuZXNzKTsKICAgICBlbHNlCiAgICAgICAgIGFycm93UmVjdC5zZXRYKHJlY3Qud2lk
dGgoKSAtIHJpZ2h0Qm9yZGVyIC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBhcnJvd1NpemUp
OwpAQCAtNDEwLDcgKzQxMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3Qo
Y29uc3QKICAgICBib3R0b21Cb3JkZXIgKz0gZm9jdXNQYWRkaW5nICsgZm9jdXNXaWR0aDsKICAg
ICBpbnQgc2VwYXJhdG9yV2lkdGggPSBnZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCk7CiAgICAg
SW50UmVjdCBzZXBhcmF0b3JSZWN0KDAsIHRvcEJvcmRlciwgc2VwYXJhdG9yV2lkdGgsIHJlY3Qu
aGVpZ2h0KCkgLSB0b3BCb3JkZXIgLSBib3R0b21Cb3JkZXIpOwotICAgIGlmIChzdHlsZS0+ZGly
ZWN0aW9uKCkgPT0gUlRMKQorICAgIGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAg
ICAgIHNlcGFyYXRvclJlY3Quc2V0WChhcnJvd1JlY3QueCgpICsgYXJyb3dSZWN0LndpZHRoKCkg
KyBidXR0b25TdHlsZS0+eHRoaWNrbmVzcyArIHNlcGFyYXRvcldpZHRoKTsKICAgICBlbHNlCiAg
ICAgICAgIHNlcGFyYXRvclJlY3Quc2V0WChhcnJvd1JlY3QueCgpIC0gYnV0dG9uU3R5bGUtPnh0
aGlja25lc3MgLSBzZXBhcmF0b3JXaWR0aCk7CkBAIC01MjgsOSArNTI4LDkgQEAgYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUaHVtYihjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBDb250
cm9sUGFydCBwYXJ0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9sUGFydCBwYXJ0
ID0gc3R5bGUuYXBwZWFyYW5jZSgpOwogICAgIGlmIChwYXJ0ICE9IFNsaWRlclRodW1iSG9yaXpv
bnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKICAgICAgICAgcmV0
dXJuOwogCkBAIC01NDIsMTMgKzU0MiwxMyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RT
bGlkZXJUaHVtYlNpCiAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAKICAgICBpZiAo
cGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRX
aWR0aChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGxlbmd0
aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aCh3aWR0aCwgRml4ZWQp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVt
YlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLSAg
ICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRI
ZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgo
d2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVk
KSk7CiB9CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKQEAgLTU3NCw3ICs1NzQsNyBA
QCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKGNvCiB9CiAjZW5kaWYKIAot
dm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBHdGtTdHlsZSogZ3RrU3R5bGUg
PSBndGtfd2lkZ2V0X2dldF9zdHlsZShndGtTcGluQnV0dG9uKCkpOwogICAgIGNvbnN0IFBhbmdv
Rm9udERlc2NyaXB0aW9uKiBmb250RGVzY3JpcHRpb24gPSBndGtTdHlsZS0+Zm9udF9kZXNjOwpA
QCAtNTg1LDggKzU4NSw4IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1
dHQKICAgICBpbnQgd2lkdGggPSBzdGQ6Om1heChQQU5HT19QSVhFTFMoZm9udFNpemUpLCBtaW5T
cGluQnV0dG9uQXJyb3dTaXplKTsKICAgICB3aWR0aCArPSAtKCh3aWR0aCAlIDIpIC0gMSkgKyBn
dGtTdHlsZS0+eHRoaWNrbmVzczsKIAotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgs
IEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsK
KyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0
TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAkocmV2
aXNpb24gMTcwNDE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1l
R3RrMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSwxMCArMjAxLDEwIEBAIHZvaWQgUmVuZGVy
VGhlbWVHdGs6OmFkanVzdFJlcGFpbnRSZWN0KGMKICAgICBhZGp1c3RSZWN0Rm9yRm9jdXMoY29u
dGV4dCwgcmVjdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoR3RrU3R5bGVDb250
ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgdm9pZCBzZXRUb2dnbGVT
aXplKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAg
IC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgc28gd2Ugc2hvdWxk
bid0IGNoYW5nZSB0aGVtLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1
dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgo
KS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gT3RoZXIgcG9ydHMgaGFyZC1jb2RlIHRoaXMgdG8gMTMgd2hp
Y2ggaXMgYWxzbyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSysuCkBAIC0yMTMsMTEg
KzIxMywxMSBAQCBzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29udGV4CiAgICAg
Z2ludCBpbmRpY2F0b3JTaXplOwogICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250
ZXh0LCAiaW5kaWNhdG9yLXNpemUiLCAmaW5kaWNhdG9yU2l6ZSwgTlVMTCk7CiAKLSAgICBpZiAo
c3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdp
ZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS53aWR0aCgp
LmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChpbmRp
Y2F0b3JTaXplLCBGaXhlZCkpOwogCi0gICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkK
LSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsK
KyAgICBpZiAoc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldEhlaWdo
dChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKIH0KIAogc3RhdGljIHZvaWQgcGFpbnRU
b2dnbGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBHVHlwZSB3aWRnZXRUeXBlLCBjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIGZ1bGxSZWN0KQpAQCAtMjc1LDcgKzI3NSw3IEBAIHN0YXRpYyB2b2lk
IHBhaW50VG9nZ2xlKGNvbnN0IFJlbmRlclRoZW0KICAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0
b3JlKGNvbnRleHQpOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRDaGVja2JveFNpemUo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0Q2hlY2ti
b3hTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBzZXRUb2dnbGVTaXplKGdl
dFN0eWxlQ29udGV4dChHVEtfVFlQRV9DSEVDS19CVVRUT04pLCBzdHlsZSk7CiB9CkBAIC0yODYs
NyArMjg2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChjb25zdAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldFJhZGlvU2l6
ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgc2V0VG9nZ2xlU2l6ZShnZXRTdHls
ZUNvbnRleHQoR1RLX1RZUEVfUkFESU9fQlVUVE9OKSwgc3R5bGUpOwogfQpAQCAtMzc4LDE4ICsz
NzgsMTggQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oY29uc3QgUgogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0
eWxlKiBzdHlsZSwgR3RrQm9yZGVyJiBib3JkZXIsIGludCYgZm9jdXMsIGludCYgc2VwYXJhdG9y
KQorc3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlJiBzdHlsZSwgR3Rr
Qm9yZGVyJiBib3JkZXIsIGludCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQogewogICAgIC8vIElm
IHRoaXMgbWVudSBsaXN0IGJ1dHRvbiBpc24ndCBkcmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1l
LCB3ZQogICAgIC8vIGRvbid0IGFkZCBhbnkgZXh0cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJD
b3JlIGFscmVhZHkgdXNlcy4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRy
b2xQYXJ0KQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTm9Db250cm9sUGFydCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVD
b250ZXh0KEdUS19UWVBFX0NPTUJPX0JPWCk7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShj
b250ZXh0KTsKIAogICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtf
U1RZTEVfQ0xBU1NfQlVUVE9OKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9u
KGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24o
c3R5bGUtPmRpcmVjdGlvbigpKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rp
b24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlv
bihzdHlsZS5kaXJlY3Rpb24oKSkpKTsKIAogICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3Jk
ZXIoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICZib3JkZXIpOwogCkBA
IC00MDYsNyArNDA2LDcgQEAgc3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0
eQogICAgIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQQVJBVE9SKTsKICAg
ICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwogCi0gICAgR3RrVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0
aW9uKHN0eWxlLT5kaXJlY3Rpb24oKSkpOworICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9u
ID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS5k
aXJlY3Rpb24oKSkpOwogICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4
dCwgZGlyZWN0aW9uKTsKICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwg
InNlcGFyYXRvciIpOwogCkBAIC00MjYsMjkgKzQyNiwyOSBAQCBzdGF0aWMgdm9pZCBnZXRDb21i
b0JveE1ldHJpY3MoUmVuZGVyU3R5CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250
ZXh0KTsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVy
bmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIEd0a0JvcmRl
ciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OwogICAgIGludCBmb2N1c1dpZHRoID0gMCwg
c2VwYXJhdG9yV2lkdGggPSAwOwogICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVy
V2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKICAgICBpbnQgbGVmdCA9IGJvcmRl
cldpZHRoLmxlZnQgKyBmb2N1c1dpZHRoOwotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0g
UlRMKQorICAgIGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgIGxlZnQgKz0g
c2VwYXJhdG9yV2lkdGggKyBtaW5BcnJvd1NpemU7CiAgICAgcmV0dXJuIGxlZnQ7CiB9CiAKLWlu
dCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmln
aHQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0
aCA9IHsgMCwgMCwgMCwgMCB9OwogICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lk
dGggPSAwOwogICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3Vz
V2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKICAgICBpbnQgcmlnaHQgPSBib3JkZXJXaWR0aC5yaWdo
dCArIGZvY3VzV2lkdGg7Ci0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAg
aWYgKHN0eWxlLmRpcmVjdGlvbigpID09IExUUikKICAgICAgICAgcmlnaHQgKz0gc2VwYXJhdG9y
V2lkdGggKyBtaW5BcnJvd1NpemU7CiAgICAgcmV0dXJuIHJpZ2h0OwogfQogCi1pbnQgUmVuZGVy
VGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5
bGUmIHN0eWxlKSBjb25zdAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwg
MCwgMCB9OwogICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwpAQCAt
NDU2LDcgKzQ1Niw3IEBAIGludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmcK
ICAgICByZXR1cm4gYm9yZGVyV2lkdGgudG9wICsgZm9jdXNXaWR0aDsKIH0KIAotaW50IFJlbmRl
clRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0CitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJl
bmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7
IDAsIDAsIDAsIDAgfTsKICAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0g
MDsKQEAgLTcxMCw5ICs3MTAsOSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRo
dW1iKGNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1
c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5
bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBw
ZWFyYW5jZSgpOworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS5hcHBlYXJhbmNlKCk7CiAg
ICAgaWYgKHBhcnQgIT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBwYXJ0ICE9IFNsaWRl
clRodW1iVmVydGljYWxQYXJ0KQogICAgICAgICByZXR1cm47CiAKQEAgLTcyMiwxMyArNzIyLDEz
IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2kKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInNsaWRlci1sZW5ndGgiLCAmc2xpZGVyTGVuZ3RoLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICBpZiAocGFydCA9PSBTbGlk
ZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgo
c2xpZGVyTGVuZ3RoLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChz
bGlkZXJXaWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRl
ckxlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJX
aWR0aCwgRml4ZWQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQocGFydCA9
PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1
bWJQYXJ0KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQpKTsKKyAg
ICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUu
c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJMZW5ndGgsIEZpeGVkKSk7CiB9CiAKICNpZiBFTkFCTEUo
UFJPR1JFU1NfRUxFTUVOVCkKQEAgLTc3Nyw3ICs3NzcsNyBAQCBzdGF0aWMgZ2ludCBzcGluQnV0
dG9uQXJyb3dTaXplKEd0a1N0eWxlCiAgICAgcmV0dXJuIGFycm93U2l6ZSAtIGFycm93U2l6ZSAl
IDI7IC8vIEZvcmNlIGV2ZW4uCiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVy
U3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7
CiAgICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X1NQSU5fQlVUVE9OKTsKIApAQCAtNzg1LDggKzc4NSw4IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6
OmFkanVzdElubmVyU3BpbkJ1dHQKICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGluZyhj
b250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJnBhZGRpbmcpOwogCiAgICAg
aW50IHdpZHRoID0gc3BpbkJ1dHRvbkFycm93U2l6ZShjb250ZXh0KSArIHBhZGRpbmcubGVmdCAr
IHBhZGRpbmcucmlnaHQ7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0
eWxlLnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRNaW5XaWR0
aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhaW50U3BpbkFycm93
QnV0dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a0Fycm93VHlwZSBhcnJvd1R5cGUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAJKHJldmlzaW9u
IDE3MDQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw5ICsxNjgsOSBAQCBzdGF0aWMgYm9vbCBzdXBwb3J0
c0ZvY3VzKENvbnRyb2xQYXJ0IGFwCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpz
dXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citib29sIFJl
bmRlclRoZW1lR3RrOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7
CisgICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUuYXBwZWFyYW5jZSgpKTsKIH0KIAogYm9v
bCBSZW5kZXJUaGVtZUd0azo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0
JiBvKSBjb25zdApAQCAtMjIwLDI1ICsyMjAsMjUgQEAgc3RhdGljIEd0a1N0YXRlVHlwZSBndGtJ
Y29uU3RhdGUoUmVuZGVyVAogICAgIHJldHVybiBHVEtfU1RBVEVfTk9STUFMOwogfQogCi12b2lk
IFJlbmRlclRoZW1lR3RrOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVH
dGs6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUs
IFdlYkNvcmU6OkVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIFNvbWUgbGF5b3V0IHRlc3RzIGNo
ZWNrIGV4cGxpY2l0bHkgdGhhdCBidXR0b25zIGlnbm9yZSBsaW5lLWhlaWdodC4KLSAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkKLSAgICAgICAgc3R5bGUtPnNl
dExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIGlmIChz
dHlsZS5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpCisgICAgICAgIHN0eWxlLnNldExp
bmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogfQogCi12b2lkIFJl
bmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
JikgY29uc3QKIHsKICAgICAvLyBUaGUgdGVzdHMgY2hlY2sgZXhwbGljaXRseSB0aGF0IHNlbGVj
dCBtZW51IGJ1dHRvbnMgaWdub3JlIGxpbmUgaGVpZ2h0LgotICAgIHN0eWxlLT5zZXRMaW5lSGVp
Z2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBzdHlsZS5zZXRMaW5l
SGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKIAogICAgIC8vIFdlIGNh
bm5vdCBnaXZlIGEgcHJvcGVyIHJlbmRlcmluZyB3aGVuIGJvcmRlciByYWRpdXMgaXMgYWN0aXZl
LCB1bmZvcnR1bmF0ZWx5LgotICAgIHN0eWxlLT5yZXNldEJvcmRlclJhZGl1cygpOworICAgIHN0
eWxlLnJlc2V0Qm9yZGVyUmFkaXVzKCk7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewotICAgIGFkanVzdE1lbnVMaXN0U3R5
bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgJmUpOworICAgIGFkanVzdE1lbnVMaXN0U3R5bGUo
c3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWlu
dE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjkzLDcgKzI5
Myw3IEBAIHN0YXRpYyBHdGtJY29uU2l6ZSBnZXRJY29uU2l6ZUZvclBpeGVsU2kKICAgICByZXR1
cm4gR1RLX0lDT05fU0laRV9ESUFMT0c7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSkgY29uc3QKIHsK
ICAgICBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlKTsKIH0KQEAgLTMwMywyNSArMzAzLDI1IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50U2VhcmNoRmllbGRSZXMKICAgICByZXR1cm4gcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uUGFydChvLCBpLCByZWN0KTsKIH0KIAotc3RhdGljIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRJY29uU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQorc3RhdGljIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRJY29uU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIHN0eWxlLT5yZXNldEJv
cmRlcigpOwotICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBzdHlsZS5yZXNldEJvcmRl
cigpOworICAgIHN0eWxlLnJlc2V0UGFkZGluZygpOwogCiAgICAgLy8gR2V0IHRoZSBpY29uIHNp
emUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZS4KLSAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+Zm9u
dFNpemUoKTsKKyAgICBpbnQgZm9udFNpemUgPSBzdHlsZS5mb250U2l6ZSgpOwogICAgIGlmIChm
b250U2l6ZSA8IGd0a0ljb25TaXplTWVudSkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVu
Z3RoKGZvbnRTaXplLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChm
b250U2l6ZSwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGZvbnRTaXpl
LCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGZvbnRTaXplLCBGaXhl
ZCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGdpbnQgd2lkdGggPSAwLCBoZWlnaHQg
PSAwOwogICAgIGd0a19pY29uX3NpemVfbG9va3VwKGdldEljb25TaXplRm9yUGl4ZWxTaXplKGZv
bnRTaXplKSwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdp
ZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodCwgRml4ZWQp
KTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUu
c2V0SGVpZ2h0KExlbmd0aChoZWlnaHQsIEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVH
dGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIGFk
anVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKHN0eWxlKTsKIH0KQEAgLTM2MCw3ICszNjAsNyBAQCBi
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsK
ICAgICBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShzdHlsZSk7CiB9CkBAIC0zNzksMTEgKzM3
OSwxMSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAvLyBXZSBjYW5u
b3QgZ2l2ZSBhIHByb3BlciByZW5kZXJpbmcgd2hlbiBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwg
dW5mb3J0dW5hdGVseS4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKLSAgICBzdHls
ZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAg
c3R5bGUucmVzZXRCb3JkZXJSYWRpdXMoKTsKKyAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRl
clN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTQxNCwxNSArNDE0LDE1IEBAIGJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50Q2Fwc0xvY2tJbmRpY2EKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6
OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHls
ZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsK
KyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVH
dGs6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAg
UmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUs
IGVsZW1lbnQpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUu
c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmNhcmV0
QmxpbmtJbnRlcnZhbCgpIGNvbnN0CkBAIC01NzYsMTMgKzU3NiwxMyBAQCBib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludE1lZGlhVG9nZ2xlQ2xvCiB9CiAjZW5kaWYKIAotc3RhdGljIEZsb2F0Um91
bmRlZFJlY3Q6OlJhZGlpIGJvcmRlclJhZGlpRnJvbVN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkK
K3N0YXRpYyBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSBib3JkZXJSYWRpaUZyb21TdHlsZShSZW5k
ZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKAot
ICAgICAgICBJbnRTaXplKHN0eWxlLT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGgoKS5pbnRW
YWx1ZSgpLCBzdHlsZS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkp
LAotICAgICAgICBJbnRTaXplKHN0eWxlLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLndpZHRoKCku
aW50VmFsdWUoKSwgc3R5bGUtPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFs
dWUoKSksCi0gICAgICAgIEludFNpemUoc3R5bGUtPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS53
aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0
KCkuaW50VmFsdWUoKSksCi0gICAgICAgIEludFNpemUoc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0
UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRp
dXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSk7CisgICAgICAgIEludFNpemUoc3R5bGUuYm9yZGVy
VG9wTGVmdFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyVG9wTGVmdFJh
ZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAorICAgICAgICBJbnRTaXplKHN0eWxlLmJvcmRl
clRvcFJpZ2h0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS5ib3JkZXJUb3BSaWdo
dFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAorICAgICAgICBJbnRTaXplKHN0eWxlLmJv
cmRlckJvdHRvbUxlZnRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLmJvcmRlckJv
dHRvbUxlZnRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwKKyAgICAgICAgSW50U2l6ZShz
dHlsZS5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUu
Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSk7CiB9CiAKIGJv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmpl
Y3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAt
NTk3LDcgKzU5Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmEK
IAogICAgIGZsb2F0IG1lZGlhRHVyYXRpb24gPSBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7CiAg
ICAgZmxvYXQgdG90YWxUcmFja1dpZHRoID0gci53aWR0aCgpOwotICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9ICZvLnN0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gby5zdHlsZSgpOwog
ICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gbWVkaWFFbGVtZW50LT5idWZmZXJl
ZCgpOwogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHRpbWVSYW5nZXMtPmxl
bmd0aCgpOyArK2luZGV4KSB7CiAgICAgICAgIGZsb2F0IHN0YXJ0ID0gdGltZVJhbmdlcy0+c3Rh
cnQoaW5kZXgsIElHTk9SRV9FWENFUFRJT04pOwpAQCAtNjExLDcgKzYxMSw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmEKICAgICAgICAgcmFuZ2VSZWN0LnNldFdp
ZHRoKGxlbmd0aFJhdGlvICogdG90YWxUcmFja1dpZHRoKTsKICAgICAgICAgaWYgKGluZGV4KQog
ICAgICAgICAgICAgcmFuZ2VSZWN0Lm1vdmUoc3RhcnRSYXRpbyAqIHRvdGFsVHJhY2tXaWR0aCwg
MCk7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHJh
bmdlUmVjdCwgYm9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CisgICAg
ICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHJhbmdlUmVjdCwg
Ym9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS5jb2xvclNwYWNlKCkpOwogICAgIH0KIAogICAgIGNv
bnRleHQtPnJlc3RvcmUoKTsKQEAgLTYyMCw4ICs2MjAsOCBAQCBib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludE1lZGlhU2xpZGVyVHJhCiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFT
bGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZvLnN0
eWxlKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5k
ZWRSZWN0KHIsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0eWxlLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAg
IFJlbmRlclN0eWxlJiBzdHlsZSA9IG8uc3R5bGUoKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+
ZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QociwgYm9yZGVyUmFkaWlGcm9tU3R5bGUo
c3R5bGUpKSwgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBz
dHlsZS5jb2xvclNwYWNlKCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjQ2LDEzICs2
NDYsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaQogCiAgICAg
aW50IHJlY3RIZWlnaHQgPSByZWN0LmhlaWdodCgpOwogICAgIGZsb2F0IHRyYWNrSGVpZ2h0ID0g
cmVjdEhlaWdodCAqIHZvbHVtZTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyT2Jq
ZWN0LnN0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyT2JqZWN0LnN0eWxl
KCk7CiAgICAgSW50UmVjdCB2b2x1bWVSZWN0KHJlY3QpOwogICAgIHZvbHVtZVJlY3QubW92ZSgw
LCByZWN0SGVpZ2h0IC0gdHJhY2tIZWlnaHQpOwogICAgIHZvbHVtZVJlY3Quc2V0SGVpZ2h0KGNl
aWwodHJhY2tIZWlnaHQpKTsKIAogICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJv
dW5kZWRSZWN0KHZvbHVtZVJlY3QsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksCi0gICAg
ICAgIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxl
LT5jb2xvclNwYWNlKCkpOworICAgICAgICBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvciksIHN0eWxlLmNvbG9yU3BhY2UoKSk7CiAgICAgY29udGV4dC0+cmVzdG9y
ZSgpOwogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjc1LDIxICs2NzUsMjEgQEAgYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRNZWRpYUN1cnJlbnRUaQogI2VuZGlmCiAKICNpZiBFTkFCTEUoUFJP
R1JFU1NfRUxFTUVOVCkKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFByb2dyZXNzQmFyU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIHN0eWxlLT5zZXRC
b3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQog
CiAvLyBUaGVzZSB2YWx1ZXMgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIFJlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhLmNwcAogc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzID0gNTsK
IHN0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMgPSAxMDsKIHN0YXRpYyBj
b25zdCBkb3VibGUgcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCA9IDAuMTI1OwotZG91YmxlIFJl
bmRlclRoZW1lR3RrOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRl
clByb2dyZXNzKikgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uUmVwZWF0
SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWw7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZUd0
azo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0
Citkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIo
UmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogewogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbklu
dGVydmFsICogcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sgYW5k
IGZvcnRoOwogfQpAQCAtNjk3LDE2ICs2OTcsMTYgQEAgZG91YmxlIFJlbmRlclRoZW1lR3RrOjph
bmltYXRpb25EdXJhdGlvbgogSW50UmVjdCBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jl
c3NSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiBm
dWxsQmFyUmVjdCkKIHsKICAgICBJbnRSZWN0IHByb2dyZXNzUmVjdChmdWxsQmFyUmVjdCk7Ci0g
ICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVz
cygmcmVuZGVyT2JqZWN0KTsKLSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUo
KSkgewotICAgICAgICBpbnQgcHJvZ3Jlc3NXaWR0aCA9IHByb2dyZXNzUmVjdC53aWR0aCgpICog
cmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCk7CisgICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3MmIHJl
bmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhyZW5kZXJPYmplY3QpOworICAgIGlmIChy
ZW5kZXJQcm9ncmVzcy5pc0RldGVybWluYXRlKCkpIHsKKyAgICAgICAgaW50IHByb2dyZXNzV2lk
dGggPSBwcm9ncmVzc1JlY3Qud2lkdGgoKSAqIHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCk7CiAg
ICAgICAgIGlmIChyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAg
ICAgICAgICBwcm9ncmVzc1JlY3Quc2V0WChwcm9ncmVzc1JlY3QueCgpICsgcHJvZ3Jlc3NSZWN0
LndpZHRoKCkgLSBwcm9ncmVzc1dpZHRoKTsKICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFdpZHRo
KHByb2dyZXNzV2lkdGgpOwogICAgICAgICByZXR1cm4gcHJvZ3Jlc3NSZWN0OwogICAgIH0KIAot
ICAgIGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcyA9IHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Q
cm9ncmVzcygpOworICAgIGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcyA9IHJlbmRlclByb2dyZXNz
LmFuaW1hdGlvblByb2dyZXNzKCk7CiAKICAgICAvLyBOZXZlciBsZXQgdGhlIHByb2dyZXNzIHJl
Y3Qgc2hyaW5rIHNtYWxsZXIgdGhhbiAyIHBpeGVscy4KICAgICBpbnQgbmV3V2lkdGggPSBzdGQ6
Om1heCgyLCBwcm9ncmVzc1JlY3Qud2lkdGgoKSAvIHByb2dyZXNzQWN0aXZpdHlCbG9ja3MpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgJKHJl
dmlzaW9uIDE3MDQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMCArNDQsMTAgQEAgcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKIAogICAgIC8vIEEgbWV0aG9k
IGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJh
d2luZyB3aGVuIGhvdmVyZWQuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3Qg
UmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlz
IGFibGUgdG8gZHJhdyB0aGUgZm9jdXMgcmluZy4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNG
b2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0
aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgogICAgIHZpcnR1YWwgYm9vbCBj
b250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCBvdmVycmlkZTsK
QEAgLTExNSw1MCArMTE1LDUwIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6
ZShSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVj
a2JveFNpemUoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9v
bCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRl
clN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShS
ZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
Ym9vbCBwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0Rmll
bGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0
Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAK
LSAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBj
b25zdCBvdmVycmlkZTsKLSAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5
bGUqKSBjb25zdCBvdmVycmlkZTsKLSAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20o
UmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRp
bmdMZWZ0KFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgaW50IHBvcHVwSW50ZXJu
YWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBpbnQgcG9w
dXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBp
bnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIC8vIFRoZSBNYWMgcG9ydCBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHRoZSAibWVu
dSBsaXN0IiBhbmQgdGhlICJtZW51IGxpc3QgYnV0dG9uLiIKICAgICAvLyBUaGUgZm9ybWVyIGlz
IHVzZWQgd2hlbiBhIG1lbnUgbGlzdCBidXR0b24gaGFzIGJlZW4gc3R5bGVkLiBUaGlzIGlzIHVz
ZWQgdG8gZW5zdXJlCiAgICAgLy8gQXF1YSB0aGVtZWQgY29udHJvbHMgd2hlbmV2ZXIgcG9zc2li
bGUuIFdlIGFsd2F5cyB3YW50IHRvIHVzZSBHVEsrIHRoZW1pbmcsIHNvCiAgICAgLy8gd2UgZG9u
J3QgbWFpbnRhaW4gdGhpcyBkaWZmZXJlbnRpYXRpb24uCi0gICAgdmlydHVhbCB2b2lkIGFkanVz
dE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBh
aW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0
b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVy
VHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRo
dW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShWSURF
TykKICAgICB2b2lkIGluaXRNZWRpYUNvbG9ycygpOwpAQCAtMTgxLDIxICsxODEsMjEgQEAgcHJp
dmF0ZToKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVh
bCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0
aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5p
bWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jl
c3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRv
cihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBi
b29sIHBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIGZp
bGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0
aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lk
IHBsYXRmb3JtSW5pdCgpOwotICAgIHN0YXRpYyB2b2lkIHNldFRleHRJbnB1dEJvcmRlcnMoUmVu
ZGVyU3R5bGUqKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRUZXh0SW5wdXRCb3JkZXJzKFJlbmRlclN0
eWxlJik7CiAgICAgc3RhdGljIGRvdWJsZSBnZXRTY3JlZW5EUEkoKTsKIAogI2lmIEVOQUJMRShW
SURFTykKQEAgLTIxNSw5ICsyMTUsOSBAQCBwcml2YXRlOgogI2lmZGVmIEdUS19BUElfVkVSU0lP
Tl8yCiAgICAgdm9pZCBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCosIEd0
a1dpZGdldCopIGNvbnN0OwogICAgIHZvaWQgcmVmcmVzaENvbWJvQm94Q2hpbGRyZW4oKSBjb25z
dDsKLSAgICB2b2lkIGdldENvbWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSosIGludCYgbGVmdCwg
aW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKSBjb25zdDsKKyAgICB2b2lkIGdldENv
bWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSYsIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmln
aHQsIGludCYgYm90dG9tKSBjb25zdDsKICAgICBpbnQgZ2V0Q29tYm9Cb3hTZXBhcmF0b3JXaWR0
aCgpIGNvbnN0OwotICAgIGludCBjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0
OworICAgIGludCBjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCiAgICAg
R3RrV2lkZ2V0KiBndGtCdXR0b24oKSBjb25zdDsKICAgICBHdGtXaWRnZXQqIGd0a1RyZWVWaWV3
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNw
cAkocmV2aXNpb24gMTcwNDE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1
dHRvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIFJlbmRlckJ1
dHRvbjo6bGF5b3V0KCkKICAgICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0KCk7CiAKICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBiZSBhZGp1c3Rpbmcgc3R5bGVzIGR1cmluZyBsYXlvdXQu
IFNlZSA8cmRhcjovL3Byb2JsZW0vNzY3NTQ5Mz4uCi0gICAgUmVuZGVyVGhlbWVJT1M6OmFkanVz
dFJvdW5kQm9yZGVyUmFkaXVzKHN0eWxlKCksIHRoaXMpOworICAgIFJlbmRlclRoZW1lSU9TOjph
ZGp1c3RSb3VuZEJvcmRlclJhZGl1cyhzdHlsZSgpLCAqdGhpcyk7CiB9CiAjZW5kaWYKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDE3
MDQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDkxLDEwICsxNDkxLDEwIEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWlu
dE91dGxpbmUoUGFpbnRJbmYKIAogICAgIFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUo
KTsKICAgICAvLyBPbmx5IHBhaW50IHRoZSBmb2N1cyByaW5nIGJ5IGhhbmQgaWYgdGhlIHRoZW1l
IGlzbid0IGFibGUgdG8gZHJhdyBpdC4KLSAgICBpZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJ
c0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZygmc3R5bGVUb1VzZSkpCisgICAg
aWYgKHN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNG
b2N1c1Jpbmcoc3R5bGVUb1VzZSkpCiAgICAgICAgIHBhaW50Rm9jdXNSaW5nKHBhaW50SW5mbywg
cGFpbnRPZmZzZXQsICZzdHlsZVRvVXNlKTsKIAotICAgIGlmIChoYXNPdXRsaW5lQW5ub3RhdGlv
bigpICYmICFzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBv
cnRzRm9jdXNSaW5nKCZzdHlsZVRvVXNlKSkKKyAgICBpZiAoaGFzT3V0bGluZUFubm90YXRpb24o
KSAmJiAhc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0
c0ZvY3VzUmluZyhzdHlsZVRvVXNlKSkKICAgICAgICAgYWRkUERGVVJMUmVjdChwYWludEluZm8s
IHBhaW50T2Zmc2V0KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0ID0g
cGFpbnRJbmZvLmNvbnRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVkaWFDb250cm9scy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCShyZXZpc2lvbiAxNzA0MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMSwxMCArMTAxLDEwIEBAIHN0YXRpYyBGbG9hdFJlY3QgZ2V0VW56b29tZWRSZWN0QW5kQWRq
dXMKIHN0YXRpYyBjb25zdCBpbnQgbWVkaWFTbGlkZXJUaHVtYldpZHRoID0gMTM7CiBzdGF0aWMg
Y29uc3QgaW50IG1lZGlhU2xpZGVyVGh1bWJIZWlnaHQgPSAxNDsKIAotdm9pZCBSZW5kZXJNZWRp
YUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUp
Cit2b2lkIFJlbmRlck1lZGlhQ29udHJvbHM6OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJl
bmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICBpbnQgcGFydDsKLSAgICBzd2l0Y2ggKHN0eWxlLT5h
cHBlYXJhbmNlKCkpIHsKKyAgICBzd2l0Y2ggKHN0eWxlLmFwcGVhcmFuY2UoKSkgewogICAgIGNh
c2UgTWVkaWFTbGlkZXJUaHVtYlBhcnQ6CiAgICAgICAgIHBhcnQgPSBNZWRpYVNsaWRlclRodW1i
OwogICAgICAgICBicmVhazsKQEAgLTEyMSw5ICsxMjEsOSBAQCB2b2lkIFJlbmRlck1lZGlhQ29u
dHJvbHM6OmFkanVzdE1lZGlhU2xpCiAgICAgQ0dTaXplIHNpemU7CiAgICAgd2tNZWFzdXJlTWVk
aWFVSVBhcnQocGFydCwgMCwgJnNpemUpOwogCi0gICAgZmxvYXQgem9vbUxldmVsID0gc3R5bGUt
PmVmZmVjdGl2ZVpvb20oKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0
PGludD4oc2l6ZS53aWR0aCAqIHpvb21MZXZlbCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhl
aWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCAqIHpvb21MZXZlbCksIEZp
eGVkKSk7CisgICAgZmxvYXQgem9vbUxldmVsID0gc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAg
IHN0eWxlLnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGggKiB6b29t
TGV2ZWwpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8
aW50PihzaXplLmhlaWdodCAqIHpvb21MZXZlbCksIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVy
TWVkaWFDb250cm9sczo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSBwYXJ0LCBjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lZGlhQ29udHJvbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWVkaWFDb250cm9scy5oCShyZXZpc2lvbiAxNzA0MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBzdGF0aWMgYm9v
bCBwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlLCBjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgc3Rh
dGljIHZvaWQgYWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqKTsKKyAgICBz
dGF0aWMgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYpOwogI2Vu
ZGlmCiAgICAgc3RhdGljIEludFBvaW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9u
KFJlbmRlckJveCosIGNvbnN0IEludFNpemUmKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDE3MDQxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNSwxMCArMTI1LDEwIEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmFkanVzdElubmVyU3R5bGUo
KQogICAgICAgICBpbm5lclN0eWxlLnNldEFsaWduU2VsZihBbGlnbkZsZXhTdGFydCk7CiAgICAg
fQogCi0gICAgaW5uZXJTdHlsZS5zZXRQYWRkaW5nTGVmdChMZW5ndGgodGhlbWUoKS5wb3B1cElu
dGVybmFsUGFkZGluZ0xlZnQoJnN0eWxlKCkpLCBGaXhlZCkpOwotICAgIGlubmVyU3R5bGUuc2V0
UGFkZGluZ1JpZ2h0KExlbmd0aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoJnN0
eWxlKCkpLCBGaXhlZCkpOwotICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ1RvcChMZW5ndGgodGhl
bWUoKS5wb3B1cEludGVybmFsUGFkZGluZ1RvcCgmc3R5bGUoKSksIEZpeGVkKSk7Ci0gICAgaW5u
ZXJTdHlsZS5zZXRQYWRkaW5nQm90dG9tKExlbmd0aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRk
aW5nQm90dG9tKCZzdHlsZSgpKSwgRml4ZWQpKTsKKyAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdM
ZWZ0KExlbmd0aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChzdHlsZSgpKSwgRml4
ZWQpKTsKKyAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdSaWdodChMZW5ndGgodGhlbWUoKS5wb3B1
cEludGVybmFsUGFkZGluZ1JpZ2h0KHN0eWxlKCkpLCBGaXhlZCkpOworICAgIGlubmVyU3R5bGUu
c2V0UGFkZGluZ1RvcChMZW5ndGgodGhlbWUoKS5wb3B1cEludGVybmFsUGFkZGluZ1RvcChzdHls
ZSgpKSwgRml4ZWQpKTsKKyAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHRo
ZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oc3R5bGUoKSksIEZpeGVkKSk7CiAKICAg
ICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPmNocm9tZSgpLnNlbGVjdEl0ZW1Xcml0aW5nRGlyZWN0
aW9uSXNOYXR1cmFsKCkpIHsKICAgICAgICAgLy8gSXRlbXMgaW4gdGhlIHBvcHVwIHdpbGwgbm90
IHJlc3BlY3QgdGhlIENTUyB0ZXh0LWFsaWduIGFuZCBkaXJlY3Rpb24gcHJvcGVydGllcywKQEAg
LTMyNiw3ICszMjYsNyBAQCBMYXlvdXRSZWN0IFJlbmRlck1lbnVMaXN0Ojpjb250cm9sQ2xpcFJl
CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExh
eW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBj
b25zdAogewotICAgIG1heExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KG1fb3B0aW9uc1dpZHRoLCB0
aGVtZSgpLm1pbmltdW1NZW51TGlzdFNpemUoJnN0eWxlKCkpKSArIG1faW5uZXJCbG9jay0+cGFk
ZGluZ0xlZnQoKSArIG1faW5uZXJCbG9jay0+cGFkZGluZ1JpZ2h0KCk7CisgICAgbWF4TG9naWNh
bFdpZHRoID0gc3RkOjptYXgobV9vcHRpb25zV2lkdGgsIHRoZW1lKCkubWluaW11bU1lbnVMaXN0
U2l6ZShzdHlsZSgpKSkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdMZWZ0KCkgKyBtX2lubmVyQmxv
Y2stPnBhZGRpbmdSaWdodCgpOwogICAgIGlmICghc3R5bGUoKS53aWR0aCgpLmlzUGVyY2VudCgp
KQogICAgICAgICBtaW5Mb2dpY2FsV2lkdGggPSBtYXhMb2dpY2FsV2lkdGg7CiB9CkBAIC01Njks
NyArNTY5LDcgQEAgUG9wdXBNZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Om1lbnVTdHlsZQogICAg
IHJldHVybiBQb3B1cE1lbnVTdHlsZShzdHlsZVRvVXNlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGVUb1VzZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IpLAogICAgICAgICBzdHlsZVRvVXNlLmZvbnQoKSwgc3R5bGVU
b1VzZS52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwgc3R5bGVUb1VzZS5kaXNwbGF5KCkgPT0gTk9O
RSwgc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCksIHN0eWxlVG9Vc2UudGV4dEluZGVudCgpLAogICAg
ICAgICBzdHlsZSgpLmRpcmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxlKCkudW5pY29kZUJpZGko
KSksIFBvcHVwTWVudVN0eWxlOjpEZWZhdWx0QmFja2dyb3VuZENvbG9yLAotICAgICAgICBQb3B1
cE1lbnVTdHlsZTo6U2VsZWN0UG9wdXAsIHRoZW1lKCkucG9wdXBNZW51U2l6ZSgmc3R5bGVUb1Vz
ZSwgYWJzQm91bmRzKSk7CisgICAgICAgIFBvcHVwTWVudVN0eWxlOjpTZWxlY3RQb3B1cCwgdGhl
bWUoKS5wb3B1cE1lbnVTaXplKHN0eWxlVG9Vc2UsIGFic0JvdW5kcykpOwogfQogCiBIb3N0V2lu
ZG93KiBSZW5kZXJNZW51TGlzdDo6aG9zdFdpbmRvdygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAJKHJldmlzaW9uIDE3MDQxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0
LDcgKzU0LDcgQEAgdm9pZCBSZW5kZXJNZXRlcjo6dXBkYXRlTG9naWNhbFdpZHRoKCkKIHsKICAg
ICBSZW5kZXJCb3g6OnVwZGF0ZUxvZ2ljYWxXaWR0aCgpOwogCi0gICAgSW50U2l6ZSBmcmFtZVNp
emUgPSB0aGVtZSgpLm1ldGVyU2l6ZUZvckJvdW5kcyh0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0
KGZyYW1lUmVjdCgpKSk7CisgICAgSW50U2l6ZSBmcmFtZVNpemUgPSB0aGVtZSgpLm1ldGVyU2l6
ZUZvckJvdW5kcygqdGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFtZVJlY3QoKSkpOwogICAg
IHNldExvZ2ljYWxXaWR0aChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZnJhbWVTaXplLndp
ZHRoKCkgOiBmcmFtZVNpemUuaGVpZ2h0KCkpOwogfQogCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQg
UmVuZGVyTWV0ZXI6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KEwKICAgICAgICAgZnJhbWUuc2V0SGVp
Z2h0KGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50KTsKICAgICBlbHNlCiAgICAgICAgIGZyYW1lLnNl
dFdpZHRoKGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50KTsKLSAgICBJbnRTaXplIGZyYW1lU2l6ZSA9
IHRoZW1lKCkubWV0ZXJTaXplRm9yQm91bmRzKHRoaXMsIHBpeGVsU25hcHBlZEludFJlY3QoZnJh
bWUpKTsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IHRoZW1lKCkubWV0ZXJTaXplRm9yQm91bmRz
KCp0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYW1lKSk7CiAgICAgY29tcHV0ZWRWYWx1ZXMu
bV9leHRlbnQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZnJhbWVTaXplLmhlaWdodCgp
IDogZnJhbWVTaXplLndpZHRoKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxNzA0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1MywxMCArMTA1
MywxMCBAQCB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRPdXRsaW5lKFBhaW50SW5mCiAgICAgaW50
IG91dGxpbmVPZmZzZXQgPSBzdHlsZVRvVXNlLm91dGxpbmVPZmZzZXQoKTsKIAogICAgIC8vIE9u
bHkgcGFpbnQgdGhlIGZvY3VzIHJpbmcgYnkgaGFuZCBpZiB0aGUgdGhlbWUgaXNuJ3QgYWJsZSB0
byBkcmF3IGl0LgotICAgIGlmIChzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0
aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKCZzdHlsZVRvVXNlKSkKKyAgICBpZiAoc3R5bGVUb1Vz
ZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZyhzdHls
ZVRvVXNlKSkKICAgICAgICAgcGFpbnRGb2N1c1JpbmcocGFpbnRJbmZvLCBwYWludFJlY3QubG9j
YXRpb24oKSwgJnN0eWxlVG9Vc2UpOwogCi0gICAgaWYgKGhhc091dGxpbmVBbm5vdGF0aW9uKCkg
JiYgIXN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNG
b2N1c1JpbmcoJnN0eWxlVG9Vc2UpKQorICAgIGlmIChoYXNPdXRsaW5lQW5ub3RhdGlvbigpICYm
ICFzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9j
dXNSaW5nKHN0eWxlVG9Vc2UpKQogICAgICAgICBhZGRQREZVUkxSZWN0KHBhaW50SW5mbywgcGFp
bnRSZWN0LmxvY2F0aW9uKCkpOwogCiAgICAgaWYgKHN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNB
dXRvKCkgfHwgc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGUoKSA9PSBCTk9ORSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAkocmV2aXNpb24gMTcwNDE3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTEsOCArOTEsOCBAQCB2b2lkIFJlbmRlclByb2dyZXNzOjphbmltYXRpb25U
aW1lckZpcmVkCiAKIHZvaWQgUmVuZGVyUHJvZ3Jlc3M6OnVwZGF0ZUFuaW1hdGlvblN0YXRlKCkK
IHsKLSAgICBtX2FuaW1hdGlvbkR1cmF0aW9uID0gdGhlbWUoKS5hbmltYXRpb25EdXJhdGlvbkZv
clByb2dyZXNzQmFyKHRoaXMpOwotICAgIG1fYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWwgPSB0aGVt
ZSgpLmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIodGhpcyk7CisgICAgbV9h
bmltYXRpb25EdXJhdGlvbiA9IHRoZW1lKCkuYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jh
cigqdGhpcyk7CisgICAgbV9hbmltYXRpb25SZXBlYXRJbnRlcnZhbCA9IHRoZW1lKCkuYW5pbWF0
aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcigqdGhpcyk7CiAKICAgICBib29sIGFuaW1h
dGluZyA9IHN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpICYmIG1fYW5pbWF0aW9uRHVyYXRpb24gPiAw
OwogICAgIGlmIChhbmltYXRpbmcgPT0gbV9hbmltYXRpbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cAkocmV2aXNpb24gMTcwNDE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsyMjUsNyBA
QCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAjaWYgUExBVEZPUk0o
SU9TKQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGJlIGFkanVzdGluZyBzdHlsZXMgZHVy
aW5nIGxheW91dC4gPHJkYXI6Ly9wcm9ibGVtLzc2NzU0OTM+CiAgICAgaWYgKGlucHV0RWxlbWVu
dCgpLmlzU2VhcmNoRmllbGQoKSkKLSAgICAgICAgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFJvdW5k
Qm9yZGVyUmFkaXVzKHN0eWxlKCksIHRoaXMpOworICAgICAgICBSZW5kZXJUaGVtZUlPUzo6YWRq
dXN0Um91bmRCb3JkZXJSYWRpdXMoc3R5bGUoKSwgKnRoaXMpOwogI2VuZGlmCiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMTcwNDE3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODEsNyArODEsNyBAQCBSZW5kZXJUaGVtZTo6UmVuZGVyVGhlbWUoKQogewogfQog
Ci12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQqIGUsIGJvb2wgVUFIYXNBcHBlYXJhbmNl
LCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwg
Y29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0
eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxl
bWVudCYgZSwgYm9vbCBVQUhhc0FwcGVhcmFuY2UsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwg
Y29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9y
KQogewogICAgIC8vIEZvcmNlIGlubGluZSBhbmQgdGFibGUgZGlzcGxheSBzdHlsZXMgdG8gYmUg
aW5saW5lLWJsb2NrIChleGNlcHQgZm9yIHRhYmxlLSB3aGljaCBpcyBibG9jaykKICAgICBDb250
cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFyYW5jZSgpOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sCiAgICAgZWxzZSBpZiAoc3R5bGUu
ZGlzcGxheSgpID09IENPTVBBQ1QgfHwgc3R5bGUuZGlzcGxheSgpID09IExJU1RfSVRFTSB8fCBz
dHlsZS5kaXNwbGF5KCkgPT0gVEFCTEUpCiAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoQkxPQ0sp
OwogCi0gICAgaWYgKFVBSGFzQXBwZWFyYW5jZSAmJiBpc0NvbnRyb2xTdHlsZWQoJnN0eWxlLCBi
b3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcikpIHsKKyAgICBpZiAoVUFIYXNBcHBl
YXJhbmNlICYmIGlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNr
Z3JvdW5kQ29sb3IpKSB7CiAgICAgICAgIGlmIChwYXJ0ID09IE1lbnVsaXN0UGFydCkgewogICAg
ICAgICAgICAgc3R5bGUuc2V0QXBwZWFyYW5jZShNZW51bGlzdEJ1dHRvblBhcnQpOwogICAgICAg
ICAgICAgcGFydCA9IE1lbnVsaXN0QnV0dG9uUGFydDsKQEAgLTE5MiwyNSArMTkyLDI1IEBAIHZv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2wKICAgICBzd2l0Y2ggKHN0eWxl
LmFwcGVhcmFuY2UoKSkgewogI2lmICFVU0UoTkVXX1RIRU1FKQogICAgIGNhc2UgQ2hlY2tib3hQ
YXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0Q2hlY2tib3hTdHlsZSgmc3R5bGVSZXNvbHZlciwg
JnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdENoZWNrYm94U3R5bGUoc3R5bGVSZXNv
bHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICByZXR1cm4gYWRq
dXN0UmFkaW9TdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJu
IGFkanVzdFJhZGlvU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgUHVz
aEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgogICAgIGNhc2UgRGVmYXVs
dEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0
QnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBh
ZGp1c3RCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBJbm5l
clNwaW5CdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5
bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RJbm5l
clNwaW5CdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAjZW5kaWYKICAgICBj
YXNlIFRleHRGaWVsZFBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RUZXh0RmllbGRTdHlsZSgm
c3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFRleHRGaWVs
ZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIFRleHRBcmVhUGFydDoK
LSAgICAgICAgcmV0dXJuIGFkanVzdFRleHRBcmVhU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHls
ZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RUZXh0QXJlYVN0eWxlKHN0eWxlUmVzb2x2ZXIs
IHN0eWxlLCBlKTsKICAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVz
dE1lbnVMaXN0U3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVy
biBhZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNl
IE1lbnVsaXN0QnV0dG9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsICplKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdE1l
bnVMaXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgTWVk
aWFQbGF5QnV0dG9uUGFydDoKICAgICBjYXNlIE1lZGlhQ3VycmVudFRpbWVQYXJ0OgogICAgIGNh
c2UgTWVkaWFUaW1lUmVtYWluaW5nUGFydDoKQEAgLTIxOCwyOSArMjE4LDI5IEBAIHZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2wKICAgICBjYXNlIE1lZGlhRXhpdEZ1bGxz
Y3JlZW5CdXR0b25QYXJ0OgogICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uUGFydDoKICAgICBjYXNl
IE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1l
ZGlhQ29udHJvbFN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1
cm4gYWRqdXN0TWVkaWFDb250cm9sU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAg
IGNhc2UgTWVkaWFTbGlkZXJQYXJ0OgogICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJQYXJ0Ogog
ICAgIGNhc2UgTWVkaWFGdWxsU2NyZWVuVm9sdW1lU2xpZGVyUGFydDoKICAgICBjYXNlIFNsaWRl
ckhvcml6b250YWxQYXJ0OgogICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0OgotICAgICAgICBy
ZXR1cm4gYWRqdXN0U2xpZGVyVHJhY2tTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsK
KyAgICAgICAgcmV0dXJuIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5
bGUsIGUpOwogICAgIGNhc2UgU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydDoKICAgICBjYXNlIFNs
aWRlclRodW1iVmVydGljYWxQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2xpZGVyVGh1bWJT
dHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNs
aWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNo
RmllbGRQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRTdHlsZSgmc3R5bGVS
ZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkU3R5
bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmllbGRDYW5jZWxC
dXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25T
dHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAg
IGNhc2UgU2VhcmNoRmllbGREZWNvcmF0aW9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNl
YXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsK
KyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShzdHls
ZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25QYXJ0U3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBh
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKHN0eWxlUmVzb2x2ZXIs
IHN0eWxlLCBlKTsKICAgICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblBhcnQ6Ci0gICAg
ICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSgmc3R5bGVSZXNv
bHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICNpZiBFTkFCTEUoUFJPR1JF
U1NfRUxFTUVOVCkKICAgICBjYXNlIFByb2dyZXNzQmFyUGFydDoKLSAgICAgICAgcmV0dXJuIGFk
anVzdFByb2dyZXNzQmFyU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAg
IHJldHVybiBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsK
ICNlbmRpZgogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5UKQogICAgIGNhc2UgTWV0ZXJQYXJ0OgpA
QCAtMjQ4LDExICsyNDgsMTEgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVS
ZXNvbAogICAgIGNhc2UgQ29udGludW91c0NhcGFjaXR5TGV2ZWxJbmRpY2F0b3JQYXJ0OgogICAg
IGNhc2UgRGlzY3JldGVDYXBhY2l0eUxldmVsSW5kaWNhdG9yUGFydDoKICAgICBjYXNlIFJhdGlu
Z0xldmVsSW5kaWNhdG9yUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1ldGVyU3R5bGUoJnN0
eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RNZXRlclN0eWxl
KHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9TUEVF
Q0gpCiAgICAgY2FzZSBJbnB1dFNwZWVjaEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1
c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7
CisgICAgICAgIHJldHVybiBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGUpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMp
CiAgICAgY2FzZSBJbWFnZUNvbnRyb2xzQnV0dG9uUGFydDoKQEAgLTY5Myw5ICs2OTMsOSBAQCBi
b29sIFJlbmRlclRoZW1lOjppc0NvbnRyb2xDb250YWluZXIoQ29uCiAgICAgcmV0dXJuIGFwcGVh
cmFuY2UgIT0gQ2hlY2tib3hQYXJ0ICYmIGFwcGVhcmFuY2UgIT0gUmFkaW9QYXJ0OwogfQogCi1i
b29sIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
LCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwg
Y29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6Omlz
Q29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEm
IGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dy
b3VuZENvbG9yKSBjb25zdAogewotICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgewor
ICAgIHN3aXRjaCAoc3R5bGUuYXBwZWFyYW5jZSgpKSB7CiAgICAgY2FzZSBQdXNoQnV0dG9uUGFy
dDoKICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CiAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFy
dDoKQEAgLTcxMiw5ICs3MTIsOSBAQCBib29sIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQo
Y29uc3QgCiAgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgogICAgIGNhc2UgVGV4dEFyZWFQYXJ0Ogog
ICAgICAgICAvLyBUZXN0IHRoZSBzdHlsZSB0byBzZWUgaWYgdGhlIFVBIGJvcmRlciBhbmQgYmFj
a2dyb3VuZCBtYXRjaC4KLSAgICAgICAgcmV0dXJuIChzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVy
Ci0gICAgICAgICAgICB8fCAqc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNrZ3JvdW5k
Ci0gICAgICAgICAgICB8fCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yKSAhPSBiYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICByZXR1cm4gKHN0
eWxlLmJvcmRlcigpICE9IGJvcmRlcgorICAgICAgICAgICAgfHwgKnN0eWxlLmJhY2tncm91bmRM
YXllcnMoKSAhPSBiYWNrZ3JvdW5kCisgICAgICAgICAgICB8fCBzdHlsZS52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpICE9IGJhY2tncm91bmRDb2xvcik7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTczMSwxNSAr
NzMxLDE1IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnMKICNlbmRp
ZgogfQogCi1ib29sIFJlbmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChzdHlsZS0+aGFz
QXBwZWFyYW5jZSgpICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gVGV4dEZpZWxkUGFydCAmJiBz
dHlsZS0+YXBwZWFyYW5jZSgpICE9IFRleHRBcmVhUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgp
ICE9IE1lbnVsaXN0QnV0dG9uUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IExpc3Rib3hQ
YXJ0KTsKKyAgICByZXR1cm4gKHN0eWxlLmhhc0FwcGVhcmFuY2UoKSAmJiBzdHlsZS5hcHBlYXJh
bmNlKCkgIT0gVGV4dEZpZWxkUGFydCAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gVGV4dEFyZWFQ
YXJ0ICYmIHN0eWxlLmFwcGVhcmFuY2UoKSAhPSBNZW51bGlzdEJ1dHRvblBhcnQgJiYgc3R5bGUu
YXBwZWFyYW5jZSgpICE9IExpc3Rib3hQYXJ0KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZTo6c3Rh
dGVDaGFuZ2VkKGNvbnN0IFJlbmRlck9iamVjdCYgbywgQ29udHJvbFN0YXRlczo6U3RhdGVzIHN0
YXRlKSBjb25zdAogewogICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGUg
Y29udHJvbHMgZG9uJ3QgcmVzcG9uZCB0byBjaGFuZ2VzIGluIDpob3ZlciBzdGF0ZQotICAgIGlm
IChzdGF0ZSA9PSBDb250cm9sU3RhdGVzOjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVyKCZv
LnN0eWxlKCkpKQorICAgIGlmIChzdGF0ZSA9PSBDb250cm9sU3RhdGVzOjpIb3ZlclN0YXRlICYm
ICFzdXBwb3J0c0hvdmVyKG8uc3R5bGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIEFzc3VtZSBwcmVzc2VkIHN0YXRlIGlzIG9ubHkgcmVzcG9uZGVkIHRvIGlmIHRoZSBjb250
cm9sIGlzIGVuYWJsZWQuCkBAIC05MTAsNyArOTEwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNE
ZWZhdWx0KGNvbnN0IFJlbmRlcgogCiAjaWYgIVVTRShORVdfVEhFTUUpCiAKLXZvaWQgUmVuZGVy
VGhlbWU6OmFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAog
ewogICAgIC8vIEEgc3VtbWFyeSBvZiB0aGUgcnVsZXMgZm9yIGNoZWNrYm94IGRlc2lnbmVkIHRv
IG1hdGNoIFdpbklFOgogICAgIC8vIHdpZHRoL2hlaWdodCAtIGhvbm9yZWQgKFdpbklFIGFjdHVh
bGx5IHNjYWxlcyBpdHMgY29udHJvbCBmb3Igc21hbGwgd2lkdGhzLCBidXQgbGV0cyBpdCBvdmVy
ZmxvdyBmb3Igc21hbGwgaGVpZ2h0cy4pCkBAIC05MTgsMTYgKzkxOCwxNiBAQCB2b2lkIFJlbmRl
clRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKFN0CiAgICAgc2V0Q2hlY2tib3hTaXplKHN0eWxl
KTsKIAogICAgIC8vIHBhZGRpbmcgLSBub3QgaG9ub3JlZCBieSBXaW5JRSwgbmVlZHMgdG8gYmUg
cmVtb3ZlZC4KLSAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAgc3R5bGUucmVzZXRQYWRk
aW5nKCk7CiAKICAgICAvLyBib3JkZXIgLSBob25vcmVkIGJ5IFdpbklFLCBidXQgbG9va3MgdGVy
cmlibGUgKGp1c3QgcGFpbnRzIGluIHRoZSBjb250cm9sIGJveCBhbmQgdHVybnMgb2ZmIHRoZSBX
aW5kb3dzIFhQIHRoZW1lKQogICAgIC8vIGZvciBub3csIHdlIHdpbGwgbm90IGhvbm9yIGl0Lgot
ICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKLSAg
ICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhu
dWxscHRyKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWU6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHls
ZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgLy8gQSBzdW1tYXJ5IG9mIHRoZSBydWxlcyBmb3Ig
Y2hlY2tib3ggZGVzaWduZWQgdG8gbWF0Y2ggV2luSUU6CiAgICAgLy8gd2lkdGgvaGVpZ2h0IC0g
aG9ub3JlZCAoV2luSUUgYWN0dWFsbHkgc2NhbGVzIGl0cyBjb250cm9sIGZvciBzbWFsbCB3aWR0
aHMsIGJ1dCBsZXRzIGl0IG92ZXJmbG93IGZvciBzbWFsbCBoZWlnaHRzLikKQEAgLTkzNSwxNiAr
OTM1LDE2IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGUKICAgICBz
ZXRSYWRpb1NpemUoc3R5bGUpOwogCiAgICAgLy8gcGFkZGluZyAtIG5vdCBob25vcmVkIGJ5IFdp
bklFLCBuZWVkcyB0byBiZSByZW1vdmVkLgotICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAg
ICBzdHlsZS5yZXNldFBhZGRpbmcoKTsKIAogICAgIC8vIGJvcmRlciAtIGhvbm9yZWQgYnkgV2lu
SUUsIGJ1dCBsb29rcyB0ZXJyaWJsZSAoanVzdCBwYWludHMgaW4gdGhlIGNvbnRyb2wgYm94IGFu
ZCB0dXJucyBvZmYgdGhlIFdpbmRvd3MgWFAgdGhlbWUpCiAgICAgLy8gZm9yIG5vdywgd2Ugd2ls
bCBub3QgaG9ub3IgaXQuCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVz
ZXRCb3JkZXIoKTsKIAotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5
bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIE1vc3QgcGxh
dGZvcm1zIHdpbGwgY29tcGxldGVseSBob25vciBhbGwgQ1NTLCBhbmQgc28gd2UgaGF2ZSBubyBu
ZWVkIHRvCiAgICAgLy8gYWRqdXN0IHRoZSBzdHlsZSBhdCBhbGwgYnkgZGVmYXVsdC4gV2Ugd2ls
bCBzdGlsbCBhbGxvdyB0aGUgdGhlbWUgYSBjcmFjawpAQCAtOTUyLDI1ICs5NTIsMjUgQEAgdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bAogICAgIHNldEJ1dHRvblNpemUo
c3R5bGUpOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogI2VuZGlmCiAKLXZvaWQgUmVuZGVyVGhl
bWU6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RUZXh0QXJlYVN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQog
Ci12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVu
dUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QK
IHsKIH0KIAogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi12b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29u
c3QKIHsKICAgICBSZW5kZXJJbnB1dFNwZWVjaDo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRv
blN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKIH0KQEAgLTk4MiwxMiArOTgy
LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWU6OnBhaW50SW5wdXRGaWVsZFNwZWVjaEIKICNlbmRpZgog
CiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZXRl
clN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94U2hh
ZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotSW50
U2l6ZSBSZW5kZXJUaGVtZTo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwg
Y29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZTo6bWV0ZXJT
aXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBj
b25zdAogewogICAgIHJldHVybiBib3VuZHMuc2l6ZSgpOwogfQpAQCAtMTA5NCwxNyArMTA5NCwx
NyBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5UKQotZG91YmxlIFJlbmRlclRoZW1lOjphbmltYXRp
b25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK2Rv
dWJsZSBSZW5kZXJUaGVtZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihS
ZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWRvdWJsZSBSZW5k
ZXJUaGVtZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyop
IGNvbnN0Citkb3VibGUgUmVuZGVyVGhlbWU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NC
YXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJl
bmRlclRoZW1lOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NC
YXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsK
IH0KIApAQCAtMTExNCw0OSArMTExNCw0OSBAQCBJbnRSZWN0IFJlbmRlclRoZW1lOjpwcm9ncmVz
c0JhclJlY3RGb3JCCiB9CiAjZW5kaWYKIAotYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxkSGF2ZVNw
aW5CdXR0b24oSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KSBjb25zdAorYm9vbCBSZW5k
ZXJUaGVtZTo6c2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVt
ZW50KSBjb25zdAogewotICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzU3RlcHBhYmxlKCkgJiYg
IWlucHV0RWxlbWVudC0+aXNSYW5nZUNvbnRyb2woKTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50
LmlzU3RlcHBhYmxlKCkgJiYgIWlucHV0RWxlbWVudC5pc1JhbmdlQ29udHJvbCgpOwogfQogCiB2
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xp
ZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29u
c3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGFkanVz
dFNsaWRlclRodW1iU2l6ZShzdHlsZSwgZWxlbWVudCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6
OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29u
c3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9u
UGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmgJKHJldmlzaW9uIDE3MDQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1
YmxpYzoKICAgICAvLyBtZXRyaWNzIGFuZCBkZWZhdWx0cyBnaXZlbiB0aGUgY29udGVudHMgb2Yg
dGhlIHN0eWxlLiAgVGhpcyBpbmNsdWRlcyBzb3BoaXN0aWNhdGVkIG9wZXJhdGlvbnMgbGlrZQog
ICAgIC8vIHNlbGVjdGlvbiBvZiBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LCB0aGUg
ZGlzYWJsaW5nIG9mIGFwcGVhcmFuY2Ugd2hlbiBjZXJ0YWluIG90aGVyIHByb3BlcnRpZXMgbGlr
ZQogICAgIC8vICJib3JkZXIiIGFyZSBzZXQsIG9yIGlmIHRoZSBhcHBlYXJhbmNlIGlzIG5vdCBz
dXBwb3J0ZWQgYnkgdGhlIHRoZW1lLgotICAgIHZvaWQgYWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCosICBib29sIFVBSGFzQXBwZWFyYW5jZSwgY29uc3Qg
Qm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29s
b3IpOworICAgIHZvaWQgYWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCYsICBib29sIFVBSGFzQXBwZWFyYW5jZSwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0
IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgLy8gVGhp
cyBtZXRob2QgaXMgY2FsbGVkIHRvIHBhaW50IHRoZSB3aWRnZXQgYXMgYSBiYWNrZ3JvdW5kIG9m
IHRoZSBSZW5kZXJPYmplY3QuICBBIHdpZGdldCdzIGZvcmVncm91bmQsIGUuZy4sIHRoZQogICAg
IC8vIHRleHQgb2YgYSBidXR0b24sIGlzIGFsd2F5cyByZW5kZXJlZCBieSB0aGUgZW5naW5lIGl0
c2VsZi4gIFRoZSBib29sZWFuIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMKQEAgLTExNyw3ICsxMTcs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0
IFJlbmRlck9iamVjdCYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBXaGV0aGVy
IG9yIG5vdCB0aGUgY29udHJvbCBoYXMgYmVlbiBzdHlsZWQgZW5vdWdoIGJ5IHRoZSBhdXRob3Ig
dG8gZGlzYWJsZSB0aGUgbmF0aXZlIGFwcGVhcmFuY2UuCi0gICAgdmlydHVhbCBib29sIGlzQ29u
dHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBG
aWxsTGF5ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9yZGVy
RGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNv
bnN0OwogCiAgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGlu
dGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRy
b2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMzUsMTAgKzEzNSwxMCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIHsgfQogCiAgICAgLy8gQSBt
ZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSBpcyBhYmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcu
Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0
eWxlJikgY29uc3Q7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29u
dHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJT
dHlsZSYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcg
aWYgdGhlIHBsYXRmb3JtIGlzIGFibGUgdG8gc2hvdyBkYXRhbGlzdCBzdWdnZXN0aW9ucyBmb3Ig
YSBnaXZlbiBpbnB1dCB0eXBlLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RhdGFMaXN0VUko
Y29uc3QgQXRvbWljU3RyaW5nJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3NywxNiAr
MTc3LDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlE
LCBGb250RGVzY3JpcHRpb24mKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1D
b2xvcihDU1NWYWx1ZUlEKSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlz
dFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQg
bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5k
ZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJu
YWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0
dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3QgeyBy
ZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRl
clN0eWxlKikgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJu
YWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSYpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJl
bmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVwSW50
ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJikgY29uc3Qg
eyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgYm9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4dElu
ZGVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQb3B1cE1lbnVTdHls
ZTo6UG9wdXBNZW51U2l6ZSBwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0eWxlKiwgSW50UmVj
dCYpIGNvbnN0IHsgcmV0dXJuIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXplTm9ybWFsOyB9
CisgICAgdmlydHVhbCBQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBwb3B1cE1lbnVTaXpl
KGNvbnN0IFJlbmRlclN0eWxlJiwgSW50UmVjdCYpIGNvbnN0IHsgcmV0dXJuIFBvcHVwTWVudVN0
eWxlOjpQb3B1cE1lbnVTaXplTm9ybWFsOyB9CiAKICAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRy
b2xTaXplIHNjcm9sbGJhckNvbnRyb2xTaXplRm9yUGFydChDb250cm9sUGFydCkgeyByZXR1cm4g
UmVndWxhclNjcm9sbGJhcjsgfQogCkBAIC0xOTUsOSArMTk1LDkgQEAgcHVibGljOgogCiAjaWYg
RU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVy
dmFsIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBk
b3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVz
cyopIGNvbnN0OworICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9y
UHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdDsKICAgICAvLyBSZXR1cm5zIHRoZSBk
dXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1
YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNz
QmFyKFJlbmRlclByb2dyZXNzJikgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0IHByb2dyZXNz
QmFyUmVjdEZvckJvdW5kcyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0JikgY29u
c3Q7CiAjZW5kaWYKIApAQCAtMjE5LDcgKzIxOSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYg
RU5BQkxFKE1FVEVSX0VMRU1FTlQpCi0gICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJv
dW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENvbnRyb2xQ
YXJ0KSBjb25zdDsKICNlbmRpZgogCkBAIC0yMzUsNyArMjM1LDcgQEAgcHVibGljOgogI2VuZGlm
CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlU3BpbkJ1
dHRvbihIVE1MSW5wdXRFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZEhh
dmVTcGluQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQmKSBjb25zdDsKIAogICAgIC8vIEZ1bmN0aW9u
cyBmb3IgPHNlbGVjdD4gZWxlbWVudHMuCiAgICAgdmlydHVhbCBib29sIGRlbGVnYXRlc01lbnVM
aXN0UmVuZGVyaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI3MCwxOSArMjcwLDE5
IEBAIHByb3RlY3RlZDoKIAogI2lmICFVU0UoTkVXX1RIRU1FKQogICAgIC8vIE1ldGhvZHMgZm9y
IGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHls
ZSopIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5
bGUmKSBjb25zdCB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9CisgICAg
dmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgfQogCi0gICAg
dmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRC
dXR0b25TaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEJ1
dHRvblNpemUoUmVuZGVyU3R5bGUmKSBjb25zdCB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCkBA
IC0yOTAsMTUgKzI5MCwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFk
aW9EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRv
bkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4
dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4
dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGRE
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBG
bG9hdFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4
dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRB
cmVhKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURlY29y
YXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlz
dFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3Qo
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0RGVjb3JhdGlv
bnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IHsgcmV0dXJuIHRydWU7IH0KIApAQCAtMzA5LDQ0ICszMDksNDQgQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgYm9vbCBwYWludFNxdWFyZUJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0
ZXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVz
dFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5Q
VVRfU1BFRUNIKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBw
YWludElucHV0RmllbGRTcGVlY2hCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHBhaW50
U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBF
bGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxC
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25Q
YXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBh
cnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RNZWRpYUNvbnRyb2xTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lZGlh
Q29udHJvbFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYU92ZXJsYXlQbGF5QnV0dG9uKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0
cnVlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAko
cmV2aXNpb24gMTcwNDE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
SU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDkgKzM5LDkgQEAgY2xhc3MgUmVuZGVyVGhlbWVJ
T1MgOiBwdWJsaWMgUmVuZGVyVGhlbQogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJl
bmRlclRoZW1lPiBjcmVhdGUoKTsKIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRk
aW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBw
b3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBzdGF0aWMgdm9pZCBhZGp1c3RSb3VuZEJvcmRlclJhZGl1cyhSZW5kZXJTdHlsZSYsIFJl
bmRlckJveCopOworICAgIHN0YXRpYyB2b2lkIGFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKFJlbmRl
clN0eWxlJiwgUmVuZGVyQm94Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NW
YWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNTIsMTkgKzUy
LDE5IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0
aW9uKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBi
b29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEm
LCBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29s
b3IpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29u
c3QgUmVuZGVyU3R5bGUmLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiBiYWNr
Z3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RS
YWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsK
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b25EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlJikgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRGaWxlVXBsb2FkSWNvbkRlY29y
YXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2Jq
ZWN0JiBidXR0b25SZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYsIElj
b24qLCBGaWxlVXBsb2FkRGVjb3JhdGlvbnMpIG92ZXJyaWRlOwogCkBAIC03NCwxNyArNzQsMTcg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRl
OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJU
cmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICAvLyBSZXR1cm5zIHRoZSByZXBl
YXQgaW50ZXJ2YWwgb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2
aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRl
clByb2dyZXNzKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9u
UmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJy
aWRlOwogICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRo
ZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQ
cm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
ZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlk
ZTsKICNlbmRpZgpAQCAtOTQsNyArOTQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBpbnQg
c2xpZGVyVGlja09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlm
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZp
ZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTA1LDcgKzEw
NSw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dQ
bGFjZWhvbGRlcldoZW5Gb2N1c2VkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29s
IHNob3VsZEhhdmVTcGluQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCYp
IGNvbnN0IG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5n
IG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAxNzA0MTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAg
LTM1MywxNSArMzUzLDE1IEBAIEZsb2F0UmVjdCBSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJv
cmQKICAgICByZXR1cm4gYm9yZGVyLnJlY3QoKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6
YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdENoZWNrYm94U3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0g
ICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVp
Z2h0KCkuaXNBdXRvKCkpCisgICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRv
KCkgJiYgIXN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBM
ZW5ndGggbGVuZ3RoID0gTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3RkOjptYXgoc3R5
bGUtPmZvbnRTaXplKCksIDEwKSkpLCBGaXhlZCk7CisgICAgTGVuZ3RoIGxlbmd0aCA9IExlbmd0
aChzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHN0ZDo6bWF4KHN0eWxlLmZvbnRTaXplKCksIDEwKSkp
LCBGaXhlZCk7CiAgICAgCi0gICAgc3R5bGUtPnNldFdpZHRoKGxlbmd0aCk7Ci0gICAgc3R5bGUt
PnNldEhlaWdodChsZW5ndGgpOworICAgIHN0eWxlLnNldFdpZHRoKGxlbmd0aCk7CisgICAgc3R5
bGUuc2V0SGVpZ2h0KGxlbmd0aCk7CiB9CiAKIHN0YXRpYyBDR1BvaW50IHNob3J0ZW5lZChDR1Bv
aW50IHN0YXJ0LCBDR1BvaW50IGVuZCwgZmxvYXQgd2lkdGgpCkBAIC00MzcsMjcgKzQzNywyNyBA
QCBpbnQgUmVuZGVyVGhlbWVJT1M6OmJhc2VsaW5lUG9zaXRpb24oY29uCiAgICAgcmV0dXJuIFJl
bmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9uKGJveCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJ
T1M6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRl
ckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYg
YmFja2dyb3VuZENvbG9yKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZUlPUzo6aXNDb250cm9sU3R5
bGVkKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBj
b25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3Ip
IGNvbnN0CiB7CiAgICAgLy8gQnV0dG9ucyBhbmQgTWVudWxpc3RCdXR0b25zIGFyZSBzdHlsZWQg
aWYgdGhleSBjb250YWluIGEgYmFja2dyb3VuZCBpbWFnZS4KLSAgICBpZiAoc3R5bGUtPmFwcGVh
cmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVs
aXN0QnV0dG9uUGFydCkKLSAgICAgICAgcmV0dXJuICFzdHlsZS0+dmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5hbHBoYSgpIHx8IHN0eWxlLT5iYWNrZ3Jv
dW5kTGF5ZXJzKCktPmhhc0ltYWdlKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBQ
dXNoQnV0dG9uUGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0
KQorICAgICAgICByZXR1cm4gIXN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcikuYWxwaGEoKSB8fCBzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCktPmhh
c0ltYWdlKCk7CiAKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0
IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEFyZWFQYXJ0KQotICAgICAgICByZXR1cm4g
KnN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkgIT0gYmFja2dyb3VuZDsKKyAgICBpZiAoc3R5bGUu
YXBwZWFyYW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IFRl
eHRBcmVhUGFydCkKKyAgICAgICAgcmV0dXJuICpzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCkgIT0g
YmFja2dyb3VuZDsKIAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0
eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVJT1M6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSYWRp
b1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25z
dAogewotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5
bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNp
Y09yQXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgTGVuZ3RoIGxlbmd0aCA9IExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHN0ZDo6
bWF4KHN0eWxlLT5mb250U2l6ZSgpLCAxMCkpKSwgRml4ZWQpOwotICAgIHN0eWxlLT5zZXRXaWR0
aChsZW5ndGgpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQobGVuZ3RoKTsKLSAgICBzdHlsZS0+c2V0
Qm9yZGVyUmFkaXVzKEludFNpemUobGVuZ3RoLnZhbHVlKCkgLyAyLjBmLCBsZW5ndGgudmFsdWUo
KSAvIDIuMGYpKTsKKyAgICBMZW5ndGggbGVuZ3RoID0gTGVuZ3RoKHN0YXRpY19jYXN0PGludD4o
Y2VpbGYoc3RkOjptYXgoc3R5bGUuZm9udFNpemUoKSwgMTApKSksIEZpeGVkKTsKKyAgICBzdHls
ZS5zZXRXaWR0aChsZW5ndGgpOworICAgIHN0eWxlLnNldEhlaWdodChsZW5ndGgpOworICAgIHN0
eWxlLnNldEJvcmRlclJhZGl1cyhJbnRTaXplKGxlbmd0aC52YWx1ZSgpIC8gMi4wZiwgbGVuZ3Ro
LnZhbHVlKCkgLyAyLjBmKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UmFkaW9E
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC01MTksMjEgKzUxOSwyMSBAQCBjb25zdCBm
bG9hdCBNZW51TGlzdEFycm93V2lkdGggPSA3OwogY29uc3QgZmxvYXQgTWVudUxpc3RBcnJvd0hl
aWdodCA9IDY7CiBjb25zdCBmbG9hdCBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdodCA9IDE5Owog
Ci1pbnQgUmVuZGVyVGhlbWVJT1M6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lSU9TOjpwb3B1cEludGVybmFsUGFkZGlu
Z1JpZ2h0KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVh
cmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCi0gICAgICAgIHJldHVybiBNZW51TGlzdEJ1
dHRvblBhZGRpbmdSaWdodCArIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpOworICAgIGlmIChzdHls
ZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gTWVu
dUxpc3RCdXR0b25QYWRkaW5nUmlnaHQgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpOwogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSb3VuZEJvcmRlclJhZGl1
cyhSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlckJveCogYm94KQordm9pZCBSZW5kZXJUaGVtZUlP
Uzo6YWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJCb3gm
IGJveCkKIHsKICAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQgfHwg
c3R5bGUuYmFja2dyb3VuZExheWVycygpLT5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBiZSByZWx5aW5nIG9uIGJvcmRlciByYWRpdXMg
Zm9yIHRoZSBhcHBlYXJhbmNlIG9mIG91ciBjb250cm9scyA8cmRhcjovL3Byb2JsZW0vNzY3NTQ5
Mz4KLSAgICBMZW5ndGggcmFkaXVzV2lkdGgoc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1pbihib3gt
PndpZHRoKCksIGJveC0+aGVpZ2h0KCkpIC8gMi4wKSwgRml4ZWQpOwotICAgIExlbmd0aCByYWRp
dXNIZWlnaHQoc3RhdGljX2Nhc3Q8aW50Pihib3gtPmhlaWdodCgpIC8gMi4wKSwgRml4ZWQpOwor
ICAgIExlbmd0aCByYWRpdXNXaWR0aChzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bWluKGJveC53aWR0
aCgpLCBib3guaGVpZ2h0KCkpIC8gMi4wKSwgRml4ZWQpOworICAgIExlbmd0aCByYWRpdXNIZWln
aHQoc3RhdGljX2Nhc3Q8aW50Pihib3guaGVpZ2h0KCkgLyAyLjApLCBGaXhlZCk7CiAgICAgc3R5
bGUuc2V0Qm9yZGVyUmFkaXVzKExlbmd0aFNpemUocmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCkp
OwogfQogCkBAIC02MTksMTAgKzYxOSw4IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdE1l
bnVMaXN0QnV0dG8KICAgICAvLyAiLXdlYmtpdC1hcHBlYXJhbmNlOiBtZW51bGlzdC1idXR0b24i
LgogICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3RUYWcpICYmICFl
bGVtZW50Lmhhc0F0dHJpYnV0ZShIVE1MTmFtZXM6Om11bHRpcGxlQXR0cikpCiAgICAgICAgIGFk
anVzdFNlbGVjdExpc3RCdXR0b25TdHlsZShzdHlsZSwgZWxlbWVudCk7Ci0gICAgZWxzZSBpZiAo
ZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7Ci0gICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
PigmZWxlbWVudCk7Ci0gICAgICAgIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWxlKHN0eWxl
LCAqaW5wdXRFbGVtZW50KTsKLSAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aW5wdXRUYWcpKQorICAgICAgICBhZGp1c3RJbnB1dEVsZW1lbnRCdXR0b25T
dHlsZShzdHlsZSwgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCY+KGVsZW1lbnQpKTsKIH0K
IAogYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNv
bnN0IFJlbmRlck9iamVjdCYgYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQpAQCAtNzE3LDE0ICs3MTUsMTQgQEAgY29uc3QgQ0dGbG9hdCBrVHJh
Y2tUaGlja25lc3MgPSA0LjA7CiBjb25zdCBDR0Zsb2F0IGtUcmFja1JhZGl1cyA9IGtUcmFja1Ro
aWNrbmVzcyAvIDIuMDsKIGNvbnN0IGludCBrRGVmYXVsdFNsaWRlclRodW1iU2l6ZSA9IDE2Owog
Ci12b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2
ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0
Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2
ZXImIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0
CiB7CiAgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoc2VsZWN0b3IsIHN0
eWxlLCBlbGVtZW50KTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGJlIHJlbHlpbmcg
b24gYm9yZGVyIHJhZGl1cyBmb3IgdGhlIGFwcGVhcmFuY2Ugb2Ygb3VyIGNvbnRyb2xzIDxyZGFy
Oi8vcHJvYmxlbS83Njc1NDkzPgogICAgIExlbmd0aCByYWRpdXNXaWR0aChzdGF0aWNfY2FzdDxp
bnQ+KGtUcmFja1JhZGl1cyksIEZpeGVkKTsKICAgICBMZW5ndGggcmFkaXVzSGVpZ2h0KHN0YXRp
Y19jYXN0PGludD4oa1RyYWNrUmFkaXVzKSwgRml4ZWQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJS
YWRpdXMoTGVuZ3RoU2l6ZShyYWRpdXNXaWR0aCwgcmFkaXVzSGVpZ2h0KSk7CisgICAgc3R5bGUu
c2V0Qm9yZGVyUmFkaXVzKExlbmd0aFNpemUocmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCkpOwog
fQogCiBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9i
amVjdCYgYm94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKQEAgLTgwNSwyMCArODAzLDIwIEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVy
VHJhY2soY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFk
anVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBz
dHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0g
U2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFNsaWRl
clRodW1iVmVydGljYWxQYXJ0KQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgIT0gU2xpZGVy
VGh1bWJIb3Jpem9udGFsUGFydCAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJW
ZXJ0aWNhbFBhcnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEVuZm9yY2UgImJvcmRlci1y
YWRpdXM6IDUwJSIuCiAgICAgTGVuZ3RoIGxlbmd0aCg1MC4wZiwgUGVyY2VudCk7Ci0gICAgc3R5
bGUtPnNldEJvcmRlclJhZGl1cyhMZW5ndGhTaXplKGxlbmd0aCwgbGVuZ3RoKSk7CisgICAgc3R5
bGUuc2V0Qm9yZGVyUmFkaXVzKExlbmd0aFNpemUobGVuZ3RoLCBsZW5ndGgpKTsKIAogICAgIC8v
IEVuZm9yY2UgYSAxNngxNiBzaXplIGlmIG5vIHNpemUgaXMgcHJvdmlkZWQuCi0gICAgaWYgKHN0
eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgfHwgc3R5bGUtPmhlaWdodCgpLmlzQXV0
bygpKSB7CisgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSB8fCBzdHls
ZS5oZWlnaHQoKS5pc0F1dG8oKSkgewogICAgICAgICBMZW5ndGggbGVuZ3RoID0gTGVuZ3RoKGtE
ZWZhdWx0U2xpZGVyVGh1bWJTaXplLCBGaXhlZCk7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChs
ZW5ndGgpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KGxlbmd0aCk7CisgICAgICAgIHN0eWxl
LnNldFdpZHRoKGxlbmd0aCk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChsZW5ndGgpOwogICAg
IH0KIH0KIApAQCAtODQwLDEyICs4MzgsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRT
bGlkZXJUaHVtYkRlYwogfQogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi1kb3VibGUg
UmVuZGVyVGhlbWVJT1M6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVu
ZGVyUHJvZ3Jlc3MqKSBjb25zdAorZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25SZXBl
YXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKIHsKICAgICBy
ZXR1cm4gMDsKIH0KIAotZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25EdXJhdGlvbkZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVtZUlP
Uzo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC05NDcsMjEgKzk0NSwxOCBAQCBpbnQgUmVuZGVyVGhl
bWVJT1M6OnNsaWRlclRpY2tPZmZzZXRGcm9tCiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVt
ZUlPUzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUlPUzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclRo
ZW1lOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CiAK
LSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc3R5bGUtPmhh
c0JvcmRlcigpKQorICAgIGlmICghc3R5bGUuaGFzQm9yZGVyKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlbmRlckJveCogYm94ID0gZWxlbWVudC0+cmVuZGVyQm94KCk7CisgICAgUmVuZGVy
Qm94KiBib3ggPSBlbGVtZW50LnJlbmRlckJveCgpOwogICAgIGlmICghYm94KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhZGp1c3RSb3VuZEJvcmRlclJhZGl1cygqc3R5bGUsIGJveCk7CisgICAg
YWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoc3R5bGUsICpib3gpOwogfQogCiBib29sIFJlbmRlclRo
ZW1lSU9TOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBi
b3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAt
OTY5LDcgKzk2NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWMK
ICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhib3gsIHBhaW50SW5mbywgcmVj
dCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
JiBzZWxlY3RvciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAog
ewogICAgIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVs
ZW1lbnQpOwogCkBAIC05NzgsMTcgKzk3MywxNCBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1
c3RCdXR0b25TdHlsZShTCiAgICAgLy8gU2luY2UgdGhlIGVsZW1lbnQgbWlnaHQgbm90IGJlIGlu
IGEgZG9jdW1lbnQsIGp1c3QgcGFzcyBudWxscHRyIGZvciB0aGUgcm9vdCBlbGVtZW50IHN0eWxl
CiAgICAgLy8gYW5kIHRoZSByZW5kZXIgdmlldy4KICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGVtU2l6ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMS4wLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0VNUyk7Ci0gICAgaW50IHBpeGVscyA9IGVtU2l6ZS0+Y29tcHV0ZUxlbmd0aDxp
bnQ+KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoc3R5bGUsIG51bGxwdHIsIG51bGxwdHIsIDEu
MCwgZmFsc2UpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JveChMZW5ndGhCb3goMCwgcGl4ZWxz
LCAwLCBwaXhlbHMpKTsKLQotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAg
IGludCBwaXhlbHMgPSBlbVNpemUtPmNvbXB1dGVMZW5ndGg8aW50PihDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCZzdHlsZSwgbnVsbHB0ciwgbnVsbHB0ciwgMS4wLCBmYWxzZSkpOworICAgIHN0
eWxlLnNldFBhZGRpbmdCb3goTGVuZ3RoQm94KDAsIHBpeGVscywgMCwgcGl4ZWxzKSk7CiAKLSAg
ICBSZW5kZXJCb3gqIGJveCA9IGVsZW1lbnQtPnJlbmRlckJveCgpOworICAgIFJlbmRlckJveCog
Ym94ID0gZWxlbWVudC5yZW5kZXJCb3goKTsKICAgICBpZiAoIWJveCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoKnN0eWxlLCBib3gpOworICAgIGFkanVz
dFJvdW5kQm9yZGVyUmFkaXVzKHN0eWxlLCAqYm94KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0xMDExLDE0ICsx
MDAzLDE0IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHVzaEJ1dHRvbkRlY28KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OnNldEJ1dHRvblNpemUoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUlPUzo6c2V0QnV0dG9uU2l6
ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBo
ZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAg
ICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWln
aHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRo
ZSBjb250cm9sLgotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4o
Q29udHJvbEJhc2VIZWlnaHQgLyBDb250cm9sQmFzZUZvbnRTaXplICogc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQo
TGVuZ3RoKHN0YXRpY19jYXN0PGludD4oQ29udHJvbEJhc2VIZWlnaHQgLyBDb250cm9sQmFzZUZv
bnRTaXplICogc3R5bGUuZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCkpLCBGaXhlZCkp
OwogfQogCiBjb25zdCBpbnQga1RodW1ibmFpbEJvcmRlclN0cm9rZVdpZHRoID0gMTsKQEAgLTEw
ODcsNyArMTA3OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnNob3VsZFNob3dQbGFjZWhvbGQK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6c2hvdWxkSGF2ZVNw
aW5CdXR0b24oSFRNTElucHV0RWxlbWVudCopIGNvbnN0Citib29sIFJlbmRlclRoZW1lSU9TOjpz
aG91bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRFbGVtZW50JikgY29uc3QKIHsKICAgICByZXR1
cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMuaAkocmV2aXNpb24gMTcwNDE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIEZs
b2F0UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChj
b25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBj
b25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9yZGVyRGF0
YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZv
cm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAt
NjksMzYgKzY5LDM2IEBAIHB1YmxpYzoKICAgICAvLyBTeXN0ZW0gZm9udHMuCiAgICAgdmlydHVh
bCB2b2lkIHN5c3RlbUZvbnQoQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxl
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShS
ZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNs
aWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0IG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAg
dmlydHVhbCBJbnRTaXplIHNsaWRlclRpY2tTaXplKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCBpbnQgc2xpZGVyVGlja09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0IG92ZXJyaWRl
OwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVu
ZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFs
UGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBp
bnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSop
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNp
emUgcG9wdXBNZW51U2l6ZShjb25zdCBSZW5kZXJTdHlsZSosIEludFJlY3QmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5
bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGlu
Z1JpZ2h0KFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBpbnQgcG9w
dXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNpemUgcG9w
dXBNZW51U2l6ZShjb25zdCBSZW5kZXJTdHlsZSYsIEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAg
IHZpcnR1YWwgYm9vbCBwb3BzTWVudUJ5QXJyb3dLZXlzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCi0gICAgdmlydHVhbCBJbnRT
aXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3Qm
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRz
KGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNNZXRlcihDb250cm9sUGFydCkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShQUk9HUkVTU19FTEVNRU5UKQogICAgIC8vIFJldHVybnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBv
ZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91Ymxl
IGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgLy8g
UmV0dXJucyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJh
ci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0
aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgSW50UmVjdCBwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKQEAg
LTEyNSw0MSArMTI1LDQxIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3JzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9u
RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92
ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lk
IGFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0Jh
clN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYK
IAogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRl
clRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBF
bGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmll
bGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxk
RGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNv
cmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMTc2
LDE0ICsxNzYsMTQgQEAgcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgY29udmVydFRvUGFpbnRpbmdS
ZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0
JiBwYXJ0UmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0
JikgY29uc3Q7CiAKICAgICAvLyBHZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIGZv
bnQuIFVzZWQgYnkgc29tZSBvZiB0aGUgY29udHJvbHMgKGxpa2UgYnV0dG9ucykuCi0gICAgTlND
b250cm9sU2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBO
U0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSopIGNvbnN0
OworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlJikgY29u
c3Q7CisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5
bGUmKSBjb25zdDsKICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yQ2VsbChOU0NlbGwq
LCBjb25zdCBJbnRTaXplKiBzaXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9v
bUxldmVsID0gMS4wZikgY29uc3Q7CiAgICAgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBj
b25zdCBJbnRTaXplKiBzaXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxl
dmVsID0gMS4wZik7Ci0gICAgdm9pZCBzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25z
dCBJbnRTaXplKiBzaXplcykgY29uc3Q7Ci0gICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJT
dHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKLSAgICBJbnRTaXplIHNpemVGb3JT
eXN0ZW1Gb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAg
IHZvaWQgc2V0Rm9udEZyb21Db250cm9sU2l6ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBOU0NvbnRyb2xTaXplKSBjb25zdDsKKyAgICB2b2lkIHNldFNpemVGcm9tRm9udChSZW5kZXJT
dHlsZSYsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVGb3JG
b250KFJlbmRlclN0eWxlJiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAgIEludFNp
emUgc2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBzaXplcykg
Y29uc3Q7CisgICAgdm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIE5TQ29udHJvbFNpemUpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVDaGVj
a2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Jik7CiAgICAgdm9pZCB1cGRhdGVF
bmFibGVkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Jik7CkBAIC0yMDMsNyArMjAz
LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBJbnRTaXplKiBjYW5jZWxCdXR0b25TaXplcygpIGNv
bnN0OwogICAgIGNvbnN0IEludFNpemUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0OwogICAg
IHZvaWQgc2V0U2VhcmNoQ2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJl
Y3QmKTsKLSAgICB2b2lkIHNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0Owor
ICAgIHZvaWQgc2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlJikgY29uc3Q7CiAKICAgICBO
U1BvcFVwQnV0dG9uQ2VsbCAqcG9wdXBCdXR0b24oKSBjb25zdDsKICAgICBOU1NlYXJjaEZpZWxk
Q2VsbCAqc2VhcmNoKCkgY29uc3Q7CkBAIC0yMTQsMTEgKzIxNCwxMSBAQCBwcml2YXRlOgogCiAj
aWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCiAgICAgTlNMZXZlbEluZGljYXRvclN0eWxlIGxldmVs
SW5kaWNhdG9yU3R5bGVGb3IoQ29udHJvbFBhcnQpIGNvbnN0OwotICAgIE5TTGV2ZWxJbmRpY2F0
b3JDZWxsICpsZXZlbEluZGljYXRvckZvcihjb25zdCBSZW5kZXJNZXRlciopIGNvbnN0OworICAg
IE5TTGV2ZWxJbmRpY2F0b3JDZWxsICpsZXZlbEluZGljYXRvckZvcihjb25zdCBSZW5kZXJNZXRl
ciYpIGNvbnN0OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICBp
bnQgbWluaW11bVByb2dyZXNzQmFySGVpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgaW50
IG1pbmltdW1Qcm9ncmVzc0JhckhlaWdodChSZW5kZXJTdHlsZSYpIGNvbnN0OwogICAgIGNvbnN0
IEludFNpemUqIHByb2dyZXNzQmFyU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBpbnQqIHByb2dy
ZXNzQmFyTWFyZ2lucyhOU0NvbnRyb2xTaXplKSBjb25zdDsKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTcwNDE3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01OTksMTcgKzU5OSwxNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjp1c2VzVGVzdE1v
ZGVGb2N1c1JpCiAgICAgcmV0dXJuIFdlYkNvcmU6OnVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9y
KCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwKK2Jvb2wgUmVuZGVyVGhl
bWVNYWM6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJv
cmRlckRhdGEmIGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3Ip
IGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkUGFydCB8
fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IFRleHRBcmVhUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5j
ZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm4gc3R5bGUtPmJvcmRlcigpICE9IGJv
cmRlcjsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5
bGUuYXBwZWFyYW5jZSgpID09IFRleHRBcmVhUGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0g
TGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybiBzdHlsZS5ib3JkZXIoKSAhPSBib3JkZXI7CiAK
ICAgICAvLyBGSVhNRTogVGhpcyBpcyBob3JyaWJsZSwgYnV0IHRoZXJlIGlzIG5vdCBtdWNoIGVs
c2UgdGhhdCBjYW4gYmUgZG9uZS4gIE1lbnUgbGlzdHMgY2Fubm90IGRyYXcgcHJvcGVybHkgd2hl
bgogICAgIC8vIHNjYWxlZC4gIFRoZXkgY2FuJ3QgcmVhbGx5IGRyYXcgcHJvcGVybHkgd2hlbiB0
cmFuc2Zvcm1lZCBlaXRoZXIuICBXZSBjYW4ndCBkZXRlY3QgdGhlIHRyYW5zZm9ybSBjYXNlIGF0
IHN0eWxlCiAgICAgLy8gYWRqdXN0bWVudCB0aW1lIHNvIHRoYXQgd2lsbCBqdXN0IGhhdmUgdG8g
c3RheSBicm9rZW4uICBXZSBjYW4gaG93ZXZlciBkZXRlY3QgdGhhdCB3ZSdyZSB6b29taW5nLiAg
SWYgem9vbWluZwogICAgIC8vIGlzIGluIGVmZmVjdCB3ZSB0cmVhdCBpdCBsaWtlIHRoZSBjb250
cm9sIGlzIHN0eWxlZC4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBh
cnQgJiYgc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSAxLjBmKQorICAgIGlmIChzdHlsZS5hcHBl
YXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0ICYmIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSAhPSAxLjBm
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250
cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CkBA
IC03NDMsOSArNzQzLDkgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFN1cHBvcnRzVGlu
dAogICAgIHJldHVybiB0cnVlOwogfQogCi1OU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpj
b250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorTlNDb250cm9sU2l6
ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlJiBzdHlsZSkg
Y29uc3QKIHsKLSAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKKyAgICBpbnQg
Zm9udFNpemUgPSBzdHlsZS5mb250U2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA+PSAxNikKICAg
ICAgICAgcmV0dXJuIE5TUmVndWxhckNvbnRyb2xTaXplOwogICAgIGlmIChmb250U2l6ZSA+PSAx
MSkKQEAgLTc3MywzNSArNzczLDM1IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldENvbnRyb2xT
aXplKE5TQ2UKICAgICAgICAgW2NlbGwgc2V0Q29udHJvbFNpemU6c2l6ZV07CiB9CiAKLUludFNp
emUgUmVuZGVyVGhlbWVNYWM6OnNpemVGb3JGb250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
SW50U2l6ZSogc2l6ZXMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lTWFjOjpzaXplRm9yRm9u
dChSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAogewotICAg
IGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKKyAgICBpZiAoc3R5bGUuZWZm
ZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKICAgICAgICAgSW50U2l6ZSByZXN1bHQgPSBzaXplc1tj
b250cm9sU2l6ZUZvckZvbnQoc3R5bGUpXTsKLSAgICAgICAgcmV0dXJuIEludFNpemUocmVzdWx0
LndpZHRoKCkgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpLCByZXN1bHQuaGVpZ2h0KCkgKiBzdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgcmV0dXJuIEludFNpemUocmVzdWx0LndpZHRo
KCkgKiBzdHlsZS5lZmZlY3RpdmVab29tKCksIHJlc3VsdC5oZWlnaHQoKSAqIHN0eWxlLmVmZmVj
dGl2ZVpvb20oKSk7CiAgICAgfQogICAgIHJldHVybiBzaXplc1tjb250cm9sU2l6ZUZvckZvbnQo
c3R5bGUpXTsKIH0KIAotSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvclN5c3RlbUZvbnQo
UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK0ludFNpemUg
UmVuZGVyVGhlbWVNYWM6OnNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29t
KCkgIT0gMS4wZikgeworICAgIGlmIChzdHlsZS5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikgewog
ICAgICAgICBJbnRTaXplIHJlc3VsdCA9IHNpemVzW2NvbnRyb2xTaXplRm9yU3lzdGVtRm9udChz
dHlsZSldOwotICAgICAgICByZXR1cm4gSW50U2l6ZShyZXN1bHQud2lkdGgoKSAqIHN0eWxlLT5l
ZmZlY3RpdmVab29tKCksIHJlc3VsdC5oZWlnaHQoKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkp
OworICAgICAgICByZXR1cm4gSW50U2l6ZShyZXN1bHQud2lkdGgoKSAqIHN0eWxlLmVmZmVjdGl2
ZVpvb20oKSwgcmVzdWx0LmhlaWdodCgpICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICB9
CiAgICAgcmV0dXJuIHNpemVzW2NvbnRyb2xTaXplRm9yU3lzdGVtRm9udChzdHlsZSldOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxl
LCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNp
emVGcm9tRm9udChSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25z
dAogewogICAgIC8vIEZJWE1FOiBDaGVjayBpcyBmbGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFr
ZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8gYWNjb3VudC4KICAgICBJbnRTaXplIHNpemUgPSBz
aXplRm9yRm9udChzdHlsZSwgc2l6ZXMpOwotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJp
bnNpY09yQXV0bygpICYmIHNpemUud2lkdGgoKSA+IDApCi0gICAgICAgIHN0eWxlLT5zZXRXaWR0
aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCku
aXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDApCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndpZHRoKCkgPiAwKQorICAgICAgICBzdHlsZS5zZXRX
aWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS5oZWlnaHQo
KS5pc0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4gMCkKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0
KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFj
OjpzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFj
OjpzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0CiB7CiAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNp
emUodHJ1ZSk7CkBAIC04MDksMTkgKzgwOSwxOSBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRG
b250RnJvbUNvbnRyb2xTCiAKICAgICBOU0ZvbnQqIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRP
ZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOmNvbnRyb2xTaXplXV07
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShbZm9udCB3ZWJDb3JlRmFtaWx5TmFt
ZV0pOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoW2ZvbnQgcG9pbnRTaXpl
XSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVj
aWZpZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHls
ZS5lZmZlY3RpdmVab29tKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogCiAgICAgLy8gUmVz
ZXQgbGluZSBoZWlnaHQKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6
aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAKLSAgICBpZiAoc3R5bGUtPnNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pKQotICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAg
ICBpZiAoc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCisgICAgICAg
IHN0eWxlLmZvbnQoKS51cGRhdGUoMCk7CiB9CiAKLU5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVN
YWM6OmNvbnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitO
U0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVu
ZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250
U2l6ZSgpOworICAgIGludCBmb250U2l6ZSA9IHN0eWxlLmZvbnRTaXplKCk7CiAgICAgaWYgKGZv
bnRTaXplID49IFtOU0ZvbnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpOU1JlZ3VsYXJD
b250cm9sU2l6ZV0pCiAgICAgICAgIHJldHVybiBOU1JlZ3VsYXJDb250cm9sU2l6ZTsKICAgICBp
ZiAoZm9udFNpemUgPj0gW05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOk5TU21h
bGxDb250cm9sU2l6ZV0pCkBAIC04NDUsNyArODQ1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRUZXh0RmllbGQoY29ucwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZU1hYzo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0K
IApAQCAtODY3LDcgKzg2Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEo
Y29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVz
dFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCkBAIC05MTMsNyArOTEz
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdChjb25zdAogCiAgICAgLy8g
Tm93IGluZmxhdGUgaXQgdG8gYWNjb3VudCBmb3IgdGhlIHNoYWRvdy4KICAgICBGbG9hdFJlY3Qg
aW5mbGF0ZWRSZWN0ID0gcmVjdDsKLSAgICBpZiAocmVjdC53aWR0aCgpID49IG1pbmltdW1NZW51
TGlzdFNpemUoJnJlbmRlcmVyLnN0eWxlKCkpKQorICAgIGlmIChyZWN0LndpZHRoKCkgPj0gbWlu
aW11bU1lbnVMaXN0U2l6ZShyZW5kZXJlci5zdHlsZSgpKSkKICAgICAgICAgaW5mbGF0ZWRSZWN0
ID0gaW5mbGF0ZVJlY3QocmVjdCwgc2l6ZSwgcG9wdXBCdXR0b25NYXJnaW5zKCksIHpvb21MZXZl
bCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5m
by5jb250ZXh0KTsKQEAgLTk0Myw5ICs5NDMsOSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dE1lbnVMaXN0KGNvbnN0CiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKIAotSW50U2l6ZSBS
ZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiByZW5k
ZXJNZXRlciwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVt
ZU1hYzo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiByZW5kZXJNZXRlciwg
Y29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAogewotICAgIGlmIChOb0NvbnRyb2xQYXJ0ID09
IHJlbmRlck1ldGVyLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSkKKyAgICBpZiAoTm9Db250cm9sUGFy
dCA9PSByZW5kZXJNZXRlci5zdHlsZSgpLmFwcGVhcmFuY2UoKSkKICAgICAgICAgcmV0dXJuIGJv
dW5kcy5zaXplKCk7CiAKICAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCogY2VsbCA9IGxldmVsSW5k
aWNhdG9yRm9yKHJlbmRlck1ldGVyKTsKQEAgLTk2Miw3ICs5NjIsNyBAQCBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludE1ldGVyKGNvbnN0IFJlCiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0Nv
bnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKIAotICAgIE5TTGV2ZWxJbmRp
Y2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJbmRpY2F0b3JGb3IodG9SZW5kZXJNZXRlcigmcmVuZGVy
T2JqZWN0KSk7CisgICAgTlNMZXZlbEluZGljYXRvckNlbGwqIGNlbGwgPSBsZXZlbEluZGljYXRv
ckZvcih0b1JlbmRlck1ldGVyKHJlbmRlck9iamVjdCkpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwogCiAgICAgW2NlbGwgZHJh
d1dpdGhGcmFtZTpyZWN0IGluVmlldzpkb2N1bWVudFZpZXdGb3IocmVuZGVyT2JqZWN0KV07CkBA
IC0xMDAxLDE2ICsxMDAxLDE2IEBAIE5TTGV2ZWxJbmRpY2F0b3JTdHlsZSBSZW5kZXJUaGVtZU1h
Yzo6bGUKIAogfQogCi1OU0xldmVsSW5kaWNhdG9yQ2VsbCogUmVuZGVyVGhlbWVNYWM6OmxldmVs
SW5kaWNhdG9yRm9yKGNvbnN0IFJlbmRlck1ldGVyKiByZW5kZXJNZXRlcikgY29uc3QKK05TTGV2
ZWxJbmRpY2F0b3JDZWxsKiBSZW5kZXJUaGVtZU1hYzo6bGV2ZWxJbmRpY2F0b3JGb3IoY29uc3Qg
UmVuZGVyTWV0ZXImIHJlbmRlck1ldGVyKSBjb25zdAogewotICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSA9IHJlbmRlck1ldGVyLT5zdHlsZSgpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSA9IHJlbmRlck1ldGVyLnN0eWxlKCk7CiAgICAgQVNTRVJUKHN0eWxlLmFwcGVhcmFuY2Uo
KSAhPSBOb0NvbnRyb2xQYXJ0KTsKIAogICAgIGlmICghbV9sZXZlbEluZGljYXRvcikKICAgICAg
ICAgbV9sZXZlbEluZGljYXRvciA9IGFkb3B0TlMoW1tOU0xldmVsSW5kaWNhdG9yQ2VsbCBhbGxv
Y10gaW5pdFdpdGhMZXZlbEluZGljYXRvclN0eWxlOk5TQ29udGludW91c0NhcGFjaXR5TGV2ZWxJ
bmRpY2F0b3JTdHlsZV0pOwogICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbV9sZXZl
bEluZGljYXRvci5nZXQoKTsKIAotICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSByZW5k
ZXJNZXRlci0+bWV0ZXJFbGVtZW50KCk7CisgICAgSFRNTE1ldGVyRWxlbWVudCogZWxlbWVudCA9
IHJlbmRlck1ldGVyLm1ldGVyRWxlbWVudCgpOwogICAgIGRvdWJsZSB2YWx1ZSA9IGVsZW1lbnQt
PnZhbHVlKCk7CiAKICAgICAvLyBCZWNhdXNlIE5TTGV2ZWxJbmRpY2F0b3JDZWxsIGRvZXMgbm90
IHN1cHBvcnQgb3B0aW11bS1pbi10aGUtbWlkZGxlIHR5cGUgY29sb3JpbmcsCkBAIC0xMDcyLDM1
ICsxMDcyLDM1IEBAIEludFJlY3QgUmVuZGVyVGhlbWVNYWM6OnByb2dyZXNzQmFyUmVjdEYKICAg
ICAgICAgcmV0dXJuIHByb2dyZXNzQmFyQm91bmRzOwogCiAgICAgZmxvYXQgem9vbUxldmVsID0g
cmVuZGVyT2JqZWN0LnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwotICAgIE5TQ29udHJvbFNpemUg
Y29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoJnJlbmRlck9iamVjdC5zdHlsZSgpKTsK
KyAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHJlbmRl
ck9iamVjdC5zdHlsZSgpKTsKICAgICBJbnRTaXplIHNpemUgPSBwcm9ncmVzc0JhclNpemVzKClb
Y29udHJvbFNpemVdOwogICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2
ZWwpOwogICAgIHNpemUuc2V0V2lkdGgocHJvZ3Jlc3NCYXJCb3VuZHMud2lkdGgoKSk7CiAKICAg
ICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBhY2NvdW50IGZvciB0aGUgc2hhZG93LgogICAgIEludFJl
Y3QgaW5mbGF0ZWRSZWN0ID0gcHJvZ3Jlc3NCYXJCb3VuZHM7Ci0gICAgaWYgKHByb2dyZXNzQmFy
Qm91bmRzLmhlaWdodCgpIDw9IG1pbmltdW1Qcm9ncmVzc0JhckhlaWdodCgmcmVuZGVyT2JqZWN0
LnN0eWxlKCkpKQorICAgIGlmIChwcm9ncmVzc0JhckJvdW5kcy5oZWlnaHQoKSA8PSBtaW5pbXVt
UHJvZ3Jlc3NCYXJIZWlnaHQocmVuZGVyT2JqZWN0LnN0eWxlKCkpKQogICAgICAgICBpbmZsYXRl
ZFJlY3QgPSBJbnRSZWN0KGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcHJvZ3Jlc3NC
YXJNYXJnaW5zKGNvbnRyb2xTaXplKSwgem9vbUxldmVsKSk7CiAKICAgICByZXR1cm4gaW5mbGF0
ZWRSZWN0OwogfQogCi1pbnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1Qcm9ncmVzc0JhckhlaWdo
dChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1Q
cm9ncmVzc0JhckhlaWdodChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCBwcm9ncmVzc0JhclNpemVzKCkpLmhlaWdodCgpOwog
fQogCi1kb3VibGUgUmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJv
Z3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAorZG91YmxlIFJlbmRlclRoZW1lTWFjOjph
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29u
c3QKIHsKICAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25GcmFtZVJhdGU7CiB9CiAKLWRvdWJs
ZSBSZW5kZXJUaGVtZU1hYzo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQ
cm9ncmVzcyopIGNvbnN0Citkb3VibGUgUmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlvbkR1cmF0aW9u
Rm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogewogICAgIHJldHVybiBwcm9n
cmVzc0FuaW1hdGlvbk51bUZyYW1lcyAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRlOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3QKIHsKIH0KIApAQCAtMTExMCw3ICsxMTEwLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihjbwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIElu
dFJlY3QgaW5mbGF0ZWRSZWN0ID0gcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKHJlbmRlck9iamVj
dCwgcmVjdCk7Ci0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9y
Rm9udCgmcmVuZGVyT2JqZWN0LnN0eWxlKCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNp
emUgPSBjb250cm9sU2l6ZUZvckZvbnQocmVuZGVyT2JqZWN0LnN0eWxlKCkpOwogCiAgICAgY29u
c3QgUmVuZGVyUHJvZ3Jlc3MmIHJlbmRlclByb2dyZXNzID0gKnRvUmVuZGVyUHJvZ3Jlc3MoJnJl
bmRlck9iamVjdCk7CiAgICAgSElUaGVtZVRyYWNrRHJhd0luZm8gdHJhY2tJbmZvOwpAQCAtMTMz
NywyMiArMTMzNywyMiBAQCBzdGF0aWMgY29uc3QgSW50U2l6ZSogbWVudUxpc3RCdXR0b25TaXpl
CiAgICAgcmV0dXJuIHNpemVzOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51
TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0
U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JiBlKSBjb25zdAogewogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250
cm9sU2l6ZUZvckZvbnQoc3R5bGUpOwogCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAg
c3R5bGUtPnJlc2V0UGFkZGluZygpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5
bGUucmVzZXRQYWRkaW5nKCk7CiAKICAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0g
ICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworICAgIHN0eWxlLnNldEhlaWdodChM
ZW5ndGgoQXV0bykpOwogCiAgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAg
IHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUp
OwogCiAgICAgLy8gU2V0IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHRvIGJsYWNrIG9yIGdyYXkgd2hl
biB3ZSBoYXZlIHRoZSBhcXVhIGxvb2suCiAgICAgLy8gQ2FzdCB0byBSR0IzMiBpcyB0byB3b3Jr
IGFyb3VuZCBhIGNvbXBpbGVyIGJ1Zy4KLSAgICBzdHlsZS0+c2V0Q29sb3IoZSAmJiAhZS0+aXNE
aXNhYmxlZEZvcm1Db250cm9sKCkgPyBzdGF0aWNfY2FzdDxSR0JBMzI+KENvbG9yOjpibGFjaykg
OiBDb2xvcjo6ZGFya0dyYXkpOworICAgIHN0eWxlLnNldENvbG9yKCFlLmlzRGlzYWJsZWRGb3Jt
Q29udHJvbCgpID8gc3RhdGljX2Nhc3Q8UkdCQTMyPihDb2xvcjo6YmxhY2spIDogQ29sb3I6OmRh
cmtHcmF5KTsKIAogICAgIC8vIFNldCB0aGUgYnV0dG9uJ3MgdmVydGljYWwgc2l6ZS4KICAgICBz
ZXRTaXplRnJvbUZvbnQoc3R5bGUsIG1lbnVMaXN0QnV0dG9uU2l6ZXMoKSk7CkBAIC0xMzYyLDUy
ICsxMzYyLDUyIEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUKICAg
ICAvLyBzeXN0ZW0gZm9udCBmb3IgdGhlIGNvbnRyb2wgc2l6ZSBpbnN0ZWFkLgogICAgIHNldEZv
bnRGcm9tQ29udHJvbFNpemUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGNvbnRyb2xTaXplKTsKIAot
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93
KG51bGxwdHIpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
TGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYg
KHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gcG9w
dXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2xlZnRQYWRkaW5nXSAq
IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0g
TWVudWxpc3RCdXR0b25QYXJ0KQotICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nTGVm
dCAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9
PSBNZW51bGlzdFBhcnQpCisgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJv
bFNpemVGb3JGb250KHN0eWxlKSlbbGVmdFBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9vbSgp
OworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAg
ICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCAqIHN0eWxlLmVmZmVjdGl2ZVpvb20o
KTsKICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFs
UGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZU1h
Yzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7
Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICBy
ZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW3JpZ2h0
UGFkZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFy
YW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgewotICAgICAgICBmbG9hdCBmb250U2NhbGUg
PSBzdHlsZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKKyAgICBpZiAoc3R5bGUuYXBwZWFy
YW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGlu
Zyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtyaWdodFBhZGRpbmddICogc3R5bGUuZWZmZWN0
aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25Q
YXJ0KSB7CisgICAgICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLmZvbnRTaXplKCkgLyBiYXNl
Rm9udFNpemU7CiAgICAgICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZv
bnRTY2FsZTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY2VpbGYoYXJyb3dXaWR0
aCArIChhcnJvd1BhZGRpbmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQgKyBwYWRkaW5nQmVmb3Jl
U2VwYXJhdG9yKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpKTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4oY2VpbGYoYXJyb3dXaWR0aCArIChhcnJvd1BhZGRpbmdMZWZ0ICsgYXJy
b3dQYWRkaW5nUmlnaHQgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAqIHN0eWxlLmVmZmVjdGl2
ZVpvb20oKSkpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJlbmRlclRoZW1lTWFj
Ojpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQg
UmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlJiBzdHls
ZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQp
Ci0gICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0
eWxlKSlbdG9wUGFkZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlmIChzdHls
ZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKLSAgICAgICAgcmV0dXJuIHN0
eWxlZFBvcHVwUGFkZGluZ1RvcCAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0
eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCisgICAgICAgIHJldHVybiBwb3B1cEJ1
dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbdG9wUGFkZGluZ10gKiBzdHls
ZS5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlz
dEJ1dHRvblBhcnQpCisgICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdUb3AgKiBzdHls
ZS5lZmZlY3RpdmVab29tKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUaGVtZU1h
Yzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAor
aW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHls
ZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxp
c3RQYXJ0KQotICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9y
Rm9udChzdHlsZSkpW2JvdHRvbVBhZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAg
ICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCi0gICAgICAg
IHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdCb3R0b20gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
OworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQorICAgICAgICBy
ZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2JvdHRv
bVBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJh
bmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQ
YWRkaW5nQm90dG9tICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOwogICAgIHJldHVybiAwOwogfQog
Ci1Qb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBSZW5kZXJUaGVtZU1hYzo6cG9wdXBNZW51
U2l6ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIEludFJlY3QmIHJlY3QpIGNvbnN0CitQb3B1
cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBSZW5kZXJUaGVtZU1hYzo6cG9wdXBNZW51U2l6ZShj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgTlNQ
b3BVcEJ1dHRvbkNlbGwqIHBvcHVwQnV0dG9uID0gdGhpcy0+cG9wdXBCdXR0b24oKTsKLSAgICBO
U0NvbnRyb2xTaXplIHNpemUgPSBjb250cm9sU2l6ZUZvckNlbGwocG9wdXBCdXR0b24sIHBvcHVw
QnV0dG9uU2l6ZXMoKSwgcmVjdC5zaXplKCksIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOworICAg
IE5TQ29udHJvbFNpemUgc2l6ZSA9IGNvbnRyb2xTaXplRm9yQ2VsbChwb3B1cEJ1dHRvbiwgcG9w
dXBCdXR0b25TaXplcygpLCByZWN0LnNpemUoKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAg
ICBzd2l0Y2ggKHNpemUpIHsKICAgICBjYXNlIE5TUmVndWxhckNvbnRyb2xTaXplOgogICAgICAg
ICByZXR1cm4gUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNpemVOb3JtYWw7CkBAIC0xNDUyLDcg
KzE0NTIsNyBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6bWVudUxpc3RTCiAgICAg
cmV0dXJuIHNpemVzOwogfQogCi1pbnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNp
emUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lTWFjOjptaW5pbXVt
TWVudUxpc3RTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gc2l6
ZUZvclN5c3RlbUZvbnQoc3R5bGUsIG1lbnVMaXN0U2l6ZXMoKSkud2lkdGgoKTsKIH0KQEAgLTE0
NjAsOSArMTQ2MCw5IEBAIGludCBSZW5kZXJUaGVtZU1hYzo6bWluaW11bU1lbnVMaXN0U2l6ZSgK
IGNvbnN0IGludCB0cmFja1dpZHRoID0gNTsKIGNvbnN0IGludCB0cmFja1JhZGl1cyA9IDI7CiAK
LXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
TWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0
cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCkBAIC0xNTA2LDEwICsxNTA2LDEw
IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soY28KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUo
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVs
ZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRo
dW1iU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwotICAgIHN0eWxlLT5zZXRC
b3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQog
CiBjb25zdCBmbG9hdCB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwpAQCAtMTYw
OCw3ICsxNjA4LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoQ2VsbFN0YXRlKAog
ewogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIAotICAg
IFtzZWFyY2ggc2V0Q29udHJvbFNpemU6Y29udHJvbFNpemVGb3JGb250KCZvLnN0eWxlKCkpXTsK
KyAgICBbc2VhcmNoIHNldENvbnRyb2xTaXplOmNvbnRyb2xTaXplRm9yRm9udChvLnN0eWxlKCkp
XTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAg
ICB1cGRhdGVFbmFibGVkU3RhdGUoc2VhcmNoLCBvKTsKQEAgLTE2MjEsNDUgKzE2MjEsNDUgQEAg
Y29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVNYWM6OnNlYXJjaEZpZQogICAgIHJldHVybiBzaXpl
czsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6
ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBo
ZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAg
ICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWln
aHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRo
ZSBjb250cm9sLgogICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgc2VhcmNoRmllbGRTaXplcygp
KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25z
dAogewogICAgIC8vIE92ZXJyaWRlIGJvcmRlci4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsK
LSAgICBjb25zdCBzaG9ydCBib3JkZXJXaWR0aCA9IDIgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
OwotICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHN0eWxl
LT5zZXRCb3JkZXJMZWZ0U3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSaWdodFdp
ZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmlnaHRTdHlsZShJTlNFVCk7
Ci0gICAgc3R5bGUtPnNldEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHls
ZS0+c2V0Qm9yZGVyQm90dG9tU3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJUb3BX
aWR0aChib3JkZXJXaWR0aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclRvcFN0eWxlKElOU0VUKTsK
KyAgICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIGNvbnN0IHNob3J0IGJvcmRlcldpZHRoID0g
MiAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJMZWZ0V2lkdGgo
Ym9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNldEJvcmRlckxlZnRTdHlsZShJTlNFVCk7CisgICAg
c3R5bGUuc2V0Qm9yZGVyUmlnaHRXaWR0aChib3JkZXJXaWR0aCk7CisgICAgc3R5bGUuc2V0Qm9y
ZGVyUmlnaHRTdHlsZShJTlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyQm90dG9tV2lkdGgoYm9y
ZGVyV2lkdGgpOworICAgIHN0eWxlLnNldEJvcmRlckJvdHRvbVN0eWxlKElOU0VUKTsKKyAgICBz
dHlsZS5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJXaWR0aCk7CisgICAgc3R5bGUuc2V0Qm9yZGVy
VG9wU3R5bGUoSU5TRVQpOwogCiAgICAgLy8gT3ZlcnJpZGUgaGVpZ2h0LgotICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8p
KTsKICAgICBzZXRTZWFyY2hGaWVsZFNpemUoc3R5bGUpOwogCiAgICAgLy8gT3ZlcnJpZGUgcGFk
ZGluZyBzaXplIHRvIG1hdGNoIEFwcEtpdCB0ZXh0IHBvc2l0aW9uaW5nLgotICAgIGNvbnN0IGlu
dCBwYWRkaW5nID0gMSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5n
UmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3Ao
TGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVu
Z3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgY29uc3QgaW50IHBhZGRpbmcgPSAxICogc3R5bGUu
ZWZmZWN0aXZlWm9vbSgpOworICAgIHN0eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5n
LCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4
ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwor
ICAgIHN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CiAKICAg
ICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHN0eWxlKTsK
ICAgICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBjb250cm9s
U2l6ZSk7CiAKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNl
dEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtMTcxOCwxMiArMTcxOCwxMiBAQCBj
b25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6Y2FuY2VsQnV0CiAgICAgcmV0dXJuIHNpemVz
OwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
blN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsK
ICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgY2FuY2VsQnV0dG9u
U2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsK
LSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldFdpZHRoKExl
bmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChz
aXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsK
IH0KIAogY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVNYWM6OnJlc3VsdHNCdXR0b25TaXplcygp
IGNvbnN0CkBAIC0xNzMzLDEyICsxNzMzLDEyIEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1l
TWFjOjpyZXN1bHRzQnUKIH0KIAogY29uc3QgaW50IGVtcHR5UmVzdWx0c09mZnNldCA9IDk7Ci12
b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAg
SW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXpl
cygpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVz
dWx0c09mZnNldCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhl
aWdodCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAg
c3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwg
Rml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVk
KSk7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpCkBAIC0xNzQ2LDEyICsxNzQ2LDEy
IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGREZWMKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1G
b250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExl
bmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgo
c2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIp
OworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAg
c3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxl
LnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtMTc3OSwxMiAr
MTc3OSwxMiBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzCiB9CiAK
IGNvbnN0IGludCByZXN1bHRzQXJyb3dXaWR0aCA9IDU7Ci12b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVz
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JT
eXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdp
ZHRoKExlbmd0aChzaXplLndpZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKLSAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotICAgIHN0
eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNp
emUud2lkdGgoKSArIHJlc3VsdHNBcnJvd1dpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhl
aWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFk
b3cobnVsbHB0cik7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHIpCkBAIC0xOTE2LDEyICsxOTE2LDEyIEBAIGludCBSZW5k
ZXJUaGVtZU1hYzo6c2xpZGVyVGlja09mZnNldEZyb20KIGNvbnN0IGludCBzbGlkZXJUaHVtYldp
ZHRoID0gMTU7CiBjb25zdCBpbnQgc2xpZGVyVGh1bWJIZWlnaHQgPSAxNTsKIAotdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlNpemUo
UmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBmbG9hdCB6b29tTGV2
ZWwgPSBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgp
ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBT
bGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJXaWR0aCAqIHpvb21MZXZlbCksIEZpeGVkKSk7
Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVy
VGh1bWJIZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOworICAgIGZsb2F0IHpvb21MZXZlbCA9
IHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFNs
aWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IFNsaWRlclRo
dW1iVmVydGljYWxQYXJ0KSB7CisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzdGF0aWNf
Y2FzdDxpbnQ+KHNsaWRlclRodW1iV2lkdGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOworICAgICAg
ICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJIZWln
aHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCShyZXZpc2lvbiAxNzA0MTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTIsMjEgKzI1MiwyMSBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpz
eXN0ZW1Gb250KENTU1ZhCiAgICAgZm9udERlc2NyaXB0aW9uID0gKmNhY2hlZERlc2M7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwKK2Jvb2wgUmVuZGVyVGhlbWVTYWZh
cmk6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRl
ckRhdGEmIGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNv
bnN0CiB7CiAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgU2FmYXJpVGhlbWUuZGxsIHdlIHdvbid0
IGJlIGFibGUgdG8gcGFpbnQgYW55IHRoZW1lZCBjb250cm9scy4KICAgICBpZiAoIVNhZmFyaVRo
ZW1lTGlicmFyeSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChzdHlsZS0+YXBw
ZWFyYW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0
QXJlYVBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAg
cmV0dXJuIHN0eWxlLT5ib3JkZXIoKSAhPSBib3JkZXI7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFu
Y2UoKSA9PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBUZXh0QXJlYVBh
cnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm4g
c3R5bGUuYm9yZGVyKCkgIT0gYm9yZGVyOwogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250
cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CiB9
CiAKIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgSW50UmVjdCYgcikKIHsKLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXpl
ID0gY29udHJvbFNpemVGb3JGb250KCZvLnN0eWxlKCkpOworICAgIE5TQ29udHJvbFNpemUgY29u
dHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoby5zdHlsZSgpKTsKIAogICAgIHN3aXRjaCAo
by5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgewogICAgICAgICBjYXNlIENoZWNrYm94UGFydDogewpA
QCAtMzIzLDggKzMyMyw4IEBAIGludCBSZW5kZXJUaGVtZVNhZmFyaTo6YmFzZWxpbmVQb3NpdGlv
bigKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9
PSBDaGVja2JveFBhcnQgfHwgby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpIHsK
LSAgICAgICAgY29uc3QgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveCgmbyk7Ci0gICAgICAg
IHJldHVybiBib3gtPm1hcmdpblRvcCgpICsgYm94LT5oZWlnaHQoKSAtIDI7IC8vIFRoZSBiYXNl
bGluZSBpcyAycHggdXAgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBjaGVja2JveC9yYWRpbyBpbiBB
cHBLaXQuCisgICAgICAgIGNvbnN0IFJlbmRlckJveCYgYm94ID0gdG9SZW5kZXJCb3gobyk7Cisg
ICAgICAgIHJldHVybiBib3gubWFyZ2luVG9wKCkgKyBib3guaGVpZ2h0KCkgLSAyOyAvLyBUaGUg
YmFzZWxpbmUgaXMgMnB4IHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgY2hlY2tib3gvcmFkaW8g
aW4gQXBwS2l0LgogICAgIH0KIAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3Np
dGlvbihvKTsKQEAgLTM0Myw5ICszNDMsOSBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpjb250
cm9sU3VwcG9ydHNUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5TQ29udHJvbFNpemUgUmVuZGVy
VGhlbWVTYWZhcmk6OmNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
CitOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lU2FmYXJpOjpjb250cm9sU2l6ZUZvckZvbnQoUmVu
ZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250
U2l6ZSgpOworICAgIGludCBmb250U2l6ZSA9IHN0eWxlLmZvbnRTaXplKCk7CiAgICAgaWYgKGZv
bnRTaXplID49IDE2KQogICAgICAgICByZXR1cm4gTlNSZWd1bGFyQ29udHJvbFNpemU7CiAgICAg
aWYgKGZvbnRTaXplID49IDExKQpAQCAtMzY4LDI3ICszNjgsMjcgQEAgdm9pZCBSZW5kZXJUaGVt
ZVNhZmFyaTo6c2V0Q29udHJvbFNpemUoTgogICAgICAgICBbY2VsbCBzZXRDb250cm9sU2l6ZTpz
aXplXTsKIH0KICovCi1JbnRTaXplIFJlbmRlclRoZW1lU2FmYXJpOjpzaXplRm9yRm9udChSZW5k
ZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAorSW50U2l6ZSBSZW5k
ZXJUaGVtZVNhZmFyaTo6c2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBJbnRT
aXplKiBzaXplcykgY29uc3QKIHsKICAgICByZXR1cm4gc2l6ZXNbY29udHJvbFNpemVGb3JGb250
KHN0eWxlKV07CiB9CiAKLUludFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6OnNpemVGb3JTeXN0ZW1G
b250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0CitJbnRT
aXplIFJlbmRlclRoZW1lU2FmYXJpOjpzaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAogewogICAgIHJldHVybiBzaXplc1tjb250
cm9sU2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUpXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFy
aTo6c2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6
ZXMpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRTaXplRnJvbUZvbnQoUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKIHsKICAgICAvLyBGSVhN
RTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13
aWR0aCBpbnRvIGFjY291bnQuCiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvckZvbnQoc3R5bGUs
IHNpemVzKTsKLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBz
aXplLndpZHRoKCkgPiAwKQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lk
dGgoKSwgRml4ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUu
aGVpZ2h0KCkgPiAwKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdo
dCgpLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgc2l6ZS53aWR0aCgpID4gMCkKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUu
d2lkdGgoKSwgRml4ZWQpKTsKKyAgICBpZiAoc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6
ZS5oZWlnaHQoKSA+IDApCisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWln
aHQoKSwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Rm9udEZyb21D
b250cm9sU2l6ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5
bGUsIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2Fm
YXJpOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlJiBzdHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgY29uc3QKIHsK
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKQEAgLTQwMCwxNSArNDAwLDE1IEBAIHZvaWQgUmVu
ZGVyVGhlbWVTYWZhcmk6OnNldEZvbnRGcm9tQ29udHIKICAgICBmb250RGVzY3JpcHRpb24uc2V0
U3BlY2lmaWVkU2l6ZShmb250U2l6ZSk7CiAKICAgICAvLyBSZXNldCBsaW5lIGhlaWdodAotICAg
IHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsK
KyAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgp
KTsKIAotICAgIGlmIChzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikp
Ci0gICAgICAgIHN0eWxlLT5mb250KCkudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3Rv
cigpKTsKKyAgICBpZiAoc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikp
CisgICAgICAgIHN0eWxlLmZvbnQoKS51cGRhdGUoc3R5bGVSZXNvbHZlci5mb250U2VsZWN0b3Io
KSk7CiB9CiAKLU5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6OmNvbnRyb2xTaXplRm9y
U3lzdGVtRm9udChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitOU0NvbnRyb2xTaXplIFJlbmRl
clRoZW1lU2FmYXJpOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxl
KSBjb25zdAogewotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGlu
dCBmb250U2l6ZSA9IHN0eWxlLmZvbnRTaXplKCk7CiAgICAgaWYgKGZvbnRTaXplID49IDEzKQog
ICAgICAgICByZXR1cm4gTlNSZWd1bGFyQ29udHJvbFNpemU7CiAgICAgaWYgKGZvbnRTaXplID49
IDExKQpAQCAtNDIwLDcgKzQyMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50Q2hl
Y2tib3goY28KIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwogCi0gICAgTlND
b250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udCgmby5zdHlsZSgpKTsK
KyAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KG8uc3R5
bGUoKSk7CiAKICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KHIsIGNoZWNr
Ym94U2l6ZXMoKVtjb250cm9sU2l6ZV0sIGNoZWNrYm94TWFyZ2lucyhjb250cm9sU2l6ZSkpOyAg
CiAgICAgcGFpbnRUaGVtZVBhcnQoU2FmYXJpVGhlbWU6OkNoZWNrYm94UGFydCwgcGFpbnRJbmZv
LmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBpbmZsYXRlZFJlY3QsIGNvbnRyb2xTaXplLCBk
ZXRlcm1pbmVTdGF0ZShvKSk7CkBAIC00NDUsMTAgKzQ0NSwxMCBAQCBjb25zdCBpbnQqIFJlbmRl
clRoZW1lU2FmYXJpOjpjaGVja2JveE1hCiAgICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVd
OwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Q2hlY2tib3hTaXpl
KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhl
aWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAg
IGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdo
dCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygp
ICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
VXNlIHRoZSBmb250IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhl
IGNvbnRyb2wuCkBAIC00NTksNyArNDU5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFp
bnRSYWRpbyhjb25zdAogewogICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7CiAKLSAg
ICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KCZvLnN0eWxl
KCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQo
by5zdHlsZSgpKTsKICAKICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KHIs
IHJhZGlvU2l6ZXMoKVtjb250cm9sU2l6ZV0sIHJhZGlvTWFyZ2lucyhjb250cm9sU2l6ZSkpOyAg
ICAKICAgICBwYWludFRoZW1lUGFydChSYWRpb0J1dHRvblBhcnQsIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKSwgaW5mbGF0ZWRSZWN0LCBjb250cm9sU2l6ZSwgZGV0ZXJtaW5l
U3RhdGUobykpOwpAQCAtNDg0LDE3ICs0ODQsMTcgQEAgY29uc3QgaW50KiBSZW5kZXJUaGVtZVNh
ZmFyaTo6cmFkaW9NYXJnaQogICAgIHJldHVybiBtYXJnaW5zW2NvbnRyb2xTaXplXTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYg
c3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGgg
c3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53
aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkK
KyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVp
Z2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSB0aGUgZm9udCBz
aXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgogICAg
IHNldFNpemVGcm9tRm9udChzdHlsZSwgcmFkaW9TaXplcygpKTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZVNhZmFyaTo6c2V0QnV0dG9uUGFkZGluZ0Zyb21Db250cm9sU2l6ZShSZW5kZXJTdHlsZSog
c3R5bGUsIE5TQ29udHJvbFNpemUgc2l6ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6
OnNldEJ1dHRvblBhZGRpbmdGcm9tQ29udHJvbFNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBOU0Nv
bnRyb2xTaXplIHNpemUpIGNvbnN0CiB7CiAgICAgLy8gSnVzdCB1c2UgOHB4LiAgQXBwS2l0IHdh
bnRzIHRvIHVzZSAxMXB4IGZvciBtaW5pIGJ1dHRvbnMsIGJ1dCB0aGF0IHBhZGRpbmcgaXMganVz
dCB0b28gbGFyZ2UKICAgICAvLyBmb3IgcmVhbC13b3JsZCBXZWIgc2l0ZXMgKGNyZWF0aW5nIGEg
aHVnZSBuZWNlc3NhcnkgbWluaW11bSB3aWR0aCBmb3IgYnV0dG9ucyB3aG9zZSBzcGFjZSBpcwpA
QCAtNTAyLDEzICs1MDIsMTMgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0QnV0dG9uUGFk
ZGluZwogICAgIC8vIFRoaXMgYWxzbyBndWFyYW50ZWVzIHRoZSBIVE1MNCA8YnV0dG9uPiB3aWxs
IG1hdGNoIG91ciByZW5kZXJpbmcgYnkgZGVmYXVsdCwgc2luY2Ugd2UncmUgdXNpbmcgYSBjb25z
aXN0ZW50CiAgICAgLy8gcGFkZGluZy4KICAgICBjb25zdCBpbnQgcGFkZGluZyA9IDg7Ci0gICAg
c3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxl
LT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNl
dFBhZGRpbmdUb3AoTGVuZ3RoKDAsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0
b20oTGVuZ3RoKDAsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBh
ZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5n
LCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3RoKDAsIEZpeGVkKSk7Cisg
ICAgc3R5bGUuc2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoMCwgRml4ZWQpKTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZVNhZmFyaTo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewogICAgIC8vIFRo
ZXJlIGFyZSB0aHJlZSBhcHBlYXJhbmNlIGNvbnN0YW50cyBmb3IgYnV0dG9ucy4KICAgICAvLyAo
MSkgUHVzaC1idXR0b24gaXMgdGhlIGNvbnN0YW50IGZvciB0aGUgZGVmYXVsdCBBcXVhIHN5c3Rl
bSBidXR0b24uICBQdXNoIGJ1dHRvbnMgd2lsbCBub3Qgc2NhbGUgdmVydGljYWxseSBhbmQgd2ls
bCBub3QgYWxsb3cKQEAgLTUyMiwxNSArNTIyLDE1IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6
OmFkanVzdEJ1dHRvblN0eWwKICAgICAvLyBEZXRlcm1pbmUgb3VyIGNvbnRyb2wgc2l6ZSBiYXNl
ZCBvZmYgb3VyIGZvbnQuCiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xT
aXplRm9yRm9udChzdHlsZSk7CiAKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNo
QnV0dG9uUGFydCkgeworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBh
cnQpIHsKICAgICAgICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KLSAgICAgICAgc3R5bGUtPnJlc2V0
Qm9yZGVyKCk7CisgICAgICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKICAgICAgICAgLy8gSGVp
Z2h0IGlzIGxvY2tlZCB0byBhdXRvLgotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChB
dXRvKSk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoQXV0bykpOwogCiAgICAgICAg
IC8vIFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0byBwcmUKLSAgICAgICAgc3R5bGUtPnNldFdoaXRl
U3BhY2UoUFJFKTsKKyAgICAgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCiAgICAgICAg
IC8vIFNldCB0aGUgYnV0dG9uJ3MgdmVydGljYWwgc2l6ZS4KICAgICAgICAgc2V0QnV0dG9uU2l6
ZShzdHlsZSk7CkBAIC01NDQsMTEgKzU0NCwxMSBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjph
ZGp1c3RCdXR0b25TdHlsCiAgICAgICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc3R5bGVSZXNv
bHZlciwgc3R5bGUsIGNvbnRyb2xTaXplKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBTZXQg
YSBtaW4taGVpZ2h0IHNvIHRoYXQgd2UgY2FuJ3QgZ2V0IHNtYWxsZXIgdGhhbiB0aGUgbWluaSBi
dXR0b24uCi0gICAgICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKDE1LCBGaXhlZCkpOwor
ICAgICAgICBzdHlsZS5zZXRNaW5IZWlnaHQoTGVuZ3RoKDE1LCBGaXhlZCkpOwogCiAgICAgICAg
IC8vIFJlc2V0IHRoZSB0b3AgYW5kIGJvdHRvbSBib3JkZXJzLgotICAgICAgICBzdHlsZS0+cmVz
ZXRCb3JkZXJUb3AoKTsKLSAgICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyQm90dG9tKCk7CisgICAg
ICAgIHN0eWxlLnJlc2V0Qm9yZGVyVG9wKCk7CisgICAgICAgIHN0eWxlLnJlc2V0Qm9yZGVyQm90
dG9tKCk7CiAgICAgfQogfQogCkBAIC01NjksMTAgKzU2OSwxMCBAQCBjb25zdCBpbnQqIFJlbmRl
clRoZW1lU2FmYXJpOjpidXR0b25NYXJnCiAgICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVd
OwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRCdXR0b25TaXplKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldEJ1dHRvblNpemUoUmVu
ZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0
IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYg
KCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCku
aXNBdXRvKCkpCisgICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYg
IXN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBVc2Ug
dGhlIGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29u
dHJvbC4KQEAgLTYyMCw3ICs2MjAsNyBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFRl
eHRGaWVsZChjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJp
OjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFRleHRGaWVsZFN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCkBA
IC02NDgsNyArNjQ4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRUZXh0QXJlYShj
bwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0
VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKQEAgLTY5MCw3ICs2
OTAsNyBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0KGNvCiAgICAgc2l6
ZS5zZXRXaWR0aChyLndpZHRoKCkpOwogCiAgICAgLy8gTm93IGluZmxhdGUgaXQgdG8gYWNjb3Vu
dCBmb3IgdGhlIHNoYWRvdy4KLSAgICBpZiAoci53aWR0aCgpID49IG1pbmltdW1NZW51TGlzdFNp
emUoJm8uc3R5bGUoKSkpCisgICAgaWYgKHIud2lkdGgoKSA+PSBtaW5pbXVtTWVudUxpc3RTaXpl
KG8uc3R5bGUoKSkpCiAgICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVk
UmVjdCwgc2l6ZSwgcG9wdXBCdXR0b25NYXJnaW5zKGNvbnRyb2xTaXplKSk7CiAKICAgICBwYWlu
dFRoZW1lUGFydChEcm9wRG93bkJ1dHRvblBhcnQsIGluZm8uY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCksIGluZmxhdGVkUmVjdCwgY29udHJvbFNpemUsIGRldGVybWluZVN0YXRlKG8pKTsKQEAg
LTg2NCwyMiArODY0LDIyIEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RC
dXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVz
dE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0
TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6
ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7CiAKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIo
KTsKLSAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsK
KyAgICBzdHlsZS5yZXNldFBhZGRpbmcoKTsKICAgICAKICAgICAvLyBIZWlnaHQgaXMgbG9ja2Vk
IHRvIGF1dG8uCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworICAgIHN0eWxl
LnNldEhlaWdodChMZW5ndGgoQXV0bykpOwogCiAgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2Vk
IHRvIHByZQotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUuc2V0V2hp
dGVTcGFjZShQUkUpOwogCiAgICAgLy8gU2V0IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHRvIGJsYWNr
IG9yIGdyYXkgd2hlbiB3ZSBoYXZlIHRoZSBhcXVhIGxvb2suCiAgICAgLy8gQ2FzdCB0byBSR0Iz
MiBpcyB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGVyIGJ1Zy4KLSAgICBzdHlsZS0+c2V0Q29sb3Io
ZSAmJiAhZS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkgPyBzdGF0aWNfY2FzdDxSR0JBMzI+KENv
bG9yOjpibGFjaykgOiBDb2xvcjo6ZGFya0dyYXkpOworICAgIHN0eWxlLnNldENvbG9yKCFlLmlz
RGlzYWJsZWRGb3JtQ29udHJvbCgpID8gc3RhdGljX2Nhc3Q8UkdCQTMyPihDb2xvcjo6YmxhY2sp
IDogQ29sb3I6OmRhcmtHcmF5KTsKIAogICAgIC8vIFNldCB0aGUgYnV0dG9uJ3MgdmVydGljYWwg
c2l6ZS4KICAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKQEAgLTg5MCw1NiArODkwLDU2IEBAIHZv
aWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0U3QKICAgICBzZXRGb250RnJvbUNv
bnRyb2xTaXplKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBjb250cm9sU2l6ZSk7CiB9CiAKLWludCBS
ZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdM
ZWZ0KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFu
Y2UoKSA9PSBNZW51bGlzdFBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51
bGlzdFBhcnQpCiAgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVG
b3JGb250KHN0eWxlKSlbbGVmdFBhZGRpbmddOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgp
ID09IE1lbnVsaXN0QnV0dG9uUGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1l
bnVsaXN0QnV0dG9uUGFydCkKICAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ0xlZnQ7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVT
YWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dAogewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICBp
ZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKICAgICAgICAgcmV0dXJuIHBv
cHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtyaWdodFBhZGRpbmdd
OwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgewot
ICAgICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6
ZTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgewor
ICAgICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXpl
OwogICAgICAgICBmbG9hdCBhcnJvd1dpZHRoID0gYmFzZUFycm93V2lkdGggKiBmb250U2NhbGU7
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGFycm93V2lkdGggKyBhcnJv
d1BhZGRpbmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9y
KSk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi1pbnQgUmVuZGVyVGhlbWVTYWZhcmk6OnBv
cHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5k
ZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUmIHN0eWxl
KSBjb25zdAogewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkK
KyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKICAgICAgICAgcmV0
dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVt0b3BQYWRk
aW5nXTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQp
CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCiAgICAg
ICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdUb3A7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWlu
dCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lU2FmYXJpOjpwb3B1cEludGVybmFsUGFk
ZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5h
cHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkg
PT0gTWVudWxpc3RQYXJ0KQogICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRy
b2xTaXplRm9yRm9udChzdHlsZSkpW2JvdHRvbVBhZGRpbmddOwotICAgIGlmIChzdHlsZS0+YXBw
ZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5j
ZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKICAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFk
ZGluZ0JvdHRvbTsKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVM
aXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVu
dCYpIGNvbnN0CiB7Ci0gICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBi
YXNlRm9udFNpemU7CisgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUuZm9udFNpemUoKSAvIGJh
c2VGb250U2l6ZTsKICAgICAKLSAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7Ci0gICAgc3R5bGUt
PnNldEJvcmRlclJhZGl1cyhJbnRTaXplKGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxl
IC0gMSksIGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSkpKTsgLy8gRklYTUU6
IFJvdW5kIHVwPworICAgIHN0eWxlLnJlc2V0UGFkZGluZygpOworICAgIHN0eWxlLnNldEJvcmRl
clJhZGl1cyhJbnRTaXplKGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSksIGlu
dChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSkpKTsgLy8gRklYTUU6IFJvdW5kIHVw
PwogCiAgICAgY29uc3QgaW50IG1pbkhlaWdodCA9IDE1OwotICAgIHN0eWxlLT5zZXRNaW5IZWln
aHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRNaW5IZWlnaHQoTGVu
Z3RoKG1pbkhlaWdodCwgRml4ZWQpKTsKICAgICAKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdo
dChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKIGNvbnN0IEludFNpemUq
IFJlbmRlclRoZW1lU2FmYXJpOjptZW51TGlzdFNpemVzKCkgY29uc3QKQEAgLTk0OCw3ICs5NDgs
NyBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZVNhZmFyaTo6bWVudUxpCiAgICAgcmV0dXJu
IHNpemVzOwogfQogCi1pbnQgUmVuZGVyVGhlbWVTYWZhcmk6Om1pbmltdW1NZW51TGlzdFNpemUo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lU2FmYXJpOjptaW5pbXVt
TWVudUxpc3RTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gc2l6
ZUZvclN5c3RlbUZvbnQoc3R5bGUsIG1lbnVMaXN0U2l6ZXMoKSkud2lkdGgoKTsKIH0KQEAgLTk4
NywxMCArOTg3LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2xpZGVyVHJhY2sK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNs
aWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdCAKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVz
dFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdCAKIHsgCiAgICAgUmVuZGVyVGhlbWU6OmFkanVz
dFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwotICAgIHN0eWxlLT5z
ZXRCb3hTaGFkb3cobnVsbHB0cik7IAorICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsg
CiB9IAogCiBjb25zdCBmbG9hdCB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwpA
QCAtMTAwNSwxNCArMTAwNSwxNCBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNsaWRl
clRodW1iCiBjb25zdCBpbnQgc2xpZGVyVGh1bWJXaWR0aCA9IDE1OwogY29uc3QgaW50IHNsaWRl
clRodW1iSGVpZ2h0ID0gMTU7CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNsaWRl
clRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwg
RWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVy
VGh1bWJIb3Jpem9udGFsUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1i
VmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1
bWJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVy
VGh1bWJIZWlnaHQsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBTbGlk
ZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVt
YlZlcnRpY2FsUGFydCkgeworICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1
bWJXaWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJU
aHVtYkhlaWdodCwgRml4ZWQpKTsKICAgICB9IAogI2lmIEVOQUJMRShWSURFTykKLSAgICBlbHNl
IGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KSAKKyAgICBl
bHNlIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJUaHVtYlBhcnQpIAogICAg
ICAgICBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShzdHls
ZSk7CiAjZW5kaWYKIH0KQEAgLTEwMzEsNDAgKzEwMzEsNDAgQEAgY29uc3QgSW50U2l6ZSogUmVu
ZGVyVGhlbWVTYWZhcmk6OnNlYXJjaAogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZVNhZmFyaTo6c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHls
ZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJv
dGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxl
LT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8o
KSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUu
aGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBVc2UgdGhl
IGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJv
bC4KICAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIHNlYXJjaEZpZWxkU2l6ZXMoKSk7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUpIGNv
bnN0CiB7CiAgICAgLy8gT3ZlcnJpZGUgYm9yZGVyLgotICAgIHN0eWxlLT5yZXNldEJvcmRlcigp
OworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAgICAgY29uc3Qgc2hvcnQgYm9yZGVyV2lkdGgg
PSAyOwotICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHN0
eWxlLT5zZXRCb3JkZXJMZWZ0U3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSaWdo
dFdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmlnaHRTdHlsZShJTlNF
VCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBz
dHlsZS0+c2V0Qm9yZGVyQm90dG9tU3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJU
b3BXaWR0aChib3JkZXJXaWR0aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclRvcFN0eWxlKElOU0VU
KTsgICAgCisgICAgc3R5bGUuc2V0Qm9yZGVyTGVmdFdpZHRoKGJvcmRlcldpZHRoKTsKKyAgICBz
dHlsZS5zZXRCb3JkZXJMZWZ0U3R5bGUoSU5TRVQpOworICAgIHN0eWxlLnNldEJvcmRlclJpZ2h0
V2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNldEJvcmRlclJpZ2h0U3R5bGUoSU5TRVQp
OworICAgIHN0eWxlLnNldEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlcldpZHRoKTsKKyAgICBzdHls
ZS5zZXRCb3JkZXJCb3R0b21TdHlsZShJTlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyVG9wV2lk
dGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNldEJvcmRlclRvcFN0eWxlKElOU0VUKTsgICAg
CiAgICAgCiAgICAgLy8gT3ZlcnJpZGUgaGVpZ2h0LgotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKEF1dG8pKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKICAgICBzZXRT
ZWFyY2hGaWVsZFNpemUoc3R5bGUpOwogICAgIAogICAgIC8vIE92ZXJyaWRlIHBhZGRpbmcgc2l6
ZSB0byBtYXRjaCBBcHBLaXQgdGV4dCBwb3NpdGlvbmluZy4KICAgICBjb25zdCBpbnQgcGFkZGlu
ZyA9IDE7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0g
ICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5
bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUu
c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFk
ZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdU
b3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0JvdHRvbShM
ZW5ndGgocGFkZGluZywgRml4ZWQpKTsKICAgICAKICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xT
aXplID0gY29udHJvbFNpemVGb3JGb250KHN0eWxlKTsKICAgICBzZXRGb250RnJvbUNvbnRyb2xT
aXplKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBjb250cm9sU2l6ZSk7CkBAIC0xMDkyLDExICsxMDky
LDExIEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lU2FmYXJpOjpjYW5jZWwKICAgICByZXR1
cm4gc2l6ZXM7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1l
bnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxl
LCBjYW5jZWxCdXR0b25TaXplcygpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUu
d2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdo
dCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZp
eGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkp
OwogfQogCiBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZVNhZmFyaTo6cmVzdWx0c0J1dHRvblNp
emVzKCkgY29uc3QKQEAgLTExMDYsMTEgKzExMDYsMTEgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVy
VGhlbWVTYWZhcmk6OnJlc3VsdAogfQogCiBjb25zdCBpbnQgZW1wdHlSZXN1bHRzT2Zmc2V0ID0g
OTsKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBh
cnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBh
cnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29u
c3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0
c0J1dHRvblNpemVzKCkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgp
IC0gZW1wdHlSZXN1bHRzT2Zmc2V0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNp
emUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRI
ZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhl
bWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKQEAgLTExMTgsMTEgKzExMTgs
MTEgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZv
clN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKLSAgICBzdHlsZS0+c2V0
V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0
KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0
aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXpl
LmhlaWdodCgpLCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmKQpAQCAtMTE0MiwxMSArMTE0
MiwxMSBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkCiB9CiAKIGNv
bnN0IGludCByZXN1bHRzQXJyb3dXaWR0aCA9IDU7Ci12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVG
b3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNl
dFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsK
LSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAg
IHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0aCwg
Rml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVk
KSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRz
QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmKQpAQCAtMTE5MCw5ICsxMTkwLDkgQEAgU3RyaW5nIFJlbmRlclRoZW1l
U2FmYXJpOjptZWRpYUNvbnRyb2xzUwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVO
VCkKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
U2FmYXJpOjphZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7
CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRoZW1l
U2FmYXJpOjpzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0CkBAIC0xMjA1LDcg
KzEyMDUsNyBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpzdXBwb3J0c01ldGVyKENvCiAgICAg
fQogfQogCi1JbnRTaXplIFJlbmRlclRoZW1lU2FmYXJpOjptZXRlclNpemVGb3JCb3VuZHMoY29u
c3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CitJbnRTaXplIFJl
bmRlclRoZW1lU2FmYXJpOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXImLCBj
b25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7
CiB9CkBAIC0xMjE3LDcgKzEyMTcsNyBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1l
dGVyKGNvbnN0CiAgICAgaWYgKCFyZW5kZXJPYmplY3QuaXNNZXRlcigpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVy
KCZyZW5kZXJPYmplY3QpLT5tZXRlckVsZW1lbnQoKTsKKyAgICBIVE1MTWV0ZXJFbGVtZW50KiBl
bGVtZW50ID0gdG9SZW5kZXJNZXRlcihyZW5kZXJPYmplY3QpLm1ldGVyRWxlbWVudCgpOwogCiAg
ICAgaW50IHJlbWFpbmluZyA9IHN0YXRpY19jYXN0PGludD4oKDEuMCAtIGVsZW1lbnQtPnZhbHVl
UmF0aW8oKSkgKiBzdGF0aWNfY2FzdDxkb3VibGU+KHJlY3Quc2l6ZSgpLndpZHRoKCkpKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgJKHJl
dmlzaW9uIDE3MDQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNh
ZmFyaS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBJbnRSZWN0
Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxl
KiwgY29uc3QgQm9yZGVyRGF0YSYsCisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChj
b25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEJvcmRlckRhdGEmLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CkBAIC03NCw1NiArNzQsNTYgQEAgcHVibGljOgogICAg
IC8vIFN5c3RlbSBmb250cy4KICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlE
LCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51
TGlzdFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVu
dUxpc3RTaXplKFJlbmRlclN0eWxlJikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsgCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1i
U2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Q7IAogICAgIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVm
dChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRk
aW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVy
bmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBvcHVw
SW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBp
bnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgdmly
dHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSYpIGNvbnN0Owor
ICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlJikgY29u
c3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5
bGUmKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFy
YW5jZSB2YWx1ZS4KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2
b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9v
bCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0
OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIFdlYkNvcmU6OkVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgV2ViQ29yZTo6
RWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29s
IHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBF
bGVtZW50JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKIAogICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RC
dXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2xp
ZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50Jikg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgCiAgICAgdmlydHVhbCBib29sIHBhaW50Q2Fw
c0xvY2tJbmRpY2F0b3IoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwpAQCAtMTM0LDkgKzEzNCw5IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiAj
aWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCi0gICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZv
ckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1l
dGVyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0KSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICNlbmRpZgogCkBAIC0xNTAsMTMgKzE1
MCwxMyBAQCBwcml2YXRlOgogCiAgICAgLy8gR2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2Zm
IHRoZSBmb250LiAgVXNlZCBieSBzb21lIG9mIHRoZSBjb250cm9scyAobGlrZSBidXR0b25zKS4K
IAotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlKikgY29u
c3Q7Ci0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5
bGUqKSBjb25zdDsKKyAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJT
dHlsZSYpIGNvbnN0OworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JTeXN0ZW1Gb250
KFJlbmRlclN0eWxlJikgY29uc3Q7CiAgICAgLy92b2lkIHNldENvbnRyb2xTaXplKE5TQ2VsbCos
IGNvbnN0IEludFNpemUqIHNpemVzLCBjb25zdCBJbnRTaXplJiBtaW5TaXplKTsKLSAgICB2b2lk
IHNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25z
dDsKLSAgICBJbnRTaXplIHNpemVGb3JGb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSog
c2l6ZXMpIGNvbnN0OwotICAgIEludFNpemUgc2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUq
LCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7Ci0gICAgdm9pZCBzZXRGb250RnJvbUNvbnRy
b2xTaXplKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIE5TQ29udHJvbFNpemUpIGNvbnN0
OworICAgIHZvaWQgc2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlJiwgY29uc3QgSW50U2l6ZSog
c2l6ZXMpIGNvbnN0OworICAgIEludFNpemUgc2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmLCBjb25z
dCBJbnRTaXplKiBzaXplcykgY29uc3Q7CisgICAgSW50U2l6ZSBzaXplRm9yU3lzdGVtRm9udChS
ZW5kZXJTdHlsZSYsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKKyAgICB2b2lkIHNldEZv
bnRGcm9tQ29udHJvbFNpemUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgTlNDb250cm9s
U2l6ZSkgY29uc3Q7CiAKICAgICAvLyBIZWxwZXJzIGZvciBhZGp1c3RpbmcgYXBwZWFyYW5jZSBh
bmQgZm9yIHBhaW50aW5nCiAgICAgY29uc3QgSW50U2l6ZSogY2hlY2tib3hTaXplcygpIGNvbnN0
OwpAQCAtMTY1LDcgKzE2NSw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgSW50U2l6ZSogcmFkaW9T
aXplcygpIGNvbnN0OwogICAgIGNvbnN0IGludCogcmFkaW9NYXJnaW5zKE5TQ29udHJvbFNpemUp
IGNvbnN0OwogCi0gICAgdm9pZCBzZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRl
clN0eWxlKiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7CisgICAgdm9pZCBzZXRCdXR0b25QYWRkaW5n
RnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlJiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7CiAgICAg
Y29uc3QgSW50U2l6ZSogYnV0dG9uU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBpbnQqIGJ1dHRv
bk1hcmdpbnMoTlNDb250cm9sU2l6ZSkgY29uc3Q7CiAKQEAgLTE3OCw3ICsxNzgsNyBAQCBwcml2
YXRlOgogICAgIGNvbnN0IEludFNpemUqIHNlYXJjaEZpZWxkU2l6ZXMoKSBjb25zdDsKICAgICBj
b25zdCBJbnRTaXplKiBjYW5jZWxCdXR0b25TaXplcygpIGNvbnN0OwogICAgIGNvbnN0IEludFNp
emUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VhcmNoRmllbGRT
aXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdm9pZCBzZXRTZWFyY2hGaWVsZFNpemUoUmVu
ZGVyU3R5bGUmKSBjb25zdDsKIAogICAgIFRoZW1lQ29udHJvbFN0YXRlIGRldGVybWluZVN0YXRl
KGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJldmlzaW9uIDE3MDQxNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
MSw3ICsyOTEsNyBAQCBTdHJpbmcgUmVuZGVyVGhlbWVXaW46OmV4dHJhUXVpcmtzU3R5bGVTCiAg
ICAgcmV0dXJuIFN0cmluZyh0aGVtZVdpblF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVv
Zih0aGVtZVdpblF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZVdpbjo6c3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0Citib29sIFJl
bmRlclRoZW1lV2luOjpzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QKIHsK
ICAgICAvLyBUaGUgQ2xhc3NpYy8yayBsb29rIGhhcyBubyBob3ZlciBlZmZlY3RzLgogICAgIHJl
dHVybiBoYXZlVGhlbWU7CkBAIC00MjksOSArNDI5LDkgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6
c3VwcG9ydHNGb2N1cyhDb250cgogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3Vw
cG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorYm9vbCBSZW5k
ZXJUaGVtZVdpbjo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBj
b25zdAogewotICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOwor
ICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLmFwcGVhcmFuY2UoKSk7CiB9CiAKIHVuc2ln
bmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVDbGFzc2ljU3RhdGUoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvLCBDb250cm9sU3ViUGFydCBzdWJQYXJ0KQpAQCAtNzMwLDEzICs3MzAsMTMgQEAgYm9v
bCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRCdXR0b24oY29uc3QgUgogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
JiBlKSBjb25zdAogewogICAgIGludCB3aWR0aCA9IDo6R2V0U3lzdGVtTWV0cmljcyhTTV9DWFZT
Q1JPTEwpOwogICAgIGlmICh3aWR0aCA8PSAwKQogICAgICAgICB3aWR0aCA9IDE3OyAvLyBWaXN0
YSdzIGRlZmF1bHQuCi0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsK
LSAgICBzdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxl
LnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRNaW5XaWR0aChM
ZW5ndGgod2lkdGgsIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50SW5u
ZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByKQpAQCAtNzU1LDI5ICs3NTUsMjkgQEAgYm9vbCBSZW5kZXJUaGVtZVdp
bjo6cGFpbnRJbm5lclNwaW5CdXR0bwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZVdpbjo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVXaW46OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNv
bnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVk
LCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlz
SW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAo
IXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNB
dXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiAgQSBoYXJkLWNvZGVkIHNp
emUgb2YgMTMgaXMgdXNlZC4gIFRoaXMgaXMgd3JvbmcgYnV0IG5lY2Vzc2FyeSBmb3Igbm93LiAg
SXQgbWF0Y2hlcyBGaXJlZm94LgogICAgIC8vIEF0IGRpZmZlcmVudCBEUEkgc2V0dGluZ3Mgb24g
V2luZG93cywgcXVlcnlpbmcgdGhlIHRoZW1lIGdpdmVzIHlvdSBhIGxhcmdlciBzaXplIHRoYXQg
YWNjb3VudHMgZm9yCiAgICAgLy8gdGhlIGhpZ2hlciBEUEkuICBVbnRpbCBvdXIgZW50aXJlIGVu
Z2luZSBob25vcnMgYSBEUEkgc2V0dGluZyBvdGhlciB0aGFuIDk2LCB3ZSBjYW4ndCByZWx5IG9u
IHRoZSB0aGVtZSdzCiAgICAgLy8gbWV0cmljcy4KLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCgxMywgRml4
ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBzdHlsZS0+
c2V0SGVpZ2h0KExlbmd0aCgxMywgRml4ZWQpKTsKKyAgICBpZiAoc3R5bGUud2lkdGgoKS5pc0lu
dHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoMTMsIEZpeGVk
KSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHlsZS5zZXRI
ZWlnaHQoTGVuZ3RoKDEzLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpwYWlu
dFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50VGV4dEZpZWxkKGNvbnN0
IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBGbG9hdFJlY3QmIHIp
CiB7Ci0gICAgZHJhd0NvbnRyb2woaS5jb250ZXh0LCAgbywgdGV4dEZpZWxkVGhlbWUoKSwgZ2V0
VGhlbWVEYXRhKG8pLCByKTsKKyAgICBkcmF3Q29udHJvbChpLmNvbnRleHQsICBvLCB0ZXh0Rmll
bGRUaGVtZSgpLCBnZXRUaGVtZURhdGEobyksIEludFJlY3QocikpOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKICAgICBIQU5ETEUgdGhlbWU7CiAgICAgaW50IHBhcnQ7CkBAIC03OTIs
NDYgKzc5Miw0NiBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1lbnVMaXN0KGNvbnN0CiAg
ICAgICAgIHBhcnQgPSBURlBfVEVYVEZJRUxEOwogICAgIH0KIAotICAgIGRyYXdDb250cm9sKHBh
aW50SW5mby5jb250ZXh0LCByZW5kZXJlciwgdGhlbWUsIFRoZW1lRGF0YShwYXJ0LCBkZXRlcm1p
bmVTdGF0ZShyZW5kZXJlcikpLCByZWN0KTsKKyAgICBkcmF3Q29udHJvbChwYWludEluZm8uY29u
dGV4dCwgcmVuZGVyZXIsIHRoZW1lLCBUaGVtZURhdGEocGFydCwgZGV0ZXJtaW5lU3RhdGUocmVu
ZGVyZXIpKSwgSW50UmVjdChyZWN0KSk7CiAgICAgCiAgICAgcmV0dXJuIHBhaW50TWVudUxpc3RC
dXR0b25EZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCBGbG9hdFJlY3QocmVjdCkpOwog
fQogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewot
ICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAgICAg
YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUpIGNv
bnN0CiB7CiAgICAgLy8gVGhlc2UgYXJlIHRoZSBwYWRkaW5ncyBuZWVkZWQgdG8gcGxhY2UgdGhl
IHRleHQgY29ycmVjdGx5IGluIHRoZSA8c2VsZWN0PiBib3gKICAgICBjb25zdCBpbnQgZHJvcERv
d25Cb3hQYWRkaW5nVG9wICAgID0gMjsKLSAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5n
UmlnaHQgID0gc3R5bGUtPmRpcmVjdGlvbigpID09IExUUiA/IDQgKyBkcm9wRG93bkJ1dHRvbldp
ZHRoIDogNDsKKyAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nUmlnaHQgID0gc3R5bGUu
ZGlyZWN0aW9uKCkgPT0gTFRSID8gNCArIGRyb3BEb3duQnV0dG9uV2lkdGggOiA0OwogICAgIGNv
bnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdCb3R0b20gPSAyOwotICAgIGNvbnN0IGludCBkcm9w
RG93bkJveFBhZGRpbmdMZWZ0ICAgPSBzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gNCA6IDQg
KyBkcm9wRG93bkJ1dHRvbldpZHRoOworICAgIGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdM
ZWZ0ICAgPSBzdHlsZS5kaXJlY3Rpb24oKSA9PSBMVFIgPyA0IDogNCArIGRyb3BEb3duQnV0dG9u
V2lkdGg7CiAgICAgLy8gVGhlIDxzZWxlY3Q+IGJveCBtdXN0IGJlIGF0IGxlYXN0IDEycHggaGln
aCBmb3IgdGhlIGJ1dHRvbiB0byByZW5kZXIgbmljZWx5IG9uIFdpbmRvd3MKICAgICBjb25zdCBp
bnQgZHJvcERvd25Cb3hNaW5IZWlnaHQgPSAxMjsKICAgICAKICAgICAvLyBQb3NpdGlvbiB0aGUg
dGV4dCBjb3JyZWN0bHkgd2l0aGluIHRoZSBzZWxlY3QgYm94IGFuZCBtYWtlIHRoZSBib3ggd2lk
ZSBlbm91Z2ggdG8gZml0IHRoZSBkcm9wZG93biBidXR0b24KLSAgICBzdHlsZS0+c2V0UGFkZGlu
Z1RvcChMZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5nVG9wLCBGaXhlZCkpOwotICAgIHN0eWxlLT5z
ZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ1JpZ2h0LCBGaXhlZCkpOwot
ICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChkcm9wRG93bkJveFBhZGRpbmdCb3R0
b20sIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChkcm9wRG93bkJv
eFBhZGRpbmdMZWZ0LCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3RoKGRy
b3BEb3duQm94UGFkZGluZ1RvcCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nUmlnaHQo
TGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ1JpZ2h0LCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBh
ZGRpbmdCb3R0b20oTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKKyAg
ICBzdHlsZS5zZXRQYWRkaW5nTGVmdChMZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5nTGVmdCwgRml4
ZWQpKTsKIAogICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0bwotICAgIHN0eWxlLT5zZXRI
ZWlnaHQoTGVuZ3RoKEF1dG8pKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsK
IAogICAgIC8vIENhbGN1bGF0ZSBvdXIgbWluLWhlaWdodAotICAgIGludCBtaW5IZWlnaHQgPSBz
dHlsZS0+Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICBpbnQgbWluSGVpZ2h0ID0gc3R5bGUu
Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKICAgICBtaW5IZWlnaHQgPSBtYXgobWluSGVpZ2h0LCBk
cm9wRG93bkJveE1pbkhlaWdodCk7CiAKLSAgICBzdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aCht
aW5IZWlnaHQsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0TWluSGVpZ2h0KExlbmd0aChtaW5IZWln
aHQsIEZpeGVkKSk7CiAKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6
aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAgICAgCiAgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2Vk
IHRvIHByZQotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUuc2V0V2hp
dGVTcGFjZShQUkUpOwogfQogCiBib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1lbnVMaXN0QnV0
dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTg4NiwxNSArODg2LDE1
IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2xpZGVyVGh1bWIoY28KIGNvbnN0IGludCBz
bGlkZXJUaHVtYldpZHRoID0gNzsKIGNvbnN0IGludCBzbGlkZXJUaHVtYkhlaWdodCA9IDE1Owog
Ci12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNsaWRl
clRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIENv
bnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOworICAgIENvbnRyb2xQYXJ0IHBh
cnQgPSBzdHlsZS5hcHBlYXJhbmNlKCk7CiAgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0
aWNhbFBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYkhl
aWdodCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1
bWJXaWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRo
dW1iSGVpZ2h0LCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRl
clRodW1iV2lkdGgsIEZpeGVkKSk7CiAgICAgfSBlbHNlIGlmIChwYXJ0ID09IFNsaWRlclRodW1i
SG9yaXpvbnRhbFBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJU
aHVtYldpZHRoLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlk
ZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNs
aWRlclRodW1iV2lkdGgsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgo
c2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CiAgICAgfQogI2lmIEVOQUJMRShWSURFTykgJiYg
VVNFKENHKQogICAgIGVsc2UgaWYgKHBhcnQgPT0gTWVkaWFTbGlkZXJUaHVtYlBhcnQgfHwgcGFy
dCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCkgCkBAIC05MDcsMTYgKzkwNywxNiBAQCBi
b29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkKGNvCiAgICAgcmV0dXJuIHBhaW50
VGV4dEZpZWxkKG8sIGksIHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFy
Y2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJj
aEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0
eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewogICAgIC8vIE92ZXJyaWRlIHBhZGRpbmdTaXplIHRv
IG1hdGNoIEFwcEtpdCB0ZXh0IHBvc2l0aW9uaW5nLgogICAgIGNvbnN0IGludCBwYWRkaW5nID0g
MTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0g
ICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+
c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBpZiAoZSAmJiBl
LT5mb2N1c2VkKCkgJiYgZS0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5pc0ZvY3Vz
ZWRBbmRBY3RpdmUoKSkKLSAgICAgICAgc3R5bGUtPnNldE91dGxpbmVPZmZzZXQoLTIpOworICAg
IHN0eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxl
LnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQ
YWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdC
b3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgaWYgKGUuZm9jdXNlZCgpICYmIGUu
ZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkKKyAg
ICAgICAgc3R5bGUuc2V0T3V0bGluZU9mZnNldCgtMik7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVX
aW46OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKQEAgLTk0NCwzMCAr
OTQ0LDMwIEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRDYW4KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQm
KSBjb25zdAogewogICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9u
dCBzaXplCi0gICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0
Q29udHJvbEZvbnRQaXhlbFNpemU7CisgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUuZm9udFNp
emUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKICAgICBpbnQgY2FuY2VsQnV0dG9u
U2l6ZSA9IGxyb3VuZGYobWluKG1heChtaW5DYW5jZWxCdXR0b25TaXplLCBkZWZhdWx0Q2FuY2Vs
QnV0dG9uU2l6ZSAqIGZvbnRTY2FsZSksIG1heENhbmNlbEJ1dHRvblNpemUpKTsKLSAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS5z
ZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRI
ZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVXaW46OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBJbnRTaXplIGVt
cHR5U2l6ZSgxLCAxMSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChlbXB0eVNpemUud2lk
dGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChlbXB0eVNpemUuaGVp
Z2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0
aCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoZW1wdHlTaXplLmhlaWdo
dCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAvLyBTY2FsZSB0aGUgZGVjb3JhdGlv
biBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKLSAgICBmbG9hdCBmb250U2NhbGUgPSBzdHls
ZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAgICBmbG9hdCBm
b250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXpl
OwogICAgIGludCBtYWduaWZpZXJTaXplID0gbHJvdW5kZihtaW4obWF4KG1pblNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25TaXplLCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blNpemUgKiBmb250U2NhbGUpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOwotICAgIHN0eWxlLT5zZXRX
aWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0
KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0
aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgobWFn
bmlmaWVyU2l6ZSwgRml4ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtOTkzLDE1ICs5OTMs
MTUgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlcwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50Jikg
Y29uc3QKIHsKICAgICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQg
c2l6ZQotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENv
bnRyb2xGb250UGl4ZWxTaXplOworICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLmZvbnRTaXpl
KCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7CiAgICAgaW50IG1hZ25pZmllckhlaWdo
dCA9IGxyb3VuZGYobWluKG1heChtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSwg
ZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplICogZm9udFNjYWxlKSwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb25TaXplKSk7CiAgICAgaW50IG1hZ25pZmllcldpZHRoID0gbHJvdW5kZihtYWduaWZp
ZXJIZWlnaHQgKiBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggLyBkZWZhdWx0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpOwotICAgIHN0eWxlLT5zZXRXaWR0aChM
ZW5ndGgobWFnbmlmaWVyV2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5n
dGgobWFnbmlmaWVySGVpZ2h0LCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aCht
YWduaWZpZXJXaWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25p
ZmllckhlaWdodCwgRml4ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKQEAgLTExNTcsOSArMTE1Nyw5IEBAIFN0
cmluZyBSZW5kZXJUaGVtZVdpbjo6bWVkaWFDb250cm9sc1NjcmkKICNlbmRpZgogCiAjaWYgRU5B
QkxFKE1FVEVSX0VMRU1FTlQpCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RNZXRlclN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93
KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogYm9vbCBS
ZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNNZXRlcihDb250cm9sUGFydCBwYXJ0KSBjb25zdApAQCAt
MTE3Miw3ICsxMTcyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNNZXRlcihDb250
cgogICAgIH0KIH0KIAotSW50U2l6ZSBSZW5kZXJUaGVtZVdpbjo6bWV0ZXJTaXplRm9yQm91bmRz
KGNvbnN0IFJlbmRlck1ldGVyKiwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAorSW50U2l6
ZSBSZW5kZXJUaGVtZVdpbjo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwg
Y29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAogewogICAgIHJldHVybiBib3VuZHMuc2l6ZSgp
OwogfQpAQCAtMTE4Miw3ICsxMTgyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZXRl
cihjb25zdCBSZQogICAgIGlmICghcmVuZGVyT2JqZWN0LmlzTWV0ZXIoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gdG9SZW5kZXJNZXRl
cigmcmVuZGVyT2JqZWN0KS0+bWV0ZXJFbGVtZW50KCk7CisgICAgSFRNTE1ldGVyRWxlbWVudCog
ZWxlbWVudCA9IHRvUmVuZGVyTWV0ZXIocmVuZGVyT2JqZWN0KS5tZXRlckVsZW1lbnQoKTsKIAog
ICAgIFRoZW1lRGF0YSB0aGVtZSA9IGdldFRoZW1lRGF0YShyZW5kZXJPYmplY3QpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaAkocmV2aXNpb24gMTcw
NDE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDc0ICs1NSw3NCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcg
ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhl
IHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3Zl
cmVkLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUm
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3Jt
SW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIFN5c3RlbSBmb250cy4KLSAg
ICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBj
b25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKENTU1ZhbHVlSUQpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoQ1NTVmFsdWVJ
RCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNv
bnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikgb3ZlcnJpZGUKICAgICB7IHJldHVy
biBwYWludEJ1dHRvbihvLCBpLCByKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNp
emUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXpl
KFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRS
YWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcikKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikgb3ZlcnJpZGUKICAgICB7
IHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRp
b1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRp
b1NpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdCBvdmVycmlkZQogICAgIHsgcmV0dXJuIHNl
dENoZWNrYm94U2l6ZShzdHlsZSk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9v
bCBwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRU
ZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAg
IHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3Qg
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorICAgIHZpcnR1YWwgYm9vbCBwYWludFRl
eHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBG
bG9hdFJlY3QmIHIpIG92ZXJyaWRlCiAgICAgeyByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwg
cik7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVs
ZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVy
VGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29sIHBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0
SW5kZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwb3B1cE9w
dGlvblN1cHBvcnRzVGV4dEluZGVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
ZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHRoZW1l
Q2hhbmdlZCgpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRl
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlIHsgfQogCiAgICAgc3RhdGljIHZv
aWQgc2V0V2ViS2l0SXNCZWluZ1VubG9hZGVkKCk7CiAKICAgICBzdGF0aWMgU3RyaW5nIHN0cmlu
Z1dpdGhDb250ZW50c09mRmlsZShDRlN0cmluZ1JlZiBuYW1lLCBDRlN0cmluZ1JlZiB0eXBlKTsK
IAotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSop
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJT
dHlsZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwg
U3RyaW5nIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkgb3ZlcnJpZGU7CkBAIC0xMzAsMTMgKzEz
MCwxMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5UKQotICAg
IHZpcnR1YWwgSW50U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBj
b25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBJbnRTaXplIG1ldGVy
U2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihDb250cm9sUGFydCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVs
ZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJp
ZGU7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVu
Rm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
U2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CiAKIHByaXZhdGU6CiAgICAgZW51bSBDb250cm9sU3ViUGFydCB7CkBAIC0xNDgsNyArMTQ4
LDcgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJUaGVtZVdpbigpOwogICAgIHZpcnR1YWwgflJlbmRl
clRoZW1lV2luKCk7CiAKLSAgICB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUq
KSBjb25zdDsKKyAgICB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUmKSBjb25z
dDsKICAgICB2b2lkIGNsb3NlKCk7CiAKICAgICB1bnNpZ25lZCBkZXRlcm1pbmVTdGF0ZShjb25z
dCBSZW5kZXJPYmplY3QmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233820</attachid>
            <date>2014-06-25 09:48:01 -0700</date>
            <delta_ts>2014-06-25 10:00:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134261-20140625094740.patch</filename>
            <type>text/plain</type>
            <size>220818</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2NyBAQAorMjAxNC0wNi0yNCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorICAgICAgICAgICAgQW5kIHBl
YXZvQG91dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5jb20+CisKKyAgICAgICAgVXNlIHJlZmVy
ZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycyBpbiBSZW5kZXJUaGVtZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDI2MQorCisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRq
dXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkSGF2ZVNwaW5CdXR0
b24pOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lRWZsOjphZGp1c3RTaXplQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVFZmw6OmFwcGx5RWRqZVJUTFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lRWZsOjppc0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lRWZsOjpzdXBwb3J0c0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUVmbDo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUVmbDo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lRWZsOjphZGp1c3RDaGVja2JveFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lRWZsOjphZGp1c3RSYWRpb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lRWZsOjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUVmbDo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUVmbDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRBcmVhU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lRWZsOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9n
cmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YW5pbWF0aW9uRHVy
YXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1l
RWZsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpzdXBwb3J0c0ZvY3VzUmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
R3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmJvcmRlclJhZGlpRnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclBy
b2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphbmltYXRpb25E
dXJhdGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3Rr
OjpjYWxjdWxhdGVQcm9ncmVzc1JlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUd0ay5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0VG9nZ2xlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lR3RrOjpzZXRSYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6
OmNvbWJvQm94QXJyb3dTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpn
ZXRDb21ib0JveFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBv
cHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0
azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFRv
Z2dsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OmdldENvbWJvQm94TWV0cmljcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0
b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1i
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGlu
QnV0dG9uU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpwYWlu
dE91dGxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhQ29udHJvbHM6OmFkanVzdE1lZGlhU2xpZGVy
VGh1bWJTaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSk6CisgICAgICAgIChSZW5kZXJNZW51
TGlzdDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoUmVuZGVyTWVu
dUxpc3Q6Om1lbnVTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1ldGVyOjp1cGRhdGVMb2dpY2FsV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWV0ZXI6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6cGFpbnRPdXRsaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUHJvZ3Jl
c3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJvZ3Jlc3M6OnVwZGF0ZUFuaW1hdGlv
blN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5
b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjppc0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnN1cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzdGF0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFRleHRBcmVhU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TWV0ZXJTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6bWV0ZXJTaXplRm9yQm91bmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dy
ZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphbmltYXRpb25EdXJhdGlv
bkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RQ
cm9ncmVzc0JhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzaG91bGRI
YXZlU3BpbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TWVk
aWFDb250cm9sU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNs
aWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNs
aWRlclRodW1iU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNs
aWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2Vh
cmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c3VwcG9ydHNIb3Zlcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6bWluaW11bU1lbnVMaXN0U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBvcHVwTWVudVNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjpzZXRCdXR0b25TaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Q2hlY2tib3hTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUlPUzo6aXNDb250cm9sU3R5bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lSU9TOjphZGp1c3RSYWRpb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lSU9TOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSU9TOjphZGp1c3RSb3VuZEJvcmRlclJhZGl1cyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZv
clByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphbmltYXRp
b25EdXJhdGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
SU9TOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUlPUzo6c2V0QnV0dG9uU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6
c2hvdWxkSGF2ZVNwaW5CdXR0b24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjppc0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTaXplRm9yRm9udCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvckZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnNpemVGb3JTeXN0ZW1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjpzZXRTaXplRnJvbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OmNvbnRyb2xTaXplRm9yU3lzdGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVNYWM6OmFkanVzdFRleHRBcmVhU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6Om1ldGVyU2l6ZUZvckJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6bGV2
ZWxJbmRpY2F0b3JGb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnByb2dy
ZXNzQmFyUmVjdEZvckJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
bWluaW11bVByb2dyZXNzQmFySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RQcm9ncmVzc0JhclN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0xl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJu
YWxQYWRkaW5nVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cElu
dGVybmFsUGFkZGluZ0JvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cG9wdXBNZW51U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6bWluaW11
bU1lbnVMaXN0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2xpZGVyVGh1bWJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
c2V0U2VhcmNoQ2VsbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpz
ZXRTZWFyY2hGaWVsZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFk
anVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
U2FmYXJpOjppc0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVT
YWZhcmk6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
U2FmYXJpOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
U2FmYXJpOjpjb250cm9sU2l6ZUZvckZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVTYWZhcmk6OnNpemVGb3JGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Fm
YXJpOjpzaXplRm9yU3lzdGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNh
ZmFyaTo6c2V0U2l6ZUZyb21Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Fm
YXJpOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lU2FmYXJpOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVTYWZhcmk6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVNhZmFyaTo6cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVNhZmFyaTo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Fm
YXJpOjpzZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVNhZmFyaTo6c2V0QnV0dG9uU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFRleHRBcmVhU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJp
OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lU2FmYXJpOjptaW5pbXVtTWVudUxpc3RTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lU2FmYXJpOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTbGlkZXJUaHVtYlNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnNldFNlYXJjaEZpZWxkU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0
U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFy
aTo6YWRqdXN0TWV0ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFy
aTo6bWV0ZXJTaXplRm9yQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Fm
YXJpOjpwYWludE1ldGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmku
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVXaW46OnN1cHBvcnRzSG92ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVXaW46OnN1cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lV2luOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVdpbjo6c2V0Q2hlY2tib3hTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lV2luOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVdpbjo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVdpbjo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVdpbjo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRp
b25QYXJ0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RNZXRlclN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjptZXRlclNpemVGb3JCb3VuZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50TWV0ZXIpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZVdpbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46
OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50
UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnNldFJhZGlvU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6cGFpbnRUZXh0QXJlYSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6cG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRE
ZWNvcmF0aW9uUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRqdXN0
QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdFRl
eHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RU
ZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpzaG91bGRT
aG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCk6CisKIDIwMTQtMDYtMjUgIExhc3psbyBHb21ib3Mg
IDxsLmdvbWJvc0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBSZW1vdmUgYnVpbGQgZ3VhcmQgZm9y
IHByb2dyZXNzIGVsZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJ
KHJldmlzaW9uIDE3MDQxNykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMzMiw4ICsxMzMyLDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YWRqdXN0UmVuZGVyU3R5bGUoUmUKICAgICB9CiAKICAgICAvLyBMZXQgdGhlIHRoZW1lIGFs
c28gaGF2ZSBhIGNyYWNrIGF0IGFkanVzdGluZyB0aGUgc3R5bGUuCi0gICAgaWYgKHN0eWxlLmhh
c0FwcGVhcmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1
c3RTdHlsZSgqdGhpcywgc3R5bGUsIGUsIG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlKCksIG1fc3Rh
dGUuYm9yZGVyRGF0YSgpLCBtX3N0YXRlLmJhY2tncm91bmREYXRhKCksIG1fc3RhdGUuYmFja2dy
b3VuZENvbG9yKCkpOworICAgIGlmIChzdHlsZS5oYXNBcHBlYXJhbmNlKCkpIHsKKyAgICAgICAg
QVNTRVJUKGUpOworICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0
eWxlKCp0aGlzLCBzdHlsZSwgKmUsIG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlKCksIG1fc3RhdGUu
Ym9yZGVyRGF0YSgpLCBtX3N0YXRlLmJhY2tncm91bmREYXRhKCksIG1fc3RhdGUuYmFja2dyb3Vu
ZENvbG9yKCkpOworICAgIH0KIAogICAgIC8vIElmIHdlIGhhdmUgZmlyc3QtbGV0dGVyIHBzZXVk
byBzdHlsZSwgZG8gbm90IHNoYXJlIHRoaXMgc3R5bGUuCiAgICAgaWYgKHN0eWxlLmhhc1BzZXVk
b1N0eWxlKEZJUlNUX0xFVFRFUikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVs
ZElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0Rmll
bGRJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxNzA0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw3ICsyMzIsNyBA
QCBib29sIFRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkSGF2ZVNwaW5CCiB7CiAgICAgRG9jdW1l
bnQmIGRvY3VtZW50ID0gZWxlbWVudCgpLmRvY3VtZW50KCk7CiAgICAgUmVmUHRyPFJlbmRlclRo
ZW1lPiB0aGVtZSA9IGRvY3VtZW50LnBhZ2UoKSA/ICZkb2N1bWVudC5wYWdlKCktPnRoZW1lKCkg
OiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCk7Ci0gICAgcmV0dXJuIHRoZW1lLT5zaG91bGRI
YXZlU3BpbkJ1dHRvbigmZWxlbWVudCgpKTsKKyAgICByZXR1cm4gdGhlbWUtPnNob3VsZEhhdmVT
cGluQnV0dG9uKGVsZW1lbnQoKSk7CiB9CiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpjcmVh
dGVTaGFkb3dTdWJ0cmVlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRl
clRodW1iRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkocmV2aXNpb24gMTcwNDE3KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTQsOCArOTQsMTAgQEAgdm9pZCBSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5j
ZQogICAgICAgICBzdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBh
cnQpOwogICAgIGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFGdWxs
U2NyZWVuVm9sdW1lU2xpZGVyUGFydCkKICAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1l
ZGlhRnVsbFNjcmVlblZvbHVtZVNsaWRlclRodW1iUGFydCk7Ci0gICAgaWYgKHN0eWxlKCkuaGFz
QXBwZWFyYW5jZSgpKQotICAgICAgICB0aGVtZSgpLmFkanVzdFNsaWRlclRodW1iU2l6ZSgmc3R5
bGUoKSwgZWxlbWVudCgpKTsKKyAgICBpZiAoc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpIHsKKyAg
ICAgICAgQVNTRVJUKGVsZW1lbnQoKSk7CisgICAgICAgIHRoZW1lKCkuYWRqdXN0U2xpZGVyVGh1
bWJTaXplKHN0eWxlKCksICplbGVtZW50KCkpOworICAgIH0KIH0KIAogYm9vbCBSZW5kZXJTbGlk
ZXJUaHVtYjo6aXNTbGlkZXJUaHVtYigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAJKHJldmlzaW9uIDE3MDQxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNSwyNyArMTI1LDI3IEBAIHN0YXRpYyBib29sIHNldFNvdXJjZUdyb3VwRm9yRWRq
ZU9iamVjdCgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRq
dXN0U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlKiBzdHlsZSwgRm9ybVR5cGUgdHlwZSkgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNpemVDb25zdHJhaW50cyhSZW5kZXJTdHls
ZSYgc3R5bGUsIEZvcm1UeXBlIHR5cGUpIGNvbnN0CiB7CiAgICAgbG9hZFRoZW1lSWZOZWVkZWQo
KTsKIAogICAgIC8vIFRoZXNlIGFyZSBhbHdheXMgdmFsaWQsIGV2ZW4gaWYgbm8gdGhlbWUgY291
bGQgYmUgbG9hZGVkLgogICAgIGNvbnN0IFRoZW1lUGFydERlc2MqIGRlc2MgPSBtX3BhcnREZXNj
cyArIChzaXplX3QpdHlwZTsKIAotICAgIGlmIChzdHlsZS0+bWluV2lkdGgoKS5pc0ludHJpbnNp
YygpKQotICAgICAgICBzdHlsZS0+c2V0TWluV2lkdGgoZGVzYy0+bWluLndpZHRoKCkpOwotICAg
IGlmIChzdHlsZS0+bWluSGVpZ2h0KCkuaXNJbnRyaW5zaWMoKSkKLSAgICAgICAgc3R5bGUtPnNl
dE1pbkhlaWdodChkZXNjLT5taW4uaGVpZ2h0KCkpOwotCi0gICAgaWYgKGRlc2MtPm1heC53aWR0
aCgpLnZhbHVlKCkgPiAwICYmIHN0eWxlLT5tYXhXaWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkp
Ci0gICAgICAgIHN0eWxlLT5zZXRNYXhXaWR0aChkZXNjLT5tYXgud2lkdGgoKSk7Ci0gICAgaWYg
KGRlc2MtPm1heC5oZWlnaHQoKS52YWx1ZSgpID4gMCAmJiBzdHlsZS0+bWF4SGVpZ2h0KCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldE1heEhlaWdodChkZXNjLT5tYXgu
aGVpZ2h0KCkpOwotCi0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoZGVzYy0+cGFkZGluZy50b3Ao
KSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oZGVzYy0+cGFkZGluZy5ib3R0b20oKSk7
Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KGRlc2MtPnBhZGRpbmcubGVmdCgpKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ1JpZ2h0KGRlc2MtPnBhZGRpbmcucmlnaHQoKSk7CisgICAgaWYgKHN0
eWxlLm1pbldpZHRoKCkuaXNJbnRyaW5zaWMoKSkKKyAgICAgICAgc3R5bGUuc2V0TWluV2lkdGgo
ZGVzYy0+bWluLndpZHRoKCkpOworICAgIGlmIChzdHlsZS5taW5IZWlnaHQoKS5pc0ludHJpbnNp
YygpKQorICAgICAgICBzdHlsZS5zZXRNaW5IZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKKwor
ICAgIGlmIChkZXNjLT5tYXgud2lkdGgoKS52YWx1ZSgpID4gMCAmJiBzdHlsZS5tYXhXaWR0aCgp
LmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldE1heFdpZHRoKGRlc2MtPm1h
eC53aWR0aCgpKTsKKyAgICBpZiAoZGVzYy0+bWF4LmhlaWdodCgpLnZhbHVlKCkgPiAwICYmIHN0
eWxlLm1heEhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldE1h
eEhlaWdodChkZXNjLT5tYXguaGVpZ2h0KCkpOworCisgICAgc3R5bGUuc2V0UGFkZGluZ1RvcChk
ZXNjLT5wYWRkaW5nLnRvcCgpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nQm90dG9tKGRlc2MtPnBh
ZGRpbmcuYm90dG9tKCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdMZWZ0KGRlc2MtPnBhZGRpbmcu
bGVmdCgpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nUmlnaHQoZGVzYy0+cGFkZGluZy5yaWdodCgp
KTsKIH0KIAogc3RhdGljIGJvb2wgaXNGb3JtRWxlbWVudFRvb0xhcmdlVG9EaXNwbGF5KGNvbnN0
IEludFNpemUmIGVsZW1lbnRTaXplKQpAQCAtMzI2LDEwICszMjYsMTAgQEAgdm9pZCBSZW5kZXJU
aGVtZUVmbDo6YXBwbHlFZGplUlRMU3RhdGUoRQogICAgICAgICBlZGplX29iamVjdF9tZXNzYWdl
X3NlbmQoZWRqZSwgRURKRV9NRVNTQUdFX0ZMT0FUX1NFVCwgMCwgbXNnLmdldCgpKTsKICNpZiBF
TkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gUHJvZ3Jlc3NC
YXIpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9S
ZW5kZXJQcm9ncmVzcygmb2JqZWN0KTsKKyAgICAgICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3MmIHJl
bmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhvYmplY3QpOwogCiAgICAgICAgIGludCBt
YXggPSByZWN0LndpZHRoKCk7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IHJlbmRlclByb2dyZXNz
LT5wb3NpdGlvbigpOworICAgICAgICBkb3VibGUgdmFsdWUgPSByZW5kZXJQcm9ncmVzcy5wb3Np
dGlvbigpOwogCiAgICAgICAgIE93blB0cjxFZGplX01lc3NhZ2VfRmxvYXRfU2V0PiBtc2cgPSBh
ZG9wdFB0cihzdGF0aWNfY2FzdDxFZGplX01lc3NhZ2VfRmxvYXRfU2V0Kj4oOjpvcGVyYXRvciBu
ZXcgKHNpemVvZihFZGplX01lc3NhZ2VfRmxvYXRfU2V0KSArIHNpemVvZihkb3VibGUpKSkpOwog
ICAgICAgICBtc2ctPmNvdW50ID0gMjsKQEAgLTM0Niw5ICszNDYsOSBAQCB2b2lkIFJlbmRlclRo
ZW1lRWZsOjphcHBseUVkamVSVExTdGF0ZShFCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1l
RWZsOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3Jk
ZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3Im
IGJhY2tncm91bmRDb2xvcikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVFZmw6OmlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwg
Y29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9y
KSBjb25zdAogewotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxl
LCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcikgfHwgc3R5bGUtPmFwcGVhcmFu
Y2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQ7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0Nv
bnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKSB8
fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0OwogfQogCiBib29sIFJl
bmRlclRoZW1lRWZsOjpwYWludFRoZW1lUGFydChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwg
Rm9ybVR5cGUgdHlwZSwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQpAQCAtMzYwLDcgKzM2MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0
KGNvbnMKICAgICBpZiAoIWVudHJ5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBib29s
IGhhdmVCYWNrZ3JvdW5kQ29sb3IgPSBpc0NvbnRyb2xTdHlsZWQoJm9iamVjdC5zdHlsZSgpLCBv
YmplY3Quc3R5bGUoKS5ib3JkZXIoKSwgKm9iamVjdC5zdHlsZSgpLmJhY2tncm91bmRMYXllcnMo
KSwgQ29sb3I6OndoaXRlKTsKKyAgICBib29sIGhhdmVCYWNrZ3JvdW5kQ29sb3IgPSBpc0NvbnRy
b2xTdHlsZWQob2JqZWN0LnN0eWxlKCksIG9iamVjdC5zdHlsZSgpLmJvcmRlcigpLCAqb2JqZWN0
LnN0eWxlKCkuYmFja2dyb3VuZExheWVycygpLCBDb2xvcjo6d2hpdGUpOwogICAgIENvbnRyb2xT
dGF0ZXMgc3RhdGVzKGV4dHJhY3RDb250cm9sU3RhdGVzRm9yUmVuZGVyZXIob2JqZWN0KSk7CiAg
ICAgYXBwbHlFZGplU3RhdGVGcm9tRm9ybShlbnRyeS0+ZWRqZSgpLCAmc3RhdGVzLCBoYXZlQmFj
a2dyb3VuZENvbG9yKTsKIApAQCAtNjI3LDkgKzYyNyw5IEBAIHN0YXRpYyBib29sIHN1cHBvcnRz
Rm9jdXMoQ29udHJvbFBhcnQgYXAKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVFZmw6OnN1
cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2Jvb2wgUmVu
ZGVyVGhlbWVFZmw6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS0+YXBwZWFyYW5jZSgpKTsK
KyAgICByZXR1cm4gc3VwcG9ydHNGb2N1cyhzdHlsZS5hcHBlYXJhbmNlKCkpOwogfQogCiBib29s
IFJlbmRlclRoZW1lRWZsOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3Qm
IG9iamVjdCkgY29uc3QKQEAgLTY5OSwyNiArNjk5LDI2IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6
OnBhaW50U2xpZGVyVHJhY2soY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVFZmw6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RT
bGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1l
bnQmKSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5
bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1
c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6
OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclRo
ZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50
KTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNo
YWRvdyhudWxscHRyKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVGh1
bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lRWZsOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
JikgY29uc3QKIHsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsK
KyAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFyYW5jZSgpOwogICAgIGlmIChwYXJ0
ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChM
ZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWln
aHQoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldFdp
ZHRoKExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0
SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOwogICAgIH0gZWxzZSBpZiAo
cGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRX
aWR0aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CisgICAgICAgIHN0eWxl
LnNldFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOworICAgICAgICBzdHls
ZS5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOwogICAgIH0KIH0K
IApAQCAtNzY2LDIyICs3NjYsMjIgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTbGlkZXJU
aHVtYihjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRq
dXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjph
ZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0
eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcGFnZSAm
JiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7Ci0gICAgICAgIHN0YXRp
Y19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1l
KCkpLmFkanVzdENoZWNrYm94U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwor
ICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCkpIHsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpLT50
aGVtZSgpKS5hZGp1c3RDaGVja2JveFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhz
dHlsZSwgQ2hlY2tCb3gpOwogCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUu
cmVzZXRCb3JkZXIoKTsKIAogICAgIGNvbnN0IFRoZW1lUGFydERlc2MqIGRlc2MgPSBtX3BhcnRE
ZXNjcyArIChzaXplX3QpQ2hlY2tCb3g7Ci0gICAgaWYgKHN0eWxlLT53aWR0aCgpLnZhbHVlKCkg
PCBkZXNjLT5taW4ud2lkdGgoKS52YWx1ZSgpKQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoZGVz
Yy0+bWluLndpZHRoKCkpOwotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkudmFsdWUoKSA8IGRlc2Mt
Pm1pbi5oZWlnaHQoKS52YWx1ZSgpKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KGRlc2MtPm1p
bi5oZWlnaHQoKSk7CisgICAgaWYgKHN0eWxlLndpZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1pbi53
aWR0aCgpLnZhbHVlKCkpCisgICAgICAgIHN0eWxlLnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgp
KTsKKyAgICBpZiAoc3R5bGUuaGVpZ2h0KCkudmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52
YWx1ZSgpKQorICAgICAgICBzdHlsZS5zZXRIZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKIH0K
IAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3Qm
IG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAt
Nzg5LDIyICs3ODksMjIgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRDaGVja2JveChjb25z
dAogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIENoZWNrQm94LCBpbmZvLCByZWN0
KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50
KCkucGFnZSgpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVu
dC0+ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdFJhZGlvU3R5bGUoc3R5bGVSZXNv
bHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQuZG9jdW1l
bnQoKS5wYWdlKCkpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVt
ZW50LmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1c3RSYWRpb1N0eWxlKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGFk
anVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgUmFkaW9CdXR0b24pOwogCi0gICAgc3R5bGUtPnJl
c2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKIAogICAgIGNvbnN0IFRoZW1l
UGFydERlc2MqIGRlc2MgPSBtX3BhcnREZXNjcyArIChzaXplX3QpUmFkaW9CdXR0b247Ci0gICAg
aWYgKHN0eWxlLT53aWR0aCgpLnZhbHVlKCkgPCBkZXNjLT5taW4ud2lkdGgoKS52YWx1ZSgpKQot
ICAgICAgICBzdHlsZS0+c2V0V2lkdGgoZGVzYy0+bWluLndpZHRoKCkpOwotICAgIGlmIChzdHls
ZS0+aGVpZ2h0KCkudmFsdWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgpKQotICAgICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KGRlc2MtPm1pbi5oZWlnaHQoKSk7CisgICAgaWYgKHN0eWxlLndp
ZHRoKCkudmFsdWUoKSA8IGRlc2MtPm1pbi53aWR0aCgpLnZhbHVlKCkpCisgICAgICAgIHN0eWxl
LnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKKyAgICBpZiAoc3R5bGUuaGVpZ2h0KCkudmFs
dWUoKSA8IGRlc2MtPm1pbi5oZWlnaHQoKS52YWx1ZSgpKQorICAgICAgICBzdHlsZS5zZXRIZWln
aHQoZGVzYy0+bWluLmhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRS
YWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQpAQCAtODEyLDE1ICs4MTIsMTUgQEAgYm9vbCBSZW5kZXJUaGVt
ZUVmbDo6cGFpbnRSYWRpbyhjb25zdCBSZQogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmpl
Y3QsIFJhZGlvQnV0dG9uLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIGlmICghbV9wYWdlICYm
IGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpIHsKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUo
KSkuYWRqdXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAg
IGlmICghbV9wYWdlICYmIGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCkpIHsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpLT50aGVt
ZSgpKS5hZGp1c3RCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBhZGp1c3RTaXplQ29uc3RyYWlucyBjYW4g
bWFrZSBTcXVhcmVCdXR0b25QYXJ0J3Mgc2l6ZSB3cm9uZyAoYnkgYWRqdXN0aW5nIHBhZGRpbmdz
KSwgc28gY2FsbCBpdCBvbmx5IGZvciBQdXNoQnV0dG9uUGFydCBhbmQgQnV0dG9uUGFydAotICAg
IGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0IHx8IHN0eWxlLT5hcHBl
YXJhbmNlKCkgPT0gQnV0dG9uUGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFB1
c2hCdXR0b25QYXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBCdXR0b25QYXJ0KQogICAgICAg
ICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIEJ1dHRvbik7CiB9CiAKQEAgLTgyOSwxNyAr
ODI5LDE3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50QnV0dG9uKGNvbnN0IFIKICAgICBy
ZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBCdXR0b24sIGluZm8sIHJlY3QpOwogfQogCi12
b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25z
dAogewotICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS5w
YWdlKCkpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LT5k
b2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0TWVudUxpc3RTdHlsZShzdHlsZVJlc29s
dmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudC5kb2N1bWVu
dCgpLnBhZ2UoKSkgeworICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1l
bnQuZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFk
anVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgQ29tYm9Cb3gpOwotICAgIHN0eWxlLT5yZXNldEJv
cmRlcigpOwotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUucmVzZXRC
b3JkZXIoKTsKKyAgICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKLSAgICBzdHlsZS0+c2V0
TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUu
c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKIGJv
b2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtODYw
LDcgKzg2MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdE1lbnVMaXN0QnV0dG8KICAg
ICBtaW5IZWlnaHQgPSBzdGQ6Om1heChtaW5IZWlnaHQsIGRyb3BEb3duQm94TWluSGVpZ2h0KTsK
ICAgICBzdHlsZS5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQpKTsKIAotICAg
IGFkanVzdE1lbnVMaXN0U3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgJmVsZW1lbnQpOwor
ICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwog
fQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMo
Y29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQpAQCAtODY4LDE0ICs4NjgsMTQgQEAgYm9vbCBSZW5kZXJUaGVtZUVm
bDo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIHJldHVybiBwYWludE1lbnVMaXN0KG9iamVjdCwg
aW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRGaWVsZFN0
eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRGaWVs
ZFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwg
RWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYm
IGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRl
clRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdFRl
eHRGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBpZiAoIW1f
cGFnZSAmJiBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKSB7CisgICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRq
dXN0VGV4dEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgVGV4dEZp
ZWxkKTsKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigp
OwogfQogCiBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJP
YmplY3QmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCkBAIC04ODMsNyArODgzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0Rmll
bGQoY29ucwogICAgIHJldHVybiBwYWludFRoZW1lUGFydChvYmplY3QsIFRleHRGaWVsZCwgaW5m
bywgSW50UmVjdChyZWN0KSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRB
cmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCkBAIC04OTIsMjEgKzg5MiwyMSBA
QCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRleHRBcmVhKGNvbnN0CiAgICAgcmV0dXJuIHBh
aW50VGV4dEZpZWxkKG9iamVjdCwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVF
Zmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVu
dCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1l
bnQtPmRvY3VtZW50KCkucGFnZSgpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1l
RWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAg
ICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKSB7CisgICAgICAgIHN0
YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+dGhl
bWUoKSkuYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwg
c3R5bGUsIGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFkanVzdFNpemVD
b25zdHJhaW50cyhzdHlsZSwgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKTsKLSAgICBzdHlsZS0+
cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgIHN0eWxl
LnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCi0gICAgZmxv
YXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Rm9udFNpemU7CisgICAg
ZmxvYXQgZm9udFNjYWxlID0gc3R5bGUuZm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKICAg
ICBpbnQgZGVjb3JhdGlvblNpemUgPSBscm91bmRmKHN0ZDo6bWluKHN0ZDo6bWF4KG1pblNlYXJj
aERlY29yYXRpb25CdXR0b25TaXplLCBkZWZhdWx0Rm9udFNpemUgKiBmb250U2NhbGUpLCBtYXhT
ZWFyY2hEZWNvcmF0aW9uQnV0dG9uU2l6ZSkpOwogCi0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0
aChkZWNvcmF0aW9uU2l6ZSArIHNlYXJjaEZpZWxkRGVjb3JhdGlvbkJ1dHRvbk9mZnNldCwgRml4
ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChkZWNvcmF0aW9uU2l6ZSwgRml4ZWQp
KTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoZGVjb3JhdGlvblNpemUgKyBzZWFyY2hGaWVs
ZERlY29yYXRpb25CdXR0b25PZmZzZXQsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExl
bmd0aChkZWNvcmF0aW9uU2l6ZSwgRml4ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVmbDo6
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTkxNCwyMSAr
OTE0LDIxIEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRSZXMKICAgICBy
ZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24sIGlu
Zm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVt
ZW50KSBjb25zdAogewotICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9j
dW1lbnQoKS5wYWdlKCkpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihl
bGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblBhcnRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7Cisg
ICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKSkgeworICAgICAgICBz
dGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCktPnRo
ZW1lKCkpLmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoc3R5bGVS
ZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFk
anVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbik7
Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJF
KTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnNldFdoaXRlU3BhY2UoUFJF
KTsKIAotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdEZv
bnRTaXplOworICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLmZvbnRTaXplKCkgLyBkZWZhdWx0
Rm9udFNpemU7CiAgICAgaW50IGRlY29yYXRpb25TaXplID0gbHJvdW5kZihzdGQ6Om1pbihzdGQ6
Om1heChtaW5TZWFyY2hEZWNvcmF0aW9uQnV0dG9uU2l6ZSwgZGVmYXVsdEZvbnRTaXplICogZm9u
dFNjYWxlKSwgbWF4U2VhcmNoRGVjb3JhdGlvbkJ1dHRvblNpemUpKTsKIAotICAgIHN0eWxlLT5z
ZXRXaWR0aChMZW5ndGgoZGVjb3JhdGlvblNpemUgKyBzZWFyY2hGaWVsZERlY29yYXRpb25CdXR0
b25PZmZzZXQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZGVjb3JhdGlv
blNpemUsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGRlY29yYXRpb25TaXpl
ICsgc2VhcmNoRmllbGREZWNvcmF0aW9uQnV0dG9uT2Zmc2V0LCBGaXhlZCkpOworICAgIHN0eWxl
LnNldEhlaWdodChMZW5ndGgoZGVjb3JhdGlvblNpemUsIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVu
ZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3Qg
UmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKQEAgLTkzNiwyMyArOTM2LDIzIEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50
U2VhcmNoRmllbGRSZXMKICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0
Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxl
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVu
dCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1l
bnQtPmRvY3VtZW50KCkucGFnZSgpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1l
RWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAg
IGlmICghbV9wYWdlICYmIGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCkpIHsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpLT50aGVt
ZSgpKS5hZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXplQ29u
c3RyYWludHMoc3R5bGUsIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKTsKLSAgICBzdHlsZS0+cmVz
ZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgIHN0eWxlLnJl
c2V0Qm9yZGVyKCk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCiAgICAgLy8gTG9n
aWMgdGFrZW4gZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtLmNwcC4KICAgICAvLyBTY2FsZSB0aGUg
YnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZS4KLSAgICBmbG9hdCBmb250U2NhbGUg
PSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKKyAgICBmbG9hdCBmb250U2Nh
bGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdEZvbnRTaXplOwogICAgIGludCBjYW5jZWxC
dXR0b25TaXplID0gbHJvdW5kZihzdGQ6Om1pbihzdGQ6Om1heChtaW5DYW5jZWxCdXR0b25TaXpl
LCBkZWZhdWx0Rm9udFNpemUgKiBmb250U2NhbGUpLCBtYXhDYW5jZWxCdXR0b25TaXplKSk7CiAK
LSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7Ci0g
ICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKKyAg
ICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKKyAgICBz
dHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CiB9CiAKIGJv
b2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKQEAgLTk2MCwxNSArOTYwLDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2Vh
cmNoRmllbGRDYW4KICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbiwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFk
anVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVm
bDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewotICAgICAg
ICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgp
LT50aGVtZSgpKS5hZGp1c3RTZWFyY2hGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBl
bGVtZW50KTsKKyAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKSB7
CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC5kb2N1bWVudCgp
LnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0U2VhcmNoRmllbGRTdHlsZShzdHlsZVJlc29sdmVyLCBz
dHlsZSwgZWxlbWVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYWRqdXN0U2l6ZUNv
bnN0cmFpbnRzKHN0eWxlLCBTZWFyY2hGaWVsZCk7Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7
Ci0gICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigp
OworICAgIHN0eWxlLnNldFdoaXRlU3BhY2UoUFJFKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUVm
bDo6cGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtOTc2LDEwICs5NzYsMTAgQEAg
Ym9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRTZWFyY2hGaWVsZChjbwogICAgIHJldHVybiBwYWlu
dFRoZW1lUGFydChvYmplY3QsIFNlYXJjaEZpZWxkLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZUVmbDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVt
ZW50KSBjb25zdAogewotICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9j
dW1lbnQoKS5wYWdlKCkpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihl
bGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0SW5uZXJTcGluQnV0dG9u
U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgIGlmICghbV9wYWdlICYm
IGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCkpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVy
VGhlbWVFZmwmPihlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1c3RJbm5l
clNwaW5CdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBTcGlubmVy
KTsKQEAgLTEwMDgsMTcgKzEwMDgsMTcgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6c3lzdGVtRm9u
dChDU1NWYWx1ZQogfQogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi12b2lkIFJlbmRl
clRoZW1lRWZsOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0
UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVt
ZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0
eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotZG91YmxlIFJlbmRlclRoZW1lRWZsOjph
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29u
c3QKK2RvdWJsZSBSZW5kZXJUaGVtZUVmbDo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHByb2dyZXNzQW5p
bWF0aW9uSW50ZXJ2YWw7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZUVmbDo6YW5pbWF0aW9uRHVy
YXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citkb3VibGUgUmVuZGVy
VGhlbWVFZmw6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mm
KSBjb25zdAogewogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsICogcHJvZ3Jl
c3NBbmltYXRpb25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sgYW5kIGZvcnRoOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmgJKHJldmlz
aW9uIDE3MDQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVm
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMyArNjgsMTMgQEAgcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoUGFnZSopOwogCiAgICAgLy8gQSBtZXRo
b2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVk
cmF3aW5nIHdoZW4gaG92ZXJlZC4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25z
dCBSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIC8vIEEgbWV0aG9kIFJldHVybmluZyB3aGV0aGVyIHRo
ZSBjb250cm9sIGlzIHN0eWxlZCBieSBjc3Mgb3Igbm90IGUuZyBzcGVjaWZ5aW5nIGJhY2tncm91
bmQtY29sb3IuCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJT
dHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYg
YmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250
cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZp
bGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSBpcyBhYmxlIHRvIGRyYXcgdGhl
IGZvY3VzIHJpbmcuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJl
bmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9j
dXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICAvLyBBIG1l
dGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5k
b3cgaGFzIGZvY3VzIG9yIG5vdC4KICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGlu
dHMoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMDQsNTAgKzEwNCw1
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFbnRyeVRleHRDb2xvcihpbnQgZm9yZVIsIGludCBm
b3JlRywgaW50IGZvcmVCLCBpbnQgZm9yZUEsIGludCBiYWNrUiwgaW50IGJhY2tHLCBpbnQgYmFj
a0IsIGludCBiYWNrQSk7CiAgICAgdm9pZCBzZXRTZWFyY2hUZXh0Q29sb3IoaW50IGZvcmVSLCBp
bnQgZm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQgYmFja1IsIGludCBiYWNrRywgaW50
IGJhY2tCLCBpbnQgYmFja0EpOwogCi0gICAgdm9pZCBhZGp1c3RTaXplQ29uc3RyYWludHMoUmVu
ZGVyU3R5bGUqLCBGb3JtVHlwZSkgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RTaXplQ29uc3RyYWlu
dHMoUmVuZGVyU3R5bGUmLCBGb3JtVHlwZSkgY29uc3Q7CiAKICAgICAvLyBTeXN0ZW0gZm9udHMu
CiAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9u
JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBw
YWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50
UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4
dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29s
IHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxp
c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJl
Y3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBF
bGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRl
clRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1i
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xp
ZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAj
aWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgdmlydHVhbCBJbnRTaXplIHNsaWRlclRp
Y2tTaXplKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xNTksMTYgKzE1OSwxNiBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJ
bm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9u
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBv
dmVycmlkZTsKIAogICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRGb250U2l6ZShpbnQgZm9udHNp
emUpOwogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0
aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRl
clByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9u
RHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAkocmV2aXNpb24gMTcwNDE3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MiwxOCArMTQyLDE4IEBAIHN0YXRpYyBHdGtTdGF0ZVR5cGUgZ2V0R3RrU3RhdGVU
eXBlKFJlbmQKICAgICByZXR1cm4gR1RLX1NUQVRFX05PUk1BTDsKIH0KIAotc3RhdGljIHZvaWQg
c2V0VG9nZ2xlU2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0ayosIFJlbmRlclN0eWxlKiBzdHlsZSwg
R3RrV2lkZ2V0KiB3aWRnZXQpCitzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKGNvbnN0IFJlbmRl
clRoZW1lR3RrKiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBHdGtXaWRnZXQqIHdpZGdldCkKIHsKICAg
ICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNob3Vs
ZG4ndCBjaGFuZ2UgdGhlbS4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JB
dXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndpZHRo
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGdpbnQgaW5kaWNhdG9yU2l6ZTsKICAgICBndGtfd2lkZ2V0X3N0
eWxlX2dldCh3aWRnZXQsICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBOVUxMKTsK
LSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwotICAgIGlmIChzdHls
ZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGlu
ZGljYXRvclNpemUsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNP
ckF1dG8oKSkKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUsIEZp
eGVkKSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHlsZS5z
ZXRIZWlnaHQoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7CiB9CiAKIHN0YXRpYyB2b2lk
IHBhaW50VG9nZ2xlKFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgY29uc3QgUmVuZGVyT2JqZWN0JiBy
ZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwg
R3RrV2lkZ2V0KiB3aWRnZXQpCkBAIC0xOTQsNyArMTk0LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRU
b2dnbGUoUmVuZGVyVGhlbWVHdGsqIAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6
c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAg
c2V0VG9nZ2xlU2l6ZSh0aGlzLCBzdHlsZSwgZ3RrQ2hlY2tCdXR0b24oKSk7CiB9CkBAIC0yMDUs
NyArMjA1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChjb25zdAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldFJhZGlvU2l6
ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgc2V0VG9nZ2xlU2l6ZSh0aGlzLCBz
dHlsZSwgZ3RrUmFkaW9CdXR0b24oKSk7CiB9CkBAIC0yODksMTEgKzI4OSwxMSBAQCBpbnQgUmVu
ZGVyVGhlbWVHdGs6OmdldENvbWJvQm94U2VwYXJhdG9yCiAgICAgcmV0dXJuIGd0a193aWRnZXRf
Z2V0X3N0eWxlKHNlcGFyYXRvciktPnh0aGlja25lc3M7CiB9CiAKLWludCBSZW5kZXJUaGVtZUd0
azo6Y29tYm9Cb3hBcnJvd1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRl
clRoZW1lR3RrOjpjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7
CiAgICAgLy8gVGFraW5nIHRoZSBmb250IHNpemUgYW5kIHJldmVyc2luZyB0aGUgRFBJIGNvbnZl
cnNpb24gc2VlbXMgdG8gbWF0Y2gKICAgICAvLyBHVEsrIHJlbmRlcmluZyBhcyBjbG9zZWx5IGFz
IHBvc3NpYmxlLgotICAgIHJldHVybiBzdHlsZS0+Zm9udCgpLnNpemUoKSAqICg3Mi4wIC8gUmVu
ZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQSSgpKTsKKyAgICByZXR1cm4gc3R5bGUuZm9udCgpLnNp
emUoKSAqICg3Mi4wIC8gUmVuZGVyVGhlbWVHdGs6OmdldFNjcmVlbkRQSSgpKTsKIH0KIAogc3Rh
dGljIHZvaWQgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoR3RrV2lkZ2V0KiBidXR0b24sIGludCYgbGVm
dCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKQpAQCAtMzE2LDExICszMTYsMTEg
QEAgc3RhdGljIHZvaWQgZ2V0QnV0dG9uSW5uZXJCb3JkZXIoR3RrV2lkZwogfQogCiAKLXZvaWQg
UmVuZGVyVGhlbWVHdGs6OmdldENvbWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUsIGlu
dCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKFJlbmRlclN0eWxlJiBzdHlsZSwgaW50
JiBsZWZ0LCBpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20pIGNvbnN0CiB7CiAgICAg
Ly8gSWYgdGhpcyBtZW51IGxpc3QgYnV0dG9uIGlzbid0IGRyYXduIHVzaW5nIHRoZSBuYXRpdmUg
dGhlbWUsIHdlCiAgICAgLy8gZG9uJ3QgYWRkIGFueSBleHRyYSBwYWRkaW5nIGJleW9uZCB3aGF0
IFdlYkNvcmUgYWxyZWFkeSB1c2VzLgotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE5v
Q29udHJvbFBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBBIGNvbWJvIGJveCBidXR0b24gaXMgYSBidXR0
b24gd2l0aCB3aWRnZXRzIHBhY2tlZCBpbnRvIGl0LgpAQCAtMzMyLDM0ICszMzIsMzQgQEAgdm9p
ZCBSZW5kZXJUaGVtZUd0azo6Z2V0Q29tYm9Cb3hQYWRkaW5nKAogICAgIGludCBhcnJvd0FuZFNl
cGVyYXRvckxlbmd0aCA9IGNvbWJvQm94QXJyb3dTaXplKHN0eWxlKSArCiAgICAgICAgIGdldENv
bWJvQm94U2VwYXJhdG9yV2lkdGgoKSArICgzICogYnV0dG9uV2lkZ2V0U3R5bGUtPnh0aGlja25l
c3MpOwogCi0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgaWYgKHN0eWxl
LmRpcmVjdGlvbigpID09IFJUTCkKICAgICAgICAgbGVmdCArPSBhcnJvd0FuZFNlcGVyYXRvckxl
bmd0aDsKICAgICBlbHNlCiAgICAgICAgIHJpZ2h0ICs9IGFycm93QW5kU2VwZXJhdG9yTGVuZ3Ro
OwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQ
YWRkaW5nTGVmdChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSAw
LCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7CiAgICAgZ2V0Q29tYm9Cb3hQYWRkaW5n
KHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIHJldHVybiBsZWZ0OwogfQog
Ci1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGlu
Z1JpZ2h0KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IDAsIHRv
cCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKICAgICBnZXRDb21ib0JveFBhZGRpbmcoc3R5
bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgcmV0dXJuIHJpZ2h0OwogfQogCi1p
bnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3Ao
UmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwg
cmlnaHQgPSAwLCBib3R0b20gPSAwOwogICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVm
dCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICByZXR1cm4gdG9wOwogfQogCi1pbnQgUmVuZGVy
VGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVu
ZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwgcmln
aHQgPSAwLCBib3R0b20gPSAwOwogICAgIGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVmdCwg
dG9wLCByaWdodCwgYm90dG9tKTsKQEAgLTM4MSwxMiArMzgxLDEyIEBAIGJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50TWVudUxpc3QoY29uc3QKIAogICAgIGludCBsZWZ0Qm9yZGVyID0gMCwgcmln
aHRCb3JkZXIgPSAwLCBib3R0b21Cb3JkZXIgPSAwLCB0b3BCb3JkZXIgPSAwOwogICAgIGdldEJ1
dHRvbklubmVyQm9yZGVyKGd0a0NvbWJvQm94QnV0dG9uKCksIGxlZnRCb3JkZXIsIHRvcEJvcmRl
ciwgcmlnaHRCb3JkZXIsIGJvdHRvbUJvcmRlcik7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
Jm9iamVjdC5zdHlsZSgpOworICAgIFJlbmRlclN0eWxlJiBzdHlsZSA9IG9iamVjdC5zdHlsZSgp
OwogICAgIGludCBhcnJvd1NpemUgPSBjb21ib0JveEFycm93U2l6ZShzdHlsZSk7CiAgICAgR3Rr
U3R5bGUqIGJ1dHRvblN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ3RrQ29tYm9Cb3hCdXR0
b24oKSk7CiAKICAgICBJbnRSZWN0IGFycm93UmVjdCgwLCAocmVjdC5oZWlnaHQoKSAtIGFycm93
U2l6ZSkgLyAyLCBhcnJvd1NpemUsIGFycm93U2l6ZSk7Ci0gICAgaWYgKHN0eWxlLT5kaXJlY3Rp
b24oKSA9PSBSVEwpCisgICAgaWYgKHN0eWxlLmRpcmVjdGlvbigpID09IFJUTCkKICAgICAgICAg
YXJyb3dSZWN0LnNldFgobGVmdEJvcmRlciArIGJ1dHRvblN0eWxlLT54dGhpY2tuZXNzKTsKICAg
ICBlbHNlCiAgICAgICAgIGFycm93UmVjdC5zZXRYKHJlY3Qud2lkdGgoKSAtIHJpZ2h0Qm9yZGVy
IC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBhcnJvd1NpemUpOwpAQCAtNDEwLDcgKzQxMCw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoY29uc3QKICAgICBib3R0b21C
b3JkZXIgKz0gZm9jdXNQYWRkaW5nICsgZm9jdXNXaWR0aDsKICAgICBpbnQgc2VwYXJhdG9yV2lk
dGggPSBnZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCk7CiAgICAgSW50UmVjdCBzZXBhcmF0b3JS
ZWN0KDAsIHRvcEJvcmRlciwgc2VwYXJhdG9yV2lkdGgsIHJlY3QuaGVpZ2h0KCkgLSB0b3BCb3Jk
ZXIgLSBib3R0b21Cb3JkZXIpOwotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQor
ICAgIGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgIHNlcGFyYXRvclJlY3Qu
c2V0WChhcnJvd1JlY3QueCgpICsgYXJyb3dSZWN0LndpZHRoKCkgKyBidXR0b25TdHlsZS0+eHRo
aWNrbmVzcyArIHNlcGFyYXRvcldpZHRoKTsKICAgICBlbHNlCiAgICAgICAgIHNlcGFyYXRvclJl
Y3Quc2V0WChhcnJvd1JlY3QueCgpIC0gYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgLSBzZXBhcmF0
b3JXaWR0aCk7CkBAIC01MjgsOSArNTI4LDkgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRT
bGlkZXJUaHVtYihjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5
bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5
bGUtPmFwcGVhcmFuY2UoKTsKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFyYW5j
ZSgpOwogICAgIGlmIChwYXJ0ICE9IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgJiYgcGFydCAh
PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NDIsMTMg
KzU0MiwxMyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAKICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVt
Ykhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobGVuZ3Ro
LCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCh3aWR0aCwgRml4ZWQp
KTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAgICAg
ICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8fCBw
YXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0
aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Cisg
ICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVkKSk7CiB9CiAKICNpZiBFTkFC
TEUoUFJPR1JFU1NfRUxFTUVOVCkKQEAgLTU3NCw3ICs1NzQsNyBAQCBib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludFByb2dyZXNzQmFyKGNvCiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5l
clNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVt
ZW50JikgY29uc3QKIHsKICAgICBHdGtTdHlsZSogZ3RrU3R5bGUgPSBndGtfd2lkZ2V0X2dldF9z
dHlsZShndGtTcGluQnV0dG9uKCkpOwogICAgIGNvbnN0IFBhbmdvRm9udERlc2NyaXB0aW9uKiBm
b250RGVzY3JpcHRpb24gPSBndGtTdHlsZS0+Zm9udF9kZXNjOwpAQCAtNTg1LDggKzU4NSw4IEBA
IHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHQKICAgICBpbnQgd2lkdGgg
PSBzdGQ6Om1heChQQU5HT19QSVhFTFMoZm9udFNpemUpLCBtaW5TcGluQnV0dG9uQXJyb3dTaXpl
KTsKICAgICB3aWR0aCArPSAtKCh3aWR0aCAlIDIpIC0gMSkgKyBndGtTdHlsZS0+eHRoaWNrbmVz
czsKIAotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5
bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0
aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0TWluV2lkdGgoTGVuZ3RoKHdp
ZHRoLCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludElubmVyU3BpbkJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAkocmV2aXNpb24gMTcwNDE3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMSwxMCArMjAxLDEwIEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFJl
cGFpbnRSZWN0KGMKICAgICBhZGp1c3RSZWN0Rm9yRm9jdXMoY29udGV4dCwgcmVjdCk7CiB9CiAK
LXN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBSZW5k
ZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29udGV4
dCogY29udGV4dCwgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIC8vIFRoZSB3aWR0aCBhbmQg
aGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgc28gd2Ugc2hvdWxkbid0IGNoYW5nZSB0aGVtLgot
ICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhl
aWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0
bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gT3RoZXIgcG9ydHMgaGFyZC1jb2RlIHRoaXMgdG8gMTMgd2hpY2ggaXMgYWxzbyB0aGUgZGVm
YXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSysuCkBAIC0yMTMsMTEgKzIxMywxMSBAQCBzdGF0aWMg
dm9pZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29udGV4CiAgICAgZ2ludCBpbmRpY2F0b3JTaXpl
OwogICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNp
emUiLCAmaW5kaWNhdG9yU2l6ZSwgTlVMTCk7CiAKLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChpbmRpY2F0
b3JTaXplLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRv
KCkpCisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkp
OwogCi0gICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4ZWQpKTsKKyAgICBpZiAoc3R5bGUuaGVp
Z2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoaW5kaWNhdG9y
U2l6ZSwgRml4ZWQpKTsKIH0KIAogc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVuZGVy
VGhlbWVHdGsqIHRoZW1lLCBHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIGZ1
bGxSZWN0KQpAQCAtMjc1LDcgKzI3NSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50VG9nZ2xlKGNvbnN0
IFJlbmRlclRoZW0KICAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxl
JiBzdHlsZSkgY29uc3QKIHsKICAgICBzZXRUb2dnbGVTaXplKGdldFN0eWxlQ29udGV4dChHVEtf
VFlQRV9DSEVDS19CVVRUT04pLCBzdHlsZSk7CiB9CkBAIC0yODYsNyArMjg2LDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYgc3R5
bGUpIGNvbnN0CiB7CiAgICAgc2V0VG9nZ2xlU2l6ZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVf
UkFESU9fQlVUVE9OKSwgc3R5bGUpOwogfQpAQCAtMzc4LDE4ICszNzgsMTggQEAgYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oY29uc3QgUgogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
c3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlKiBzdHlsZSwgR3RrQm9y
ZGVyJiBib3JkZXIsIGludCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQorc3RhdGljIHZvaWQgZ2V0
Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlJiBzdHlsZSwgR3RrQm9yZGVyJiBib3JkZXIsIGlu
dCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQogewogICAgIC8vIElmIHRoaXMgbWVudSBsaXN0IGJ1
dHRvbiBpc24ndCBkcmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3ZQogICAgIC8vIGRvbid0
IGFkZCBhbnkgZXh0cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3JlIGFscmVhZHkgdXNlcy4K
LSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQorICAgIGlmIChz
dHlsZS5hcHBlYXJhbmNlKCkgPT0gTm9Db250cm9sUGFydCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NP
TUJPX0JPWCk7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKIAogICAgIGd0
a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9O
KTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19j
YXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUtPmRpcmVjdGlvbigp
KSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGlj
X2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS5kaXJlY3Rpb24o
KSkpKTsKIAogICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9ib3JkZXIoY29udGV4dCwgc3RhdGlj
X2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICZib3JkZXIpOwogCkBAIC00MDYsNyArNDA2LDcgQEAg
c3RhdGljIHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eQogICAgIGNvbnRleHQgPSBn
ZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0VQQVJBVE9SKTsKICAgICBndGtfc3R5bGVfY29udGV4
dF9zYXZlKGNvbnRleHQpOwogCi0gICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0
aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLT5kaXJlY3Rp
b24oKSkpOworICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3Rr
VGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS5kaXJlY3Rpb24oKSkpOwogICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZGlyZWN0aW9uKTsKICAg
ICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgInNlcGFyYXRvciIpOwogCkBA
IC00MjYsMjkgKzQyNiwyOSBAQCBzdGF0aWMgdm9pZCBnZXRDb21ib0JveE1ldHJpY3MoUmVuZGVy
U3R5CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKIH0KIAotaW50IFJl
bmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAoraW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVu
ZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsg
MCwgMCwgMCwgMCB9OwogICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAw
OwogICAgIGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgs
IHNlcGFyYXRvcldpZHRoKTsKICAgICBpbnQgbGVmdCA9IGJvcmRlcldpZHRoLmxlZnQgKyBmb2N1
c1dpZHRoOwotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgIGlmIChzdHls
ZS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgIGxlZnQgKz0gc2VwYXJhdG9yV2lkdGggKyBt
aW5BcnJvd1NpemU7CiAgICAgcmV0dXJuIGxlZnQ7CiB9CiAKLWludCBSZW5kZXJUaGVtZUd0azo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQg
UmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUmIHN0
eWxlKSBjb25zdAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9
OwogICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwogICAgIGdldENv
bWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldp
ZHRoKTsKICAgICBpbnQgcmlnaHQgPSBib3JkZXJXaWR0aC5yaWdodCArIGZvY3VzV2lkdGg7Ci0g
ICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgaWYgKHN0eWxlLmRpcmVjdGlv
bigpID09IExUUikKICAgICAgICAgcmlnaHQgKz0gc2VwYXJhdG9yV2lkdGggKyBtaW5BcnJvd1Np
emU7CiAgICAgcmV0dXJuIHJpZ2h0OwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVt
ZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAog
ewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OwogICAgIGludCBm
b2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwpAQCAtNDU2LDcgKzQ1Niw3IEBAIGlu
dCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmcKICAgICByZXR1cm4gYm9yZGVy
V2lkdGgudG9wICsgZm9jdXNXaWR0aDsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cElu
dGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVy
VGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJiBzdHlsZSkg
Y29uc3QKIHsKICAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsKICAg
ICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKQEAgLTcxMCw5ICs3MTAs
OSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKGNvCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUo
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6
OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25z
dAogewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOworICAgIENv
bnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS5hcHBlYXJhbmNlKCk7CiAgICAgaWYgKHBhcnQgIT0gU2xp
ZGVyVGh1bWJIb3Jpem9udGFsUGFydCAmJiBwYXJ0ICE9IFNsaWRlclRodW1iVmVydGljYWxQYXJ0
KQogICAgICAgICByZXR1cm47CiAKQEAgLTcyMiwxMyArNzIyLDEzIEBAIHZvaWQgUmVuZGVyVGhl
bWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInNsaWRlci1sZW5ndGgiLCAmc2xpZGVyTGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMKTsKICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQ
YXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBGaXhl
ZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJXaWR0aCwgRml4ZWQp
KTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQpKTsK
KyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJXaWR0aCwgRml4ZWQpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRp
Y2FsUGFydCB8fCBwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLSAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRI
ZWlnaHQoTGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0aChM
ZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChz
bGlkZXJMZW5ndGgsIEZpeGVkKSk7CiB9CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkK
QEAgLTc3Nyw3ICs3NzcsNyBAQCBzdGF0aWMgZ2ludCBzcGluQnV0dG9uQXJyb3dTaXplKEd0a1N0
eWxlCiAgICAgcmV0dXJuIGFycm93U2l6ZSAtIGFycm93U2l6ZSAlIDI7IC8vIEZvcmNlIGV2ZW4u
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgR3RrU3R5bGVDb250
ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NQSU5fQlVUVE9OKTsKIApA
QCAtNzg1LDggKzc4NSw4IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1
dHQKICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGluZyhjb250ZXh0LCBzdGF0aWNfY2Fz
dDxHdGtTdGF0ZUZsYWdzPigwKSwgJnBhZGRpbmcpOwogCiAgICAgaW50IHdpZHRoID0gc3BpbkJ1
dHRvbkFycm93U2l6ZShjb250ZXh0KSArIHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQ7Ci0g
ICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0
aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgsIEZp
eGVkKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhaW50U3BpbkFycm93QnV0dG9uKFJlbmRlclRoZW1l
KiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QsIEd0a0Fycm93VHlwZSBhcnJvd1R5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAJKHJldmlzaW9uIDE3MDQxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2OCw5ICsxNjgsOSBAQCBzdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0
IGFwCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lR3RrOjpzdXBwb3J0c0ZvY3VzUmluZyhj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citib29sIFJlbmRlclRoZW1lR3RrOjpzdXBw
b3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7CisgICAgcmV0dXJuIHN1cHBv
cnRzRm9jdXMoc3R5bGUuYXBwZWFyYW5jZSgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6
Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdApAQCAtMjIw
LDI1ICsyMjAsMjUgQEAgc3RhdGljIEd0a1N0YXRlVHlwZSBndGtJY29uU3RhdGUoUmVuZGVyVAog
ICAgIHJldHVybiBHVEtfU1RBVEVfTk9STUFMOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjph
ZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJD
b3JlOjpFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQm
KSBjb25zdAogewogICAgIC8vIFNvbWUgbGF5b3V0IHRlc3RzIGNoZWNrIGV4cGxpY2l0bHkgdGhh
dCBidXR0b25zIGlnbm9yZSBsaW5lLWhlaWdodC4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2Uo
KSA9PSBQdXNoQnV0dG9uUGFydCkKLSAgICAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVy
U3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkg
PT0gUHVzaEJ1dHRvblBhcnQpCisgICAgICAgIHN0eWxlLnNldExpbmVIZWlnaHQoUmVuZGVyU3R5
bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1
c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAv
LyBUaGUgdGVzdHMgY2hlY2sgZXhwbGljaXRseSB0aGF0IHNlbGVjdCBtZW51IGJ1dHRvbnMgaWdu
b3JlIGxpbmUgaGVpZ2h0LgotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjpp
bml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxl
Ojppbml0aWFsTGluZUhlaWdodCgpKTsKIAogICAgIC8vIFdlIGNhbm5vdCBnaXZlIGEgcHJvcGVy
IHJlbmRlcmluZyB3aGVuIGJvcmRlciByYWRpdXMgaXMgYWN0aXZlLCB1bmZvcnR1bmF0ZWx5Lgot
ICAgIHN0eWxlLT5yZXNldEJvcmRlclJhZGl1cygpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyUmFk
aXVzKCk7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVt
ZW50JiBlKSBjb25zdAogewotICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoJnN0eWxlUmVzb2x2ZXIs
ICZzdHlsZSwgJmUpOworICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5
bGUsIGUpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0QnV0dG9uRGVj
b3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5m
bywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjkzLDcgKzI5Myw3IEBAIHN0YXRpYyBHdGtJ
Y29uU2l6ZSBnZXRJY29uU2l6ZUZvclBpeGVsU2kKICAgICByZXR1cm4gR1RLX0lDT05fU0laRV9E
SUFMT0c7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSkgY29uc3QKIHsKICAgICBhZGp1c3RTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKIH0KQEAgLTMw
MywyNSArMzAzLDI1IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXMK
ICAgICByZXR1cm4gcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChvLCBpLCBy
ZWN0KTsKIH0KIAotc3RhdGljIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoUmVuZGVy
U3R5bGUqIHN0eWxlKQorc3RhdGljIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoUmVu
ZGVyU3R5bGUmIHN0eWxlKQogewotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0eWxl
LT5yZXNldFBhZGRpbmcoKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJl
c2V0UGFkZGluZygpOwogCiAgICAgLy8gR2V0IHRoZSBpY29uIHNpemUgYmFzZWQgb24gdGhlIGZv
bnQgc2l6ZS4KLSAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKKyAgICBpbnQg
Zm9udFNpemUgPSBzdHlsZS5mb250U2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA8IGd0a0ljb25T
aXplTWVudSkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGZvbnRTaXplLCBGaXhl
ZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChmb250U2l6ZSwgRml4ZWQpKTsK
KyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGZvbnRTaXplLCBGaXhlZCkpOworICAgICAg
ICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGZvbnRTaXplLCBGaXhlZCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGdpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwogICAgIGd0a19pY29u
X3NpemVfbG9va3VwKGdldEljb25TaXplRm9yUGl4ZWxTaXplKGZvbnRTaXplKSwgJndpZHRoLCAm
aGVpZ2h0KTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAg
IHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRX
aWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aCho
ZWlnaHQsIEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIGFkanVzdFNlYXJjaEZpZWxkSWNv
blN0eWxlKHN0eWxlKTsKIH0KQEAgLTM2MCw3ICszNjAsNyBAQCBib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRl
clRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBhZGp1c3RTZWFyY2hG
aWVsZEljb25TdHlsZShzdHlsZSk7CiB9CkBAIC0zNzksMTEgKzM3OSwxMSBAQCBib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0
azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0
eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAvLyBXZSBjYW5ub3QgZ2l2ZSBhIHByb3BlciBy
ZW5kZXJpbmcgd2hlbiBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwgdW5mb3J0dW5hdGVseS4KLSAg
ICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUucmVzZXRCb3JkZXJS
YWRpdXMoKTsKKyAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZChj
b25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cmVjdCkKQEAgLTQxNCwxNSArNDE0LDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2Fw
c0xvY2tJbmRpY2EKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6
YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRyYWNr
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0
CiB7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRCb3hT
aGFkb3cobnVsbHB0cik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRo
dW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xp
ZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGhlbWU6OmFkanVz
dFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwotICAgIHN0
eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxw
dHIpOwogfQogCiBkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmNhcmV0QmxpbmtJbnRlcnZhbCgpIGNv
bnN0CkBAIC01NzYsMTMgKzU3NiwxMyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlh
VG9nZ2xlQ2xvCiB9CiAjZW5kaWYKIAotc3RhdGljIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIGJv
cmRlclJhZGlpRnJvbVN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyBGbG9hdFJvdW5k
ZWRSZWN0OjpSYWRpaSBib3JkZXJSYWRpaUZyb21TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUpCiB7
CiAgICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKAotICAgICAgICBJbnRTaXplKHN0
eWxlLT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS0+Ym9y
ZGVyVG9wTGVmdFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAotICAgICAgICBJbnRTaXpl
KHN0eWxlLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUt
PmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCi0gICAgICAgIElu
dFNpemUoc3R5bGUtPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCks
IHN0eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSksCi0g
ICAgICAgIEludFNpemUoc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkud2lkdGgoKS5p
bnRWYWx1ZSgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS5oZWlnaHQoKS5pbnRW
YWx1ZSgpKSk7CisgICAgICAgIEludFNpemUoc3R5bGUuYm9yZGVyVG9wTGVmdFJhZGl1cygpLndp
ZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyVG9wTGVmdFJhZGl1cygpLmhlaWdodCgpLmlu
dFZhbHVlKCkpLAorICAgICAgICBJbnRTaXplKHN0eWxlLmJvcmRlclRvcFJpZ2h0UmFkaXVzKCku
d2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS5ib3JkZXJUb3BSaWdodFJhZGl1cygpLmhlaWdodCgp
LmludFZhbHVlKCkpLAorICAgICAgICBJbnRTaXplKHN0eWxlLmJvcmRlckJvdHRvbUxlZnRSYWRp
dXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS5o
ZWlnaHQoKS5pbnRWYWx1ZSgpKSwKKyAgICAgICAgSW50U2l6ZShzdHlsZS5ib3JkZXJCb3R0b21S
aWdodFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyQm90dG9tUmlnaHRS
YWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6
OnBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtNTk3LDcgKzU5Nyw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUcmEKIAogICAgIGZsb2F0IG1lZGlh
RHVyYXRpb24gPSBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7CiAgICAgZmxvYXQgdG90YWxUcmFj
a1dpZHRoID0gci53aWR0aCgpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZvLnN0eWxlKCk7
CisgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gby5zdHlsZSgpOwogICAgIFJlZlB0cjxUaW1lUmFu
Z2VzPiB0aW1lUmFuZ2VzID0gbWVkaWFFbGVtZW50LT5idWZmZXJlZCgpOwogICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHRpbWVSYW5nZXMtPmxlbmd0aCgpOyArK2luZGV4KSB7
CiAgICAgICAgIGZsb2F0IHN0YXJ0ID0gdGltZVJhbmdlcy0+c3RhcnQoaW5kZXgsIElHTk9SRV9F
WENFUFRJT04pOwpAQCAtNjExLDcgKzYxMSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
TWVkaWFTbGlkZXJUcmEKICAgICAgICAgcmFuZ2VSZWN0LnNldFdpZHRoKGxlbmd0aFJhdGlvICog
dG90YWxUcmFja1dpZHRoKTsKICAgICAgICAgaWYgKGluZGV4KQogICAgICAgICAgICAgcmFuZ2VS
ZWN0Lm1vdmUoc3RhcnRSYXRpbyAqIHRvdGFsVHJhY2tXaWR0aCwgMCk7Ci0gICAgICAgIGNvbnRl
eHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHJhbmdlUmVjdCwgYm9yZGVyUmFk
aWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxS
b3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHJhbmdlUmVjdCwgYm9yZGVyUmFkaWlGcm9tU3R5
bGUoc3R5bGUpKSwgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3Ip
LCBzdHlsZS5jb2xvclNwYWNlKCkpOwogICAgIH0KIAogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsK
QEAgLTYyMCw4ICs2MjAsOCBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVy
VHJhCiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihjb25zdCBS
ZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9ICZvLnN0eWxlKCk7Ci0gICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHIsIGJvcmRlclJh
ZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgIFJlbmRlclN0eWxlJiBzdHls
ZSA9IG8uc3R5bGUoKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJvdW5kZWRSZWN0KEZs
b2F0Um91bmRlZFJlY3QociwgYm9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUudmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS5jb2xvclNwYWNlKCkp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjQ2LDEzICs2NDYsMTMgQEAgYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaQogCiAgICAgaW50IHJlY3RIZWlnaHQgPSBy
ZWN0LmhlaWdodCgpOwogICAgIGZsb2F0IHRyYWNrSGVpZ2h0ID0gcmVjdEhlaWdodCAqIHZvbHVt
ZTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmcmVuZGVyT2JqZWN0LnN0eWxlKCk7CisgICAg
UmVuZGVyU3R5bGUmIHN0eWxlID0gcmVuZGVyT2JqZWN0LnN0eWxlKCk7CiAgICAgSW50UmVjdCB2
b2x1bWVSZWN0KHJlY3QpOwogICAgIHZvbHVtZVJlY3QubW92ZSgwLCByZWN0SGVpZ2h0IC0gdHJh
Y2tIZWlnaHQpOwogICAgIHZvbHVtZVJlY3Quc2V0SGVpZ2h0KGNlaWwodHJhY2tIZWlnaHQpKTsK
IAogICAgIGNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHZvbHVtZVJl
Y3QsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksCi0gICAgICAgIHN0eWxlLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlLT5jb2xvclNwYWNlKCkpOwor
ICAgICAgICBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0
eWxlLmNvbG9yU3BhY2UoKSk7CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogCiAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtNjc1LDIxICs2NzUsMjEgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZWRpYUN1cnJlbnRUaQogI2VuZGlmCiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLXZv
aWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3Rr
OjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7
CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiAvLyBUaGVzZSB2YWx1ZXMg
aGF2ZSBiZWVuIGNvcGllZCBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAogc3RhdGlj
IGNvbnN0IGludCBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzID0gNTsKIHN0YXRpYyBjb25zdCBpbnQg
cHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMgPSAxMDsKIHN0YXRpYyBjb25zdCBkb3VibGUgcHJvZ3Jl
c3NBbmltYXRpb25JbnRlcnZhbCA9IDAuMTI1OwotZG91YmxlIFJlbmRlclRoZW1lR3RrOjphbmlt
YXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QK
K2RvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVz
c0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0
aW9uSW50ZXJ2YWw7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5pbWF0aW9uRHVyYXRp
b25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citkb3VibGUgUmVuZGVyVGhl
bWVHdGs6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBj
b25zdAogewogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsICogcHJvZ3Jlc3NB
bmltYXRpb25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sgYW5kIGZvcnRoOwogfQpAQCAtNjk3
LDE2ICs2OTcsMTYgQEAgZG91YmxlIFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25EdXJhdGlvbgog
SW50UmVjdCBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiBmdWxsQmFyUmVjdCkKIHsKICAg
ICBJbnRSZWN0IHByb2dyZXNzUmVjdChmdWxsQmFyUmVjdCk7Ci0gICAgY29uc3QgUmVuZGVyUHJv
Z3Jlc3MqIHJlbmRlclByb2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcygmcmVuZGVyT2JqZWN0KTsK
LSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkgewotICAgICAgICBpbnQg
cHJvZ3Jlc3NXaWR0aCA9IHByb2dyZXNzUmVjdC53aWR0aCgpICogcmVuZGVyUHJvZ3Jlc3MtPnBv
c2l0aW9uKCk7CisgICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3MmIHJlbmRlclByb2dyZXNzID0gdG9S
ZW5kZXJQcm9ncmVzcyhyZW5kZXJPYmplY3QpOworICAgIGlmIChyZW5kZXJQcm9ncmVzcy5pc0Rl
dGVybWluYXRlKCkpIHsKKyAgICAgICAgaW50IHByb2dyZXNzV2lkdGggPSBwcm9ncmVzc1JlY3Qu
d2lkdGgoKSAqIHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCk7CiAgICAgICAgIGlmIChyZW5kZXJP
YmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgICAgICBwcm9ncmVzc1Jl
Y3Quc2V0WChwcm9ncmVzc1JlY3QueCgpICsgcHJvZ3Jlc3NSZWN0LndpZHRoKCkgLSBwcm9ncmVz
c1dpZHRoKTsKICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFdpZHRoKHByb2dyZXNzV2lkdGgpOwog
ICAgICAgICByZXR1cm4gcHJvZ3Jlc3NSZWN0OwogICAgIH0KIAotICAgIGRvdWJsZSBhbmltYXRp
b25Qcm9ncmVzcyA9IHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpOworICAgIGRv
dWJsZSBhbmltYXRpb25Qcm9ncmVzcyA9IHJlbmRlclByb2dyZXNzLmFuaW1hdGlvblByb2dyZXNz
KCk7CiAKICAgICAvLyBOZXZlciBsZXQgdGhlIHByb2dyZXNzIHJlY3Qgc2hyaW5rIHNtYWxsZXIg
dGhhbiAyIHBpeGVscy4KICAgICBpbnQgbmV3V2lkdGggPSBzdGQ6Om1heCgyLCBwcm9ncmVzc1Jl
Y3Qud2lkdGgoKSAvIHByb2dyZXNzQWN0aXZpdHlCbG9ja3MpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmgJKHJldmlzaW9uIDE3MDQxNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCwxMCArNDQsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJl
bmRlclRoZW1lPiBjcmVhdGUoKTsKIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhl
bWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQu
Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92
ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAK
ICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0aGUg
Zm9jdXMgcmluZy4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVu
ZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1
c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIEEgbWV0
aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRv
dyBoYXMgZm9jdXMgb3Igbm90LgogICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50
cyhjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdCBvdmVycmlkZTsKQEAgLTExNSw1MCArMTE1LDUw
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5
bGUmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICBpbnQgcG9wdXBJbnRl
cm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgaW50IHBv
cHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25z
dCBvdmVycmlkZTsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxl
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVu
ZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdU
b3AoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBpbnQgcG9wdXBJbnRlcm5hbFBh
ZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIFRoZSBN
YWMgcG9ydCBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIHRoZSAibWVudSBsaXN0IiBhbmQgdGhlICJt
ZW51IGxpc3QgYnV0dG9uLiIKICAgICAvLyBUaGUgZm9ybWVyIGlzIHVzZWQgd2hlbiBhIG1lbnUg
bGlzdCBidXR0b24gaGFzIGJlZW4gc3R5bGVkLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlCiAgICAg
Ly8gQXF1YSB0aGVtZWQgY29udHJvbHMgd2hlbmV2ZXIgcG9zc2libGUuIFdlIGFsd2F5cyB3YW50
IHRvIHVzZSBHVEsrIHRoZW1pbmcsIHNvCiAgICAgLy8gd2UgZG9uJ3QgbWFpbnRhaW4gdGhpcyBk
aWZmZXJlbnRpYXRpb24uCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0
aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUm
LCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
bGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1l
bnQmKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIGluaXRN
ZWRpYUNvbG9ycygpOwpAQCAtMTgxLDIxICsxODEsMjEgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9u
UmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIo
UmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2
YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jl
c3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogI2VuZGlmCiAK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBF
bGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGlu
QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRo
KGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZp
bGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwot
ICAgIHN0YXRpYyB2b2lkIHNldFRleHRJbnB1dEJvcmRlcnMoUmVuZGVyU3R5bGUqKTsKKyAgICBz
dGF0aWMgdm9pZCBzZXRUZXh0SW5wdXRCb3JkZXJzKFJlbmRlclN0eWxlJik7CiAgICAgc3RhdGlj
IGRvdWJsZSBnZXRTY3JlZW5EUEkoKTsKIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTIxNSw5ICsy
MTUsOSBAQCBwcml2YXRlOgogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiAgICAgdm9pZCBzZXR1
cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCosIEd0a1dpZGdldCopIGNvbnN0Owog
ICAgIHZvaWQgcmVmcmVzaENvbWJvQm94Q2hpbGRyZW4oKSBjb25zdDsKLSAgICB2b2lkIGdldENv
bWJvQm94UGFkZGluZyhSZW5kZXJTdHlsZSosIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmln
aHQsIGludCYgYm90dG9tKSBjb25zdDsKKyAgICB2b2lkIGdldENvbWJvQm94UGFkZGluZyhSZW5k
ZXJTdHlsZSYsIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tKSBj
b25zdDsKICAgICBpbnQgZ2V0Q29tYm9Cb3hTZXBhcmF0b3JXaWR0aCgpIGNvbnN0OwotICAgIGlu
dCBjb21ib0JveEFycm93U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIGludCBjb21ib0Jv
eEFycm93U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCiAgICAgR3RrV2lkZ2V0KiBndGtCdXR0
b24oKSBjb25zdDsKICAgICBHdGtXaWRnZXQqIGd0a1RyZWVWaWV3KCkgY29uc3Q7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkocmV2aXNpb24gMTcwNDE3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6bGF5b3V0KCkKICAg
ICBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0KCk7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IG5vdCBiZSBhZGp1c3Rpbmcgc3R5bGVzIGR1cmluZyBsYXlvdXQuIFNlZSA8cmRhcjovL3Byb2Js
ZW0vNzY3NTQ5Mz4uCi0gICAgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFJvdW5kQm9yZGVyUmFkaXVz
KHN0eWxlKCksIHRoaXMpOworICAgIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSb3VuZEJvcmRlclJh
ZGl1cyhzdHlsZSgpLCAqdGhpcyk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDE3MDQxNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDkx
LDEwICsxNDkxLDEwIEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmUoUGFpbnRJbmYK
IAogICAgIFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICAvLyBPbmx5IHBh
aW50IHRoZSBmb2N1cyByaW5nIGJ5IGhhbmQgaWYgdGhlIHRoZW1lIGlzbid0IGFibGUgdG8gZHJh
dyBpdC4KLSAgICBpZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUo
KS5zdXBwb3J0c0ZvY3VzUmluZygmc3R5bGVUb1VzZSkpCisgICAgaWYgKHN0eWxlVG9Vc2Uub3V0
bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1c1Jpbmcoc3R5bGVUb1Vz
ZSkpCiAgICAgICAgIHBhaW50Rm9jdXNSaW5nKHBhaW50SW5mbywgcGFpbnRPZmZzZXQsICZzdHls
ZVRvVXNlKTsKIAotICAgIGlmIChoYXNPdXRsaW5lQW5ub3RhdGlvbigpICYmICFzdHlsZVRvVXNl
Lm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKCZzdHls
ZVRvVXNlKSkKKyAgICBpZiAoaGFzT3V0bGluZUFubm90YXRpb24oKSAmJiAhc3R5bGVUb1VzZS5v
dXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZyhzdHlsZVRv
VXNlKSkKICAgICAgICAgYWRkUERGVVJMUmVjdChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKIAog
ICAgIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJv
bHMuY3BwCShyZXZpc2lvbiAxNzA0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVkaWFDb250cm9scy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMCArMTAxLDEwIEBA
IHN0YXRpYyBGbG9hdFJlY3QgZ2V0VW56b29tZWRSZWN0QW5kQWRqdXMKIHN0YXRpYyBjb25zdCBp
bnQgbWVkaWFTbGlkZXJUaHVtYldpZHRoID0gMTM7CiBzdGF0aWMgY29uc3QgaW50IG1lZGlhU2xp
ZGVyVGh1bWJIZWlnaHQgPSAxNDsKIAotdm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RN
ZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIFJlbmRlck1lZGlh
Q29udHJvbHM6OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkK
IHsKICAgICBpbnQgcGFydDsKLSAgICBzd2l0Y2ggKHN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKKyAg
ICBzd2l0Y2ggKHN0eWxlLmFwcGVhcmFuY2UoKSkgewogICAgIGNhc2UgTWVkaWFTbGlkZXJUaHVt
YlBhcnQ6CiAgICAgICAgIHBhcnQgPSBNZWRpYVNsaWRlclRodW1iOwogICAgICAgICBicmVhazsK
QEAgLTEyMSw5ICsxMjEsOSBAQCB2b2lkIFJlbmRlck1lZGlhQ29udHJvbHM6OmFkanVzdE1lZGlh
U2xpCiAgICAgQ0dTaXplIHNpemU7CiAgICAgd2tNZWFzdXJlTWVkaWFVSVBhcnQocGFydCwgMCwg
JnNpemUpOwogCi0gICAgZmxvYXQgem9vbUxldmVsID0gc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsK
LSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2l6ZS53aWR0aCAq
IHpvb21MZXZlbCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc3RhdGlj
X2Nhc3Q8aW50PihzaXplLmhlaWdodCAqIHpvb21MZXZlbCksIEZpeGVkKSk7CisgICAgZmxvYXQg
em9vbUxldmVsID0gc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIHN0eWxlLnNldFdpZHRoKExl
bmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwor
ICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCAq
IHpvb21MZXZlbCksIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyTWVkaWFDb250cm9sczo6cGFp
bnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSBwYXJ0LCBjb25zdCBS
ZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250
cm9scy5oCShyZXZpc2lvbiAxNzA0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVkaWFDb250cm9scy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIHB1Ymxp
YzoKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBzdGF0aWMgYm9vbCBwYWludE1lZGlhQ29udHJv
bHNQYXJ0KE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlLCBjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgc3RhdGljIHZvaWQgYWRqdXN0TWVk
aWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqKTsKKyAgICBzdGF0aWMgdm9pZCBhZGp1c3RN
ZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYpOwogI2VuZGlmCiAgICAgc3RhdGljIElu
dFBvaW50IHZvbHVtZVNsaWRlck9mZnNldEZyb21NdXRlQnV0dG9uKFJlbmRlckJveCosIGNvbnN0
IEludFNpemUmKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZW51TGlzdC5jcHAJKHJldmlzaW9uIDE3MDQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwxMCArMTI1LDEwIEBA
IHZvaWQgUmVuZGVyTWVudUxpc3Q6OmFkanVzdElubmVyU3R5bGUoKQogICAgICAgICBpbm5lclN0
eWxlLnNldEFsaWduU2VsZihBbGlnbkZsZXhTdGFydCk7CiAgICAgfQogCi0gICAgaW5uZXJTdHls
ZS5zZXRQYWRkaW5nTGVmdChMZW5ndGgodGhlbWUoKS5wb3B1cEludGVybmFsUGFkZGluZ0xlZnQo
JnN0eWxlKCkpLCBGaXhlZCkpOwotICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ1JpZ2h0KExlbmd0
aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoJnN0eWxlKCkpLCBGaXhlZCkpOwot
ICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ1RvcChMZW5ndGgodGhlbWUoKS5wb3B1cEludGVybmFs
UGFkZGluZ1RvcCgmc3R5bGUoKSksIEZpeGVkKSk7Ci0gICAgaW5uZXJTdHlsZS5zZXRQYWRkaW5n
Qm90dG9tKExlbmd0aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKCZzdHlsZSgp
KSwgRml4ZWQpKTsKKyAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0aCh0aGVtZSgp
LnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChzdHlsZSgpKSwgRml4ZWQpKTsKKyAgICBpbm5lclN0
eWxlLnNldFBhZGRpbmdSaWdodChMZW5ndGgodGhlbWUoKS5wb3B1cEludGVybmFsUGFkZGluZ1Jp
Z2h0KHN0eWxlKCkpLCBGaXhlZCkpOworICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ1RvcChMZW5n
dGgodGhlbWUoKS5wb3B1cEludGVybmFsUGFkZGluZ1RvcChzdHlsZSgpKSwgRml4ZWQpKTsKKyAg
ICBpbm5lclN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3R0b20oc3R5bGUoKSksIEZpeGVkKSk7CiAKICAgICBpZiAoZG9jdW1lbnQoKS5w
YWdlKCktPmNocm9tZSgpLnNlbGVjdEl0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkpIHsK
ICAgICAgICAgLy8gSXRlbXMgaW4gdGhlIHBvcHVwIHdpbGwgbm90IHJlc3BlY3QgdGhlIENTUyB0
ZXh0LWFsaWduIGFuZCBkaXJlY3Rpb24gcHJvcGVydGllcywKQEAgLTMyNiw3ICszMjYsNyBAQCBM
YXlvdXRSZWN0IFJlbmRlck1lbnVMaXN0Ojpjb250cm9sQ2xpcFJlCiAKIHZvaWQgUmVuZGVyTWVu
dUxpc3Q6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2lj
YWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdAogewotICAgIG1heExv
Z2ljYWxXaWR0aCA9IHN0ZDo6bWF4KG1fb3B0aW9uc1dpZHRoLCB0aGVtZSgpLm1pbmltdW1NZW51
TGlzdFNpemUoJnN0eWxlKCkpKSArIG1faW5uZXJCbG9jay0+cGFkZGluZ0xlZnQoKSArIG1faW5u
ZXJCbG9jay0+cGFkZGluZ1JpZ2h0KCk7CisgICAgbWF4TG9naWNhbFdpZHRoID0gc3RkOjptYXgo
bV9vcHRpb25zV2lkdGgsIHRoZW1lKCkubWluaW11bU1lbnVMaXN0U2l6ZShzdHlsZSgpKSkgKyBt
X2lubmVyQmxvY2stPnBhZGRpbmdMZWZ0KCkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdSaWdodCgp
OwogICAgIGlmICghc3R5bGUoKS53aWR0aCgpLmlzUGVyY2VudCgpKQogICAgICAgICBtaW5Mb2dp
Y2FsV2lkdGggPSBtYXhMb2dpY2FsV2lkdGg7CiB9CkBAIC01NjksNyArNTY5LDcgQEAgUG9wdXBN
ZW51U3R5bGUgUmVuZGVyTWVudUxpc3Q6Om1lbnVTdHlsZQogICAgIHJldHVybiBQb3B1cE1lbnVT
dHlsZShzdHlsZVRvVXNlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwg
c3R5bGVUb1VzZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IpLAogICAgICAgICBzdHlsZVRvVXNlLmZvbnQoKSwgc3R5bGVUb1VzZS52aXNpYmlsaXR5KCkg
PT0gVklTSUJMRSwgc3R5bGVUb1VzZS5kaXNwbGF5KCkgPT0gTk9ORSwgc3R5bGUoKS5oYXNBcHBl
YXJhbmNlKCksIHN0eWxlVG9Vc2UudGV4dEluZGVudCgpLAogICAgICAgICBzdHlsZSgpLmRpcmVj
dGlvbigpLCBpc092ZXJyaWRlKHN0eWxlKCkudW5pY29kZUJpZGkoKSksIFBvcHVwTWVudVN0eWxl
OjpEZWZhdWx0QmFja2dyb3VuZENvbG9yLAotICAgICAgICBQb3B1cE1lbnVTdHlsZTo6U2VsZWN0
UG9wdXAsIHRoZW1lKCkucG9wdXBNZW51U2l6ZSgmc3R5bGVUb1VzZSwgYWJzQm91bmRzKSk7Cisg
ICAgICAgIFBvcHVwTWVudVN0eWxlOjpTZWxlY3RQb3B1cCwgdGhlbWUoKS5wb3B1cE1lbnVTaXpl
KHN0eWxlVG9Vc2UsIGFic0JvdW5kcykpOwogfQogCiBIb3N0V2luZG93KiBSZW5kZXJNZW51TGlz
dDo6aG9zdFdpbmRvdygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZXRlci5jcHAJKHJldmlzaW9uIDE3MDQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBS
ZW5kZXJNZXRlcjo6dXBkYXRlTG9naWNhbFdpZHRoKCkKIHsKICAgICBSZW5kZXJCb3g6OnVwZGF0
ZUxvZ2ljYWxXaWR0aCgpOwogCi0gICAgSW50U2l6ZSBmcmFtZVNpemUgPSB0aGVtZSgpLm1ldGVy
U2l6ZUZvckJvdW5kcyh0aGlzLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYW1lUmVjdCgpKSk7Cisg
ICAgSW50U2l6ZSBmcmFtZVNpemUgPSB0aGVtZSgpLm1ldGVyU2l6ZUZvckJvdW5kcygqdGhpcywg
cGl4ZWxTbmFwcGVkSW50UmVjdChmcmFtZVJlY3QoKSkpOwogICAgIHNldExvZ2ljYWxXaWR0aChp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZnJhbWVTaXplLndpZHRoKCkgOiBmcmFtZVNpemUu
aGVpZ2h0KCkpOwogfQogCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgUmVuZGVyTWV0ZXI6OmNvbXB1
dGVMb2dpY2FsSGVpZ2h0KEwKICAgICAgICAgZnJhbWUuc2V0SGVpZ2h0KGNvbXB1dGVkVmFsdWVz
Lm1fZXh0ZW50KTsKICAgICBlbHNlCiAgICAgICAgIGZyYW1lLnNldFdpZHRoKGNvbXB1dGVkVmFs
dWVzLm1fZXh0ZW50KTsKLSAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IHRoZW1lKCkubWV0ZXJTaXpl
Rm9yQm91bmRzKHRoaXMsIHBpeGVsU25hcHBlZEludFJlY3QoZnJhbWUpKTsKKyAgICBJbnRTaXpl
IGZyYW1lU2l6ZSA9IHRoZW1lKCkubWV0ZXJTaXplRm9yQm91bmRzKCp0aGlzLCBwaXhlbFNuYXBw
ZWRJbnRSZWN0KGZyYW1lKSk7CiAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgPSBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gZnJhbWVTaXplLmhlaWdodCgpIDogZnJhbWVTaXplLndpZHRo
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CShyZXZpc2lvbiAxNzA0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1MywxMCArMTA1MywxMCBAQCB2b2lkIFJlbmRl
ck9iamVjdDo6cGFpbnRPdXRsaW5lKFBhaW50SW5mCiAgICAgaW50IG91dGxpbmVPZmZzZXQgPSBz
dHlsZVRvVXNlLm91dGxpbmVPZmZzZXQoKTsKIAogICAgIC8vIE9ubHkgcGFpbnQgdGhlIGZvY3Vz
IHJpbmcgYnkgaGFuZCBpZiB0aGUgdGhlbWUgaXNuJ3QgYWJsZSB0byBkcmF3IGl0LgotICAgIGlm
IChzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9j
dXNSaW5nKCZzdHlsZVRvVXNlKSkKKyAgICBpZiAoc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1
dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZyhzdHlsZVRvVXNlKSkKICAgICAgICAg
cGFpbnRGb2N1c1JpbmcocGFpbnRJbmZvLCBwYWludFJlY3QubG9jYXRpb24oKSwgJnN0eWxlVG9V
c2UpOwogCi0gICAgaWYgKGhhc091dGxpbmVBbm5vdGF0aW9uKCkgJiYgIXN0eWxlVG9Vc2Uub3V0
bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1c1JpbmcoJnN0eWxlVG9V
c2UpKQorICAgIGlmIChoYXNPdXRsaW5lQW5ub3RhdGlvbigpICYmICFzdHlsZVRvVXNlLm91dGxp
bmVTdHlsZUlzQXV0bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKHN0eWxlVG9Vc2Up
KQogICAgICAgICBhZGRQREZVUkxSZWN0KHBhaW50SW5mbywgcGFpbnRSZWN0LmxvY2F0aW9uKCkp
OwogCiAgICAgaWYgKHN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgfHwgc3R5bGVUb1Vz
ZS5vdXRsaW5lU3R5bGUoKSA9PSBCTk9ORSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJQcm9ncmVzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclByb2dyZXNzLmNwcAkocmV2aXNpb24gMTcwNDE3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsOCAr
OTEsOCBAQCB2b2lkIFJlbmRlclByb2dyZXNzOjphbmltYXRpb25UaW1lckZpcmVkCiAKIHZvaWQg
UmVuZGVyUHJvZ3Jlc3M6OnVwZGF0ZUFuaW1hdGlvblN0YXRlKCkKIHsKLSAgICBtX2FuaW1hdGlv
bkR1cmF0aW9uID0gdGhlbWUoKS5hbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKHRoaXMp
OwotICAgIG1fYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWwgPSB0aGVtZSgpLmFuaW1hdGlvblJlcGVh
dEludGVydmFsRm9yUHJvZ3Jlc3NCYXIodGhpcyk7CisgICAgbV9hbmltYXRpb25EdXJhdGlvbiA9
IHRoZW1lKCkuYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcigqdGhpcyk7CisgICAgbV9h
bmltYXRpb25SZXBlYXRJbnRlcnZhbCA9IHRoZW1lKCkuYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxG
b3JQcm9ncmVzc0JhcigqdGhpcyk7CiAKICAgICBib29sIGFuaW1hdGluZyA9IHN0eWxlKCkuaGFz
QXBwZWFyYW5jZSgpICYmIG1fYW5pbWF0aW9uRHVyYXRpb24gPiAwOwogICAgIGlmIChhbmltYXRp
bmcgPT0gbV9hbmltYXRpbmcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gMTcwNDE3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgbm90IGJlIGFkanVzdGluZyBzdHlsZXMgZHVyaW5nIGxheW91dC4gPHJkYXI6
Ly9wcm9ibGVtLzc2NzU0OTM+CiAgICAgaWYgKGlucHV0RWxlbWVudCgpLmlzU2VhcmNoRmllbGQo
KSkKLSAgICAgICAgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKHN0eWxl
KCksIHRoaXMpOworICAgICAgICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91bmRCb3JkZXJSYWRp
dXMoc3R5bGUoKSwgKnRoaXMpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMTcwNDE3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEs
NyBAQCBSZW5kZXJUaGVtZTo6UmVuZGVyVGhlbWUoKQogewogfQogCi12b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQqIGUsIGJvb2wgVUFIYXNBcHBlYXJhbmNlLCBjb25zdCBCb3JkZXJEYXRh
JiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tn
cm91bmRDb2xvcikKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSwgYm9vbCBVQUhh
c0FwcGVhcmFuY2UsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBi
YWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQogewogICAgIC8vIEZvcmNl
IGlubGluZSBhbmQgdGFibGUgZGlzcGxheSBzdHlsZXMgdG8gYmUgaW5saW5lLWJsb2NrIChleGNl
cHQgZm9yIHRhYmxlLSB3aGljaCBpcyBibG9jaykKICAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5
bGUuYXBwZWFyYW5jZSgpOwpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RTdHlsZShTdHlsZVJlc29sCiAgICAgZWxzZSBpZiAoc3R5bGUuZGlzcGxheSgpID09IENPTVBB
Q1QgfHwgc3R5bGUuZGlzcGxheSgpID09IExJU1RfSVRFTSB8fCBzdHlsZS5kaXNwbGF5KCkgPT0g
VEFCTEUpCiAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoQkxPQ0spOwogCi0gICAgaWYgKFVBSGFz
QXBwZWFyYW5jZSAmJiBpc0NvbnRyb2xTdHlsZWQoJnN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQs
IGJhY2tncm91bmRDb2xvcikpIHsKKyAgICBpZiAoVUFIYXNBcHBlYXJhbmNlICYmIGlzQ29udHJv
bFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpKSB7CiAg
ICAgICAgIGlmIChwYXJ0ID09IE1lbnVsaXN0UGFydCkgewogICAgICAgICAgICAgc3R5bGUuc2V0
QXBwZWFyYW5jZShNZW51bGlzdEJ1dHRvblBhcnQpOwogICAgICAgICAgICAgcGFydCA9IE1lbnVs
aXN0QnV0dG9uUGFydDsKQEAgLTE5MiwyNSArMTkyLDI1IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFk
anVzdFN0eWxlKFN0eWxlUmVzb2wKICAgICBzd2l0Y2ggKHN0eWxlLmFwcGVhcmFuY2UoKSkgewog
I2lmICFVU0UoTkVXX1RIRU1FKQogICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgICAgICByZXR1
cm4gYWRqdXN0Q2hlY2tib3hTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAg
ICAgcmV0dXJuIGFkanVzdENoZWNrYm94U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwog
ICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0UmFkaW9TdHlsZSgmc3R5
bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFJhZGlvU3R5bGUo
c3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CiAgICAg
Y2FzZSBTcXVhcmVCdXR0b25QYXJ0OgogICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CiAgICAg
Y2FzZSBCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0QnV0dG9uU3R5bGUoJnN0eWxl
UmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RCdXR0b25TdHlsZShz
dHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBJbm5lclNwaW5CdXR0b25QYXJ0Ogot
ICAgICAgICByZXR1cm4gYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2ZXIs
ICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShz
dHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAjZW5kaWYKICAgICBjYXNlIFRleHRGaWVsZFBhcnQ6
Ci0gICAgICAgIHJldHVybiBhZGp1c3RUZXh0RmllbGRTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0
eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFRleHRGaWVsZFN0eWxlKHN0eWxlUmVzb2x2
ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICAgICAgcmV0dXJuIGFk
anVzdFRleHRBcmVhU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJl
dHVybiBhZGp1c3RUZXh0QXJlYVN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBj
YXNlIE1lbnVsaXN0UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0U3R5bGUoJnN0
eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RNZW51TGlzdFN0
eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFy
dDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZl
ciwgc3R5bGUsICplKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUo
c3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgTWVkaWFQbGF5QnV0dG9uUGFydDoK
ICAgICBjYXNlIE1lZGlhQ3VycmVudFRpbWVQYXJ0OgogICAgIGNhc2UgTWVkaWFUaW1lUmVtYWlu
aW5nUGFydDoKQEAgLTIxOCwyOSArMjE4LDI5IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0
eWxlKFN0eWxlUmVzb2wKICAgICBjYXNlIE1lZGlhRXhpdEZ1bGxzY3JlZW5CdXR0b25QYXJ0Ogog
ICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uUGFydDoKICAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVy
Q29udGFpbmVyUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1lZGlhQ29udHJvbFN0eWxlKCZz
dHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0TWVkaWFDb250
cm9sU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgTWVkaWFTbGlkZXJQ
YXJ0OgogICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJQYXJ0OgogICAgIGNhc2UgTWVkaWFGdWxs
U2NyZWVuVm9sdW1lU2xpZGVyUGFydDoKICAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0Ogog
ICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2xpZGVy
VHJhY2tTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFk
anVzdFNsaWRlclRyYWNrU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2Ug
U2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydDoKICAgICBjYXNlIFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2xpZGVyVGh1bWJTdHlsZSgmc3R5bGVSZXNvbHZl
ciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5
bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgotICAgICAg
ICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBl
KTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZlciwg
c3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25QYXJ0OgotICAgICAg
ICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSgmc3R5bGVSZXNvbHZl
ciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2UgU2VhcmNoRmllbGRE
ZWNvcmF0aW9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlv
blBhcnRTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFk
anVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwg
ZSk7CiAgICAgY2FzZSBTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydDoKLSAgICAgICAg
cmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoJnN0eWxl
UmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBj
YXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsK
KyAgICAgICAgcmV0dXJuIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKHN0eWxl
UmVzb2x2ZXIsIHN0eWxlLCBlKTsKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKICAgICBj
YXNlIFByb2dyZXNzQmFyUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFByb2dyZXNzQmFyU3R5
bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RQcm9n
cmVzc0JhclN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICNlbmRpZgogI2lmIEVOQUJM
RShNRVRFUl9FTEVNRU5UKQogICAgIGNhc2UgTWV0ZXJQYXJ0OgpAQCAtMjQ4LDExICsyNDgsMTEg
QEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgIGNhc2UgQ29u
dGludW91c0NhcGFjaXR5TGV2ZWxJbmRpY2F0b3JQYXJ0OgogICAgIGNhc2UgRGlzY3JldGVDYXBh
Y2l0eUxldmVsSW5kaWNhdG9yUGFydDoKICAgICBjYXNlIFJhdGluZ0xldmVsSW5kaWNhdG9yUGFy
dDoKLSAgICAgICAgcmV0dXJuIGFkanVzdE1ldGVyU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHls
ZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RNZXRlclN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlKTsKICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgY2FzZSBJbnB1
dFNwZWVjaEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RJbnB1dEZpZWxkU3BlZWNo
QnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBh
ZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUp
OwogI2VuZGlmCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgY2FzZSBJbWFnZUNv
bnRyb2xzQnV0dG9uUGFydDoKQEAgLTY5Myw5ICs2OTMsOSBAQCBib29sIFJlbmRlclRoZW1lOjpp
c0NvbnRyb2xDb250YWluZXIoQ29uCiAgICAgcmV0dXJuIGFwcGVhcmFuY2UgIT0gQ2hlY2tib3hQ
YXJ0ICYmIGFwcGVhcmFuY2UgIT0gUmFkaW9QYXJ0OwogfQogCi1ib29sIFJlbmRlclRoZW1lOjpp
c0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRh
JiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tn
cm91bmRDb2xvcikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmls
bExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAog
ewotICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIHN3aXRjaCAoc3R5bGUu
YXBwZWFyYW5jZSgpKSB7CiAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKICAgICBjYXNlIFNxdWFy
ZUJ1dHRvblBhcnQ6CiAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKQEAgLTcxMiw5ICs3MTIs
OSBAQCBib29sIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgCiAgICAgY2FzZSBU
ZXh0RmllbGRQYXJ0OgogICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgogICAgICAgICAvLyBUZXN0IHRo
ZSBzdHlsZSB0byBzZWUgaWYgdGhlIFVBIGJvcmRlciBhbmQgYmFja2dyb3VuZCBtYXRjaC4KLSAg
ICAgICAgcmV0dXJuIChzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVyCi0gICAgICAgICAgICB8fCAq
c3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNrZ3JvdW5kCi0gICAgICAgICAgICB8fCBz
dHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSAh
PSBiYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICByZXR1cm4gKHN0eWxlLmJvcmRlcigpICE9IGJv
cmRlcgorICAgICAgICAgICAgfHwgKnN0eWxlLmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNrZ3Jv
dW5kCisgICAgICAgICAgICB8fCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpICE9IGJhY2tncm91bmRDb2xvcik7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTczMSwxNSArNzMxLDE1IEBAIHZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnMKICNlbmRpZgogfQogCi1ib29sIFJlbmRl
clRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Citib29sIFJlbmRlclRoZW1lOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpICYmIHN0
eWxlLT5hcHBlYXJhbmNlKCkgIT0gVGV4dEZpZWxkUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgp
ICE9IFRleHRBcmVhUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IE1lbnVsaXN0QnV0dG9u
UGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IExpc3Rib3hQYXJ0KTsKKyAgICByZXR1cm4g
KHN0eWxlLmhhc0FwcGVhcmFuY2UoKSAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gVGV4dEZpZWxk
UGFydCAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gVGV4dEFyZWFQYXJ0ICYmIHN0eWxlLmFwcGVh
cmFuY2UoKSAhPSBNZW51bGlzdEJ1dHRvblBhcnQgJiYgc3R5bGUuYXBwZWFyYW5jZSgpICE9IExp
c3Rib3hQYXJ0KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZTo6c3RhdGVDaGFuZ2VkKGNvbnN0IFJl
bmRlck9iamVjdCYgbywgQ29udHJvbFN0YXRlczo6U3RhdGVzIHN0YXRlKSBjb25zdAogewogICAg
IC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGUgY29udHJvbHMgZG9uJ3QgcmVz
cG9uZCB0byBjaGFuZ2VzIGluIDpob3ZlciBzdGF0ZQotICAgIGlmIChzdGF0ZSA9PSBDb250cm9s
U3RhdGVzOjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVyKCZvLnN0eWxlKCkpKQorICAgIGlm
IChzdGF0ZSA9PSBDb250cm9sU3RhdGVzOjpIb3ZlclN0YXRlICYmICFzdXBwb3J0c0hvdmVyKG8u
c3R5bGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEFzc3VtZSBwcmVzc2Vk
IHN0YXRlIGlzIG9ubHkgcmVzcG9uZGVkIHRvIGlmIHRoZSBjb250cm9sIGlzIGVuYWJsZWQuCkBA
IC05MTAsNyArOTEwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNEZWZhdWx0KGNvbnN0IFJlbmRl
cgogCiAjaWYgIVVTRShORVdfVEhFTUUpCiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdENoZWNr
Ym94U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIEEgc3VtbWFy
eSBvZiB0aGUgcnVsZXMgZm9yIGNoZWNrYm94IGRlc2lnbmVkIHRvIG1hdGNoIFdpbklFOgogICAg
IC8vIHdpZHRoL2hlaWdodCAtIGhvbm9yZWQgKFdpbklFIGFjdHVhbGx5IHNjYWxlcyBpdHMgY29u
dHJvbCBmb3Igc21hbGwgd2lkdGhzLCBidXQgbGV0cyBpdCBvdmVyZmxvdyBmb3Igc21hbGwgaGVp
Z2h0cy4pCkBAIC05MTgsMTYgKzkxOCwxNiBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RDaGVj
a2JveFN0eWxlKFN0CiAgICAgc2V0Q2hlY2tib3hTaXplKHN0eWxlKTsKIAogICAgIC8vIHBhZGRp
bmcgLSBub3QgaG9ub3JlZCBieSBXaW5JRSwgbmVlZHMgdG8gYmUgcmVtb3ZlZC4KLSAgICBzdHls
ZS0+cmVzZXRQYWRkaW5nKCk7CisgICAgc3R5bGUucmVzZXRQYWRkaW5nKCk7CiAKICAgICAvLyBi
b3JkZXIgLSBob25vcmVkIGJ5IFdpbklFLCBidXQgbG9va3MgdGVycmlibGUgKGp1c3QgcGFpbnRz
IGluIHRoZSBjb250cm9sIGJveCBhbmQgdHVybnMgb2ZmIHRoZSBXaW5kb3dzIFhQIHRoZW1lKQog
ICAgIC8vIGZvciBub3csIHdlIHdpbGwgbm90IGhvbm9yIGl0LgotICAgIHN0eWxlLT5yZXNldEJv
cmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKLSAgICBzdHlsZS0+c2V0Qm94U2hh
ZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJhZGlv
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0
CiB7CiAgICAgLy8gQSBzdW1tYXJ5IG9mIHRoZSBydWxlcyBmb3IgY2hlY2tib3ggZGVzaWduZWQg
dG8gbWF0Y2ggV2luSUU6CiAgICAgLy8gd2lkdGgvaGVpZ2h0IC0gaG9ub3JlZCAoV2luSUUgYWN0
dWFsbHkgc2NhbGVzIGl0cyBjb250cm9sIGZvciBzbWFsbCB3aWR0aHMsIGJ1dCBsZXRzIGl0IG92
ZXJmbG93IGZvciBzbWFsbCBoZWlnaHRzLikKQEAgLTkzNSwxNiArOTM1LDE2IEBAIHZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGUKICAgICBzZXRSYWRpb1NpemUoc3R5bGUp
OwogCiAgICAgLy8gcGFkZGluZyAtIG5vdCBob25vcmVkIGJ5IFdpbklFLCBuZWVkcyB0byBiZSBy
ZW1vdmVkLgotICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBzdHlsZS5yZXNldFBhZGRp
bmcoKTsKIAogICAgIC8vIGJvcmRlciAtIGhvbm9yZWQgYnkgV2luSUUsIGJ1dCBsb29rcyB0ZXJy
aWJsZSAoanVzdCBwYWludHMgaW4gdGhlIGNvbnRyb2wgYm94IGFuZCB0dXJucyBvZmYgdGhlIFdp
bmRvd3MgWFAgdGhlbWUpCiAgICAgLy8gZm9yIG5vdywgd2Ugd2lsbCBub3QgaG9ub3IgaXQuCi0g
ICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKIAotICAg
IHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51
bGxwdHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIE1vc3QgcGxhdGZvcm1zIHdpbGwgY29tcGxl
dGVseSBob25vciBhbGwgQ1NTLCBhbmQgc28gd2UgaGF2ZSBubyBuZWVkIHRvCiAgICAgLy8gYWRq
dXN0IHRoZSBzdHlsZSBhdCBhbGwgYnkgZGVmYXVsdC4gV2Ugd2lsbCBzdGlsbCBhbGxvdyB0aGUg
dGhlbWUgYSBjcmFjawpAQCAtOTUyLDI1ICs5NTIsMjUgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0QnV0dG9uU3R5bGUoU3R5bAogICAgIHNldEJ1dHRvblNpemUoc3R5bGUpOwogfQogCi12b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdElu
bmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdAogewogfQogI2VuZGlmCiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRGaWVs
ZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAogI2lmIEVOQUJM
RShJTlBVVF9TUEVFQ0gpCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbnB1dEZpZWxkU3BlZWNo
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0SW5w
dXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJJ
bnB1dFNwZWVjaDo6YWRqdXN0SW5wdXRGaWVsZFNwZWVjaEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2
ZXIsIHN0eWxlLCBlbGVtZW50KTsKIH0KQEAgLTk4MiwxMiArOTgyLDEyIEBAIGJvb2wgUmVuZGVy
VGhlbWU6OnBhaW50SW5wdXRGaWVsZFNwZWVjaEIKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVS
X0VMRU1FTlQpCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAg
IHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotSW50U2l6ZSBSZW5kZXJUaGVtZTo6
bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29uc3QgSW50UmVjdCYgYm91
bmRzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZTo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0
IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAogewogICAgIHJldHVy
biBib3VuZHMuc2l6ZSgpOwogfQpAQCAtMTA5NCwxNyArMTA5NCwxNyBAQCB2b2lkIFJlbmRlclRo
ZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9HUkVT
U19FTEVNRU5UKQotZG91YmxlIFJlbmRlclRoZW1lOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVtZTo6
YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZTo6YW5pbWF0aW9u
RHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citkb3VibGUgUmVu
ZGVyVGhlbWU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mm
KSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RQ
cm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAtMTExNCw0OSAr
MTExNCw0OSBAQCBJbnRSZWN0IFJlbmRlclRoZW1lOjpwcm9ncmVzc0JhclJlY3RGb3JCCiB9CiAj
ZW5kaWYKIAotYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxkSGF2
ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCYgaW5wdXRFbGVtZW50KSBjb25zdAogewotICAg
IHJldHVybiBpbnB1dEVsZW1lbnQtPmlzU3RlcHBhYmxlKCkgJiYgIWlucHV0RWxlbWVudC0+aXNS
YW5nZUNvbnRyb2woKTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50LmlzU3RlcHBhYmxlKCkgJiYg
IWlucHV0RWxlbWVudC5pc1JhbmdlQ29udHJvbCgpOwogfQogCiB2b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVs
ZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZWRpYUNvbnRy
b2xTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxl
LCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGFkanVzdFNsaWRlclRodW1iU2l6ZShz
dHlsZSwgZWxlbWVudCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1i
U2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RT
ZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBj
b25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50Jikg
Y29uc3QKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJ
KHJldmlzaW9uIDE3MDQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICAvLyBtZXRy
aWNzIGFuZCBkZWZhdWx0cyBnaXZlbiB0aGUgY29udGVudHMgb2YgdGhlIHN0eWxlLiAgVGhpcyBp
bmNsdWRlcyBzb3BoaXN0aWNhdGVkIG9wZXJhdGlvbnMgbGlrZQogICAgIC8vIHNlbGVjdGlvbiBv
ZiBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LCB0aGUgZGlzYWJsaW5nIG9mIGFwcGVh
cmFuY2Ugd2hlbiBjZXJ0YWluIG90aGVyIHByb3BlcnRpZXMgbGlrZQogICAgIC8vICJib3JkZXIi
IGFyZSBzZXQsIG9yIGlmIHRoZSBhcHBlYXJhbmNlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRo
ZW1lLgotICAgIHZvaWQgYWRqdXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCosICBib29sIFVBSGFzQXBwZWFyYW5jZSwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0
IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpOworICAgIHZvaWQgYWRq
dXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYsICBib29sIFVB
SGFzQXBwZWFyYW5jZSwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0
IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVk
IHRvIHBhaW50IHRoZSB3aWRnZXQgYXMgYSBiYWNrZ3JvdW5kIG9mIHRoZSBSZW5kZXJPYmplY3Qu
ICBBIHdpZGdldCdzIGZvcmVncm91bmQsIGUuZy4sIHRoZQogICAgIC8vIHRleHQgb2YgYSBidXR0
b24sIGlzIGFsd2F5cyByZW5kZXJlZCBieSB0aGUgZW5naW5lIGl0c2VsZi4gIFRoZSBib29sZWFu
IHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCYpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgY29udHJv
bCBoYXMgYmVlbiBzdHlsZWQgZW5vdWdoIGJ5IHRoZSBhdXRob3IgdG8gZGlzYWJsZSB0aGUgbmF0
aXZlIGFwcGVhcmFuY2UuCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBS
ZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9s
U3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxM
YXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0OwogCiAgICAgLy8gQSBn
ZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0ZWQg
YXQgYWxsLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CkBAIC0xMzUsMTAgKzEzNSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHRoZW1lQ2hhbmdlZCgpIHsgfQogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRo
ZSB0aGVtZSBpcyBhYmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCi0gICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7CiAKICAg
ICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkgY2Fy
ZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHBsYXRmb3JtIGlz
IGFibGUgdG8gc2hvdyBkYXRhbGlzdCBzdWdnZXN0aW9ucyBmb3IgYSBnaXZlbiBpbnB1dCB0eXBl
LgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RhdGFMaXN0VUkoY29uc3QgQXRvbWljU3RyaW5n
JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3NywxNiArMTc3LDE2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24m
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUq
KSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6
ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5k
ZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVy
bmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZp
cnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKikgY29uc3QgeyBy
ZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJl
bmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVwSW50
ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlJikgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJl
bmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVwSW50
ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gMDsgfQogICAg
IHZpcnR1YWwgYm9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBw
b3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0eWxlKiwgSW50UmVjdCYpIGNvbnN0IHsgcmV0dXJu
IFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXplTm9ybWFsOyB9CisgICAgdmlydHVhbCBQb3B1
cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0eWxl
JiwgSW50UmVjdCYpIGNvbnN0IHsgcmV0dXJuIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXpl
Tm9ybWFsOyB9CiAKICAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9sbGJhckNv
bnRyb2xTaXplRm9yUGFydChDb250cm9sUGFydCkgeyByZXR1cm4gUmVndWxhclNjcm9sbGJhcjsg
fQogCkBAIC0xOTUsOSArMTk1LDkgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFBST0dSRVNTX0VM
RU1FTlQpCiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmltYXRp
b24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVw
ZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OworICAgIHZp
cnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVy
UHJvZ3Jlc3MmKSBjb25zdDsKICAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5p
bWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlv
bkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNz
JikgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0IHByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAjZW5kaWYKIApAQCAt
MjE5LDcgKzIxOSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1F
TlQpCi0gICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJN
ZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFNpemUgbWV0ZXJT
aXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0KSBjb25zdDsKICNlbmRp
ZgogCkBAIC0yMzUsNyArMjM1LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZEhhdmVTcGluQnV0dG9uKEhUTUxJ
bnB1dEVsZW1lbnQmKSBjb25zdDsKIAogICAgIC8vIEZ1bmN0aW9ucyBmb3IgPHNlbGVjdD4gZWxl
bWVudHMuCiAgICAgdmlydHVhbCBib29sIGRlbGVnYXRlc01lbnVMaXN0UmVuZGVyaW5nKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI3MCwxOSArMjcwLDE5IEBAIHByb3RlY3RlZDoKIAog
I2lmICFVU0UoTkVXX1RIRU1FKQogICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5jZSB2
YWx1ZS4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAg
dmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQorICAg
IHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUmKSBjb25zdCB7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldFJh
ZGlvU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0IHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVz
dEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
eyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0
eWxlKikgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5
bGUmKSBjb25zdCB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5l
clNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCkBAIC0yOTAsMTUgKzI5MCwxNSBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW9EZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVt
ZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYURlY29yYXRpb25zKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50Jikg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
IApAQCAtMzA5LDQ0ICszMDksNDQgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNxdWFyZUJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICNpZiBFTkFCTEUoTUVU
RVJfRUxFTUVOVCkKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFBS
T0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludElucHV0RmllbGRTcGVl
Y2hCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNr
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1i
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7
IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxk
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVj
b3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5k
ZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RNZWRpYUNvbnRyb2xTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYU92ZXJsYXlQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAkocmV2aXNpb24gMTcwNDE3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDkgKzM5LDkgQEAgY2xhc3MgUmVuZGVyVGhlbWVJT1MgOiBwdWJsaWMgUmVuZGVy
VGhlbQogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUo
KTsKIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5
bGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGlu
Z1JpZ2h0KFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBh
ZGp1c3RSb3VuZEJvcmRlclJhZGl1cyhSZW5kZXJTdHlsZSYsIFJlbmRlckJveCopOworICAgIHN0
YXRpYyB2b2lkIGFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKFJlbmRlclN0eWxlJiwgUmVuZGVyQm94
Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3Jp
cHRpb24mKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNTIsMTkgKzUyLDE5IEBAIHB1YmxpYzoKIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9i
amVjdCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxl
ZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXIm
IGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xv
ciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIE1ldGhvZHMgZm9y
IGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9v
bCBwYWludENoZWNrYm94RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRSYWRpb0RlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIHBhaW50UHVzaEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRGaWxlVXBsb2FkSWNvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRl
ck9iamVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0JiBidXR0b25SZW5kZXJl
ciwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYsIEljb24qLCBGaWxlVXBsb2FkRGVj
b3JhdGlvbnMpIG92ZXJyaWRlOwogCkBAIC03NCwxNyArNzQsMTcgQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2
b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJU
cmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNp
emUoUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBi
b29sIHBhaW50U2xpZGVyVGh1bWJEZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoUFJP
R1JFU1NfRUxFTUVOVCkKICAgICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhl
IGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmlt
YXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQ
cm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwogICAgIC8vIFJldHVy
bnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0g
ICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQ
cm9ncmVzcyopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1
cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICNlbmRpZgpAQCAtOTQs
NyArOTQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBpbnQgc2xpZGVyVGlja09mZnNldEZy
b21UcmFja0NlbnRlcigpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwogCiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHByb3RlY3RlZDoK
ICNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHNob3VsZFNob3dQbGFjZWhvbGRlcldoZW5Gb2N1
c2VkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEhhdmVTcGluQnV0
dG9uKEhUTUxJbnB1dEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwog
CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhQ29udHJvbHNTdHls
ZVNoZWV0KCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCShyZXZpc2lvbiAxNzA0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1MywxNSArMzUzLDE1IEBA
IEZsb2F0UmVjdCBSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmQKICAgICByZXR1cm4gYm9y
ZGVyLnJlY3QoKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Q2hlY2tib3hTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgaWYgKCFzdHlsZS0+d2lk
dGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisg
ICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhlaWdo
dCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMZW5ndGggbGVuZ3RoID0gTGVu
Z3RoKHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3RkOjptYXgoc3R5bGUtPmZvbnRTaXplKCksIDEw
KSkpLCBGaXhlZCk7CisgICAgTGVuZ3RoIGxlbmd0aCA9IExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+
KGNlaWxmKHN0ZDo6bWF4KHN0eWxlLmZvbnRTaXplKCksIDEwKSkpLCBGaXhlZCk7CiAgICAgCi0g
ICAgc3R5bGUtPnNldFdpZHRoKGxlbmd0aCk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChsZW5ndGgp
OworICAgIHN0eWxlLnNldFdpZHRoKGxlbmd0aCk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KGxlbmd0
aCk7CiB9CiAKIHN0YXRpYyBDR1BvaW50IHNob3J0ZW5lZChDR1BvaW50IHN0YXJ0LCBDR1BvaW50
IGVuZCwgZmxvYXQgd2lkdGgpCkBAIC00MzcsMjcgKzQzNywyNyBAQCBpbnQgUmVuZGVyVGhlbWVJ
T1M6OmJhc2VsaW5lUG9zaXRpb24oY29uCiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpiYXNlbGlu
ZVBvc2l0aW9uKGJveCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVJT1M6OmlzQ29udHJvbFN0eWxl
ZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29u
c3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBj
b25zdAorYm9vbCBSZW5kZXJUaGVtZUlPUzo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5ZXImIGJh
Y2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7CiAgICAgLy8g
QnV0dG9ucyBhbmQgTWVudWxpc3RCdXR0b25zIGFyZSBzdHlsZWQgaWYgdGhleSBjb250YWluIGEg
YmFja2dyb3VuZCBpbWFnZS4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0
dG9uUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKLSAg
ICAgICAgcmV0dXJuICFzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKS5hbHBoYSgpIHx8IHN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCktPmhhc0lt
YWdlKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCB8fCBz
dHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4g
IXN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciku
YWxwaGEoKSB8fCBzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCktPmhhc0ltYWdlKCk7CiAKLSAgICBp
ZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gVGV4dEFyZWFQYXJ0KQotICAgICAgICByZXR1cm4gKnN0eWxlLT5iYWNrZ3JvdW5k
TGF5ZXJzKCkgIT0gYmFja2dyb3VuZDsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFRl
eHRGaWVsZFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IFRleHRBcmVhUGFydCkKKyAgICAg
ICAgcmV0dXJuICpzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCkgIT0gYmFja2dyb3VuZDsKIAogICAg
IHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tn
cm91bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVz
dFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIGlmICghc3R5
bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0
bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHls
ZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGVuZ3RoIGxlbmd0
aCA9IExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHN0ZDo6bWF4KHN0eWxlLT5mb250U2l6
ZSgpLCAxMCkpKSwgRml4ZWQpOwotICAgIHN0eWxlLT5zZXRXaWR0aChsZW5ndGgpOwotICAgIHN0
eWxlLT5zZXRIZWlnaHQobGVuZ3RoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVzKEludFNp
emUobGVuZ3RoLnZhbHVlKCkgLyAyLjBmLCBsZW5ndGgudmFsdWUoKSAvIDIuMGYpKTsKKyAgICBM
ZW5ndGggbGVuZ3RoID0gTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3RkOjptYXgoc3R5
bGUuZm9udFNpemUoKSwgMTApKSksIEZpeGVkKTsKKyAgICBzdHlsZS5zZXRXaWR0aChsZW5ndGgp
OworICAgIHN0eWxlLnNldEhlaWdodChsZW5ndGgpOworICAgIHN0eWxlLnNldEJvcmRlclJhZGl1
cyhJbnRTaXplKGxlbmd0aC52YWx1ZSgpIC8gMi4wZiwgbGVuZ3RoLnZhbHVlKCkgLyAyLjBmKSk7
CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UmFkaW9EZWNvcmF0aW9ucyhjb25zdCBS
ZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCkBAIC01MTksMjEgKzUxOSwyMSBAQCBjb25zdCBmbG9hdCBNZW51TGlzdEFycm93
V2lkdGggPSA3OwogY29uc3QgZmxvYXQgTWVudUxpc3RBcnJvd0hlaWdodCA9IDY7CiBjb25zdCBm
bG9hdCBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdodCA9IDE5OwogCi1pbnQgUmVuZGVyVGhlbWVJ
T1M6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAor
aW50IFJlbmRlclRoZW1lSU9TOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxl
JiBzdHlsZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlz
dEJ1dHRvblBhcnQpCi0gICAgICAgIHJldHVybiBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdodCAr
IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0g
TWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gTWVudUxpc3RCdXR0b25QYWRkaW5n
UmlnaHQgKyBzdHlsZS5ib3JkZXJUb3BXaWR0aCgpOwogICAgIHJldHVybiAwOwogfQogCi12b2lk
IFJlbmRlclRoZW1lSU9TOjphZGp1c3RSb3VuZEJvcmRlclJhZGl1cyhSZW5kZXJTdHlsZSYgc3R5
bGUsIFJlbmRlckJveCogYm94KQordm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91bmRCb3Jk
ZXJSYWRpdXMoUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJCb3gmIGJveCkKIHsKICAgICBpZiAo
c3R5bGUuYXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQgfHwgc3R5bGUuYmFja2dyb3VuZExh
eWVycygpLT5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIG5vdCBiZSByZWx5aW5nIG9uIGJvcmRlciByYWRpdXMgZm9yIHRoZSBhcHBlYXJhbmNl
IG9mIG91ciBjb250cm9scyA8cmRhcjovL3Byb2JsZW0vNzY3NTQ5Mz4KLSAgICBMZW5ndGggcmFk
aXVzV2lkdGgoc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1pbihib3gtPndpZHRoKCksIGJveC0+aGVp
Z2h0KCkpIC8gMi4wKSwgRml4ZWQpOwotICAgIExlbmd0aCByYWRpdXNIZWlnaHQoc3RhdGljX2Nh
c3Q8aW50Pihib3gtPmhlaWdodCgpIC8gMi4wKSwgRml4ZWQpOworICAgIExlbmd0aCByYWRpdXNX
aWR0aChzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bWluKGJveC53aWR0aCgpLCBib3guaGVpZ2h0KCkp
IC8gMi4wKSwgRml4ZWQpOworICAgIExlbmd0aCByYWRpdXNIZWlnaHQoc3RhdGljX2Nhc3Q8aW50
Pihib3guaGVpZ2h0KCkgLyAyLjApLCBGaXhlZCk7CiAgICAgc3R5bGUuc2V0Qm9yZGVyUmFkaXVz
KExlbmd0aFNpemUocmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCkpOwogfQogCkBAIC02MTksMTAg
KzYxOSw4IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdE1lbnVMaXN0QnV0dG8KICAgICAv
LyAiLXdlYmtpdC1hcHBlYXJhbmNlOiBtZW51bGlzdC1idXR0b24iLgogICAgIGlmIChlbGVtZW50
Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3RUYWcpICYmICFlbGVtZW50Lmhhc0F0dHJpYnV0
ZShIVE1MTmFtZXM6Om11bHRpcGxlQXR0cikpCiAgICAgICAgIGFkanVzdFNlbGVjdExpc3RCdXR0
b25TdHlsZShzdHlsZSwgZWxlbWVudCk7Ci0gICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aW5wdXRUYWcpKSB7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPigmZWxlbWVudCk7Ci0gICAg
ICAgIGFkanVzdElucHV0RWxlbWVudEJ1dHRvblN0eWxlKHN0eWxlLCAqaW5wdXRFbGVtZW50KTsK
LSAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXRU
YWcpKQorICAgICAgICBhZGp1c3RJbnB1dEVsZW1lbnRCdXR0b25TdHlsZShzdHlsZSwgc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCY+KGVsZW1lbnQpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYg
Ym94LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpA
QCAtNzE3LDE0ICs3MTUsMTQgQEAgY29uc3QgQ0dGbG9hdCBrVHJhY2tUaGlja25lc3MgPSA0LjA7
CiBjb25zdCBDR0Zsb2F0IGtUcmFja1JhZGl1cyA9IGtUcmFja1RoaWNrbmVzcyAvIDIuMDsKIGNv
bnN0IGludCBrRGVmYXVsdFNsaWRlclRodW1iU2l6ZSA9IDE2OwogCi12b2lkIFJlbmRlclRoZW1l
SU9TOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1l
SU9TOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGhl
bWU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsKIAog
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGJlIHJlbHlpbmcgb24gYm9yZGVyIHJhZGl1cyBm
b3IgdGhlIGFwcGVhcmFuY2Ugb2Ygb3VyIGNvbnRyb2xzIDxyZGFyOi8vcHJvYmxlbS83Njc1NDkz
PgogICAgIExlbmd0aCByYWRpdXNXaWR0aChzdGF0aWNfY2FzdDxpbnQ+KGtUcmFja1JhZGl1cyks
IEZpeGVkKTsKICAgICBMZW5ndGggcmFkaXVzSGVpZ2h0KHN0YXRpY19jYXN0PGludD4oa1RyYWNr
UmFkaXVzKSwgRml4ZWQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSYWRpdXMoTGVuZ3RoU2l6ZShy
YWRpdXNXaWR0aCwgcmFkaXVzSGVpZ2h0KSk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmFkaXVzKExl
bmd0aFNpemUocmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCkpOwogfQogCiBib29sIFJlbmRlclRo
ZW1lSU9TOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTgwNSwyMCArODAz
LDIwIEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVHJhY2soY28KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNsaWRlclRodW1iU2l6
ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUlP
Uzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNv
bnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJIb3Jpem9u
dGFsUGFydCAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFNsaWRlclRodW1iVmVydGljYWxQYXJ0
KQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFy
dCAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEVuZm9yY2UgImJvcmRlci1yYWRpdXM6IDUwJSIuCiAgICAg
TGVuZ3RoIGxlbmd0aCg1MC4wZiwgUGVyY2VudCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclJhZGl1
cyhMZW5ndGhTaXplKGxlbmd0aCwgbGVuZ3RoKSk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmFkaXVz
KExlbmd0aFNpemUobGVuZ3RoLCBsZW5ndGgpKTsKIAogICAgIC8vIEVuZm9yY2UgYSAxNngxNiBz
aXplIGlmIG5vIHNpemUgaXMgcHJvdmlkZWQuCi0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50
cmluc2ljT3JBdXRvKCkgfHwgc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKSB7CisgICAgaWYgKHN0
eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSB8fCBzdHlsZS5oZWlnaHQoKS5pc0F1dG8o
KSkgewogICAgICAgICBMZW5ndGggbGVuZ3RoID0gTGVuZ3RoKGtEZWZhdWx0U2xpZGVyVGh1bWJT
aXplLCBGaXhlZCk7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChsZW5ndGgpOwotICAgICAgICBz
dHlsZS0+c2V0SGVpZ2h0KGxlbmd0aCk7CisgICAgICAgIHN0eWxlLnNldFdpZHRoKGxlbmd0aCk7
CisgICAgICAgIHN0eWxlLnNldEhlaWdodChsZW5ndGgpOwogICAgIH0KIH0KIApAQCAtODQwLDEy
ICs4MzgsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUaHVtYkRlYwogfQog
CiAjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi1kb3VibGUgUmVuZGVyVGhlbWVJT1M6OmFu
aW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25z
dAorZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dy
ZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotZG91
YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRl
clByb2dyZXNzKikgY29uc3QKK2RvdWJsZSBSZW5kZXJUaGVtZUlPUzo6YW5pbWF0aW9uRHVyYXRp
b25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7
CiB9CkBAIC05NDcsMjEgKzk0NSwxOCBAQCBpbnQgUmVuZGVyVGhlbWVJT1M6OnNsaWRlclRpY2tP
ZmZzZXRGcm9tCiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2VhcmNo
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2VhcmNo
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzZWxlY3RvciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hG
aWVsZFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CiAKLSAgICBpZiAoIWVsZW1lbnQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc3R5bGUtPmhhc0JvcmRlcigpKQorICAgIGlm
ICghc3R5bGUuaGFzQm9yZGVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlckJveCog
Ym94ID0gZWxlbWVudC0+cmVuZGVyQm94KCk7CisgICAgUmVuZGVyQm94KiBib3ggPSBlbGVtZW50
LnJlbmRlckJveCgpOwogICAgIGlmICghYm94KQogICAgICAgICByZXR1cm47CiAKLSAgICBhZGp1
c3RSb3VuZEJvcmRlclJhZGl1cygqc3R5bGUsIGJveCk7CisgICAgYWRqdXN0Um91bmRCb3JkZXJS
YWRpdXMoc3R5bGUsICpib3gpOwogfQogCiBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNlYXJj
aEZpZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtOTY5LDcgKzk2NCw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2VhcmNoRmllbGREZWMKICAgICByZXR1cm4gcGFpbnRU
ZXh0RmllbGREZWNvcmF0aW9ucyhib3gsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclRoZW1l
OjphZGp1c3RCdXR0b25TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwogCkBAIC05Nzgs
MTcgKzk3MywxNCBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZShTCiAg
ICAgLy8gU2luY2UgdGhlIGVsZW1lbnQgbWlnaHQgbm90IGJlIGluIGEgZG9jdW1lbnQsIGp1c3Qg
cGFzcyBudWxscHRyIGZvciB0aGUgcm9vdCBlbGVtZW50IHN0eWxlCiAgICAgLy8gYW5kIHRoZSBy
ZW5kZXIgdmlldy4KICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGVtU2l6ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUoMS4wLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7Ci0g
ICAgaW50IHBpeGVscyA9IGVtU2l6ZS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoc3R5bGUsIG51bGxwdHIsIG51bGxwdHIsIDEuMCwgZmFsc2UpKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ0JveChMZW5ndGhCb3goMCwgcGl4ZWxzLCAwLCBwaXhlbHMpKTsKLQot
ICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgIGludCBwaXhlbHMgPSBlbVNp
emUtPmNvbXB1dGVMZW5ndGg8aW50PihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCZzdHlsZSwg
bnVsbHB0ciwgbnVsbHB0ciwgMS4wLCBmYWxzZSkpOworICAgIHN0eWxlLnNldFBhZGRpbmdCb3go
TGVuZ3RoQm94KDAsIHBpeGVscywgMCwgcGl4ZWxzKSk7CiAKLSAgICBSZW5kZXJCb3gqIGJveCA9
IGVsZW1lbnQtPnJlbmRlckJveCgpOworICAgIFJlbmRlckJveCogYm94ID0gZWxlbWVudC5yZW5k
ZXJCb3goKTsKICAgICBpZiAoIWJveCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYWRqdXN0Um91
bmRCb3JkZXJSYWRpdXMoKnN0eWxlLCBib3gpOworICAgIGFkanVzdFJvdW5kQm9yZGVyUmFkaXVz
KHN0eWxlLCAqYm94KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRCdXR0b25EZWNv
cmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0xMDExLDE0ICsxMDAzLDE0IEBAIGJvb2wgUmVu
ZGVyVGhlbWVJT1M6OnBhaW50UHVzaEJ1dHRvbkRlY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVJT1M6OnNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZUlPUzo6c2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSYgc3R5
bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3Bl
Y2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAg
ICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0
KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSB0aGUgZm9udCBzaXpl
IHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgotICAgIHN0
eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oQ29udHJvbEJhc2VIZWlnaHQg
LyBDb250cm9sQmFzZUZvbnRTaXplICogc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVk
U2l6ZSgpKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0
PGludD4oQ29udHJvbEJhc2VIZWlnaHQgLyBDb250cm9sQmFzZUZvbnRTaXplICogc3R5bGUuZm9u
dERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCkpLCBGaXhlZCkpOwogfQogCiBjb25zdCBpbnQg
a1RodW1ibmFpbEJvcmRlclN0cm9rZVdpZHRoID0gMTsKQEAgLTEwODcsNyArMTA3OSw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVJT1M6OnNob3VsZFNob3dQbGFjZWhvbGQKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6c2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0
RWxlbWVudCopIGNvbnN0Citib29sIFJlbmRlclRoZW1lSU9TOjpzaG91bGRIYXZlU3BpbkJ1dHRv
bihIVE1MSW5wdXRFbGVtZW50JikgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkocmV2aXNpb24gMTcw
NDE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIEZsb2F0UmVjdCYpIG92ZXJyaWRl
OwogCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYgYmFja2dy
b3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5
bGVkKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXll
ciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
dmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNjksMzYgKzY5LDM2IEBAIHB1
YmxpYzoKICAgICAvLyBTeXN0ZW0gZm9udHMuCiAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQo
Q1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0
dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRl
OwogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgdmlydHVhbCBJbnRTaXplIHNs
aWRlclRpY2tTaXplKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBpbnQgc2xpZGVyVGlj
a09mZnNldEZyb21UcmFja0NlbnRlcigpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2
aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBjb25zdCBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRl
clN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBh
ZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGludCBw
b3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNpemUgcG9wdXBNZW51U2l6ZShj
b25zdCBSZW5kZXJTdHlsZSosIEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxl
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdU
b3AoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBwb3B1cElu
dGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNpemUgcG9wdXBNZW51U2l6ZShjb25zdCBS
ZW5kZXJTdHlsZSYsIEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9v
bCBwYWludENhcHNMb2NrSW5kaWNhdG9yKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwb3Bz
TWVudUJ5QXJyb3dLZXlzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYg
RU5BQkxFKE1FVEVSX0VMRU1FTlQpCi0gICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJv
dW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVy
JiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihDb250cm9sUGFy
dCkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQUk9HUkVTU19FTEVNRU5U
KQogICAgIC8vIFJldHVybnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5pbWF0aW9uIGZv
ciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdElu
dGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgLy8gUmV0dXJucyB0aGUgZHVyYXRp
b24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRv
dWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgSW50
UmVjdCBwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKQEAgLTEyNSw0MSArMTI1LDQxIEBA
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3JzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4
dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAjaWYgRU5B
QkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFy
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgYm9v
bCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVy
VHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
dmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBh
cnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMTc2LDE0ICsxNzYsMTQgQEAgcHJp
dmF0ZToKICAgICBGbG9hdFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJlbmRlck9i
amVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0JiBwYXJ0UmVuZGVyZXIsIGNv
bnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKICAgICAv
LyBHZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIGZvbnQuIFVzZWQgYnkgc29tZSBv
ZiB0aGUgY29udHJvbHMgKGxpa2UgYnV0dG9ucykuCi0gICAgTlNDb250cm9sU2l6ZSBjb250cm9s
U2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBOU0NvbnRyb2xTaXplIGNvbnRy
b2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIE5TQ29udHJvbFNp
emUgY29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgTlNDb250cm9s
U2l6ZSBjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmKSBjb25zdDsKICAgICBO
U0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yQ2VsbChOU0NlbGwqLCBjb25zdCBJbnRTaXplKiBz
aXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0gMS4wZikgY29u
c3Q7CiAgICAgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBjb25zdCBJbnRTaXplKiBzaXpl
cywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0gMS4wZik7Ci0gICAg
dm9pZCBzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXplcykg
Y29uc3Q7Ci0gICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNp
emUqIHNpemVzKSBjb25zdDsKLSAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0
eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAgIHZvaWQgc2V0Rm9udEZyb21D
b250cm9sU2l6ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBOU0NvbnRyb2xTaXplKSBj
b25zdDsKKyAgICB2b2lkIHNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSYsIGNvbnN0IEludFNp
emUqIHNpemVzKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVGb3JGb250KFJlbmRlclN0eWxlJiwg
Y29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAgIEludFNpemUgc2l6ZUZvclN5c3RlbUZv
bnQoUmVuZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7CisgICAgdm9pZCBz
ZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIE5TQ29u
dHJvbFNpemUpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxsKiwg
Y29uc3QgUmVuZGVyT2JqZWN0Jik7CiAgICAgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxs
KiwgY29uc3QgUmVuZGVyT2JqZWN0Jik7CkBAIC0yMDMsNyArMjAzLDcgQEAgcHJpdmF0ZToKICAg
ICBjb25zdCBJbnRTaXplKiBjYW5jZWxCdXR0b25TaXplcygpIGNvbnN0OwogICAgIGNvbnN0IElu
dFNpemUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VhcmNoQ2Vs
bFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIHNl
dFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZvaWQgc2V0U2VhcmNo
RmllbGRTaXplKFJlbmRlclN0eWxlJikgY29uc3Q7CiAKICAgICBOU1BvcFVwQnV0dG9uQ2VsbCAq
cG9wdXBCdXR0b24oKSBjb25zdDsKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCAqc2VhcmNoKCkgY29u
c3Q7CkBAIC0yMTQsMTEgKzIxNCwxMSBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKE1FVEVSX0VM
RU1FTlQpCiAgICAgTlNMZXZlbEluZGljYXRvclN0eWxlIGxldmVsSW5kaWNhdG9yU3R5bGVGb3Io
Q29udHJvbFBhcnQpIGNvbnN0OwotICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsICpsZXZlbEluZGlj
YXRvckZvcihjb25zdCBSZW5kZXJNZXRlciopIGNvbnN0OworICAgIE5TTGV2ZWxJbmRpY2F0b3JD
ZWxsICpsZXZlbEluZGljYXRvckZvcihjb25zdCBSZW5kZXJNZXRlciYpIGNvbnN0OwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKLSAgICBpbnQgbWluaW11bVByb2dyZXNz
QmFySGVpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgaW50IG1pbmltdW1Qcm9ncmVzc0Jh
ckhlaWdodChSZW5kZXJTdHlsZSYpIGNvbnN0OwogICAgIGNvbnN0IEludFNpemUqIHByb2dyZXNz
QmFyU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBpbnQqIHByb2dyZXNzQmFyTWFyZ2lucyhOU0Nv
bnRyb2xTaXplKSBjb25zdDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTcwNDE3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OTksMTcgKzU5
OSwxNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjp1c2VzVGVzdE1vZGVGb2N1c1JpCiAgICAgcmV0
dXJuIFdlYkNvcmU6OnVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKCk7CiB9CiAKLWJvb2wgUmVu
ZGVyVGhlbWVNYWM6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNv
bnN0IEJvcmRlckRhdGEmIGJvcmRlciwKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OmlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXImIGJh
Y2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7Ci0gICAgaWYg
KHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5j
ZSgpID09IFRleHRBcmVhUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0
KQotICAgICAgICByZXR1cm4gc3R5bGUtPmJvcmRlcigpICE9IGJvcmRlcjsKKyAgICBpZiAoc3R5
bGUuYXBwZWFyYW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09
IFRleHRBcmVhUGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAg
ICAgIHJldHVybiBzdHlsZS5ib3JkZXIoKSAhPSBib3JkZXI7CiAKICAgICAvLyBGSVhNRTogVGhp
cyBpcyBob3JyaWJsZSwgYnV0IHRoZXJlIGlzIG5vdCBtdWNoIGVsc2UgdGhhdCBjYW4gYmUgZG9u
ZS4gIE1lbnUgbGlzdHMgY2Fubm90IGRyYXcgcHJvcGVybHkgd2hlbgogICAgIC8vIHNjYWxlZC4g
IFRoZXkgY2FuJ3QgcmVhbGx5IGRyYXcgcHJvcGVybHkgd2hlbiB0cmFuc2Zvcm1lZCBlaXRoZXIu
ICBXZSBjYW4ndCBkZXRlY3QgdGhlIHRyYW5zZm9ybSBjYXNlIGF0IHN0eWxlCiAgICAgLy8gYWRq
dXN0bWVudCB0aW1lIHNvIHRoYXQgd2lsbCBqdXN0IGhhdmUgdG8gc3RheSBicm9rZW4uICBXZSBj
YW4gaG93ZXZlciBkZXRlY3QgdGhhdCB3ZSdyZSB6b29taW5nLiAgSWYgem9vbWluZwogICAgIC8v
IGlzIGluIGVmZmVjdCB3ZSB0cmVhdCBpdCBsaWtlIHRoZSBjb250cm9sIGlzIHN0eWxlZC4KLSAg
ICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQgJiYgc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKSAhPSAxLjBmKQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxp
c3RQYXJ0ICYmIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSAhPSAxLjBmKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBi
b3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CkBAIC03NDMsOSArNzQzLDkgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFN1cHBvcnRzVGludAogICAgIHJldHVybiB0cnVl
OwogfQogCi1OU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvckZvbnQo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6
Y29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBpbnQg
Zm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKKyAgICBpbnQgZm9udFNpemUgPSBzdHlsZS5m
b250U2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA+PSAxNikKICAgICAgICAgcmV0dXJuIE5TUmVn
dWxhckNvbnRyb2xTaXplOwogICAgIGlmIChmb250U2l6ZSA+PSAxMSkKQEAgLTc3MywzNSArNzcz
LDM1IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldENvbnRyb2xTaXplKE5TQ2UKICAgICAgICAg
W2NlbGwgc2V0Q29udHJvbFNpemU6c2l6ZV07CiB9CiAKLUludFNpemUgUmVuZGVyVGhlbWVNYWM6
OnNpemVGb3JGb250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNv
bnN0CitJbnRTaXplIFJlbmRlclRoZW1lTWFjOjpzaXplRm9yRm9udChSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpICE9IDEuMGYpIHsKKyAgICBpZiAoc3R5bGUuZWZmZWN0aXZlWm9vbSgpICE9IDEu
MGYpIHsKICAgICAgICAgSW50U2l6ZSByZXN1bHQgPSBzaXplc1tjb250cm9sU2l6ZUZvckZvbnQo
c3R5bGUpXTsKLSAgICAgICAgcmV0dXJuIEludFNpemUocmVzdWx0LndpZHRoKCkgKiBzdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpLCByZXN1bHQuaGVpZ2h0KCkgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
KTsKKyAgICAgICAgcmV0dXJuIEludFNpemUocmVzdWx0LndpZHRoKCkgKiBzdHlsZS5lZmZlY3Rp
dmVab29tKCksIHJlc3VsdC5oZWlnaHQoKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAg
fQogICAgIHJldHVybiBzaXplc1tjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpXTsKIH0KIAotSW50
U2l6ZSBSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxl
LCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVNYWM6OnNp
emVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMp
IGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikgeworICAg
IGlmIChzdHlsZS5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikgewogICAgICAgICBJbnRTaXplIHJl
c3VsdCA9IHNpemVzW2NvbnRyb2xTaXplRm9yU3lzdGVtRm9udChzdHlsZSldOwotICAgICAgICBy
ZXR1cm4gSW50U2l6ZShyZXN1bHQud2lkdGgoKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCksIHJl
c3VsdC5oZWlnaHQoKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICByZXR1cm4g
SW50U2l6ZShyZXN1bHQud2lkdGgoKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSwgcmVzdWx0Lmhl
aWdodCgpICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHNpemVz
W2NvbnRyb2xTaXplRm9yU3lzdGVtRm9udChzdHlsZSldOwogfQogCi12b2lkIFJlbmRlclRoZW1l
TWFjOjpzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplKiBz
aXplcykgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNpemVGcm9tRm9udChSZW5kZXJT
dHlsZSYgc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAogewogICAgIC8vIEZJWE1F
OiBDaGVjayBpcyBmbGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdp
ZHRoIGludG8gYWNjb3VudC4KICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yRm9udChzdHlsZSwg
c2l6ZXMpOwotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmIHNp
emUud2lkdGgoKSA+IDApCi0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0
aCgpLCBGaXhlZCkpOwotICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6ZS5o
ZWlnaHQoKSA+IDApCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0
KCksIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAm
JiBzaXplLndpZHRoKCkgPiAwKQorICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2l6ZS53
aWR0aCgpLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXpl
LmhlaWdodCgpID4gMCkKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdo
dCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRy
b2xTaXplKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNpemUg
Y29udHJvbFNpemUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRy
b2xTaXplKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIE5TQ29udHJvbFNpemUg
Y29udHJvbFNpemUpIGNvbnN0CiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
bjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CkBAIC04MDks
MTkgKzgwOSwxOSBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTCiAK
ICAgICBOU0ZvbnQqIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0
ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOmNvbnRyb2xTaXplXV07CiAgICAgZm9udERlc2NyaXB0
aW9uLnNldE9uZUZhbWlseShbZm9udCB3ZWJDb3JlRmFtaWx5TmFtZV0pOwotICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRDb21wdXRlZFNpemUoW2ZvbnQgcG9pbnRTaXplXSAqIHN0eWxlLT5lZmZlY3Rp
dmVab29tKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKFtmb250IHBv
aW50U2l6ZV0gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBmb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS5lZmZlY3RpdmVab29tKCkp
OworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKFtmb250IHBvaW50U2l6ZV0g
KiBzdHlsZS5lZmZlY3RpdmVab29tKCkpOwogCiAgICAgLy8gUmVzZXQgbGluZSBoZWlnaHQKLSAg
ICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7
CisgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQo
KSk7CiAKLSAgICBpZiAoc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
KQotICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICBpZiAoc3R5bGUuc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCisgICAgICAgIHN0eWxlLmZvbnQoKS51cGRh
dGUoMCk7CiB9CiAKLU5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTaXplRm9y
U3lzdGVtRm9udChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitOU0NvbnRyb2xTaXplIFJlbmRl
clRoZW1lTWFjOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBj
b25zdAogewotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGludCBm
b250U2l6ZSA9IHN0eWxlLmZvbnRTaXplKCk7CiAgICAgaWYgKGZvbnRTaXplID49IFtOU0ZvbnQg
c3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpOU1JlZ3VsYXJDb250cm9sU2l6ZV0pCiAgICAg
ICAgIHJldHVybiBOU1JlZ3VsYXJDb250cm9sU2l6ZTsKICAgICBpZiAoZm9udFNpemUgPj0gW05T
Rm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOk5TU21hbGxDb250cm9sU2l6ZV0pCkBA
IC04NDUsNyArODQ1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQoY29u
cwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4
dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAtODY3LDcgKzg2Nyw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEoY29uc3QKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lTWFjOjphZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IEVsZW1lbnQmKSBjb25zdAogewogfQogCkBAIC05MTMsNyArOTEzLDcgQEAgYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRNZW51TGlzdChjb25zdAogCiAgICAgLy8gTm93IGluZmxhdGUgaXQgdG8g
YWNjb3VudCBmb3IgdGhlIHNoYWRvdy4KICAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0ID0gcmVj
dDsKLSAgICBpZiAocmVjdC53aWR0aCgpID49IG1pbmltdW1NZW51TGlzdFNpemUoJnJlbmRlcmVy
LnN0eWxlKCkpKQorICAgIGlmIChyZWN0LndpZHRoKCkgPj0gbWluaW11bU1lbnVMaXN0U2l6ZShy
ZW5kZXJlci5zdHlsZSgpKSkKICAgICAgICAgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZVJlY3QocmVj
dCwgc2l6ZSwgcG9wdXBCdXR0b25NYXJnaW5zKCksIHpvb21MZXZlbCk7CiAKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKQEAgLTk0
Myw5ICs5NDMsOSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KGNvbnN0CiAK
ICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKIAotSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6bWV0
ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiByZW5kZXJNZXRlciwgY29uc3QgSW50
UmVjdCYgYm91bmRzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXplRm9y
Qm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiByZW5kZXJNZXRlciwgY29uc3QgSW50UmVjdCYgYm91
bmRzKSBjb25zdAogewotICAgIGlmIChOb0NvbnRyb2xQYXJ0ID09IHJlbmRlck1ldGVyLT5zdHls
ZSgpLmFwcGVhcmFuY2UoKSkKKyAgICBpZiAoTm9Db250cm9sUGFydCA9PSByZW5kZXJNZXRlci5z
dHlsZSgpLmFwcGVhcmFuY2UoKSkKICAgICAgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7CiAKICAg
ICBOU0xldmVsSW5kaWNhdG9yQ2VsbCogY2VsbCA9IGxldmVsSW5kaWNhdG9yRm9yKHJlbmRlck1l
dGVyKTsKQEAgLTk2Miw3ICs5NjIsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1ldGVy
KGNvbnN0IFJlCiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0
KHBhaW50SW5mby5jb250ZXh0KTsKIAotICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0g
bGV2ZWxJbmRpY2F0b3JGb3IodG9SZW5kZXJNZXRlcigmcmVuZGVyT2JqZWN0KSk7CisgICAgTlNM
ZXZlbEluZGljYXRvckNlbGwqIGNlbGwgPSBsZXZlbEluZGljYXRvckZvcih0b1JlbmRlck1ldGVy
KHJlbmRlck9iamVjdCkpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cigqcGFpbnRJbmZvLmNvbnRleHQpOwogCiAgICAgW2NlbGwgZHJhd1dpdGhGcmFtZTpyZWN0IGlu
Vmlldzpkb2N1bWVudFZpZXdGb3IocmVuZGVyT2JqZWN0KV07CkBAIC0xMDAxLDE2ICsxMDAxLDE2
IEBAIE5TTGV2ZWxJbmRpY2F0b3JTdHlsZSBSZW5kZXJUaGVtZU1hYzo6bGUKIAogfQogCi1OU0xl
dmVsSW5kaWNhdG9yQ2VsbCogUmVuZGVyVGhlbWVNYWM6OmxldmVsSW5kaWNhdG9yRm9yKGNvbnN0
IFJlbmRlck1ldGVyKiByZW5kZXJNZXRlcikgY29uc3QKK05TTGV2ZWxJbmRpY2F0b3JDZWxsKiBS
ZW5kZXJUaGVtZU1hYzo6bGV2ZWxJbmRpY2F0b3JGb3IoY29uc3QgUmVuZGVyTWV0ZXImIHJlbmRl
ck1ldGVyKSBjb25zdAogewotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlck1l
dGVyLT5zdHlsZSgpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlck1ldGVy
LnN0eWxlKCk7CiAgICAgQVNTRVJUKHN0eWxlLmFwcGVhcmFuY2UoKSAhPSBOb0NvbnRyb2xQYXJ0
KTsKIAogICAgIGlmICghbV9sZXZlbEluZGljYXRvcikKICAgICAgICAgbV9sZXZlbEluZGljYXRv
ciA9IGFkb3B0TlMoW1tOU0xldmVsSW5kaWNhdG9yQ2VsbCBhbGxvY10gaW5pdFdpdGhMZXZlbElu
ZGljYXRvclN0eWxlOk5TQ29udGludW91c0NhcGFjaXR5TGV2ZWxJbmRpY2F0b3JTdHlsZV0pOwog
ICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbV9sZXZlbEluZGljYXRvci5nZXQoKTsK
IAotICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJNZXRlci0+bWV0ZXJFbGVt
ZW50KCk7CisgICAgSFRNTE1ldGVyRWxlbWVudCogZWxlbWVudCA9IHJlbmRlck1ldGVyLm1ldGVy
RWxlbWVudCgpOwogICAgIGRvdWJsZSB2YWx1ZSA9IGVsZW1lbnQtPnZhbHVlKCk7CiAKICAgICAv
LyBCZWNhdXNlIE5TTGV2ZWxJbmRpY2F0b3JDZWxsIGRvZXMgbm90IHN1cHBvcnQgb3B0aW11bS1p
bi10aGUtbWlkZGxlIHR5cGUgY29sb3JpbmcsCkBAIC0xMDcyLDM1ICsxMDcyLDM1IEBAIEludFJl
Y3QgUmVuZGVyVGhlbWVNYWM6OnByb2dyZXNzQmFyUmVjdEYKICAgICAgICAgcmV0dXJuIHByb2dy
ZXNzQmFyQm91bmRzOwogCiAgICAgZmxvYXQgem9vbUxldmVsID0gcmVuZGVyT2JqZWN0LnN0eWxl
KCkuZWZmZWN0aXZlWm9vbSgpOwotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250
cm9sU2l6ZUZvckZvbnQoJnJlbmRlck9iamVjdC5zdHlsZSgpKTsKKyAgICBOU0NvbnRyb2xTaXpl
IGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHJlbmRlck9iamVjdC5zdHlsZSgpKTsK
ICAgICBJbnRTaXplIHNpemUgPSBwcm9ncmVzc0JhclNpemVzKClbY29udHJvbFNpemVdOwogICAg
IHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwogICAgIHNpemUuc2V0
V2lkdGgocHJvZ3Jlc3NCYXJCb3VuZHMud2lkdGgoKSk7CiAKICAgICAvLyBOb3cgaW5mbGF0ZSBp
dCB0byBhY2NvdW50IGZvciB0aGUgc2hhZG93LgogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0g
cHJvZ3Jlc3NCYXJCb3VuZHM7Ci0gICAgaWYgKHByb2dyZXNzQmFyQm91bmRzLmhlaWdodCgpIDw9
IG1pbmltdW1Qcm9ncmVzc0JhckhlaWdodCgmcmVuZGVyT2JqZWN0LnN0eWxlKCkpKQorICAgIGlm
IChwcm9ncmVzc0JhckJvdW5kcy5oZWlnaHQoKSA8PSBtaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQo
cmVuZGVyT2JqZWN0LnN0eWxlKCkpKQogICAgICAgICBpbmZsYXRlZFJlY3QgPSBJbnRSZWN0KGlu
ZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcHJvZ3Jlc3NCYXJNYXJnaW5zKGNvbnRyb2xT
aXplKSwgem9vbUxldmVsKSk7CiAKICAgICByZXR1cm4gaW5mbGF0ZWRSZWN0OwogfQogCi1pbnQg
UmVuZGVyVGhlbWVNYWM6Om1pbmltdW1Qcm9ncmVzc0JhckhlaWdodChSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1Qcm9ncmVzc0JhckhlaWdodChS
ZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNpemVGb3JTeXN0ZW1Gb250
KHN0eWxlLCBwcm9ncmVzc0JhclNpemVzKCkpLmhlaWdodCgpOwogfQogCi1kb3VibGUgUmVuZGVy
VGhlbWVNYWM6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MqKSBjb25zdAorZG91YmxlIFJlbmRlclRoZW1lTWFjOjphbmltYXRpb25SZXBlYXRJbnRl
cnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1cm4g
cHJvZ3Jlc3NBbmltYXRpb25GcmFtZVJhdGU7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZU1hYzo6
YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citk
b3VibGUgUmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVu
ZGVyUHJvZ3Jlc3MmKSBjb25zdAogewogICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbk51bUZy
YW1lcyAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRlOwogfQogCi12b2lkIFJlbmRlclRoZW1l
TWFjOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jlc3NCYXJT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0K
IApAQCAtMTExMCw3ICsxMTEwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVz
c0JhcihjbwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0
ID0gcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKHJlbmRlck9iamVjdCwgcmVjdCk7Ci0gICAgTlND
b250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udCgmcmVuZGVyT2JqZWN0
LnN0eWxlKCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZv
ckZvbnQocmVuZGVyT2JqZWN0LnN0eWxlKCkpOwogCiAgICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3Mm
IHJlbmRlclByb2dyZXNzID0gKnRvUmVuZGVyUHJvZ3Jlc3MoJnJlbmRlck9iamVjdCk7CiAgICAg
SElUaGVtZVRyYWNrRHJhd0luZm8gdHJhY2tJbmZvOwpAQCAtMTMzNywyMiArMTMzNywyMiBAQCBz
dGF0aWMgY29uc3QgSW50U2l6ZSogbWVudUxpc3RCdXR0b25TaXplCiAgICAgcmV0dXJuIHNpemVz
OwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAog
ewogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoc3R5
bGUpOwogCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5bGUtPnJlc2V0UGFkZGlu
ZygpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRQYWRkaW5nKCk7
CiAKICAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0gICAgc3R5bGUtPnNldEhlaWdo
dChMZW5ndGgoQXV0bykpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoQXV0bykpOwogCiAg
ICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0eWxlLT5zZXRXaGl0ZVNw
YWNlKFBSRSk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCiAgICAgLy8gU2V0IHRo
ZSBmb3JlZ3JvdW5kIGNvbG9yIHRvIGJsYWNrIG9yIGdyYXkgd2hlbiB3ZSBoYXZlIHRoZSBhcXVh
IGxvb2suCiAgICAgLy8gQ2FzdCB0byBSR0IzMiBpcyB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGVy
IGJ1Zy4KLSAgICBzdHlsZS0+c2V0Q29sb3IoZSAmJiAhZS0+aXNEaXNhYmxlZEZvcm1Db250cm9s
KCkgPyBzdGF0aWNfY2FzdDxSR0JBMzI+KENvbG9yOjpibGFjaykgOiBDb2xvcjo6ZGFya0dyYXkp
OworICAgIHN0eWxlLnNldENvbG9yKCFlLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpID8gc3RhdGlj
X2Nhc3Q8UkdCQTMyPihDb2xvcjo6YmxhY2spIDogQ29sb3I6OmRhcmtHcmF5KTsKIAogICAgIC8v
IFNldCB0aGUgYnV0dG9uJ3MgdmVydGljYWwgc2l6ZS4KICAgICBzZXRTaXplRnJvbUZvbnQoc3R5
bGUsIG1lbnVMaXN0QnV0dG9uU2l6ZXMoKSk7CkBAIC0xMzYyLDUyICsxMzYyLDUyIEBAIHZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUKICAgICAvLyBzeXN0ZW0gZm9udCBm
b3IgdGhlIGNvbnRyb2wgc2l6ZSBpbnN0ZWFkLgogICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUo
c3R5bGVSZXNvbHZlciwgc3R5bGUsIGNvbnRyb2xTaXplKTsKIAotICAgIHN0eWxlLT5zZXRCb3hT
aGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1p
bnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVm
dChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNv
bnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2xlZnRQYWRkaW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVa
b29tKCk7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0
KQotICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCAqIHN0eWxlLT5lZmZlY3Rp
dmVab29tKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCisg
ICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxl
KSlbbGVmdFBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5h
cHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gc3R5bGVk
UG9wdXBQYWRkaW5nTGVmdCAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKICAgICByZXR1cm4gMDsK
IH0KIAotaW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdSaWdodChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5h
cHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25Q
YWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW3JpZ2h0UGFkZGluZ10gKiBzdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0
QnV0dG9uUGFydCkgewotICAgICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUo
KSAvIGJhc2VGb250U2l6ZTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0
UGFydCkKKyAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZv
bnQoc3R5bGUpKVtyaWdodFBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIGlm
IChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KSB7CisgICAgICAgIGZs
b2F0IGZvbnRTY2FsZSA9IHN0eWxlLmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemU7CiAgICAgICAg
IGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRTY2FsZTsKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4oY2VpbGYoYXJyb3dXaWR0aCArIChhcnJvd1BhZGRpbmdM
ZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAqIHN0eWxl
LT5lZmZlY3RpdmVab29tKCkpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY2Vp
bGYoYXJyb3dXaWR0aCArIChhcnJvd1BhZGRpbmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQgKyBw
YWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSkpOwogICAgIH0K
ICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFk
ZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6OnBv
cHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBp
ZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCi0gICAgICAgIHJldHVybiBw
b3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbdG9wUGFkZGluZ10g
KiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09
IE1lbnVsaXN0QnV0dG9uUGFydCkKLSAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ1Rv
cCAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9
PSBNZW51bGlzdFBhcnQpCisgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJv
bFNpemVGb3JGb250KHN0eWxlKSlbdG9wUGFkZGluZ10gKiBzdHlsZS5lZmZlY3RpdmVab29tKCk7
CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisgICAg
ICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdUb3AgKiBzdHlsZS5lZmZlY3RpdmVab29tKCk7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lTWFj
Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7
Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICBy
ZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2JvdHRv
bVBhZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVh
cmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCi0gICAgICAgIHJldHVybiBzdHlsZWRQb3B1
cFBhZGRpbmdCb3R0b20gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5h
cHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQorICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25Q
YWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2JvdHRvbVBhZGRpbmddICogc3R5bGUu
ZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RC
dXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nQm90dG9tICogc3R5
bGUuZWZmZWN0aXZlWm9vbSgpOwogICAgIHJldHVybiAwOwogfQogCi1Qb3B1cE1lbnVTdHlsZTo6
UG9wdXBNZW51U2l6ZSBSZW5kZXJUaGVtZU1hYzo6cG9wdXBNZW51U2l6ZShjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUsIEludFJlY3QmIHJlY3QpIGNvbnN0CitQb3B1cE1lbnVTdHlsZTo6UG9wdXBN
ZW51U2l6ZSBSZW5kZXJUaGVtZU1hYzo6cG9wdXBNZW51U2l6ZShjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgTlNQb3BVcEJ1dHRvbkNlbGwqIHBv
cHVwQnV0dG9uID0gdGhpcy0+cG9wdXBCdXR0b24oKTsKLSAgICBOU0NvbnRyb2xTaXplIHNpemUg
PSBjb250cm9sU2l6ZUZvckNlbGwocG9wdXBCdXR0b24sIHBvcHVwQnV0dG9uU2l6ZXMoKSwgcmVj
dC5zaXplKCksIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOworICAgIE5TQ29udHJvbFNpemUgc2l6
ZSA9IGNvbnRyb2xTaXplRm9yQ2VsbChwb3B1cEJ1dHRvbiwgcG9wdXBCdXR0b25TaXplcygpLCBy
ZWN0LnNpemUoKSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICBzd2l0Y2ggKHNpemUpIHsK
ICAgICBjYXNlIE5TUmVndWxhckNvbnRyb2xTaXplOgogICAgICAgICByZXR1cm4gUG9wdXBNZW51
U3R5bGU6OlBvcHVwTWVudVNpemVOb3JtYWw7CkBAIC0xNDUyLDcgKzE0NTIsNyBAQCBjb25zdCBJ
bnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6bWVudUxpc3RTCiAgICAgcmV0dXJuIHNpemVzOwogfQog
Ci1pbnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRl
clN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gc2l6ZUZvclN5c3RlbUZvbnQoc3R5
bGUsIG1lbnVMaXN0U2l6ZXMoKSkud2lkdGgoKTsKIH0KQEAgLTE0NjAsOSArMTQ2MCw5IEBAIGlu
dCBSZW5kZXJUaGVtZU1hYzo6bWluaW11bU1lbnVMaXN0U2l6ZSgKIGNvbnN0IGludCB0cmFja1dp
ZHRoID0gNTsKIGNvbnN0IGludCB0cmFja1JhZGl1cyA9IDI7CiAKLXZvaWQgUmVuZGVyVGhlbWVN
YWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJU
cmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBj
b25zdAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0
Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRl
clRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCkBAIC0xNTA2LDEwICsxNTA2LDEwIEBAIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50U2xpZGVyVHJhY2soY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNv
bnN0CiB7CiAgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNv
bHZlciwgc3R5bGUsIGVsZW1lbnQpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7
CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBjb25zdCBmbG9hdCB2ZXJ0
aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwpAQCAtMTYwOCw3ICsxNjA4LDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoQ2VsbFN0YXRlKAogewogICAgIE5TU2VhcmNoRmll
bGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIAotICAgIFtzZWFyY2ggc2V0Q29udHJv
bFNpemU6Y29udHJvbFNpemVGb3JGb250KCZvLnN0eWxlKCkpXTsKKyAgICBbc2VhcmNoIHNldENv
bnRyb2xTaXplOmNvbnRyb2xTaXplRm9yRm9udChvLnN0eWxlKCkpXTsKIAogICAgIC8vIFVwZGF0
ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1cGRhdGVFbmFibGVkU3Rh
dGUoc2VhcmNoLCBvKTsKQEAgLTE2MjEsNDUgKzE2MjEsNDUgQEAgY29uc3QgSW50U2l6ZSogUmVu
ZGVyVGhlbWVNYWM6OnNlYXJjaEZpZQogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSYgc3R5
bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3Bl
Y2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAg
ICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0
KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSB0aGUgZm9udCBzaXpl
IHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgogICAgIHNl
dFNpemVGcm9tRm9udChzdHlsZSwgc2VhcmNoRmllbGRTaXplcygpKTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIE92ZXJy
aWRlIGJvcmRlci4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBjb25zdCBzaG9ydCBi
b3JkZXJXaWR0aCA9IDIgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIHN0eWxlLT5zZXRC
b3JkZXJMZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0U3R5
bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSaWdodFdpZHRoKGJvcmRlcldpZHRoKTsK
LSAgICBzdHlsZS0+c2V0Qm9yZGVyUmlnaHRTdHlsZShJTlNFVCk7Ci0gICAgc3R5bGUtPnNldEJv
cmRlckJvdHRvbVdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyQm90dG9t
U3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJXaWR0aCk7
Ci0gICAgc3R5bGUtPnNldEJvcmRlclRvcFN0eWxlKElOU0VUKTsKKyAgICBzdHlsZS5yZXNldEJv
cmRlcigpOworICAgIGNvbnN0IHNob3J0IGJvcmRlcldpZHRoID0gMiAqIHN0eWxlLmVmZmVjdGl2
ZVpvb20oKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOworICAg
IHN0eWxlLnNldEJvcmRlckxlZnRTdHlsZShJTlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmln
aHRXaWR0aChib3JkZXJXaWR0aCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmlnaHRTdHlsZShJTlNF
VCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyQm90dG9tV2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0
eWxlLnNldEJvcmRlckJvdHRvbVN0eWxlKElOU0VUKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJUb3BX
aWR0aChib3JkZXJXaWR0aCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyVG9wU3R5bGUoSU5TRVQpOwog
CiAgICAgLy8gT3ZlcnJpZGUgaGVpZ2h0LgotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1
dG8pKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKICAgICBzZXRTZWFyY2hG
aWVsZFNpemUoc3R5bGUpOwogCiAgICAgLy8gT3ZlcnJpZGUgcGFkZGluZyBzaXplIHRvIG1hdGNo
IEFwcEtpdCB0ZXh0IHBvc2l0aW9uaW5nLgotICAgIGNvbnN0IGludCBwYWRkaW5nID0gMSAqIHN0
eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChw
YWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRp
bmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZp
eGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVk
KSk7CisgICAgY29uc3QgaW50IHBhZGRpbmcgPSAxICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOwor
ICAgIHN0eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0
eWxlLnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS5z
ZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRp
bmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CiAKICAgICBOU0NvbnRyb2xTaXplIGNv
bnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHN0eWxlKTsKICAgICBzZXRGb250RnJvbUNv
bnRyb2xTaXplKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBjb250cm9sU2l6ZSk7CiAKLSAgICBzdHls
ZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRy
KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByKQpAQCAtMTcxOCwxMiArMTcxOCwxMiBAQCBjb25zdCBJbnRTaXplKiBSZW5k
ZXJUaGVtZU1hYzo6Y2FuY2VsQnV0CiAgICAgcmV0dXJuIHNpemVzOwogfQogCi12b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBJbnRTaXplIHNpemUg
PSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgY2FuY2VsQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0Qm94
U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCks
IEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhl
ZCkpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogY29uc3QgSW50U2l6
ZSogUmVuZGVyVGhlbWVNYWM6OnJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0CkBAIC0xNzMzLDEy
ICsxNzMzLDEyIEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lTWFjOjpyZXN1bHRzQnUKIH0K
IAogY29uc3QgaW50IGVtcHR5UmVzdWx0c09mZnNldCA9IDk7Ci12b2lkIFJlbmRlclRoZW1lTWFj
OjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6
ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKLSAgICBzdHlsZS0+
c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwot
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVu
Z3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKKyAgICBzdHls
ZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0
Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJj
aEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpCkBAIC0xNzQ2LDEyICsxNzQ2LDEyIEBAIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50U2VhcmNoRmllbGREZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFy
dFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25z
dAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRz
QnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCks
IEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4
ZWQpKTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldFdp
ZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExl
bmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxs
cHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtMTc3OSwxMiArMTc3OSwxMiBAQCBib29sIFJl
bmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzCiB9CiAKIGNvbnN0IGludCByZXN1bHRz
QXJyb3dXaWR0aCA9IDU7Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQm
KSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCBy
ZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndp
ZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0
KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3co
bnVsbHB0cik7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSArIHJlc3Vs
dHNBcnJvd1dpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2l6ZS5o
ZWlnaHQoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAK
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0
IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCkBAIC0xOTE2LDEyICsxOTE2LDEyIEBAIGludCBSZW5kZXJUaGVtZU1hYzo6c2xpZGVy
VGlja09mZnNldEZyb20KIGNvbnN0IGludCBzbGlkZXJUaHVtYldpZHRoID0gMTU7CiBjb25zdCBp
bnQgc2xpZGVyVGh1bWJIZWlnaHQgPSAxNTsKIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxl
LCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBzdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9y
aXpvbnRhbFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2Fs
UGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4o
c2xpZGVyVGh1bWJXaWR0aCAqIHpvb21MZXZlbCksIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6b29t
TGV2ZWwpLCBGaXhlZCkpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IHN0eWxlLmVmZmVjdGl2ZVpv
b20oKTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRh
bFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7
CisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRlclRo
dW1iV2lkdGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRIZWlnaHQo
TGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6b29tTGV2ZWwpLCBG
aXhlZCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lU2FmYXJpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVTYWZhcmkuY3BwCShyZXZpc2lvbiAxNzA0MTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIs
MjEgKzI1MiwyMSBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzeXN0ZW1Gb250KENTU1ZhCiAg
ICAgZm9udERlc2NyaXB0aW9uID0gKmNhY2hlZERlc2M7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVT
YWZhcmk6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJv
cmRlckRhdGEmIGJvcmRlciwKK2Jvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OmlzQ29udHJvbFN0eWxl
ZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXImIGJhY2tn
cm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7CiAgICAgLy8gSWYg
d2UgZGlkbid0IGZpbmQgU2FmYXJpVGhlbWUuZGxsIHdlIHdvbid0IGJlIGFibGUgdG8gcGFpbnQg
YW55IHRoZW1lZCBjb250cm9scy4KICAgICBpZiAoIVNhZmFyaVRoZW1lTGlicmFyeSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFRleHRG
aWVsZFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0QXJlYVBhcnQgfHwgc3R5bGUt
PmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5ib3Jk
ZXIoKSAhPSBib3JkZXI7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQ
YXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBUZXh0QXJlYVBhcnQgfHwgc3R5bGUuYXBwZWFy
YW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm4gc3R5bGUuYm9yZGVyKCkgIT0g
Ym9yZGVyOwogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBi
b3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKIHZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgSW50UmVj
dCYgcikKIHsKLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JG
b250KCZvLnN0eWxlKCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9s
U2l6ZUZvckZvbnQoby5zdHlsZSgpKTsKIAogICAgIHN3aXRjaCAoby5zdHlsZSgpLmFwcGVhcmFu
Y2UoKSkgewogICAgICAgICBjYXNlIENoZWNrYm94UGFydDogewpAQCAtMzIzLDggKzMyMyw4IEBA
IGludCBSZW5kZXJUaGVtZVNhZmFyaTo6YmFzZWxpbmVQb3NpdGlvbigKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICBpZiAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQgfHwg
by5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpIHsKLSAgICAgICAgY29uc3QgUmVu
ZGVyQm94KiBib3ggPSB0b1JlbmRlckJveCgmbyk7Ci0gICAgICAgIHJldHVybiBib3gtPm1hcmdp
blRvcCgpICsgYm94LT5oZWlnaHQoKSAtIDI7IC8vIFRoZSBiYXNlbGluZSBpcyAycHggdXAgZnJv
bSB0aGUgYm90dG9tIG9mIHRoZSBjaGVja2JveC9yYWRpbyBpbiBBcHBLaXQuCisgICAgICAgIGNv
bnN0IFJlbmRlckJveCYgYm94ID0gdG9SZW5kZXJCb3gobyk7CisgICAgICAgIHJldHVybiBib3gu
bWFyZ2luVG9wKCkgKyBib3guaGVpZ2h0KCkgLSAyOyAvLyBUaGUgYmFzZWxpbmUgaXMgMnB4IHVw
IGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgY2hlY2tib3gvcmFkaW8gaW4gQXBwS2l0LgogICAgIH0K
IAogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihvKTsKQEAgLTM0Myw5
ICszNDMsOSBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpjb250cm9sU3VwcG9ydHNUCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLU5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6OmNvbnRy
b2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitOU0NvbnRyb2xTaXplIFJl
bmRlclRoZW1lU2FmYXJpOjpjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBj
b25zdAogewotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGludCBm
b250U2l6ZSA9IHN0eWxlLmZvbnRTaXplKCk7CiAgICAgaWYgKGZvbnRTaXplID49IDE2KQogICAg
ICAgICByZXR1cm4gTlNSZWd1bGFyQ29udHJvbFNpemU7CiAgICAgaWYgKGZvbnRTaXplID49IDEx
KQpAQCAtMzY4LDI3ICszNjgsMjcgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Q29udHJv
bFNpemUoTgogICAgICAgICBbY2VsbCBzZXRDb250cm9sU2l6ZTpzaXplXTsKIH0KICovCi1JbnRT
aXplIFJlbmRlclRoZW1lU2FmYXJpOjpzaXplRm9yRm9udChSZW5kZXJTdHlsZSogc3R5bGUsIGNv
bnN0IEludFNpemUqIHNpemVzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZVNhZmFyaTo6c2l6
ZUZvckZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QK
IHsKICAgICByZXR1cm4gc2l6ZXNbY29udHJvbFNpemVGb3JGb250KHN0eWxlKV07CiB9CiAKLUlu
dFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6OnNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lU2Fm
YXJpOjpzaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEludFNpemUq
IHNpemVzKSBjb25zdAogewogICAgIHJldHVybiBzaXplc1tjb250cm9sU2l6ZUZvclN5c3RlbUZv
bnQoc3R5bGUpXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0U2l6ZUZyb21Gb250
KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lU2FmYXJpOjpzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25z
dCBJbnRTaXplKiBzaXplcykgY29uc3QKIHsKICAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2Vk
LCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQu
CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvckZvbnQoc3R5bGUsIHNpemVzKTsKLSAgICBpZiAo
c3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndpZHRoKCkgPiAwKQot
ICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAg
ICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0KCkgPiAwKQotICAg
ICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAg
IGlmIChzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgpID4g
MCkKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsK
KyAgICBpZiAoc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDApCisg
ICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Rm9udEZyb21Db250cm9sU2l6ZShTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNpemUg
Y29udHJvbFNpemUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRGb250RnJvbUNv
bnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHls
ZSwgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgY29uc3QKIHsKICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6
ZSh0cnVlKTsKQEAgLTQwMCwxNSArNDAwLDE1IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNl
dEZvbnRGcm9tQ29udHIKICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShmb250
U2l6ZSk7CiAKICAgICAvLyBSZXNldCBsaW5lIGhlaWdodAotICAgIHN0eWxlLT5zZXRMaW5lSGVp
Z2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBzdHlsZS5zZXRMaW5l
SGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKIAotICAgIGlmIChzdHls
ZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCi0gICAgICAgIHN0eWxlLT5m
b250KCkudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsKKyAgICBpZiAoc3R5
bGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpCisgICAgICAgIHN0eWxlLmZv
bnQoKS51cGRhdGUoc3R5bGVSZXNvbHZlci5mb250U2VsZWN0b3IoKSk7CiB9CiAKLU5TQ29udHJv
bFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6OmNvbnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0CitOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lU2FmYXJpOjpjb250
cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlu
dCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGludCBmb250U2l6ZSA9IHN0eWxl
LmZvbnRTaXplKCk7CiAgICAgaWYgKGZvbnRTaXplID49IDEzKQogICAgICAgICByZXR1cm4gTlNS
ZWd1bGFyQ29udHJvbFNpemU7CiAgICAgaWYgKGZvbnRTaXplID49IDExKQpAQCAtNDIwLDcgKzQy
MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50Q2hlY2tib3goY28KIHsKICAgICBB
U1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5KCkpOwogCi0gICAgTlNDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udCgmby5zdHlsZSgpKTsKKyAgICBOU0NvbnRyb2xTaXpl
IGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KG8uc3R5bGUoKSk7CiAKICAgICBJbnRS
ZWN0IGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KHIsIGNoZWNrYm94U2l6ZXMoKVtjb250cm9s
U2l6ZV0sIGNoZWNrYm94TWFyZ2lucyhjb250cm9sU2l6ZSkpOyAgCiAgICAgcGFpbnRUaGVtZVBh
cnQoU2FmYXJpVGhlbWU6OkNoZWNrYm94UGFydCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLCBpbmZsYXRlZFJlY3QsIGNvbnRyb2xTaXplLCBkZXRlcm1pbmVTdGF0ZShvKSk7
CkBAIC00NDUsMTAgKzQ0NSwxMCBAQCBjb25zdCBpbnQqIFJlbmRlclRoZW1lU2FmYXJpOjpjaGVj
a2JveE1hCiAgICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOwogfQogCi12b2lkIFJlbmRl
clRoZW1lU2FmYXJpOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJiBzdHls
ZSkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVj
aWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmICghc3R5bGUtPndpZHRo
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAg
IGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS5oZWlnaHQo
KS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVXNlIHRoZSBmb250IHNpemUg
dG8gZGV0ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGNvbnRyb2wuCkBAIC00NTks
NyArNDU5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRSYWRpbyhjb25zdAogewog
ICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7CiAKLSAgICBOU0NvbnRyb2xTaXplIGNv
bnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KCZvLnN0eWxlKCkpOworICAgIE5TQ29udHJv
bFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoby5zdHlsZSgpKTsKICAKICAg
ICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KHIsIHJhZGlvU2l6ZXMoKVtjb250
cm9sU2l6ZV0sIHJhZGlvTWFyZ2lucyhjb250cm9sU2l6ZSkpOyAgICAKICAgICBwYWludFRoZW1l
UGFydChSYWRpb0J1dHRvblBhcnQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgaW5mbGF0ZWRSZWN0LCBjb250cm9sU2l6ZSwgZGV0ZXJtaW5lU3RhdGUobykpOwpAQCAtNDg0
LDE3ICs0ODQsMTcgQEAgY29uc3QgaW50KiBSZW5kZXJUaGVtZVNhZmFyaTo6cmFkaW9NYXJnaQog
ICAgIHJldHVybiBtYXJnaW5zW2NvbnRyb2xTaXplXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNh
ZmFyaTo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVTYWZhcmk6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAg
ICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdl
IGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2lj
T3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndp
ZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0
aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgogICAgIHNldFNpemVGcm9tRm9udChz
dHlsZSwgcmFkaW9TaXplcygpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0QnV0
dG9uUGFkZGluZ0Zyb21Db250cm9sU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNp
emUgc2l6ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldEJ1dHRvblBhZGRpbmdG
cm9tQ29udHJvbFNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBOU0NvbnRyb2xTaXplIHNpemUpIGNv
bnN0CiB7CiAgICAgLy8gSnVzdCB1c2UgOHB4LiAgQXBwS2l0IHdhbnRzIHRvIHVzZSAxMXB4IGZv
ciBtaW5pIGJ1dHRvbnMsIGJ1dCB0aGF0IHBhZGRpbmcgaXMganVzdCB0b28gbGFyZ2UKICAgICAv
LyBmb3IgcmVhbC13b3JsZCBXZWIgc2l0ZXMgKGNyZWF0aW5nIGEgaHVnZSBuZWNlc3NhcnkgbWlu
aW11bSB3aWR0aCBmb3IgYnV0dG9ucyB3aG9zZSBzcGFjZSBpcwpAQCAtNTAyLDEzICs1MDIsMTMg
QEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0QnV0dG9uUGFkZGluZwogICAgIC8vIFRoaXMg
YWxzbyBndWFyYW50ZWVzIHRoZSBIVE1MNCA8YnV0dG9uPiB3aWxsIG1hdGNoIG91ciByZW5kZXJp
bmcgYnkgZGVmYXVsdCwgc2luY2Ugd2UncmUgdXNpbmcgYSBjb25zaXN0ZW50CiAgICAgLy8gcGFk
ZGluZy4KICAgICBjb25zdCBpbnQgcGFkZGluZyA9IDg7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdM
ZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQo
TGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3Ro
KDAsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDAsIEZpeGVk
KSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Cisg
ICAgc3R5bGUuc2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0
eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3RoKDAsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGlu
Z0JvdHRvbShMZW5ndGgoMCwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6
YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRq
dXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewogICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBhcHBl
YXJhbmNlIGNvbnN0YW50cyBmb3IgYnV0dG9ucy4KICAgICAvLyAoMSkgUHVzaC1idXR0b24gaXMg
dGhlIGNvbnN0YW50IGZvciB0aGUgZGVmYXVsdCBBcXVhIHN5c3RlbSBidXR0b24uICBQdXNoIGJ1
dHRvbnMgd2lsbCBub3Qgc2NhbGUgdmVydGljYWxseSBhbmQgd2lsbCBub3QgYWxsb3cKQEAgLTUy
MiwxNSArNTIyLDE1IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdEJ1dHRvblN0eWwK
ICAgICAvLyBEZXRlcm1pbmUgb3VyIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgb3VyIGZvbnQuCiAg
ICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7
CiAKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkgeworICAg
IGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKICAgICAgICAgLy8g
RGl0Y2ggdGhlIGJvcmRlci4KLSAgICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgICAg
IHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKICAgICAgICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBh
dXRvLgotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisgICAgICAgIHN0
eWxlLnNldEhlaWdodChMZW5ndGgoQXV0bykpOwogCiAgICAgICAgIC8vIFdoaXRlLXNwYWNlIGlz
IGxvY2tlZCB0byBwcmUKLSAgICAgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKyAgICAg
ICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCiAgICAgICAgIC8vIFNldCB0aGUgYnV0dG9u
J3MgdmVydGljYWwgc2l6ZS4KICAgICAgICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7CkBAIC01NDQs
MTEgKzU0NCwxMSBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RCdXR0b25TdHlsCiAg
ICAgICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGNvbnRy
b2xTaXplKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBTZXQgYSBtaW4taGVpZ2h0IHNvIHRo
YXQgd2UgY2FuJ3QgZ2V0IHNtYWxsZXIgdGhhbiB0aGUgbWluaSBidXR0b24uCi0gICAgICAgIHN0
eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKDE1LCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRN
aW5IZWlnaHQoTGVuZ3RoKDE1LCBGaXhlZCkpOwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSB0b3Ag
YW5kIGJvdHRvbSBib3JkZXJzLgotICAgICAgICBzdHlsZS0+cmVzZXRCb3JkZXJUb3AoKTsKLSAg
ICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyQm90dG9tKCk7CisgICAgICAgIHN0eWxlLnJlc2V0Qm9y
ZGVyVG9wKCk7CisgICAgICAgIHN0eWxlLnJlc2V0Qm9yZGVyQm90dG9tKCk7CiAgICAgfQogfQog
CkBAIC01NjksMTAgKzU2OSwxMCBAQCBjb25zdCBpbnQqIFJlbmRlclRoZW1lU2FmYXJpOjpidXR0
b25NYXJnCiAgICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOwogfQogCi12b2lkIFJlbmRl
clRoZW1lU2FmYXJpOjpzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBj
b25zdAogewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmll
ZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5p
c0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgaWYg
KCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhlaWdodCgpLmlz
QXV0bygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBk
ZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJvbC4KQEAgLTYyMCw3ICs2
MjAsNyBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFRleHRGaWVsZChjCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RUZXh0RmllbGRT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCkBAIC02NDgsNyArNjQ4LDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRUZXh0QXJlYShjbwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKQEAgLTY5MCw3ICs2OTAsNyBAQCBib29sIFJlbmRl
clRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0KGNvCiAgICAgc2l6ZS5zZXRXaWR0aChyLndpZHRo
KCkpOwogCiAgICAgLy8gTm93IGluZmxhdGUgaXQgdG8gYWNjb3VudCBmb3IgdGhlIHNoYWRvdy4K
LSAgICBpZiAoci53aWR0aCgpID49IG1pbmltdW1NZW51TGlzdFNpemUoJm8uc3R5bGUoKSkpCisg
ICAgaWYgKHIud2lkdGgoKSA+PSBtaW5pbXVtTWVudUxpc3RTaXplKG8uc3R5bGUoKSkpCiAgICAg
ICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcG9wdXBC
dXR0b25NYXJnaW5zKGNvbnRyb2xTaXplKSk7CiAKICAgICBwYWludFRoZW1lUGFydChEcm9wRG93
bkJ1dHRvblBhcnQsIGluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIGluZmxhdGVkUmVj
dCwgY29udHJvbFNpemUsIGRldGVybWluZVN0YXRlKG8pKTsKQEAgLTg2NCwyMiArODY0LDIyIEBA
IGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RCdXQKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUp
IGNvbnN0CiB7CiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9y
Rm9udChzdHlsZSk7CiAKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+cmVz
ZXRQYWRkaW5nKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5yZXNldFBh
ZGRpbmcoKTsKICAgICAKICAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0gICAgc3R5
bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgo
QXV0bykpOwogCiAgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0eWxl
LT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCiAg
ICAgLy8gU2V0IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHRvIGJsYWNrIG9yIGdyYXkgd2hlbiB3ZSBo
YXZlIHRoZSBhcXVhIGxvb2suCiAgICAgLy8gQ2FzdCB0byBSR0IzMiBpcyB0byB3b3JrIGFyb3Vu
ZCBhIGNvbXBpbGVyIGJ1Zy4KLSAgICBzdHlsZS0+c2V0Q29sb3IoZSAmJiAhZS0+aXNEaXNhYmxl
ZEZvcm1Db250cm9sKCkgPyBzdGF0aWNfY2FzdDxSR0JBMzI+KENvbG9yOjpibGFjaykgOiBDb2xv
cjo6ZGFya0dyYXkpOworICAgIHN0eWxlLnNldENvbG9yKCFlLmlzRGlzYWJsZWRGb3JtQ29udHJv
bCgpID8gc3RhdGljX2Nhc3Q8UkdCQTMyPihDb2xvcjo6YmxhY2spIDogQ29sb3I6OmRhcmtHcmF5
KTsKIAogICAgIC8vIFNldCB0aGUgYnV0dG9uJ3MgdmVydGljYWwgc2l6ZS4KICAgICBzZXRCdXR0
b25TaXplKHN0eWxlKTsKQEAgLTg5MCw1NiArODkwLDU2IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZh
cmk6OmFkanVzdE1lbnVMaXN0U3QKICAgICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHN0eWxlUmVz
b2x2ZXIsIHN0eWxlLCBjb250cm9sU2l6ZSk7CiB9CiAKLWludCBSZW5kZXJUaGVtZVNhZmFyaTo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBS
ZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlJiBz
dHlsZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBh
cnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCiAgICAgICAg
IHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbbGVm
dFBhZGRpbmddOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9u
UGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkK
ICAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ0xlZnQ7CiAgICAgcmV0dXJuIDA7CiB9
CiAKLWludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJu
YWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlmIChzdHls
ZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5j
ZSgpID09IE1lbnVsaXN0UGFydCkKICAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhj
b250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtyaWdodFBhZGRpbmddOwotICAgIGlmIChzdHlsZS0+
YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgewotICAgICAgICBmbG9hdCBmb250
U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKKyAgICBpZiAoc3R5bGUu
YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgeworICAgICAgICBmbG9hdCBmb250
U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplOwogICAgICAgICBmbG9hdCBh
cnJvd1dpZHRoID0gYmFzZUFycm93V2lkdGggKiBmb250U2NhbGU7CiAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICsgYXJy
b3dQYWRkaW5nUmlnaHQgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSk7CiAgICAgfQogICAgIHJl
dHVybiAwOwogfQogCi1pbnQgUmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
VG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9w
dXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlm
IChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICBpZiAoc3R5bGUuYXBw
ZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKICAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFk
ZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVt0b3BQYWRkaW5nXTsKLSAgICBpZiAoc3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisgICAgaWYgKHN0eWxlLmFw
cGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCiAgICAgICAgIHJldHVybiBzdHlsZWRQ
b3B1cFBhZGRpbmdUb3A7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUaGVtZVNhZmFy
aTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAor
aW50IFJlbmRlclRoZW1lU2FmYXJpOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJT
dHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVu
dWxpc3RQYXJ0KQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQog
ICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHls
ZSkpW2JvdHRvbVBhZGRpbmddOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVs
aXN0QnV0dG9uUGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0
dG9uUGFydCkKICAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ0JvdHRvbTsKICAgICBy
ZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAg
ZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemU7CisgICAg
ZmxvYXQgZm9udFNjYWxlID0gc3R5bGUuZm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKICAgICAK
LSAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclJhZGl1cyhJ
bnRTaXplKGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSksIGludChiYXNlQm9y
ZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSkpKTsgLy8gRklYTUU6IFJvdW5kIHVwPworICAgIHN0
eWxlLnJlc2V0UGFkZGluZygpOworICAgIHN0eWxlLnNldEJvcmRlclJhZGl1cyhJbnRTaXplKGlu
dChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSksIGludChiYXNlQm9yZGVyUmFkaXVz
ICsgZm9udFNjYWxlIC0gMSkpKTsgLy8gRklYTUU6IFJvdW5kIHVwPwogCiAgICAgY29uc3QgaW50
IG1pbkhlaWdodCA9IDE1OwotICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdo
dCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4
ZWQpKTsKICAgICAKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlh
bExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVIZWlnaHQoKSk7CiB9CiAKIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lU2FmYXJp
OjptZW51TGlzdFNpemVzKCkgY29uc3QKQEAgLTk0OCw3ICs5NDgsNyBAQCBjb25zdCBJbnRTaXpl
KiBSZW5kZXJUaGVtZVNhZmFyaTo6bWVudUxpCiAgICAgcmV0dXJuIHNpemVzOwogfQogCi1pbnQg
UmVuZGVyVGhlbWVTYWZhcmk6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAoraW50IFJlbmRlclRoZW1lU2FmYXJpOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRl
clN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICByZXR1cm4gc2l6ZUZvclN5c3RlbUZvbnQoc3R5
bGUsIG1lbnVMaXN0U2l6ZXMoKSkud2lkdGgoKTsKIH0KQEAgLTk4NywxMCArOTg3LDEwIEBAIGJv
b2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2xpZGVyVHJhY2sKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
KSBjb25zdCAKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNsaWRlclRodW1iU3R5bGUo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
JiBlKSBjb25zdCAKIHsgCiAgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUo
c3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0
cik7IAorICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsgCiB9IAogCiBjb25zdCBmbG9h
dCB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwpAQCAtMTAwNSwxNCArMTAwNSwx
NCBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNsaWRlclRodW1iCiBjb25zdCBpbnQg
c2xpZGVyVGh1bWJXaWR0aCA9IDE1OwogY29uc3QgaW50IHNsaWRlclRodW1iSGVpZ2h0ID0gMTU7
CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRq
dXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7
Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFy
dCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0g
ICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsK
LSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVk
KSk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQ
YXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgewor
ICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsK
KyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQp
KTsKICAgICB9IAogI2lmIEVOQUJMRShWSURFTykKLSAgICBlbHNlIGlmIChzdHlsZS0+YXBwZWFy
YW5jZSgpID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KSAKKyAgICBlbHNlIGlmIChzdHlsZS5hcHBl
YXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJUaHVtYlBhcnQpIAogICAgICAgICBSZW5kZXJNZWRpYUNv
bnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShzdHlsZSk7CiAjZW5kaWYKIH0KQEAg
LTEwMzEsNDAgKzEwMzEsNDAgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVTYWZhcmk6OnNl
YXJjaAogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0
U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OnNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7
CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVu
IHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmlu
c2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxl
LndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBkZXRl
cm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJvbC4KICAgICBzZXRTaXplRnJv
bUZvbnQoc3R5bGUsIHNlYXJjaEZpZWxkU2l6ZXMoKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVT
YWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgLy8gT3Zl
cnJpZGUgYm9yZGVyLgotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0
Qm9yZGVyKCk7CiAgICAgY29uc3Qgc2hvcnQgYm9yZGVyV2lkdGggPSAyOwotICAgIHN0eWxlLT5z
ZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0
U3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSaWdodFdpZHRoKGJvcmRlcldpZHRo
KTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmlnaHRTdHlsZShJTlNFVCk7Ci0gICAgc3R5bGUtPnNl
dEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyQm90
dG9tU3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJXaWR0
aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclRvcFN0eWxlKElOU0VUKTsgICAgCisgICAgc3R5bGUu
c2V0Qm9yZGVyTGVmdFdpZHRoKGJvcmRlcldpZHRoKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJMZWZ0
U3R5bGUoSU5TRVQpOworICAgIHN0eWxlLnNldEJvcmRlclJpZ2h0V2lkdGgoYm9yZGVyV2lkdGgp
OworICAgIHN0eWxlLnNldEJvcmRlclJpZ2h0U3R5bGUoSU5TRVQpOworICAgIHN0eWxlLnNldEJv
cmRlckJvdHRvbVdpZHRoKGJvcmRlcldpZHRoKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJCb3R0b21T
dHlsZShJTlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyVG9wV2lkdGgoYm9yZGVyV2lkdGgpOwor
ICAgIHN0eWxlLnNldEJvcmRlclRvcFN0eWxlKElOU0VUKTsgICAgCiAgICAgCiAgICAgLy8gT3Zl
cnJpZGUgaGVpZ2h0LgotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKKyAgICBz
dHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKICAgICBzZXRTZWFyY2hGaWVsZFNpemUoc3R5
bGUpOwogICAgIAogICAgIC8vIE92ZXJyaWRlIHBhZGRpbmcgc2l6ZSB0byBtYXRjaCBBcHBLaXQg
dGV4dCBwb3NpdGlvbmluZy4KICAgICBjb25zdCBpbnQgcGFkZGluZyA9IDE7Ci0gICAgc3R5bGUt
PnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQ
YWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRp
bmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0
b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0xlZnQoTGVu
Z3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ1JpZ2h0KExlbmd0aChw
YWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcs
IEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4
ZWQpKTsKICAgICAKICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVG
b3JGb250KHN0eWxlKTsKICAgICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHN0eWxlUmVzb2x2ZXIs
IHN0eWxlLCBjb250cm9sU2l6ZSk7CkBAIC0xMDkyLDExICsxMDkyLDExIEBAIGNvbnN0IEludFNp
emUqIFJlbmRlclRoZW1lU2FmYXJpOjpjYW5jZWwKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAg
IEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCBjYW5jZWxCdXR0b25TaXpl
cygpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsK
LSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAg
IHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5bGUu
c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCiBjb25zdCBJbnRT
aXplKiBSZW5kZXJUaGVtZVNhZmFyaTo6cmVzdWx0c0J1dHRvblNpemVzKCkgY29uc3QKQEAgLTEx
MDYsMTEgKzExMDYsMTEgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVTYWZhcmk6OnJlc3Vs
dAogfQogCiBjb25zdCBpbnQgZW1wdHlSZXN1bHRzT2Zmc2V0ID0gOTsKLXZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBJbnRTaXpl
IHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1dHRvblNpemVzKCkpOwot
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpIC0gZW1wdHlSZXN1bHRzT2Zm
c2V0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCks
IEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5
UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUu
aGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2Vh
cmNoRmllbGREZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikKQEAgLTExMTgsMTEgKzExMTgsMTEgQEAgYm9vbCBSZW5kZXJU
aGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hGaWVsZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBh
cnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVu
dCYpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUs
IHJlc3VsdHNCdXR0b25TaXplcygpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUu
d2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdo
dCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZp
eGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkp
OwogfQogCiBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0Rl
Y29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmKQpAQCAtMTE0MiwxMSArMTE0MiwxMSBAQCBib29sIFJlbmRl
clRoZW1lU2FmYXJpOjpwYWludFNlYXJjaEZpZWxkCiB9CiAKIGNvbnN0IGludCByZXN1bHRzQXJy
b3dXaWR0aCA9IDU7Ci12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1l
bnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxl
LCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXpl
LndpZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExl
bmd0aChzaXplLndpZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKKyAgICBzdHls
ZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVu
ZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmKQpA
QCAtMTE5MCw5ICsxMTkwLDkgQEAgU3RyaW5nIFJlbmRlclRoZW1lU2FmYXJpOjptZWRpYUNvbnRy
b2xzUwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKLXZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RNZXRl
clN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25z
dAogewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94
U2hhZG93KG51bGxwdHIpOwogfQogCiBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpzdXBwb3J0c01l
dGVyKENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0CkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBib29sIFJl
bmRlclRoZW1lU2FmYXJpOjpzdXBwb3J0c01ldGVyKENvCiAgICAgfQogfQogCi1JbnRTaXplIFJl
bmRlclRoZW1lU2FmYXJpOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBj
b25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lU2FmYXJpOjpt
ZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXImLCBjb25zdCBJbnRSZWN0JiBib3Vu
ZHMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7CiB9CkBAIC0xMjE3LDcgKzEy
MTcsNyBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1ldGVyKGNvbnN0CiAgICAgaWYg
KCFyZW5kZXJPYmplY3QuaXNNZXRlcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEhU
TUxNZXRlckVsZW1lbnQqIGVsZW1lbnQgPSB0b1JlbmRlck1ldGVyKCZyZW5kZXJPYmplY3QpLT5t
ZXRlckVsZW1lbnQoKTsKKyAgICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gdG9SZW5kZXJN
ZXRlcihyZW5kZXJPYmplY3QpLm1ldGVyRWxlbWVudCgpOwogCiAgICAgaW50IHJlbWFpbmluZyA9
IHN0YXRpY19jYXN0PGludD4oKDEuMCAtIGVsZW1lbnQtPnZhbHVlUmF0aW8oKSkgKiBzdGF0aWNf
Y2FzdDxkb3VibGU+KHJlY3Quc2l6ZSgpLndpZHRoKCkpKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmgJKHJldmlzaW9uIDE3MDQxNykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RS
ZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0
YSYsCisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYs
IGNvbnN0IEJvcmRlckRhdGEmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3Q7CkBAIC03NCw1NiArNzQsNTYgQEAgcHVibGljOgogICAgIC8vIFN5c3RlbSBmb250cy4K
ICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24m
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5
bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0
eWxlJikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlk
ZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsgCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYs
IEVsZW1lbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7IAogICAgIAot
ICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNv
bnN0OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5
bGUqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5k
ZXJTdHlsZSopIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90
dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBh
ZGRpbmdMZWZ0KFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRl
cm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSYpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHBv
cHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlJikgY29uc3Q7CisgICAgdmlydHVhbCBp
bnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmKSBjb25zdDsKIAogcHJv
dGVjdGVkOgogICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6
ZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUo
UmVuZGVyU3R5bGUmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2
b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIFdlYkNv
cmU6OkVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgV2ViQ29yZTo6RWxlbWVudCYpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNp
emUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShS
ZW5kZXJTdHlsZSYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0Rmll
bGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRl
eHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
bnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1
YWwgYm9vbCBwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZp
ZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Vh
cmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNv
cmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAgCiAgICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpAQCAt
MTM0LDkgKzEzNCw5IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX0VM
RU1FTlQpCi0gICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5k
ZXJNZXRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIElu
dFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVj
dCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENvbnRy
b2xQYXJ0KSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1ldGVyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKICNlbmRpZgogCkBAIC0xNTAsMTMgKzE1MCwxMyBAQCBwcml2YXRlOgog
CiAgICAgLy8gR2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LiAgVXNlZCBi
eSBzb21lIG9mIHRoZSBjb250cm9scyAobGlrZSBidXR0b25zKS4KIAotICAgIE5TQ29udHJvbFNp
emUgY29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgTlNDb250cm9s
U2l6ZSBjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBO
U0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSYpIGNvbnN0OworICAg
IE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJikgY29u
c3Q7CiAgICAgLy92b2lkIHNldENvbnRyb2xTaXplKE5TQ2VsbCosIGNvbnN0IEludFNpemUqIHNp
emVzLCBjb25zdCBJbnRTaXplJiBtaW5TaXplKTsKLSAgICB2b2lkIHNldFNpemVGcm9tRm9udChS
ZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKLSAgICBJbnRTaXplIHNp
emVGb3JGb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAg
IEludFNpemUgc2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBz
aXplcykgY29uc3Q7Ci0gICAgdm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIE5TQ29udHJvbFNpemUpIGNvbnN0OworICAgIHZvaWQgc2V0U2l6
ZUZyb21Gb250KFJlbmRlclN0eWxlJiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAg
IEludFNpemUgc2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBzaXplcykg
Y29uc3Q7CisgICAgSW50U2l6ZSBzaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSYsIGNvbnN0
IEludFNpemUqIHNpemVzKSBjb25zdDsKKyAgICB2b2lkIHNldEZvbnRGcm9tQ29udHJvbFNpemUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7CiAKICAg
ICAvLyBIZWxwZXJzIGZvciBhZGp1c3RpbmcgYXBwZWFyYW5jZSBhbmQgZm9yIHBhaW50aW5nCiAg
ICAgY29uc3QgSW50U2l6ZSogY2hlY2tib3hTaXplcygpIGNvbnN0OwpAQCAtMTY1LDcgKzE2NSw3
IEBAIHByaXZhdGU6CiAgICAgY29uc3QgSW50U2l6ZSogcmFkaW9TaXplcygpIGNvbnN0OwogICAg
IGNvbnN0IGludCogcmFkaW9NYXJnaW5zKE5TQ29udHJvbFNpemUpIGNvbnN0OwogCi0gICAgdm9p
ZCBzZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlKiwgTlNDb250cm9s
U2l6ZSkgY29uc3Q7CisgICAgdm9pZCBzZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJl
bmRlclN0eWxlJiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7CiAgICAgY29uc3QgSW50U2l6ZSogYnV0
dG9uU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBpbnQqIGJ1dHRvbk1hcmdpbnMoTlNDb250cm9s
U2l6ZSkgY29uc3Q7CiAKQEAgLTE3OCw3ICsxNzgsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IElu
dFNpemUqIHNlYXJjaEZpZWxkU2l6ZXMoKSBjb25zdDsKICAgICBjb25zdCBJbnRTaXplKiBjYW5j
ZWxCdXR0b25TaXplcygpIGNvbnN0OwogICAgIGNvbnN0IEludFNpemUqIHJlc3VsdHNCdXR0b25T
aXplcygpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlKikg
Y29uc3Q7CisgICAgdm9pZCBzZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5bGUmKSBjb25zdDsK
IAogICAgIFRoZW1lQ29udHJvbFN0YXRlIGRldGVybWluZVN0YXRlKGNvbnN0IFJlbmRlck9iamVj
dCYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZVdpbi5jcHAJKHJldmlzaW9uIDE3MDQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw3ICsyOTEsNyBAQCBTdHJp
bmcgUmVuZGVyVGhlbWVXaW46OmV4dHJhUXVpcmtzU3R5bGVTCiAgICAgcmV0dXJuIFN0cmluZyh0
aGVtZVdpblF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVdpblF1aXJrc1Vz
ZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNI
b3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0Citib29sIFJlbmRlclRoZW1lV2luOjpzdXBw
b3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QKIHsKICAgICAvLyBUaGUgQ2xhc3Np
Yy8yayBsb29rIGhhcyBubyBob3ZlciBlZmZlY3RzLgogICAgIHJldHVybiBoYXZlVGhlbWU7CkBA
IC00MjksOSArNDI5LDkgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNGb2N1cyhDb250
cgogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNGb2N1c1JpbmcoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9y
dHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIHJldHVy
biBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOworICAgIHJldHVybiBzdXBwb3J0
c0ZvY3VzKHN0eWxlLmFwcGVhcmFuY2UoKSk7CiB9CiAKIHVuc2lnbmVkIFJlbmRlclRoZW1lV2lu
OjpkZXRlcm1pbmVDbGFzc2ljU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBDb250cm9sU3Vi
UGFydCBzdWJQYXJ0KQpAQCAtNzMwLDEzICs3MzAsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6
cGFpbnRCdXR0b24oY29uc3QgUgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZVdpbjo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZVdpbjo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewogICAg
IGludCB3aWR0aCA9IDo6R2V0U3lzdGVtTWV0cmljcyhTTV9DWFZTQ1JPTEwpOwogICAgIGlmICh3
aWR0aCA8PSAwKQogICAgICAgICB3aWR0aCA9IDE3OyAvLyBWaXN0YSdzIGRlZmF1bHQuCi0gICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0TWlu
V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aCh3
aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgsIEZpeGVk
KSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0
IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQpA
QCAtNzU1LDI5ICs3NTUsMjkgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRJbm5lclNwaW5C
dXR0bwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6c2V0Q2hl
Y2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46
OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYg
dGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90
aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEZJWE1FOiAgQSBoYXJkLWNvZGVkIHNpemUgb2YgMTMgaXMgdXNlZC4g
IFRoaXMgaXMgd3JvbmcgYnV0IG5lY2Vzc2FyeSBmb3Igbm93LiAgSXQgbWF0Y2hlcyBGaXJlZm94
LgogICAgIC8vIEF0IGRpZmZlcmVudCBEUEkgc2V0dGluZ3Mgb24gV2luZG93cywgcXVlcnlpbmcg
dGhlIHRoZW1lIGdpdmVzIHlvdSBhIGxhcmdlciBzaXplIHRoYXQgYWNjb3VudHMgZm9yCiAgICAg
Ly8gdGhlIGhpZ2hlciBEUEkuICBVbnRpbCBvdXIgZW50aXJlIGVuZ2luZSBob25vcnMgYSBEUEkg
c2V0dGluZyBvdGhlciB0aGFuIDk2LCB3ZSBjYW4ndCByZWx5IG9uIHRoZSB0aGVtZSdzCiAgICAg
Ly8gbWV0cmljcy4KLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkK
LSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCgxMywgRml4ZWQpKTsKLSAgICBpZiAoc3R5
bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCgx
MywgRml4ZWQpKTsKKyAgICBpZiAoc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQor
ICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoMTMsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxl
LmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKDEzLCBG
aXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1lV2luOjpwYWludFRleHRGaWVsZChjb25zdCBS
ZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jv
b2wgUmVuZGVyVGhlbWVXaW46OnBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYgbywg
Y29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBGbG9hdFJlY3QmIHIpCiB7Ci0gICAgZHJhd0NvbnRy
b2woaS5jb250ZXh0LCAgbywgdGV4dEZpZWxkVGhlbWUoKSwgZ2V0VGhlbWVEYXRhKG8pLCByKTsK
KyAgICBkcmF3Q29udHJvbChpLmNvbnRleHQsICBvLCB0ZXh0RmllbGRUaGVtZSgpLCBnZXRUaGVt
ZURhdGEobyksIEludFJlY3QocikpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVu
ZGVyVGhlbWVXaW46OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAg
ICBIQU5ETEUgdGhlbWU7CiAgICAgaW50IHBhcnQ7CkBAIC03OTIsNDYgKzc5Miw0NiBAQCBib29s
IFJlbmRlclRoZW1lV2luOjpwYWludE1lbnVMaXN0KGNvbnN0CiAgICAgICAgIHBhcnQgPSBURlBf
VEVYVEZJRUxEOwogICAgIH0KIAotICAgIGRyYXdDb250cm9sKHBhaW50SW5mby5jb250ZXh0LCBy
ZW5kZXJlciwgdGhlbWUsIFRoZW1lRGF0YShwYXJ0LCBkZXRlcm1pbmVTdGF0ZShyZW5kZXJlcikp
LCByZWN0KTsKKyAgICBkcmF3Q29udHJvbChwYWludEluZm8uY29udGV4dCwgcmVuZGVyZXIsIHRo
ZW1lLCBUaGVtZURhdGEocGFydCwgZGV0ZXJtaW5lU3RhdGUocmVuZGVyZXIpKSwgSW50UmVjdChy
ZWN0KSk7CiAgICAgCiAgICAgcmV0dXJuIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhy
ZW5kZXJlciwgcGFpbnRJbmZvLCBGbG9hdFJlY3QocmVjdCkpOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lV2luOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVX
aW46OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewotICAgIHN0eWxlLT5yZXNldEJv
cmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAgICAgYWRqdXN0TWVudUxpc3RCdXR0
b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVX
aW46OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZVdpbjo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgLy8gVGhl
c2UgYXJlIHRoZSBwYWRkaW5ncyBuZWVkZWQgdG8gcGxhY2UgdGhlIHRleHQgY29ycmVjdGx5IGlu
IHRoZSA8c2VsZWN0PiBib3gKICAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nVG9wICAg
ID0gMjsKLSAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nUmlnaHQgID0gc3R5bGUtPmRp
cmVjdGlvbigpID09IExUUiA/IDQgKyBkcm9wRG93bkJ1dHRvbldpZHRoIDogNDsKKyAgICBjb25z
dCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nUmlnaHQgID0gc3R5bGUuZGlyZWN0aW9uKCkgPT0gTFRS
ID8gNCArIGRyb3BEb3duQnV0dG9uV2lkdGggOiA0OwogICAgIGNvbnN0IGludCBkcm9wRG93bkJv
eFBhZGRpbmdCb3R0b20gPSAyOwotICAgIGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdMZWZ0
ICAgPSBzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gNCA6IDQgKyBkcm9wRG93bkJ1dHRvbldp
ZHRoOworICAgIGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdMZWZ0ICAgPSBzdHlsZS5kaXJl
Y3Rpb24oKSA9PSBMVFIgPyA0IDogNCArIGRyb3BEb3duQnV0dG9uV2lkdGg7CiAgICAgLy8gVGhl
IDxzZWxlY3Q+IGJveCBtdXN0IGJlIGF0IGxlYXN0IDEycHggaGlnaCBmb3IgdGhlIGJ1dHRvbiB0
byByZW5kZXIgbmljZWx5IG9uIFdpbmRvd3MKICAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hNaW5I
ZWlnaHQgPSAxMjsKICAgICAKICAgICAvLyBQb3NpdGlvbiB0aGUgdGV4dCBjb3JyZWN0bHkgd2l0
aGluIHRoZSBzZWxlY3QgYm94IGFuZCBtYWtlIHRoZSBib3ggd2lkZSBlbm91Z2ggdG8gZml0IHRo
ZSBkcm9wZG93biBidXR0b24KLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoZHJvcERv
d25Cb3hQYWRkaW5nVG9wLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVu
Z3RoKGRyb3BEb3duQm94UGFkZGluZ1JpZ2h0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRk
aW5nQm90dG9tKExlbmd0aChkcm9wRG93bkJveFBhZGRpbmdCb3R0b20sIEZpeGVkKSk7Ci0gICAg
c3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChkcm9wRG93bkJveFBhZGRpbmdMZWZ0LCBGaXhl
ZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ1Rv
cCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKGRyb3BEb3duQm94
UGFkZGluZ1JpZ2h0LCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3Ro
KGRyb3BEb3duQm94UGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5n
TGVmdChMZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5nTGVmdCwgRml4ZWQpKTsKIAogICAgIC8vIEhl
aWdodCBpcyBsb2NrZWQgdG8gYXV0bwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8p
KTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKIAogICAgIC8vIENhbGN1bGF0
ZSBvdXIgbWluLWhlaWdodAotICAgIGludCBtaW5IZWlnaHQgPSBzdHlsZS0+Zm9udE1ldHJpY3Mo
KS5oZWlnaHQoKTsKKyAgICBpbnQgbWluSGVpZ2h0ID0gc3R5bGUuZm9udE1ldHJpY3MoKS5oZWln
aHQoKTsKICAgICBtaW5IZWlnaHQgPSBtYXgobWluSGVpZ2h0LCBkcm9wRG93bkJveE1pbkhlaWdo
dCk7CiAKLSAgICBzdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChtaW5IZWlnaHQsIEZpeGVkKSk7
CisgICAgc3R5bGUuc2V0TWluSGVpZ2h0KExlbmd0aChtaW5IZWlnaHQsIEZpeGVkKSk7CiAKLSAg
ICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7
CisgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQo
KSk7CiAgICAgCiAgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0eWxl
LT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogfQog
CiBib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTg4NiwxNSArODg2LDE1IEBAIGJvb2wgUmVuZGVyVGhl
bWVXaW46OnBhaW50U2xpZGVyVGh1bWIoY28KIGNvbnN0IGludCBzbGlkZXJUaHVtYldpZHRoID0g
NzsKIGNvbnN0IGludCBzbGlkZXJUaHVtYkhlaWdodCA9IDE1OwogCi12b2lkIFJlbmRlclRoZW1l
V2luOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBz
dHlsZS0+YXBwZWFyYW5jZSgpOworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS5hcHBlYXJh
bmNlKCk7CiAgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKLSAgICAg
ICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKLSAg
ICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsK
KyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkp
OworICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVk
KSk7CiAgICAgfSBlbHNlIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpIHsK
LSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkp
OwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4
ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZp
eGVkKSk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQs
IEZpeGVkKSk7CiAgICAgfQogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKENHKQogICAgIGVsc2Ug
aWYgKHBhcnQgPT0gTWVkaWFTbGlkZXJUaHVtYlBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNs
aWRlclRodW1iUGFydCkgCkBAIC05MDcsMTYgKzkwNywxNiBAQCBib29sIFJlbmRlclRoZW1lV2lu
OjpwYWludFNlYXJjaEZpZWxkKGNvCiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIp
OwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBj
b25zdAogewogICAgIC8vIE92ZXJyaWRlIHBhZGRpbmdTaXplIHRvIG1hdGNoIEFwcEtpdCB0ZXh0
IHBvc2l0aW9uaW5nLgogICAgIGNvbnN0IGludCBwYWRkaW5nID0gMTsKLSAgICBzdHlsZS0+c2V0
UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRp
bmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1Rv
cChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShM
ZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBpZiAoZSAmJiBlLT5mb2N1c2VkKCkgJiYgZS0+
ZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkKLSAg
ICAgICAgc3R5bGUtPnNldE91dGxpbmVPZmZzZXQoLTIpOworICAgIHN0eWxlLnNldFBhZGRpbmdM
ZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdSaWdodChM
ZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nVG9wKExlbmd0aChw
YWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRp
bmcsIEZpeGVkKSk7CisgICAgaWYgKGUuZm9jdXNlZCgpICYmIGUuZG9jdW1lbnQoKS5mcmFtZSgp
LT5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkKKyAgICAgICAgc3R5bGUuc2V0T3V0
bGluZU9mZnNldCgtMik7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmll
bGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKQEAgLTk0NCwzMCArOTQ0LDMwIEBAIGJvb2wgUmVu
ZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRDYW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8v
IFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplCi0gICAgZmxvYXQg
Zm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNp
emU7CisgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUuZm9udFNpemUoKSAvIGRlZmF1bHRDb250
cm9sRm9udFBpeGVsU2l6ZTsKICAgICBpbnQgY2FuY2VsQnV0dG9uU2l6ZSA9IGxyb3VuZGYobWlu
KG1heChtaW5DYW5jZWxCdXR0b25TaXplLCBkZWZhdWx0Q2FuY2VsQnV0dG9uU2l6ZSAqIGZvbnRT
Y2FsZSksIG1heENhbmNlbEJ1dHRvblNpemUpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgo
Y2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoY2Fu
Y2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNl
bEJ1dHRvblNpemUsIEZpeGVkKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNl
YXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJj
aEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0
eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICBJbnRTaXplIGVtcHR5U2l6ZSgxLCAxMSk7Ci0g
ICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChlbXB0eVNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChlbXB0eVNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Cisg
ICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGVtcHR5U2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAg
IHN0eWxlLnNldEhlaWdodChMZW5ndGgoZW1wdHlTaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
JikgY29uc3QKIHsKICAgICAvLyBTY2FsZSB0aGUgZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9uIHRo
ZSBmb250IHNpemUKLSAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRl
ZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS5m
b250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOwogICAgIGludCBtYWduaWZp
ZXJTaXplID0gbHJvdW5kZihtaW4obWF4KG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25T
aXplLCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgKiBmb250U2NhbGUp
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uU2l6ZSkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlm
aWVyU2l6ZSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJT
aXplLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJTaXplLCBG
aXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4ZWQp
KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtOTkzLDE1ICs5OTMsMTUgQEAgYm9vbCBSZW5kZXJU
aGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlcwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAvLyBT
Y2FsZSB0aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZQotICAgIGZsb2F0IGZv
bnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXpl
OworICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJv
bEZvbnRQaXhlbFNpemU7CiAgICAgaW50IG1hZ25pZmllckhlaWdodCA9IGxyb3VuZGYobWluKG1h
eChtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSwgZGVmYXVsdFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25TaXplICogZm9udFNjYWxlKSwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1heFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKSk7CiAg
ICAgaW50IG1hZ25pZmllcldpZHRoID0gbHJvdW5kZihtYWduaWZpZXJIZWlnaHQgKiBkZWZhdWx0
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggLyBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblNpemUpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyV2lk
dGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVySGVpZ2h0
LCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJXaWR0aCwgRml4
ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllckhlaWdodCwgRml4ZWQp
KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b24oY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKQEAgLTExNTcsOSArMTE1Nyw5IEBAIFN0cmluZyBSZW5kZXJUaGVtZVdp
bjo6bWVkaWFDb250cm9sc1NjcmkKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQp
Ci12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6
YWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVt
ZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0
eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3Vw
cG9ydHNNZXRlcihDb250cm9sUGFydCBwYXJ0KSBjb25zdApAQCAtMTE3Miw3ICsxMTcyLDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNNZXRlcihDb250cgogICAgIH0KIH0KIAotSW50
U2l6ZSBSZW5kZXJUaGVtZVdpbjo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVy
KiwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZVdpbjo6
bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYgYm91
bmRzKSBjb25zdAogewogICAgIHJldHVybiBib3VuZHMuc2l6ZSgpOwogfQpAQCAtMTE4Miw3ICsx
MTgyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZXRlcihjb25zdCBSZQogICAgIGlm
ICghcmVuZGVyT2JqZWN0LmlzTWV0ZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBI
VE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gdG9SZW5kZXJNZXRlcigmcmVuZGVyT2JqZWN0KS0+
bWV0ZXJFbGVtZW50KCk7CisgICAgSFRNTE1ldGVyRWxlbWVudCogZWxlbWVudCA9IHRvUmVuZGVy
TWV0ZXIocmVuZGVyT2JqZWN0KS5tZXRlckVsZW1lbnQoKTsKIAogICAgIFRoZW1lRGF0YSB0aGVt
ZSA9IGdldFRoZW1lRGF0YShyZW5kZXJPYmplY3QpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uaAkocmV2aXNpb24gMTcwNDE3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDc0
ICs1NSw3NCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFRdWlya3NTdHlsZVNo
ZWV0KCk7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMg
YWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZl
U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0
Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVh
bCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1B
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIC8vIFN5c3RlbSBmb250cy4KLSAgICB2aXJ0dWFsIHZvaWQgc3lz
dGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICB2aXJ0dWFs
IENvbG9yIHN5c3RlbUNvbG9yKENTU1ZhbHVlSUQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBz
eXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoQ1NTVmFsdWVJRCkgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmIG8s
IGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcikgb3ZlcnJpZGUKICAgICB7IHJldHVybiBwYWludEJ1dHRvbihvLCBp
LCByKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhjb25zdCBSZW5kZXJP
YmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikgb3ZlcnJpZGUKICAgICB7IHJldHVybiBwYWludEJ1dHRv
bihvLCBpLCByKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAorICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUm
IHN0eWxlKSBjb25zdCBvdmVycmlkZQogICAgIHsgcmV0dXJuIHNldENoZWNrYm94U2l6ZShzdHls
ZSk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBh
aW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByKQorICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBGbG9hdFJlY3QmIHIpIG92ZXJy
aWRlCiAgICAgeyByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7IH0KIAotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmly
dHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlz
dFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVM
aXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRT
bGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xp
ZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdmlydHVhbCBib29sIHBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4dElu
ZGVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFy
dFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
dGhlbWVDaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIG92ZXJyaWRl
OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0IHsgfQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0
eWxlLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVu
dCYpIGNvbnN0IG92ZXJyaWRlIHsgfQogCiAgICAgc3RhdGljIHZvaWQgc2V0V2ViS2l0SXNCZWlu
Z1VubG9hZGVkKCk7CiAKICAgICBzdGF0aWMgU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmls
ZShDRlN0cmluZ1JlZiBuYW1lLCBDRlN0cmluZ1JlZiB0eXBlKTsKIAotICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJy
aWRlOwogCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhQ29udHJv
bHNTdHlsZVNoZWV0KCkgb3ZlcnJpZGU7CkBAIC0xMzAsMTMgKzEzMCwxMyBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShNRVRFUl9FTEVNRU5UKQotICAgIHZpcnR1YWwgSW50U2l6ZSBt
ZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25z
dCBSZW5kZXJNZXRlciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihDb250cm9sUGFydCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZXRl
clN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hl
bkZvY3VzZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKIHByaXZhdGU6CiAg
ICAgZW51bSBDb250cm9sU3ViUGFydCB7CkBAIC0xNDgsNyArMTQ4LDcgQEAgcHJpdmF0ZToKICAg
ICBSZW5kZXJUaGVtZVdpbigpOwogICAgIHZpcnR1YWwgflJlbmRlclRoZW1lV2luKCk7CiAKLSAg
ICB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2b2lk
IGFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUmKSBjb25zdDsKICAgICB2b2lkIGNsb3Nl
KCk7CiAKICAgICB1bnNpZ25lZCBkZXRlcm1pbmVTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233822</attachid>
            <date>2014-06-25 10:00:26 -0700</date>
            <delta_ts>2014-06-25 14:00:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134261-20140625100005.patch</filename>
            <type>text/plain</type>
            <size>220908</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2NyBAQAorMjAxNC0wNi0yNCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorICAgICAgICAgICAgQW5kIHBl
YXZvQG91dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5jb20+CisKKyAgICAgICAgVXNlIHJlZmVy
ZW5jZXMgaW5zdGVhZCBvZiBwb2ludGVycyBpbiBSZW5kZXJUaGVtZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDI2MQorCisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRq
dXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkSGF2ZVNwaW5CdXR0
b24pOgorICAgICAgICAqIGh0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5jZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lRWZsOjphZGp1c3RTaXplQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVFZmw6OmFwcGx5RWRqZVJUTFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lRWZsOjppc0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVFZmw6OnBhaW50VGhlbWVQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lRWZsOjpzdXBwb3J0c0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUVmbDo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUVmbDo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lRWZsOjphZGp1c3RDaGVja2JveFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lRWZsOjphZGp1c3RSYWRpb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lRWZsOjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUVmbDo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUVmbDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVFZmw6OmFkanVzdFRleHRBcmVhU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVFZmw6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lRWZsOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9n
cmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUVmbDo6YW5pbWF0aW9uRHVy
YXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1l
RWZsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpzdXBwb3J0c0ZvY3VzUmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
R3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmJvcmRlclJhZGlpRnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclBy
b2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphbmltYXRpb25E
dXJhdGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3Rr
OjpjYWxjdWxhdGVQcm9ncmVzc1JlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUd0ay5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0VG9nZ2xlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lR3RrOjpzZXRSYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6
OmNvbWJvQm94QXJyb3dTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpn
ZXRDb21ib0JveFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBv
cHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0
azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFRv
Z2dsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OmdldENvbWJvQm94TWV0cmljcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0
b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1i
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGlu
QnV0dG9uU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpwYWlu
dE91dGxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhQ29udHJvbHM6OmFkanVzdE1lZGlhU2xpZGVy
VGh1bWJTaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJTdHlsZSk6CisgICAgICAgIChSZW5kZXJNZW51
TGlzdDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoUmVuZGVyTWVu
dUxpc3Q6Om1lbnVTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1ldGVyOjp1cGRhdGVMb2dpY2FsV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWV0ZXI6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6cGFpbnRPdXRsaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUHJvZ3Jl
c3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJvZ3Jlc3M6OnVwZGF0ZUFuaW1hdGlv
blN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5
b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjppc0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OnN1cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzdGF0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFRleHRBcmVhU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TWV0ZXJTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6bWV0ZXJTaXplRm9yQm91bmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dy
ZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphbmltYXRpb25EdXJhdGlv
bkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RQ
cm9ncmVzc0JhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzaG91bGRI
YXZlU3BpbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0TWVk
aWFDb250cm9sU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNs
aWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNs
aWRlclRodW1iU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFNs
aWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2Vh
cmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c3VwcG9ydHNIb3Zlcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6bWluaW11bU1lbnVMaXN0U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBvcHVwTWVudVNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWU6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjpzZXRCdXR0b25TaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Q2hlY2tib3hTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUlPUzo6aXNDb250cm9sU3R5bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lSU9TOjphZGp1c3RSYWRpb1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lSU9TOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lSU9TOjphZGp1c3RSb3VuZEJvcmRlclJhZGl1cyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZv
clByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphbmltYXRp
b25EdXJhdGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
SU9TOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUlPUzo6c2V0QnV0dG9uU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6
c2hvdWxkSGF2ZVNwaW5CdXR0b24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjppc0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTaXplRm9yRm9udCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvckZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnNpemVGb3JTeXN0ZW1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lTWFjOjpzZXRTaXplRnJvbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OmNvbnRyb2xTaXplRm9yU3lzdGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVNYWM6OmFkanVzdFRleHRBcmVhU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6Om1ldGVyU2l6ZUZvckJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6bGV2
ZWxJbmRpY2F0b3JGb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnByb2dy
ZXNzQmFyUmVjdEZvckJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
bWluaW11bVByb2dyZXNzQmFySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lTWFjOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RQcm9ncmVzc0JhclN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFByb2dyZXNzQmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0xl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJu
YWxQYWRkaW5nVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwb3B1cElu
dGVybmFsUGFkZGluZ0JvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cG9wdXBNZW51U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6bWluaW11
bU1lbnVMaXN0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2xpZGVyVGh1bWJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
c2V0U2VhcmNoQ2VsbFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpz
ZXRTZWFyY2hGaWVsZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OmFk
anVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
U2FmYXJpOjppc0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVT
YWZhcmk6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
U2FmYXJpOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
U2FmYXJpOjpjb250cm9sU2l6ZUZvckZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVTYWZhcmk6OnNpemVGb3JGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Fm
YXJpOjpzaXplRm9yU3lzdGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNh
ZmFyaTo6c2V0U2l6ZUZyb21Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Fm
YXJpOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lU2FmYXJpOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVTYWZhcmk6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVNhZmFyaTo6cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVNhZmFyaTo6c2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Fm
YXJpOjpzZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVNhZmFyaTo6c2V0QnV0dG9uU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFRleHRBcmVhU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJp
OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lU2FmYXJpOjptaW5pbXVtTWVudUxpc3RTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lU2FmYXJpOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTbGlkZXJUaHVtYlNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVTYWZhcmk6OnNldFNlYXJjaEZpZWxkU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0
U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFy
aTo6YWRqdXN0TWV0ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNhZmFy
aTo6bWV0ZXJTaXplRm9yQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Fm
YXJpOjpwYWludE1ldGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmku
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVXaW46OnN1cHBvcnRzSG92ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVXaW46OnN1cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lV2luOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVdpbjo6c2V0Q2hlY2tib3hTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lV2luOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVdpbjo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVdpbjo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVdpbjo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRp
b25QYXJ0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RNZXRlclN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjptZXRlclNpemVGb3JCb3VuZHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50TWV0ZXIpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZVdpbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46
OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50
UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnNldFJhZGlvU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6cGFpbnRUZXh0QXJlYSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6cG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRE
ZWNvcmF0aW9uUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbjo6YWRqdXN0
QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OmFkanVzdFRl
eHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjphZGp1c3RU
ZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpzaG91bGRT
aG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCk6CisKIDIwMTQtMDYtMjUgIExhc3psbyBHb21ib3Mg
IDxsLmdvbWJvc0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBSZW1vdmUgYnVpbGQgZ3VhcmQgZm9y
IHByb2dyZXNzIGVsZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJ
KHJldmlzaW9uIDE3MDQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMzMCw4ICsxMzMwLDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YWRqdXN0UmVuZGVyU3R5bGUoUmUKICAgICB9CiAKICAgICAvLyBMZXQgdGhlIHRoZW1lIGFs
c28gaGF2ZSBhIGNyYWNrIGF0IGFkanVzdGluZyB0aGUgc3R5bGUuCi0gICAgaWYgKHN0eWxlLmhh
c0FwcGVhcmFuY2UoKSkKLSAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1
c3RTdHlsZSgqdGhpcywgc3R5bGUsIGUsIG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlKCksIG1fc3Rh
dGUuYm9yZGVyRGF0YSgpLCBtX3N0YXRlLmJhY2tncm91bmREYXRhKCksIG1fc3RhdGUuYmFja2dy
b3VuZENvbG9yKCkpOworICAgIGlmIChzdHlsZS5oYXNBcHBlYXJhbmNlKCkpIHsKKyAgICAgICAg
QVNTRVJUKGUpOworICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPmFkanVzdFN0
eWxlKCp0aGlzLCBzdHlsZSwgKmUsIG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlKCksIG1fc3RhdGUu
Ym9yZGVyRGF0YSgpLCBtX3N0YXRlLmJhY2tncm91bmREYXRhKCksIG1fc3RhdGUuYmFja2dyb3Vu
ZENvbG9yKCkpOworICAgIH0KIAogICAgIC8vIElmIHdlIGhhdmUgZmlyc3QtbGV0dGVyIHBzZXVk
byBzdHlsZSwgZG8gbm90IHNoYXJlIHRoaXMgc3R5bGUuCiAgICAgaWYgKHN0eWxlLmhhc1BzZXVk
b1N0eWxlKEZJUlNUX0xFVFRFUikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVs
ZElucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0Rmll
bGRJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxNzA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw3ICsyMzIsNyBA
QCBib29sIFRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkSGF2ZVNwaW5CCiB7CiAgICAgRG9jdW1l
bnQmIGRvY3VtZW50ID0gZWxlbWVudCgpLmRvY3VtZW50KCk7CiAgICAgUmVmUHRyPFJlbmRlclRo
ZW1lPiB0aGVtZSA9IGRvY3VtZW50LnBhZ2UoKSA/ICZkb2N1bWVudC5wYWdlKCktPnRoZW1lKCkg
OiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCk7Ci0gICAgcmV0dXJuIHRoZW1lLT5zaG91bGRI
YXZlU3BpbkJ1dHRvbigmZWxlbWVudCgpKTsKKyAgICByZXR1cm4gdGhlbWUtPnNob3VsZEhhdmVT
cGluQnV0dG9uKGVsZW1lbnQoKSk7CiB9CiAKIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpjcmVh
dGVTaGFkb3dTdWJ0cmVlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRl
clRodW1iRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkocmV2aXNpb24gMTcwNDI4KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTQsOCArOTQsMTAgQEAgdm9pZCBSZW5kZXJTbGlkZXJUaHVtYjo6dXBkYXRlQXBwZWFyYW5j
ZQogICAgICAgICBzdHlsZSgpLnNldEFwcGVhcmFuY2UoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBh
cnQpOwogICAgIGVsc2UgaWYgKHBhcmVudFN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFGdWxs
U2NyZWVuVm9sdW1lU2xpZGVyUGFydCkKICAgICAgICAgc3R5bGUoKS5zZXRBcHBlYXJhbmNlKE1l
ZGlhRnVsbFNjcmVlblZvbHVtZVNsaWRlclRodW1iUGFydCk7Ci0gICAgaWYgKHN0eWxlKCkuaGFz
QXBwZWFyYW5jZSgpKQotICAgICAgICB0aGVtZSgpLmFkanVzdFNsaWRlclRodW1iU2l6ZSgmc3R5
bGUoKSwgZWxlbWVudCgpKTsKKyAgICBpZiAoc3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkpIHsKKyAg
ICAgICAgQVNTRVJUKGVsZW1lbnQoKSk7CisgICAgICAgIHRoZW1lKCkuYWRqdXN0U2xpZGVyVGh1
bWJTaXplKHN0eWxlKCksICplbGVtZW50KCkpOworICAgIH0KIH0KIAogYm9vbCBSZW5kZXJTbGlk
ZXJUaHVtYjo6aXNTbGlkZXJUaHVtYigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAJKHJldmlzaW9uIDE3MDQyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMywyNyArMTIzLDI3IEBAIHN0YXRpYyBib29sIHNldFNvdXJjZUdyb3VwRm9yRWRq
ZU9iamVjdCgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRq
dXN0U2l6ZUNvbnN0cmFpbnRzKFJlbmRlclN0eWxlKiBzdHlsZSwgRm9ybVR5cGUgdHlwZSkgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNpemVDb25zdHJhaW50cyhSZW5kZXJTdHls
ZSYgc3R5bGUsIEZvcm1UeXBlIHR5cGUpIGNvbnN0CiB7CiAgICAgbG9hZFRoZW1lSWZOZWVkZWQo
KTsKIAogICAgIC8vIFRoZXNlIGFyZSBhbHdheXMgdmFsaWQsIGV2ZW4gaWYgbm8gdGhlbWUgY291
bGQgYmUgbG9hZGVkLgogICAgIGNvbnN0IFRoZW1lUGFydERlc2MqIGRlc2MgPSBtX3BhcnREZXNj
cyArIChzaXplX3QpdHlwZTsKIAotICAgIGlmIChzdHlsZS0+bWluV2lkdGgoKS5pc0ludHJpbnNp
YygpKQotICAgICAgICBzdHlsZS0+c2V0TWluV2lkdGgoZGVzYy0+bWluLndpZHRoKCkpOwotICAg
IGlmIChzdHlsZS0+bWluSGVpZ2h0KCkuaXNJbnRyaW5zaWMoKSkKLSAgICAgICAgc3R5bGUtPnNl
dE1pbkhlaWdodChkZXNjLT5taW4uaGVpZ2h0KCkpOwotCi0gICAgaWYgKGRlc2MtPm1heC53aWR0
aCgpLnZhbHVlKCkgPiAwICYmIHN0eWxlLT5tYXhXaWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkp
Ci0gICAgICAgIHN0eWxlLT5zZXRNYXhXaWR0aChkZXNjLT5tYXgud2lkdGgoKSk7Ci0gICAgaWYg
KGRlc2MtPm1heC5oZWlnaHQoKS52YWx1ZSgpID4gMCAmJiBzdHlsZS0+bWF4SGVpZ2h0KCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldE1heEhlaWdodChkZXNjLT5tYXgu
aGVpZ2h0KCkpOwotCi0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoZGVzYy0+cGFkZGluZy50b3Ao
KSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oZGVzYy0+cGFkZGluZy5ib3R0b20oKSk7
Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KGRlc2MtPnBhZGRpbmcubGVmdCgpKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ1JpZ2h0KGRlc2MtPnBhZGRpbmcucmlnaHQoKSk7CisgICAgaWYgKHN0
eWxlLm1pbldpZHRoKCkuaXNJbnRyaW5zaWMoKSkKKyAgICAgICAgc3R5bGUuc2V0TWluV2lkdGgo
ZGVzYy0+bWluLndpZHRoKCkpOworICAgIGlmIChzdHlsZS5taW5IZWlnaHQoKS5pc0ludHJpbnNp
YygpKQorICAgICAgICBzdHlsZS5zZXRNaW5IZWlnaHQoZGVzYy0+bWluLmhlaWdodCgpKTsKKwor
ICAgIGlmIChkZXNjLT5tYXgud2lkdGgoKS52YWx1ZSgpID4gMCAmJiBzdHlsZS5tYXhXaWR0aCgp
LmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldE1heFdpZHRoKGRlc2MtPm1h
eC53aWR0aCgpKTsKKyAgICBpZiAoZGVzYy0+bWF4LmhlaWdodCgpLnZhbHVlKCkgPiAwICYmIHN0
eWxlLm1heEhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldE1h
eEhlaWdodChkZXNjLT5tYXguaGVpZ2h0KCkpOworCisgICAgc3R5bGUuc2V0UGFkZGluZ1RvcChk
ZXNjLT5wYWRkaW5nLnRvcCgpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nQm90dG9tKGRlc2MtPnBh
ZGRpbmcuYm90dG9tKCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdMZWZ0KGRlc2MtPnBhZGRpbmcu
bGVmdCgpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nUmlnaHQoZGVzYy0+cGFkZGluZy5yaWdodCgp
KTsKIH0KIAogc3RhdGljIGJvb2wgaXNGb3JtRWxlbWVudFRvb0xhcmdlVG9EaXNwbGF5KGNvbnN0
IEludFNpemUmIGVsZW1lbnRTaXplKQpAQCAtMzIzLDEwICszMjMsMTAgQEAgdm9pZCBSZW5kZXJU
aGVtZUVmbDo6YXBwbHlFZGplUlRMU3RhdGUoRQogICAgICAgICBtc2ctPnZhbFsxXSA9IChpbnB1
dC52YWx1ZUFzTnVtYmVyKCkgLSBpbnB1dC5taW5pbXVtKCkpIC8gdmFsdWVSYW5nZTsKICAgICAg
ICAgZWRqZV9vYmplY3RfbWVzc2FnZV9zZW5kKGVkamUsIEVESkVfTUVTU0FHRV9GTE9BVF9TRVQs
IDAsIG1zZy5nZXQoKSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IFByb2dyZXNzQmFyKSB7Ci0g
ICAgICAgIGNvbnN0IFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJv
Z3Jlc3MoJm9iamVjdCk7CisgICAgICAgIGNvbnN0IFJlbmRlclByb2dyZXNzJiByZW5kZXJQcm9n
cmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mob2JqZWN0KTsKIAogICAgICAgICBpbnQgbWF4ID0gcmVj
dC53aWR0aCgpOwotICAgICAgICBkb3VibGUgdmFsdWUgPSByZW5kZXJQcm9ncmVzcy0+cG9zaXRp
b24oKTsKKyAgICAgICAgZG91YmxlIHZhbHVlID0gcmVuZGVyUHJvZ3Jlc3MucG9zaXRpb24oKTsK
IAogICAgICAgICBPd25QdHI8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldD4gbXNnID0gYWRvcHRQdHIo
c3RhdGljX2Nhc3Q8RWRqZV9NZXNzYWdlX0Zsb2F0X1NldCo+KDo6b3BlcmF0b3IgbmV3IChzaXpl
b2YoRWRqZV9NZXNzYWdlX0Zsb2F0X1NldCkgKyBzaXplb2YoZG91YmxlKSkpKTsKICAgICAgICAg
bXNnLT5jb3VudCA9IDI7CkBAIC0zNDAsOSArMzQwLDkgQEAgdm9pZCBSZW5kZXJUaGVtZUVmbDo6
YXBwbHlFZGplUlRMU3RhdGUoRQogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJUaGVtZUVmbDo6aXND
b250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYg
Ym9yZGVyLCBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3Jv
dW5kQ29sb3IpIGNvbnN0Citib29sIFJlbmRlclRoZW1lRWZsOjppc0NvbnRyb2xTdHlsZWQoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZp
bGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QK
IHsKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVy
LCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpIHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0g
TWVudWxpc3RCdXR0b25QYXJ0OworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5
bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcikgfHwgc3R5bGUu
YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydDsKIH0KIAogYm9vbCBSZW5kZXJUaGVt
ZUVmbDo6cGFpbnRUaGVtZVBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIEZvcm1UeXBl
IHR5cGUsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTM1
NCw3ICszNTQsNyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFRoZW1lUGFydChjb25zCiAg
ICAgaWYgKCFlbnRyeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBoYXZlQmFj
a2dyb3VuZENvbG9yID0gaXNDb250cm9sU3R5bGVkKCZvYmplY3Quc3R5bGUoKSwgb2JqZWN0LnN0
eWxlKCkuYm9yZGVyKCksICpvYmplY3Quc3R5bGUoKS5iYWNrZ3JvdW5kTGF5ZXJzKCksIENvbG9y
Ojp3aGl0ZSk7CisgICAgYm9vbCBoYXZlQmFja2dyb3VuZENvbG9yID0gaXNDb250cm9sU3R5bGVk
KG9iamVjdC5zdHlsZSgpLCBvYmplY3Quc3R5bGUoKS5ib3JkZXIoKSwgKm9iamVjdC5zdHlsZSgp
LmJhY2tncm91bmRMYXllcnMoKSwgQ29sb3I6OndoaXRlKTsKICAgICBDb250cm9sU3RhdGVzIHN0
YXRlcyhleHRyYWN0Q29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKG9iamVjdCkpOwogICAgIGFwcGx5
RWRqZVN0YXRlRnJvbUZvcm0oZW50cnktPmVkamUoKSwgJnN0YXRlcywgaGF2ZUJhY2tncm91bmRD
b2xvcik7CiAKQEAgLTYyMSw5ICs2MjEsOSBAQCBzdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENv
bnRyb2xQYXJ0IGFwCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lRWZsOjpzdXBwb3J0c0Zv
Y3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citib29sIFJlbmRlclRoZW1l
RWZsOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUtPmFwcGVhcmFuY2UoKSk7CisgICAgcmV0
dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUuYXBwZWFyYW5jZSgpKTsKIH0KIAogYm9vbCBSZW5kZXJU
aGVtZUVmbDo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3Qp
IGNvbnN0CkBAIC02OTMsMjYgKzY5MywyNiBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNs
aWRlclRyYWNrKGNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZs
OjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVyVHJh
Y2tTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29u
c3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJv
eFNoYWRvdyhudWxscHRyKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2xpZGVy
VGh1bWJTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RT
bGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxl
JiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJUaGVtZTo6YWRq
dXN0U2xpZGVyVGh1bWJTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7Ci0gICAg
c3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVs
bHB0cik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFNsaWRlclRodW1iU2l6ZShS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6
YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0
CiB7Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisgICAgQ29u
dHJvbFBhcnQgcGFydCA9IHN0eWxlLmFwcGVhcmFuY2UoKTsKICAgICBpZiAocGFydCA9PSBTbGlk
ZXJUaHVtYlZlcnRpY2FsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNs
aWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0
aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5n
dGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChM
ZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKICAgICB9IGVsc2UgaWYgKHBhcnQgPT0g
U2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVu
Z3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRXaWR0
aChMZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0SGVp
Z2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKICAgICB9CiB9CiAKQEAgLTc2
MCwyMiArNzYwLDIyIEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2xpZGVyVGh1bWIoY28K
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdENoZWNr
Ym94U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0Q2hl
Y2tib3hTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVu
dCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkgewotICAgICAgICBzdGF0aWNfY2FzdDxS
ZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1
c3RDaGVja2JveFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBpZiAo
IW1fcGFnZSAmJiBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKSB7CisgICAgICAgIHN0YXRpY19j
YXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSku
YWRqdXN0Q2hlY2tib3hTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIENo
ZWNrQm94KTsKIAotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9y
ZGVyKCk7CiAKICAgICBjb25zdCBUaGVtZVBhcnREZXNjKiBkZXNjID0gbV9wYXJ0RGVzY3MgKyAo
c2l6ZV90KUNoZWNrQm94OwotICAgIGlmIChzdHlsZS0+d2lkdGgoKS52YWx1ZSgpIDwgZGVzYy0+
bWluLndpZHRoKCkudmFsdWUoKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKGRlc2MtPm1pbi53
aWR0aCgpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLnZhbHVlKCkgPCBkZXNjLT5taW4uaGVp
Z2h0KCkudmFsdWUoKSkKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChkZXNjLT5taW4uaGVpZ2h0
KCkpOworICAgIGlmIChzdHlsZS53aWR0aCgpLnZhbHVlKCkgPCBkZXNjLT5taW4ud2lkdGgoKS52
YWx1ZSgpKQorICAgICAgICBzdHlsZS5zZXRXaWR0aChkZXNjLT5taW4ud2lkdGgoKSk7CisgICAg
aWYgKHN0eWxlLmhlaWdodCgpLnZhbHVlKCkgPCBkZXNjLT5taW4uaGVpZ2h0KCkudmFsdWUoKSkK
KyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KGRlc2MtPm1pbi5oZWlnaHQoKSk7CiB9CiAKIGJvb2wg
UmVuZGVyVGhlbWVFZmw6OnBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTc4MywyMiAr
NzgzLDIyIEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50Q2hlY2tib3goY29uc3QKICAgICBy
ZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBDaGVja0JveCwgaW5mbywgcmVjdCk7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7
Ci0gICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2Uo
KSkgewotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQtPmRvY3Vt
ZW50KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1c3RSYWRpb1N0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlbGVtZW50KTsKKyAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50LmRvY3VtZW50KCkucGFn
ZSgpKSB7CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC5kb2N1
bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0UmFkaW9TdHlsZShzdHlsZVJlc29sdmVyLCBz
dHlsZSwgZWxlbWVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhZGp1c3RTaXpl
Q29uc3RyYWludHMoc3R5bGUsIFJhZGlvQnV0dG9uKTsKIAotICAgIHN0eWxlLT5yZXNldEJvcmRl
cigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAKICAgICBjb25zdCBUaGVtZVBhcnREZXNj
KiBkZXNjID0gbV9wYXJ0RGVzY3MgKyAoc2l6ZV90KVJhZGlvQnV0dG9uOwotICAgIGlmIChzdHls
ZS0+d2lkdGgoKS52YWx1ZSgpIDwgZGVzYy0+bWluLndpZHRoKCkudmFsdWUoKSkKLSAgICAgICAg
c3R5bGUtPnNldFdpZHRoKGRlc2MtPm1pbi53aWR0aCgpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdo
dCgpLnZhbHVlKCkgPCBkZXNjLT5taW4uaGVpZ2h0KCkudmFsdWUoKSkKLSAgICAgICAgc3R5bGUt
PnNldEhlaWdodChkZXNjLT5taW4uaGVpZ2h0KCkpOworICAgIGlmIChzdHlsZS53aWR0aCgpLnZh
bHVlKCkgPCBkZXNjLT5taW4ud2lkdGgoKS52YWx1ZSgpKQorICAgICAgICBzdHlsZS5zZXRXaWR0
aChkZXNjLT5taW4ud2lkdGgoKSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLnZhbHVlKCkgPCBk
ZXNjLT5taW4uaGVpZ2h0KCkudmFsdWUoKSkKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KGRlc2Mt
Pm1pbi5oZWlnaHQoKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50UmFkaW8oY29u
c3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKQEAgLTgwNiwxNSArODA2LDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBh
aW50UmFkaW8oY29uc3QgUmUKICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBSYWRp
b0J1dHRvbiwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVzdEJ1
dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHls
ZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50
ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFJl
bmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVz
dEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBpZiAoIW1f
cGFnZSAmJiBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKSB7CisgICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRq
dXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgLy8gYWRqdXN0U2l6ZUNvbnN0cmFpbnMgY2FuIG1ha2UgU3F1
YXJlQnV0dG9uUGFydCdzIHNpemUgd3JvbmcgKGJ5IGFkanVzdGluZyBwYWRkaW5ncyksIHNvIGNh
bGwgaXQgb25seSBmb3IgUHVzaEJ1dHRvblBhcnQgYW5kIEJ1dHRvblBhcnQKLSAgICBpZiAoc3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgp
ID09IEJ1dHRvblBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9u
UGFydCB8fCBzdHlsZS5hcHBlYXJhbmNlKCkgPT0gQnV0dG9uUGFydCkKICAgICAgICAgYWRqdXN0
U2l6ZUNvbnN0cmFpbnRzKHN0eWxlLCBCdXR0b24pOwogfQogCkBAIC04MjMsMTcgKzgyMywxNyBA
QCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludEJ1dHRvbihjb25zdCBSCiAgICAgcmV0dXJuIHBh
aW50VGhlbWVQYXJ0KG9iamVjdCwgQnV0dG9uLCBpbmZvLCByZWN0KTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZUVmbDo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lRWZsOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKSB7
Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+ZG9jdW1lbnQo
KS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdE1lbnVMaXN0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5
bGUsIGVsZW1lbnQpOworICAgIGlmICghbV9wYWdlICYmIGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdl
KCkpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LmRvY3Vt
ZW50KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxlUmVzb2x2ZXIs
IHN0eWxlLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXpl
Q29uc3RyYWludHMoc3R5bGUsIENvbWJvQm94KTsKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsK
LSAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7
CisgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCi0gICAgc3R5bGUtPnNldExpbmVIZWln
aHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIHN0eWxlLnNldExpbmVI
ZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogfQogCiBib29sIFJlbmRl
clRoZW1lRWZsOjpwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25z
dCBQYWludEluZm8mIGluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTg1NCw3ICs4NTQs
NyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RNZW51TGlzdEJ1dHRvCiAgICAgbWluSGVp
Z2h0ID0gc3RkOjptYXgobWluSGVpZ2h0LCBkcm9wRG93bkJveE1pbkhlaWdodCk7CiAgICAgc3R5
bGUuc2V0TWluSGVpZ2h0KExlbmd0aChtaW5IZWlnaHQsIEZpeGVkKSk7CiAKLSAgICBhZGp1c3RN
ZW51TGlzdFN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsICZlbGVtZW50KTsKKyAgICBhZGp1
c3RNZW51TGlzdFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKIH0KIAogYm9v
bCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJl
bmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKQEAgLTg2MiwxNCArODYyLDE0IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50
TWVudUxpc3RCdXR0b24KICAgICByZXR1cm4gcGFpbnRNZW51TGlzdChvYmplY3QsIGluZm8sIHJl
Y3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RUZXh0RmllbGRTdHlsZShT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQm
IGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50
LT5kb2N1bWVudCgpLnBhZ2UoKSkgewotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVm
bCY+KGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1c3RUZXh0RmllbGRT
dHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgaWYgKCFtX3BhZ2UgJiYg
ZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKSkgeworICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJU
aGVtZUVmbCY+KGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdFRleHRG
aWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBhZGp1c3RTaXplQ29uc3RyYWludHMoc3R5bGUsIFRleHRGaWVsZCk7Ci0g
ICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKIH0KIAog
Ym9vbCBSZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBv
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAt
ODc3LDcgKzg3Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50VGV4dEZpZWxkKGNvbnMK
ICAgICByZXR1cm4gcGFpbnRUaGVtZVBhcnQob2JqZWN0LCBUZXh0RmllbGQsIGluZm8sIEludFJl
Y3QocmVjdCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RUZXh0QXJlYVN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZUVmbDo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAtODg2LDIxICs4ODYsMjEgQEAgYm9vbCBS
ZW5kZXJUaGVtZUVmbDo6cGFpbnRUZXh0QXJlYShjb25zdAogICAgIHJldHVybiBwYWludFRleHRG
aWVsZChvYmplY3QsIGluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lRWZsOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1l
bnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1
bWVudCgpLnBhZ2UoKSkgewotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVs
ZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7CisgICAgaWYgKCFt
X3BhZ2UgJiYgZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKSkgeworICAgICAgICBzdGF0aWNfY2Fz
dDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBl
bGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXplQ29uc3RyYWlu
dHMoc3R5bGUsIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbik7Ci0gICAgc3R5bGUtPnJlc2V0Qm9y
ZGVyKCk7Ci0gICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKyAgICBzdHlsZS5yZXNldEJv
cmRlcigpOworICAgIHN0eWxlLnNldFdoaXRlU3BhY2UoUFJFKTsKIAotICAgIGZsb2F0IGZvbnRT
Y2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdEZvbnRTaXplOworICAgIGZsb2F0IGZv
bnRTY2FsZSA9IHN0eWxlLmZvbnRTaXplKCkgLyBkZWZhdWx0Rm9udFNpemU7CiAgICAgaW50IGRl
Y29yYXRpb25TaXplID0gbHJvdW5kZihzdGQ6Om1pbihzdGQ6Om1heChtaW5TZWFyY2hEZWNvcmF0
aW9uQnV0dG9uU2l6ZSwgZGVmYXVsdEZvbnRTaXplICogZm9udFNjYWxlKSwgbWF4U2VhcmNoRGVj
b3JhdGlvbkJ1dHRvblNpemUpKTsKIAotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoZGVjb3Jh
dGlvblNpemUgKyBzZWFyY2hGaWVsZERlY29yYXRpb25CdXR0b25PZmZzZXQsIEZpeGVkKSk7Ci0g
ICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZGVjb3JhdGlvblNpemUsIEZpeGVkKSk7CisgICAg
c3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGRlY29yYXRpb25TaXplICsgc2VhcmNoRmllbGREZWNvcmF0
aW9uQnV0dG9uT2Zmc2V0LCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoZGVj
b3JhdGlvblNpemUsIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC05MDgsMjEgKzkwOCwyMSBA
QCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIHBh
aW50VGhlbWVQYXJ0KG9iamVjdCwgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uLCBpbmZvLCByZWN0
KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lRWZsOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29u
c3QKIHsKLSAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCku
cGFnZSgpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+
ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25QYXJ0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgIGlmICgh
bV9wYWdlICYmIGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCkpIHsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5h
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKHN0eWxlUmVzb2x2ZXIs
IHN0eWxlLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhZGp1c3RTaXpl
Q29uc3RyYWludHMoc3R5bGUsIFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOwotICAgIHN0
eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAg
c3R5bGUucmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiAKLSAg
ICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsK
KyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdEZvbnRTaXpl
OwogICAgIGludCBkZWNvcmF0aW9uU2l6ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWlu
U2VhcmNoRGVjb3JhdGlvbkJ1dHRvblNpemUsIGRlZmF1bHRGb250U2l6ZSAqIGZvbnRTY2FsZSks
IG1heFNlYXJjaERlY29yYXRpb25CdXR0b25TaXplKSk7CiAKLSAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKGRlY29yYXRpb25TaXplICsgc2VhcmNoRmllbGREZWNvcmF0aW9uQnV0dG9uT2Zmc2V0
LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGRlY29yYXRpb25TaXplLCBG
aXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChkZWNvcmF0aW9uU2l6ZSArIHNlYXJj
aEZpZWxkRGVjb3JhdGlvbkJ1dHRvbk9mZnNldCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWln
aHQoTGVuZ3RoKGRlY29yYXRpb25TaXplLCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1l
RWZsOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9i
amVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CkBAIC05MzAsMjMgKzkzMCwyMyBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZp
ZWxkUmVzCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvbiwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVFZmw6OmFk
anVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZUVmbDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1l
bnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudCAmJiBlbGVtZW50LT5kb2N1
bWVudCgpLnBhZ2UoKSkgewotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVs
ZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT50aGVtZSgpKS5hZGp1c3RTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBpZiAoIW1f
cGFnZSAmJiBlbGVtZW50LmRvY3VtZW50KCkucGFnZSgpKSB7CisgICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRq
dXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxl
bWVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYWRqdXN0U2l6ZUNvbnN0cmFpbnRz
KHN0eWxlLCBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik7Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVy
KCk7Ci0gICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKyAgICBzdHlsZS5yZXNldEJvcmRl
cigpOworICAgIHN0eWxlLnNldFdoaXRlU3BhY2UoUFJFKTsKIAogICAgIC8vIExvZ2ljIHRha2Vu
IGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bS5jcHAuCiAgICAgLy8gU2NhbGUgdGhlIGJ1dHRvbiBz
aXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUuCi0gICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUt
PmZvbnRTaXplKCkgLyBkZWZhdWx0Rm9udFNpemU7CisgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5
bGUuZm9udFNpemUoKSAvIGRlZmF1bHRGb250U2l6ZTsKICAgICBpbnQgY2FuY2VsQnV0dG9uU2l6
ZSA9IGxyb3VuZGYoc3RkOjptaW4oc3RkOjptYXgobWluQ2FuY2VsQnV0dG9uU2l6ZSwgZGVmYXVs
dEZvbnRTaXplICogZm9udFNjYWxlKSwgbWF4Q2FuY2VsQnV0dG9uU2l6ZSkpOwogCi0gICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOwotICAgIHN0eWxl
LT5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CisgICAgc3R5bGUu
c2V0V2lkdGgoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0
SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRl
clRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVj
dCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBA
IC05NTQsMTUgKzk1NCwxNSBAQCBib29sIFJlbmRlclRoZW1lRWZsOjpwYWludFNlYXJjaEZpZWxk
Q2FuCiAgICAgcmV0dXJuIHBhaW50VGhlbWVQYXJ0KG9iamVjdCwgU2VhcmNoRmllbGRDYW5jZWxC
dXR0b24sIGluZm8sIHJlY3QpOwogfQogCi12b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTZWFy
Y2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5
bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIGlmICghbV9wYWdlICYm
IGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpIHsKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyVGhlbWVFZmwmPihlbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUo
KSkuYWRqdXN0U2VhcmNoRmllbGRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZWxlbWVudCk7
CisgICAgaWYgKCFtX3BhZ2UgJiYgZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKSkgeworICAgICAg
ICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVmbCY+KGVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCkt
PnRoZW1lKCkpLmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVs
ZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFkanVzdFNpemVDb25zdHJhaW50
cyhzdHlsZSwgU2VhcmNoRmllbGQpOwotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0
eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKKyAgICBz
dHlsZS5zZXRXaGl0ZVNwYWNlKFBSRSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVFZmw6OnBhaW50
U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYg
aW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTk3MCwxMCArOTcwLDEwIEBAIGJvb2wgUmVu
ZGVyVGhlbWVFZmw6OnBhaW50U2VhcmNoRmllbGQoY28KICAgICByZXR1cm4gcGFpbnRUaGVtZVBh
cnQob2JqZWN0LCBTZWFyY2hGaWVsZCwgaW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVFZmw6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVFZmw6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZWxlbWVudCkgY29u
c3QKIHsKLSAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQtPmRvY3VtZW50KCku
cGFnZSgpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZsJj4oZWxlbWVudC0+
ZG9jdW1lbnQoKS5wYWdlKCktPnRoZW1lKCkpLmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKHN0
eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKKyAgICBpZiAoIW1fcGFnZSAmJiBlbGVtZW50
LmRvY3VtZW50KCkucGFnZSgpKSB7CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRWZs
Jj4oZWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+dGhlbWUoKSkuYWRqdXN0SW5uZXJTcGluQnV0
dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGFkanVzdFNpemVDb25zdHJhaW50cyhzdHlsZSwgU3Bpbm5lcik7CkBAIC0x
MDAxLDE3ICsxMDAxLDE3IEBAIHZvaWQgUmVuZGVyVGhlbWVFZmw6OnN5c3RlbUZvbnQoQ1NTVmFs
dWUKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKGZhbHNlKTsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZUVmbDo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVFZmw6OmFkanVz
dFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxl
bWVudCYpIGNvbnN0CiB7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICBz
dHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZUVmbDo6
YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNv
bnN0Citkb3VibGUgUmVuZGVyVGhlbWVFZmw6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJv
Z3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogewogICAgIHJldHVybiBwcm9ncmVzc0Fu
aW1hdGlvbkludGVydmFsOwogfQogCi1kb3VibGUgUmVuZGVyVGhlbWVFZmw6OmFuaW1hdGlvbkR1
cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAorZG91YmxlIFJlbmRl
clRoZW1lRWZsOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNz
JikgY29uc3QKIHsKICAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCAqIHByb2dy
ZXNzQW5pbWF0aW9uRnJhbWVzICogMjsgLy8gIjIiIGZvciBiYWNrIGFuZCBmb3J0aDsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5oCShyZXZp
c2lvbiAxNzA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVF
ZmwuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTMgKzY2LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKFBhZ2UqKTsKIAogICAgIC8vIEEgbWV0
aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJl
ZHJhd2luZyB3aGVuIGhvdmVyZWQuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29u
c3QgUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICAvLyBBIG1ldGhvZCBSZXR1cm5pbmcgd2hldGhlciB0
aGUgY29udHJvbCBpcyBzdHlsZWQgYnkgY3NzIG9yIG5vdCBlLmcgc3BlY2lmeWluZyBiYWNrZ3Jv
dW5kLWNvbG9yLgotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVy
U3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3Im
IGJhY2tncm91bmRDb2xvcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzQ29u
dHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBG
aWxsTGF5ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUgaXMgYWJsZSB0byBkcmF3IHRo
ZSBmb2N1cyByaW5nLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBS
ZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Zv
Y3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgLy8gQSBt
ZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2lu
ZG93IGhhcyBmb2N1cyBvciBub3QuCiAgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1Rp
bnRzKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTAyLDUwICsxMDIs
NTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RW50cnlUZXh0Q29sb3IoaW50IGZvcmVSLCBpbnQg
Zm9yZUcsIGludCBmb3JlQiwgaW50IGZvcmVBLCBpbnQgYmFja1IsIGludCBiYWNrRywgaW50IGJh
Y2tCLCBpbnQgYmFja0EpOwogICAgIHZvaWQgc2V0U2VhcmNoVGV4dENvbG9yKGludCBmb3JlUiwg
aW50IGZvcmVHLCBpbnQgZm9yZUIsIGludCBmb3JlQSwgaW50IGJhY2tSLCBpbnQgYmFja0csIGlu
dCBiYWNrQiwgaW50IGJhY2tBKTsKIAotICAgIHZvaWQgYWRqdXN0U2l6ZUNvbnN0cmFpbnRzKFJl
bmRlclN0eWxlKiwgRm9ybVR5cGUpIGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2l6ZUNvbnN0cmFp
bnRzKFJlbmRlclN0eWxlJiwgRm9ybVR5cGUpIGNvbnN0OwogCiAgICAgLy8gU3lzdGVtIGZvbnRz
LgogICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlv
biYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0
b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRl
eHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9h
dFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBh
aW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVM
aXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3Jh
dGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlk
ZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lk
IGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVt
YlN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNs
aWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAog
I2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIHZpcnR1YWwgSW50U2l6ZSBzbGlkZXJU
aWNrU2l6ZSgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTU3LDE1ICsxNTcsMTUgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVu
dCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikg
b3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50IGZvbnRz
aXplKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50UHJv
Z3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVy
dmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dy
ZXNzKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0
SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVy
UHJvZ3Jlc3MmKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICB2aXJ0
dWFsIFN0cmluZyBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpIG92ZXJyaWRlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAJKHJldmlz
aW9uIDE3MDQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
azIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTggKzE0MiwxOCBAQCBzdGF0aWMgR3RrU3Rh
dGVUeXBlIGdldEd0a1N0YXRlVHlwZShSZW5kCiAgICAgcmV0dXJuIEdUS19TVEFURV9OT1JNQUw7
CiB9CiAKLXN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoY29uc3QgUmVuZGVyVGhlbWVHdGsqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEd0a1dpZGdldCogd2lkZ2V0KQorc3RhdGljIHZvaWQgc2V0VG9n
Z2xlU2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0ayosIFJlbmRlclN0eWxlJiBzdHlsZSwgR3RrV2lk
Z2V0KiB3aWRnZXQpCiB7CiAgICAgLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3Bl
Y2lmaWVkLCBzbyB3ZSBzaG91bGRuJ3QgY2hhbmdlIHRoZW0uCi0gICAgaWYgKCFzdHlsZS0+d2lk
dGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisg
ICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhlaWdo
dCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47CiAKICAgICBnaW50IGluZGljYXRvclNpemU7
CiAgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQod2lkZ2V0LCAiaW5kaWNhdG9yLXNpemUiLCAmaW5k
aWNhdG9yU2l6ZSwgTlVMTCk7Ci0gICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JB
dXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoaW5kaWNhdG9yU2l6ZSwgRml4
ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBzdHlsZS0+
c2V0SGVpZ2h0KExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS53
aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0
aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS5oZWlnaHQoKS5pc0F1dG8o
KSkKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkp
OwogfQogCiBzdGF0aWMgdm9pZCBwYWludFRvZ2dsZShSZW5kZXJUaGVtZUd0ayogdGhlbWUsIGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0KQpAQCAtMTk0LDcgKzE5NCw3IEBA
IHN0YXRpYyB2b2lkIHBhaW50VG9nZ2xlKFJlbmRlclRoZW1lR3RrKiAKICAgICB9CiB9CiAKLXZv
aWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUmIHN0
eWxlKSBjb25zdAogewogICAgIHNldFRvZ2dsZVNpemUodGhpcywgc3R5bGUsIGd0a0NoZWNrQnV0
dG9uKCkpOwogfQpAQCAtMjA1LDcgKzIwNSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50
Q2hlY2tib3goY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVH
dGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIHNl
dFRvZ2dsZVNpemUodGhpcywgc3R5bGUsIGd0a1JhZGlvQnV0dG9uKCkpOwogfQpAQCAtMjg5LDEx
ICsyODksMTEgQEAgaW50IFJlbmRlclRoZW1lR3RrOjpnZXRDb21ib0JveFNlcGFyYXRvcgogICAg
IHJldHVybiBndGtfd2lkZ2V0X2dldF9zdHlsZShzZXBhcmF0b3IpLT54dGhpY2tuZXNzOwogfQog
Ci1pbnQgUmVuZGVyVGhlbWVHdGs6OmNvbWJvQm94QXJyb3dTaXplKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6Y29tYm9Cb3hBcnJvd1NpemUoUmVuZGVyU3R5
bGUmIHN0eWxlKSBjb25zdAogewogICAgIC8vIFRha2luZyB0aGUgZm9udCBzaXplIGFuZCByZXZl
cnNpbmcgdGhlIERQSSBjb252ZXJzaW9uIHNlZW1zIHRvIG1hdGNoCiAgICAgLy8gR1RLKyByZW5k
ZXJpbmcgYXMgY2xvc2VseSBhcyBwb3NzaWJsZS4KLSAgICByZXR1cm4gc3R5bGUtPmZvbnQoKS5z
aXplKCkgKiAoNzIuMCAvIFJlbmRlclRoZW1lR3RrOjpnZXRTY3JlZW5EUEkoKSk7CisgICAgcmV0
dXJuIHN0eWxlLmZvbnQoKS5zaXplKCkgKiAoNzIuMCAvIFJlbmRlclRoZW1lR3RrOjpnZXRTY3Jl
ZW5EUEkoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldEJ1dHRvbklubmVyQm9yZGVyKEd0a1dpZGdl
dCogYnV0dG9uLCBpbnQmIGxlZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkK
QEAgLTMxNiwxMSArMzE2LDExIEBAIHN0YXRpYyB2b2lkIGdldEJ1dHRvbklubmVyQm9yZGVyKEd0
a1dpZGcKIH0KIAogCi12b2lkIFJlbmRlclRoZW1lR3RrOjpnZXRDb21ib0JveFBhZGRpbmcoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBpbnQmIGxlZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJv
dHRvbSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmdldENvbWJvQm94UGFkZGluZyhSZW5k
ZXJTdHlsZSYgc3R5bGUsIGludCYgbGVmdCwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90
dG9tKSBjb25zdAogewogICAgIC8vIElmIHRoaXMgbWVudSBsaXN0IGJ1dHRvbiBpc24ndCBkcmF3
biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3ZQogICAgIC8vIGRvbid0IGFkZCBhbnkgZXh0cmEg
cGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3JlIGFscmVhZHkgdXNlcy4KLSAgICBpZiAoc3R5bGUt
PmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQorICAgIGlmIChzdHlsZS5hcHBlYXJhbmNl
KCkgPT0gTm9Db250cm9sUGFydCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQSBjb21ibyBi
b3ggYnV0dG9uIGlzIGEgYnV0dG9uIHdpdGggd2lkZ2V0cyBwYWNrZWQgaW50byBpdC4KQEAgLTMz
MiwzNCArMzMyLDM0IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmdldENvbWJvQm94UGFkZGluZygK
ICAgICBpbnQgYXJyb3dBbmRTZXBlcmF0b3JMZW5ndGggPSBjb21ib0JveEFycm93U2l6ZShzdHls
ZSkgKwogICAgICAgICBnZXRDb21ib0JveFNlcGFyYXRvcldpZHRoKCkgKyAoMyAqIGJ1dHRvbldp
ZGdldFN0eWxlLT54dGhpY2tuZXNzKTsKIAotICAgIGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0g
UlRMKQorICAgIGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgIGxlZnQgKz0g
YXJyb3dBbmRTZXBlcmF0b3JMZW5ndGg7CiAgICAgZWxzZQogICAgICAgICByaWdodCArPSBhcnJv
d0FuZFNlcGVyYXRvckxlbmd0aDsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVy
bmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1l
R3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAog
ewogICAgIGludCBsZWZ0ID0gMCwgdG9wID0gMCwgcmlnaHQgPSAwLCBib3R0b20gPSAwOwogICAg
IGdldENvbWJvQm94UGFkZGluZyhzdHlsZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAg
ICByZXR1cm4gbGVmdDsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFk
ZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUd0azo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAg
ICAgaW50IGxlZnQgPSAwLCB0b3AgPSAwLCByaWdodCA9IDAsIGJvdHRvbSA9IDA7CiAgICAgZ2V0
Q29tYm9Cb3hQYWRkaW5nKHN0eWxlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgIHJl
dHVybiByaWdodDsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGlu
Z1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpbnQg
bGVmdCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKICAgICBnZXRDb21ib0Jv
eFBhZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CiAgICAgcmV0dXJuIHRv
cDsKIH0KIAotaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJu
YWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpbnQgbGVm
dCA9IDAsIHRvcCA9IDAsIHJpZ2h0ID0gMCwgYm90dG9tID0gMDsKICAgICBnZXRDb21ib0JveFBh
ZGRpbmcoc3R5bGUsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CkBAIC0zODEsMTIgKzM4MSwx
MiBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KGNvbnN0CiAKICAgICBpbnQg
bGVmdEJvcmRlciA9IDAsIHJpZ2h0Qm9yZGVyID0gMCwgYm90dG9tQm9yZGVyID0gMCwgdG9wQm9y
ZGVyID0gMDsKICAgICBnZXRCdXR0b25Jbm5lckJvcmRlcihndGtDb21ib0JveEJ1dHRvbigpLCBs
ZWZ0Qm9yZGVyLCB0b3BCb3JkZXIsIHJpZ2h0Qm9yZGVyLCBib3R0b21Cb3JkZXIpOwotICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9ICZvYmplY3Quc3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSYgc3R5
bGUgPSBvYmplY3Quc3R5bGUoKTsKICAgICBpbnQgYXJyb3dTaXplID0gY29tYm9Cb3hBcnJvd1Np
emUoc3R5bGUpOwogICAgIEd0a1N0eWxlKiBidXR0b25TdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0
eWxlKGd0a0NvbWJvQm94QnV0dG9uKCkpOwogCiAgICAgSW50UmVjdCBhcnJvd1JlY3QoMCwgKHJl
Y3QuaGVpZ2h0KCkgLSBhcnJvd1NpemUpIC8gMiwgYXJyb3dTaXplLCBhcnJvd1NpemUpOwotICAg
IGlmIChzdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgIGlmIChzdHlsZS5kaXJlY3Rpb24o
KSA9PSBSVEwpCiAgICAgICAgIGFycm93UmVjdC5zZXRYKGxlZnRCb3JkZXIgKyBidXR0b25TdHls
ZS0+eHRoaWNrbmVzcyk7CiAgICAgZWxzZQogICAgICAgICBhcnJvd1JlY3Quc2V0WChyZWN0Lndp
ZHRoKCkgLSByaWdodEJvcmRlciAtIGJ1dHRvblN0eWxlLT54dGhpY2tuZXNzIC0gYXJyb3dTaXpl
KTsKQEAgLTQxMCw3ICs0MTAsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0
KGNvbnN0CiAgICAgYm90dG9tQm9yZGVyICs9IGZvY3VzUGFkZGluZyArIGZvY3VzV2lkdGg7CiAg
ICAgaW50IHNlcGFyYXRvcldpZHRoID0gZ2V0Q29tYm9Cb3hTZXBhcmF0b3JXaWR0aCgpOwogICAg
IEludFJlY3Qgc2VwYXJhdG9yUmVjdCgwLCB0b3BCb3JkZXIsIHNlcGFyYXRvcldpZHRoLCByZWN0
LmhlaWdodCgpIC0gdG9wQm9yZGVyIC0gYm90dG9tQm9yZGVyKTsKLSAgICBpZiAoc3R5bGUtPmRp
cmVjdGlvbigpID09IFJUTCkKKyAgICBpZiAoc3R5bGUuZGlyZWN0aW9uKCkgPT0gUlRMKQogICAg
ICAgICBzZXBhcmF0b3JSZWN0LnNldFgoYXJyb3dSZWN0LngoKSArIGFycm93UmVjdC53aWR0aCgp
ICsgYnV0dG9uU3R5bGUtPnh0aGlja25lc3MgKyBzZXBhcmF0b3JXaWR0aCk7CiAgICAgZWxzZQog
ICAgICAgICBzZXBhcmF0b3JSZWN0LnNldFgoYXJyb3dSZWN0LngoKSAtIGJ1dHRvblN0eWxlLT54
dGhpY2tuZXNzIC0gc2VwYXJhdG9yV2lkdGgpOwpAQCAtNTI4LDkgKzUyOCw5IEBAIGJvb2wgUmVu
ZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVGh1bWIoY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVy
VGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgQ29u
dHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisgICAgQ29udHJvbFBhcnQgcGFy
dCA9IHN0eWxlLmFwcGVhcmFuY2UoKTsKICAgICBpZiAocGFydCAhPSBTbGlkZXJUaHVtYkhvcml6
b250YWxQYXJ0ICYmIHBhcnQgIT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtNTQyLDEzICs1NDIsMTMgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
U2xpZGVyVGh1bWJTaQogICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogCiAgICAgaWYg
KHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgewotICAgICAgICBzdHlsZS0+c2V0
V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChM
ZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChsZW5n
dGgsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgod2lkdGgsIEZpeGVk
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1
bWJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7Ci0g
ICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3Ro
KHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgobGVuZ3RoLCBGaXhl
ZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKQEAgLTU3Miw3ICs1NzIsNyBAQCBib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludFByb2dyZXNzQmFyKGNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRl
clRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFk
anVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEd0a1N0eWxlKiBndGtTdHlsZSA9IGd0a193aWRn
ZXRfZ2V0X3N0eWxlKGd0a1NwaW5CdXR0b24oKSk7CiAgICAgY29uc3QgUGFuZ29Gb250RGVzY3Jp
cHRpb24qIGZvbnREZXNjcmlwdGlvbiA9IGd0a1N0eWxlLT5mb250X2Rlc2M7CkBAIC01ODMsOCAr
NTgzLDggQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dAogICAgIGlu
dCB3aWR0aCA9IHN0ZDo6bWF4KFBBTkdPX1BJWEVMUyhmb250U2l6ZSksIG1pblNwaW5CdXR0b25B
cnJvd1NpemUpOwogICAgIHdpZHRoICs9IC0oKHdpZHRoICUgMikgLSAxKSArIGd0a1N0eWxlLT54
dGhpY2tuZXNzOwogCi0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsK
LSAgICBzdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxl
LnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRNaW5XaWR0aChM
ZW5ndGgod2lkdGgsIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50SW5u
ZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCShyZXZpc2lvbiAxNzA0
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjAxLDEwICsyMDEsMTAgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6
YWRqdXN0UmVwYWludFJlY3QoYwogICAgIGFkanVzdFJlY3RGb3JGb2N1cyhjb250ZXh0LCByZWN0
KTsKIH0KIAotc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShHdGtTdHlsZUNvbnRleHQqIGNvbnRl
eHQsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3N0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoR3RrU3R5
bGVDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgLy8gVGhlIHdp
ZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCBzbyB3ZSBzaG91bGRuJ3QgY2hhbmdl
IHRoZW0uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFz
dHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmlu
c2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBPdGhlciBwb3J0cyBoYXJkLWNvZGUgdGhpcyB0byAxMyB3aGljaCBpcyBhbHNv
IHRoZSBkZWZhdWx0IHZhbHVlIGRlZmluZWQgYnkgR1RLKy4KQEAgLTIxMywxMSArMjEzLDExIEBA
IHN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoR3RrU3R5bGVDb250ZXgKICAgICBnaW50IGluZGlj
YXRvclNpemU7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRp
Y2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXplLCBOVUxMKTsKIAotICAgIGlmIChzdHlsZS0+d2lk
dGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KGluZGljYXRvclNpemUsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5z
aWNPckF1dG8oKSkKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUs
IEZpeGVkKSk7CiAKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOworICAgIGlmIChz
dHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChp
bmRpY2F0b3JTaXplLCBGaXhlZCkpOwogfQogCiBzdGF0aWMgdm9pZCBwYWludFRvZ2dsZShjb25z
dCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgZnVsbFJlY3QpCkBAIC0yNzUsNyArMjc1LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRUb2dn
bGUoY29uc3QgUmVuZGVyVGhlbQogICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4
dCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRDaGVja2JveFNpemUoUmVu
ZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIHNldFRvZ2dsZVNpemUoZ2V0U3R5bGVDb250
ZXh0KEdUS19UWVBFX0NIRUNLX0JVVFRPTiksIHN0eWxlKTsKIH0KQEAgLTI4Niw3ICsyODYsNyBA
QCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludENoZWNrYm94KGNvbnN0CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRlclN0
eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBzZXRUb2dnbGVTaXplKGdldFN0eWxlQ29udGV4dChH
VEtfVFlQRV9SQURJT19CVVRUT04pLCBzdHlsZSk7CiB9CkBAIC0zNzgsMTggKzM3OCwxOCBAQCBi
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRvbihjb25zdCBSCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1zdGF0aWMgdm9pZCBnZXRDb21ib0JveE1ldHJpY3MoUmVuZGVyU3R5bGUqIHN0eWxl
LCBHdGtCb3JkZXImIGJvcmRlciwgaW50JiBmb2N1cywgaW50JiBzZXBhcmF0b3IpCitzdGF0aWMg
dm9pZCBnZXRDb21ib0JveE1ldHJpY3MoUmVuZGVyU3R5bGUmIHN0eWxlLCBHdGtCb3JkZXImIGJv
cmRlciwgaW50JiBmb2N1cywgaW50JiBzZXBhcmF0b3IpCiB7CiAgICAgLy8gSWYgdGhpcyBtZW51
IGxpc3QgYnV0dG9uIGlzbid0IGRyYXduIHVzaW5nIHRoZSBuYXRpdmUgdGhlbWUsIHdlCiAgICAg
Ly8gZG9uJ3QgYWRkIGFueSBleHRyYSBwYWRkaW5nIGJleW9uZCB3aGF0IFdlYkNvcmUgYWxyZWFk
eSB1c2VzLgotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQpCisg
ICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQogICAgICAgICByZXR1
cm47CiAKICAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RL
X1RZUEVfQ09NQk9fQk9YKTsKICAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwog
CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFT
U19CVVRUT04pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwg
c3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihzdHlsZS0+ZGly
ZWN0aW9uKCkpKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLmRp
cmVjdGlvbigpKSkpOwogCiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJmJvcmRlcik7CiAKQEAgLTQwNiw3ICs0
MDYsNyBAQCBzdGF0aWMgdm9pZCBnZXRDb21ib0JveE1ldHJpY3MoUmVuZGVyU3R5CiAgICAgY29u
dGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TRVBBUkFUT1IpOwogICAgIGd0a19zdHls
ZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CiAKLSAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
biA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUt
PmRpcmVjdGlvbigpKSk7CisgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNf
Y2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLmRpcmVjdGlvbigp
KSk7CiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBkaXJlY3Rp
b24pOwogICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCAic2VwYXJhdG9y
Iik7CiAKQEAgLTQyNiwyOSArNDI2LDI5IEBAIHN0YXRpYyB2b2lkIGdldENvbWJvQm94TWV0cmlj
cyhSZW5kZXJTdHkKICAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwogfQog
Ci1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
TGVmdChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgR3RrQm9yZGVyIGJvcmRlcldp
ZHRoID0geyAwLCAwLCAwLCAwIH07CiAgICAgaW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JX
aWR0aCA9IDA7CiAgICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9j
dXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOwogICAgIGludCBsZWZ0ID0gYm9yZGVyV2lkdGgubGVm
dCArIGZvY3VzV2lkdGg7Ci0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAg
aWYgKHN0eWxlLmRpcmVjdGlvbigpID09IFJUTCkKICAgICAgICAgbGVmdCArPSBzZXBhcmF0b3JX
aWR0aCArIG1pbkFycm93U2l6ZTsKICAgICByZXR1cm4gbGVmdDsKIH0KIAotaW50IFJlbmRlclRo
ZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKK2ludCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJT
dHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAw
LCAwLCAwIH07CiAgICAgaW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7CiAg
ICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2Vw
YXJhdG9yV2lkdGgpOwogICAgIGludCByaWdodCA9IGJvcmRlcldpZHRoLnJpZ2h0ICsgZm9jdXNX
aWR0aDsKLSAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IExUUikKKyAgICBpZiAoc3R5bGUu
ZGlyZWN0aW9uKCkgPT0gTFRSKQogICAgICAgICByaWdodCArPSBzZXBhcmF0b3JXaWR0aCArIG1p
bkFycm93U2l6ZTsKICAgICByZXR1cm4gcmlnaHQ7CiB9CiAKLWludCBSZW5kZXJUaGVtZUd0azo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJl
bmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSYgc3R5bGUp
IGNvbnN0CiB7CiAgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07CiAg
ICAgaW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7CkBAIC00NTYsNyArNDU2
LDcgQEAgaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZwogICAgIHJldHVy
biBib3JkZXJXaWR0aC50b3AgKyBmb2N1c1dpZHRoOwogfQogCi1pbnQgUmVuZGVyVGhlbWVHdGs6
OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2lu
dCBSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUm
IHN0eWxlKSBjb25zdAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwg
MCB9OwogICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwpAQCAtNzEw
LDkgKzcxMCw5IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVGh1bWIoY28KICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJU
aGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVu
dCYpIGNvbnN0CiB7Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7
CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLmFwcGVhcmFuY2UoKTsKICAgICBpZiAocGFy
dCAhPSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ICYmIHBhcnQgIT0gU2xpZGVyVGh1bWJWZXJ0
aWNhbFBhcnQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNzIyLDEzICs3MjIsMTMgQEAgdm9pZCBS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0U2xpZGVyVGh1bWJTaQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAic2xpZGVyLWxlbmd0aCIsICZzbGlkZXJMZW5ndGgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9y
aXpvbnRhbFBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJMZW5n
dGgsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlcldpZHRo
LCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBG
aXhlZCkpOworICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhl
ZCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRo
dW1iVmVydGljYWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOwot
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5
bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBGaXhlZCkpOworICAgIHN0eWxlLnNl
dFdpZHRoKExlbmd0aChzbGlkZXJXaWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQo
TGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC03NzUsNyArNzc1
LDcgQEAgc3RhdGljIGdpbnQgc3BpbkJ1dHRvbkFycm93U2l6ZShHdGtTdHlsZQogICAgIHJldHVy
biBhcnJvd1NpemUgLSBhcnJvd1NpemUgJSAyOyAvLyBGb3JjZSBldmVuLgogfQogCi12b2lkIFJl
bmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6
OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9
IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TUElOX0JVVFRPTik7CiAKQEAgLTc4Myw4ICs3ODMs
OCBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0CiAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmcoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFn
cz4oMCksICZwYWRkaW5nKTsKIAogICAgIGludCB3aWR0aCA9IHNwaW5CdXR0b25BcnJvd1NpemUo
Y29udGV4dCkgKyBwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0OwotICAgIHN0eWxlLT5zZXRX
aWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldE1pbldpZHRoKExlbmd0
aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVk
KSk7CisgICAgc3R5bGUuc2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwogfQogCiBz
dGF0aWMgdm9pZCBwYWludFNwaW5BcnJvd0J1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0
eWxlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtBcnJvd1R5
cGUgYXJyb3dUeXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRo
ZW1lR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVu
ZGVyVGhlbWVHdGsuY3BwCShyZXZpc2lvbiAxNzA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsOSArMTY1
LDkgQEAgc3RhdGljIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcAogICAgIH0KIH0K
IAotYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZUd0azo6c3VwcG9ydHNGb2N1c1Jpbmco
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIHJldHVybiBzdXBwb3J0c0Zv
Y3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOworICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxl
LmFwcGVhcmFuY2UoKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OmNvbnRyb2xTdXBwb3J0
c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKQEAgLTIxNywyNSArMjE3LDI1IEBA
IHN0YXRpYyBHdGtTdGF0ZVR5cGUgZ3RrSWNvblN0YXRlKFJlbmRlclQKICAgICByZXR1cm4gR1RL
X1NUQVRFX05PUk1BTDsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCop
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50JikgY29uc3QKIHsKICAg
ICAvLyBTb21lIGxheW91dCB0ZXN0cyBjaGVjayBleHBsaWNpdGx5IHRoYXQgYnV0dG9ucyBpZ25v
cmUgbGluZS1oZWlnaHQuCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRv
blBhcnQpCi0gICAgICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFs
TGluZUhlaWdodCgpKTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25Q
YXJ0KQorICAgICAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodCgpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxpc3RTdHls
ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgLy8gVGhlIHRlc3RzIGNo
ZWNrIGV4cGxpY2l0bHkgdGhhdCBzZWxlY3QgbWVudSBidXR0b25zIGlnbm9yZSBsaW5lIGhlaWdo
dC4KLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWln
aHQoKSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVI
ZWlnaHQoKSk7CiAKICAgICAvLyBXZSBjYW5ub3QgZ2l2ZSBhIHByb3BlciByZW5kZXJpbmcgd2hl
biBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwgdW5mb3J0dW5hdGVseS4KLSAgICBzdHlsZS0+cmVz
ZXRCb3JkZXJSYWRpdXMoKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlclJhZGl1cygpOwogfQogCiB2
b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYgZSkgY29uc3QK
IHsKLSAgICBhZGp1c3RNZW51TGlzdFN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsICZlKTsK
KyAgICBhZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKIH0KIAog
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0
IFJlbmRlck9iamVjdCYgb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKQEAgLTI5MCw3ICsyOTAsNyBAQCBzdGF0aWMgR3RrSWNvblNpemUgZ2V0SWNv
blNpemVGb3JQaXhlbFNpCiAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfRElBTE9HOwogfQogCi12
b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
IGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5
bGUsIEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiB9CkBAIC0zMDAsMjUgKzMwMCwyNSBA
QCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgcmV0dXJuIHBh
aW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQobywgaSwgcmVjdCk7CiB9CiAKLXN0
YXRpYyB2b2lkIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkK
K3N0YXRpYyB2b2lkIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKFJlbmRlclN0eWxlJiBzdHls
ZSkKIHsKLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+cmVzZXRQYWRkaW5n
KCk7CisgICAgc3R5bGUucmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5yZXNldFBhZGRpbmcoKTsK
IAogICAgIC8vIEdldCB0aGUgaWNvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUuCi0gICAg
aW50IGZvbnRTaXplID0gc3R5bGUtPmZvbnRTaXplKCk7CisgICAgaW50IGZvbnRTaXplID0gc3R5
bGUuZm9udFNpemUoKTsKICAgICBpZiAoZm9udFNpemUgPCBndGtJY29uU2l6ZU1lbnUpIHsKLSAg
ICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChmb250U2l6ZSwgRml4ZWQpKTsKLSAgICAgICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgoZm9udFNpemUsIEZpeGVkKSk7CisgICAgICAgIHN0eWxl
LnNldFdpZHRoKExlbmd0aChmb250U2l6ZSwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0SGVp
Z2h0KExlbmd0aChmb250U2l6ZSwgRml4ZWQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBnaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKICAgICBndGtfaWNvbl9zaXplX2xvb2t1cChn
ZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShmb250U2l6ZSksICZ3aWR0aCwgJmhlaWdodCk7Ci0gICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChoZWlnaHQsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHdp
ZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoaGVpZ2h0LCBGaXhlZCkp
OwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JikgY29uc3QKIHsKICAgICBhZGp1c3RTZWFyY2hGaWVsZEljb25TdHlsZShzdHlsZSk7
CiB9CkBAIC0zNTcsNyArMzU3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hG
aWVsZFJlcwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRq
dXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBz
dHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUo
c3R5bGUpOwogfQpAQCAtMzc2LDExICszNzYsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRTZWFyY2hGaWVsZENhbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJj
aEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYp
IGNvbnN0CiB7CiAgICAgLy8gV2UgY2Fubm90IGdpdmUgYSBwcm9wZXIgcmVuZGVyaW5nIHdoZW4g
Ym9yZGVyIHJhZGl1cyBpcyBhY3RpdmUsIHVuZm9ydHVuYXRlbHkuCi0gICAgc3R5bGUtPnJlc2V0
Qm9yZGVyUmFkaXVzKCk7Ci0gICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6Omlu
aXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyUmFkaXVzKCk7CisgICAg
c3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9
CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2Jq
ZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC00MTEs
MTUgKzQxMSwxNSBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludENhcHNMb2NrSW5kaWNhCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRy
YWNrU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIHN0eWxl
LT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIp
OwogfQogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxl
bWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU3R5bGUo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
JiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0
eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlbGVtZW50KTsKLSAgICBzdHlsZS0+c2V0Qm94U2hh
ZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogZG91
YmxlIFJlbmRlclRoZW1lR3RrOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdApAQCAtNTczLDEz
ICs1NzMsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVRvZ2dsZUNsbwogfQog
I2VuZGlmCiAKLXN0YXRpYyBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSBib3JkZXJSYWRpaUZyb21T
dHlsZShSZW5kZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkg
Ym9yZGVyUmFkaWlGcm9tU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIHJldHVybiBG
bG9hdFJvdW5kZWRSZWN0OjpSYWRpaSgKLSAgICAgICAgSW50U2l6ZShzdHlsZS0+Ym9yZGVyVG9w
TGVmdFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5bGUtPmJvcmRlclRvcExlZnRSYWRp
dXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwKLSAgICAgICAgSW50U2l6ZShzdHlsZS0+Ym9yZGVy
VG9wUmlnaHRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLT5ib3JkZXJUb3BSaWdo
dFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAotICAgICAgICBJbnRTaXplKHN0eWxlLT5i
b3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkud2lkdGgoKS5pbnRWYWx1ZSgpLCBzdHlsZS0+Ym9yZGVy
Qm90dG9tTGVmdFJhZGl1cygpLmhlaWdodCgpLmludFZhbHVlKCkpLAotICAgICAgICBJbnRTaXpl
KHN0eWxlLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLndpZHRoKCkuaW50VmFsdWUoKSwgc3R5
bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFsdWUoKSkpOworICAg
ICAgICBJbnRTaXplKHN0eWxlLmJvcmRlclRvcExlZnRSYWRpdXMoKS53aWR0aCgpLmludFZhbHVl
KCksIHN0eWxlLmJvcmRlclRvcExlZnRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwKKyAg
ICAgICAgSW50U2l6ZShzdHlsZS5ib3JkZXJUb3BSaWdodFJhZGl1cygpLndpZHRoKCkuaW50VmFs
dWUoKSwgc3R5bGUuYm9yZGVyVG9wUmlnaHRSYWRpdXMoKS5oZWlnaHQoKS5pbnRWYWx1ZSgpKSwK
KyAgICAgICAgSW50U2l6ZShzdHlsZS5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkud2lkdGgoKS5p
bnRWYWx1ZSgpLCBzdHlsZS5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuaW50VmFs
dWUoKSksCisgICAgICAgIEludFNpemUoc3R5bGUuYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS53
aWR0aCgpLmludFZhbHVlKCksIHN0eWxlLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0
KCkuaW50VmFsdWUoKSkpOwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xp
ZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKQEAgLTU5NCw3ICs1OTQsNyBAQCBib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludE1lZGlhU2xpZGVyVHJhCiAKICAgICBmbG9hdCBtZWRpYUR1cmF0aW9uID0gbWVk
aWFFbGVtZW50LT5kdXJhdGlvbigpOwogICAgIGZsb2F0IHRvdGFsVHJhY2tXaWR0aCA9IHIud2lk
dGgoKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSAmby5zdHlsZSgpOworICAgIFJlbmRlclN0
eWxlJiBzdHlsZSA9IG8uc3R5bGUoKTsKICAgICBSZWZQdHI8VGltZVJhbmdlcz4gdGltZVJhbmdl
cyA9IG1lZGlhRWxlbWVudC0+YnVmZmVyZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0g
MDsgaW5kZXggPCB0aW1lUmFuZ2VzLT5sZW5ndGgoKTsgKytpbmRleCkgewogICAgICAgICBmbG9h
dCBzdGFydCA9IHRpbWVSYW5nZXMtPnN0YXJ0KGluZGV4LCBJR05PUkVfRVhDRVBUSU9OKTsKQEAg
LTYwOCw3ICs2MDgsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJh
CiAgICAgICAgIHJhbmdlUmVjdC5zZXRXaWR0aChsZW5ndGhSYXRpbyAqIHRvdGFsVHJhY2tXaWR0
aCk7CiAgICAgICAgIGlmIChpbmRleCkKICAgICAgICAgICAgIHJhbmdlUmVjdC5tb3ZlKHN0YXJ0
UmF0aW8gKiB0b3RhbFRyYWNrV2lkdGgsIDApOwotICAgICAgICBjb250ZXh0LT5maWxsUm91bmRl
ZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChyYW5nZVJlY3QsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0
eWxlKSksIHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0
eWxlLT5jb2xvclNwYWNlKCkpOworICAgICAgICBjb250ZXh0LT5maWxsUm91bmRlZFJlY3QoRmxv
YXRSb3VuZGVkUmVjdChyYW5nZVJlY3QsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0
eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUuY29sb3JT
cGFjZSgpKTsKICAgICB9CiAKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CkBAIC02MTcsOCArNjE3
LDggQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRyYQogCiBib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSAmby5zdHlsZSgpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5m
aWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChyLCBib3JkZXJSYWRpaUZyb21TdHlsZShz
dHlsZSkpLCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBz
dHlsZS0+Y29sb3JTcGFjZSgpKTsKKyAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBvLnN0eWxlKCk7
CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0
KHIsIGJvcmRlclJhZGlpRnJvbVN0eWxlKHN0eWxlKSksIHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUuY29sb3JTcGFjZSgpKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKQEAgLTY0MywxMyArNjQzLDEzIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50TWVkaWFWb2x1bWVTbGkKIAogICAgIGludCByZWN0SGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsK
ICAgICBmbG9hdCB0cmFja0hlaWdodCA9IHJlY3RIZWlnaHQgKiB2b2x1bWU7Ci0gICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gJnJlbmRlck9iamVjdC5zdHlsZSgpOworICAgIFJlbmRlclN0eWxlJiBz
dHlsZSA9IHJlbmRlck9iamVjdC5zdHlsZSgpOwogICAgIEludFJlY3Qgdm9sdW1lUmVjdChyZWN0
KTsKICAgICB2b2x1bWVSZWN0Lm1vdmUoMCwgcmVjdEhlaWdodCAtIHRyYWNrSGVpZ2h0KTsKICAg
ICB2b2x1bWVSZWN0LnNldEhlaWdodChjZWlsKHRyYWNrSGVpZ2h0KSk7CiAKICAgICBjb250ZXh0
LT5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdCh2b2x1bWVSZWN0LCBib3JkZXJSYWRp
aUZyb21TdHlsZShzdHlsZSkpLAotICAgICAgICBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKKyAgICAgICAgc3R5bGUu
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZS5jb2xvclNwYWNl
KCkpOwogICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTY3
MSwyMSArNjcxLDIxIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFDdXJyZW50VGkK
IH0KICNlbmRpZgogCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RQcm9ncmVzc0JhclN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBzdHlsZS0+c2V0Qm94
U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAog
Ly8gVGhlc2UgdmFsdWVzIGhhdmUgYmVlbiBjb3BpZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYS5jcHAKIHN0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NBY3Rpdml0eUJsb2NrcyA9IDU7CiBz
dGF0aWMgY29uc3QgaW50IHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzID0gMTA7CiBzdGF0aWMgY29u
c3QgZG91YmxlIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWwgPSAwLjEyNTsKLWRvdWJsZSBSZW5k
ZXJUaGVtZUd0azo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQ
cm9ncmVzcyopIGNvbnN0Citkb3VibGUgUmVuZGVyVGhlbWVHdGs6OmFuaW1hdGlvblJlcGVhdElu
dGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogewogICAgIHJldHVy
biBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsOwogfQogCi1kb3VibGUgUmVuZGVyVGhlbWVHdGs6
OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAor
ZG91YmxlIFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRl
cnZhbCAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzICogMjsgLy8gIjIiIGZvciBiYWNrIGFuZCBm
b3J0aDsKIH0KQEAgLTY5MywxNiArNjkzLDE2IEBAIGRvdWJsZSBSZW5kZXJUaGVtZUd0azo6YW5p
bWF0aW9uRHVyYXRpb24KIEludFJlY3QgUmVuZGVyVGhlbWVHdGs6OmNhbGN1bGF0ZVByb2dyZXNz
UmVjdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYgZnVs
bEJhclJlY3QpCiB7CiAgICAgSW50UmVjdCBwcm9ncmVzc1JlY3QoZnVsbEJhclJlY3QpOwotICAg
IGNvbnN0IFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mo
JnJlbmRlck9iamVjdCk7Ci0gICAgaWYgKHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCkp
IHsKLSAgICAgICAgaW50IHByb2dyZXNzV2lkdGggPSBwcm9ncmVzc1JlY3Qud2lkdGgoKSAqIHJl
bmRlclByb2dyZXNzLT5wb3NpdGlvbigpOworICAgIGNvbnN0IFJlbmRlclByb2dyZXNzJiByZW5k
ZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3MocmVuZGVyT2JqZWN0KTsKKyAgICBpZiAocmVu
ZGVyUHJvZ3Jlc3MuaXNEZXRlcm1pbmF0ZSgpKSB7CisgICAgICAgIGludCBwcm9ncmVzc1dpZHRo
ID0gcHJvZ3Jlc3NSZWN0LndpZHRoKCkgKiByZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpOwogICAg
ICAgICBpZiAocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gUlRMKQogICAgICAg
ICAgICAgcHJvZ3Jlc3NSZWN0LnNldFgocHJvZ3Jlc3NSZWN0LngoKSArIHByb2dyZXNzUmVjdC53
aWR0aCgpIC0gcHJvZ3Jlc3NXaWR0aCk7CiAgICAgICAgIHByb2dyZXNzUmVjdC5zZXRXaWR0aChw
cm9ncmVzc1dpZHRoKTsKICAgICAgICAgcmV0dXJuIHByb2dyZXNzUmVjdDsKICAgICB9CiAKLSAg
ICBkb3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3MgPSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJv
Z3Jlc3MoKTsKKyAgICBkb3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3MgPSByZW5kZXJQcm9ncmVzcy5h
bmltYXRpb25Qcm9ncmVzcygpOwogCiAgICAgLy8gTmV2ZXIgbGV0IHRoZSBwcm9ncmVzcyByZWN0
IHNocmluayBzbWFsbGVyIHRoYW4gMiBwaXhlbHMuCiAgICAgaW50IG5ld1dpZHRoID0gc3RkOjpt
YXgoMiwgcHJvZ3Jlc3NSZWN0LndpZHRoKCkgLyBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCShyZXZp
c2lvbiAxNzA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGsuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTAgKzQ0LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKCk7CiAKICAgICAvLyBBIG1ldGhvZCBh
c2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdp
bmcgd2hlbiBob3ZlcmVkLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJl
bmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSBpcyBh
YmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9j
dXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGlu
dCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KICAgICB2aXJ0dWFsIGJvb2wgY29u
dHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Qgb3ZlcnJpZGU7CkBA
IC0xMTUsNTAgKzExNSw1MCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29s
IHBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUo
UmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2ti
b3hTaXplKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJT
dHlsZSopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVu
ZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxk
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0g
ICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJy
aWRlOwotICAgIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxl
KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJl
bmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5n
TGVmdChSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIGludCBwb3B1cEludGVybmFs
UGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgaW50IHBvcHVw
SW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgaW50
IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICAvLyBUaGUgTWFjIHBvcnQgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiB0aGUgIm1lbnUg
bGlzdCIgYW5kIHRoZSAibWVudSBsaXN0IGJ1dHRvbi4iCiAgICAgLy8gVGhlIGZvcm1lciBpcyB1
c2VkIHdoZW4gYSBtZW51IGxpc3QgYnV0dG9uIGhhcyBiZWVuIHN0eWxlZC4gVGhpcyBpcyB1c2Vk
IHRvIGVuc3VyZQogICAgIC8vIEFxdWEgdGhlbWVkIGNvbnRyb2xzIHdoZW5ldmVyIHBvc3NpYmxl
LiBXZSBhbHdheXMgd2FudCB0byB1c2UgR1RLKyB0aGVtaW5nLCBzbwogICAgIC8vIHdlIGRvbid0
IG1haW50YWluIHRoaXMgZGlmZmVyZW50aWF0aW9uLgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RN
ZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZs
b2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9u
RGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZl
ciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwg
RWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRy
YWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRl
clN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHBh
aW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVt
YlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoVklERU8p
CiAgICAgdm9pZCBpbml0TWVkaWFDb2xvcnMoKTsKQEAgLTE4MCwyMCArMTgwLDIwIEBAIHByaXZh
dGU6CiAjZW5kaWYKICNlbmRpZgogCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0
SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVy
UHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jl
c3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQ
cm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
ZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBi
b29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGlu
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
CiAKICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlz
dCosIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsKLSAgICBzdGF0aWMgdm9p
ZCBzZXRUZXh0SW5wdXRCb3JkZXJzKFJlbmRlclN0eWxlKik7CisgICAgc3RhdGljIHZvaWQgc2V0
VGV4dElucHV0Qm9yZGVycyhSZW5kZXJTdHlsZSYpOwogICAgIHN0YXRpYyBkb3VibGUgZ2V0U2Ny
ZWVuRFBJKCk7CiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC0yMTEsOSArMjExLDkgQEAgcHJpdmF0
ZToKICNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogICAgIHZvaWQgc2V0dXBXaWRnZXRBbmRBZGRU
b0NvbnRhaW5lcihHdGtXaWRnZXQqLCBHdGtXaWRnZXQqKSBjb25zdDsKICAgICB2b2lkIHJlZnJl
c2hDb21ib0JveENoaWxkcmVuKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRDb21ib0JveFBhZGRpbmco
UmVuZGVyU3R5bGUqLCBpbnQmIGxlZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRv
bSkgY29uc3Q7CisgICAgdm9pZCBnZXRDb21ib0JveFBhZGRpbmcoUmVuZGVyU3R5bGUmLCBpbnQm
IGxlZnQsIGludCYgdG9wLCBpbnQmIHJpZ2h0LCBpbnQmIGJvdHRvbSkgY29uc3Q7CiAgICAgaW50
IGdldENvbWJvQm94U2VwYXJhdG9yV2lkdGgoKSBjb25zdDsKLSAgICBpbnQgY29tYm9Cb3hBcnJv
d1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBpbnQgY29tYm9Cb3hBcnJvd1NpemUoUmVu
ZGVyU3R5bGUmKSBjb25zdDsKIAogICAgIEd0a1dpZGdldCogZ3RrQnV0dG9uKCkgY29uc3Q7CiAg
ICAgR3RrV2lkZ2V0KiBndGtUcmVlVmlldygpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJKHJldmlzaW9uIDE3MDQyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMs
NyArMjAzLDcgQEAgdm9pZCBSZW5kZXJCdXR0b246OmxheW91dCgpCiAgICAgUmVuZGVyRmxleGli
bGVCb3g6OmxheW91dCgpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgYmUgYWRqdXN0
aW5nIHN0eWxlcyBkdXJpbmcgbGF5b3V0LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzc2NzU0OTM+Lgot
ICAgIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSb3VuZEJvcmRlclJhZGl1cyhzdHlsZSgpLCB0aGlz
KTsKKyAgICBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoc3R5bGUoKSwg
KnRoaXMpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxNzA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5MSwxMCArMTQ5MSwxMCBA
QCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lKFBhaW50SW5mCiAKICAgICBSZW5kZXJT
dHlsZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgLy8gT25seSBwYWludCB0aGUgZm9jdXMg
cmluZyBieSBoYW5kIGlmIHRoZSB0aGVtZSBpc24ndCBhYmxlIHRvIGRyYXcgaXQuCi0gICAgaWYg
KHN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1
c1JpbmcoJnN0eWxlVG9Vc2UpKQorICAgIGlmIChzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0
bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKHN0eWxlVG9Vc2UpKQogICAgICAgICBw
YWludEZvY3VzUmluZyhwYWludEluZm8sIHBhaW50T2Zmc2V0LCAmc3R5bGVUb1VzZSk7CiAKLSAg
ICBpZiAoaGFzT3V0bGluZUFubm90YXRpb24oKSAmJiAhc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJ
c0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZygmc3R5bGVUb1VzZSkpCisgICAg
aWYgKGhhc091dGxpbmVBbm5vdGF0aW9uKCkgJiYgIXN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNB
dXRvKCkgJiYgIXRoZW1lKCkuc3VwcG9ydHNGb2N1c1Jpbmcoc3R5bGVUb1VzZSkpCiAgICAgICAg
IGFkZFBERlVSTFJlY3QocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAKICAgICBHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAkocmV2aXNp
b24gMTcwNDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJv
bHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTAgKzEwMSwxMCBAQCBzdGF0aWMgRmxvYXRS
ZWN0IGdldFVuem9vbWVkUmVjdEFuZEFkanVzCiBzdGF0aWMgY29uc3QgaW50IG1lZGlhU2xpZGVy
VGh1bWJXaWR0aCA9IDEzOwogc3RhdGljIGNvbnN0IGludCBtZWRpYVNsaWRlclRodW1iSGVpZ2h0
ID0gMTQ7CiAKLXZvaWQgUmVuZGVyTWVkaWFDb250cm9sczo6YWRqdXN0TWVkaWFTbGlkZXJUaHVt
YlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKQordm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1
c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgaW50IHBh
cnQ7Ci0gICAgc3dpdGNoIChzdHlsZS0+YXBwZWFyYW5jZSgpKSB7CisgICAgc3dpdGNoIChzdHls
ZS5hcHBlYXJhbmNlKCkpIHsKICAgICBjYXNlIE1lZGlhU2xpZGVyVGh1bWJQYXJ0OgogICAgICAg
ICBwYXJ0ID0gTWVkaWFTbGlkZXJUaHVtYjsKICAgICAgICAgYnJlYWs7CkBAIC0xMjEsOSArMTIx
LDkgQEAgdm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaQogICAgIENHU2l6
ZSBzaXplOwogICAgIHdrTWVhc3VyZU1lZGlhVUlQYXJ0KHBhcnQsIDAsICZzaXplKTsKIAotICAg
IGZsb2F0IHpvb21MZXZlbCA9IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgc3R5bGUtPnNl
dFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGggKiB6b29tTGV2ZWwpLCBG
aXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2l6
ZS5oZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOworICAgIGZsb2F0IHpvb21MZXZlbCA9IHN0
eWxlLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc3RhdGljX2Nh
c3Q8aW50PihzaXplLndpZHRoICogem9vbUxldmVsKSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRI
ZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2l6ZS5oZWlnaHQgKiB6b29tTGV2ZWwpLCBG
aXhlZCkpOwogfQogCiBib29sIFJlbmRlck1lZGlhQ29udHJvbHM6OnBhaW50TWVkaWFDb250cm9s
c1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUgcGFydCwgY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuaAkocmV2aXNp
b24gMTcwNDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJv
bHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFU
Rk9STShXSU4pCiAgICAgc3RhdGljIGJvb2wgcGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNv
bnRyb2xFbGVtZW50VHlwZSwgY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotICAgIHN0YXRpYyB2b2lkIGFkanVzdE1lZGlhU2xpZGVyVGh1bWJT
aXplKFJlbmRlclN0eWxlKik7CisgICAgc3RhdGljIHZvaWQgYWRqdXN0TWVkaWFTbGlkZXJUaHVt
YlNpemUoUmVuZGVyU3R5bGUmKTsKICNlbmRpZgogICAgIHN0YXRpYyBJbnRQb2ludCB2b2x1bWVT
bGlkZXJPZmZzZXRGcm9tTXV0ZUJ1dHRvbihSZW5kZXJCb3gqLCBjb25zdCBJbnRTaXplJik7CiB9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShy
ZXZpc2lvbiAxNzA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMTAgKzEyNSwxMCBAQCB2b2lkIFJlbmRlck1l
bnVMaXN0OjphZGp1c3RJbm5lclN0eWxlKCkKICAgICAgICAgaW5uZXJTdHlsZS5zZXRBbGlnblNl
bGYoQWxpZ25GbGV4U3RhcnQpOwogICAgIH0KIAotICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ0xl
ZnQoTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KCZzdHlsZSgpKSwgRml4
ZWQpKTsKLSAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdSaWdodChMZW5ndGgodGhlbWUoKS5wb3B1
cEludGVybmFsUGFkZGluZ1JpZ2h0KCZzdHlsZSgpKSwgRml4ZWQpKTsKLSAgICBpbm5lclN0eWxl
LnNldFBhZGRpbmdUb3AoTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoJnN0
eWxlKCkpLCBGaXhlZCkpOwotICAgIGlubmVyU3R5bGUuc2V0UGFkZGluZ0JvdHRvbShMZW5ndGgo
dGhlbWUoKS5wb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbSgmc3R5bGUoKSksIEZpeGVkKSk7Cisg
ICAgaW5uZXJTdHlsZS5zZXRQYWRkaW5nTGVmdChMZW5ndGgodGhlbWUoKS5wb3B1cEludGVybmFs
UGFkZGluZ0xlZnQoc3R5bGUoKSksIEZpeGVkKSk7CisgICAgaW5uZXJTdHlsZS5zZXRQYWRkaW5n
UmlnaHQoTGVuZ3RoKHRoZW1lKCkucG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChzdHlsZSgpKSwg
Rml4ZWQpKTsKKyAgICBpbm5lclN0eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3RoKHRoZW1lKCkucG9w
dXBJbnRlcm5hbFBhZGRpbmdUb3Aoc3R5bGUoKSksIEZpeGVkKSk7CisgICAgaW5uZXJTdHlsZS5z
ZXRQYWRkaW5nQm90dG9tKExlbmd0aCh0aGVtZSgpLnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9t
KHN0eWxlKCkpLCBGaXhlZCkpOwogCiAgICAgaWYgKGRvY3VtZW50KCkucGFnZSgpLT5jaHJvbWUo
KS5zZWxlY3RJdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgpKSB7CiAgICAgICAgIC8vIEl0
ZW1zIGluIHRoZSBwb3B1cCB3aWxsIG5vdCByZXNwZWN0IHRoZSBDU1MgdGV4dC1hbGlnbiBhbmQg
ZGlyZWN0aW9uIHByb3BlcnRpZXMsCkBAIC0zMjYsNyArMzI2LDcgQEAgTGF5b3V0UmVjdCBSZW5k
ZXJNZW51TGlzdDo6Y29udHJvbENsaXBSZQogCiB2b2lkIFJlbmRlck1lbnVMaXN0Ojpjb21wdXRl
SW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsIExheW91
dFVuaXQmIG1heExvZ2ljYWxXaWR0aCkgY29uc3QKIHsKLSAgICBtYXhMb2dpY2FsV2lkdGggPSBz
dGQ6Om1heChtX29wdGlvbnNXaWR0aCwgdGhlbWUoKS5taW5pbXVtTWVudUxpc3RTaXplKCZzdHls
ZSgpKSkgKyBtX2lubmVyQmxvY2stPnBhZGRpbmdMZWZ0KCkgKyBtX2lubmVyQmxvY2stPnBhZGRp
bmdSaWdodCgpOworICAgIG1heExvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KG1fb3B0aW9uc1dpZHRo
LCB0aGVtZSgpLm1pbmltdW1NZW51TGlzdFNpemUoc3R5bGUoKSkpICsgbV9pbm5lckJsb2NrLT5w
YWRkaW5nTGVmdCgpICsgbV9pbm5lckJsb2NrLT5wYWRkaW5nUmlnaHQoKTsKICAgICBpZiAoIXN0
eWxlKCkud2lkdGgoKS5pc1BlcmNlbnQoKSkKICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gbWF4
TG9naWNhbFdpZHRoOwogfQpAQCAtNTY5LDcgKzU2OSw3IEBAIFBvcHVwTWVudVN0eWxlIFJlbmRl
ck1lbnVMaXN0OjptZW51U3R5bGUKICAgICByZXR1cm4gUG9wdXBNZW51U3R5bGUoc3R5bGVUb1Vz
ZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlVG9Vc2Uudmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSwKICAgICAgICAg
c3R5bGVUb1VzZS5mb250KCksIHN0eWxlVG9Vc2UudmlzaWJpbGl0eSgpID09IFZJU0lCTEUsIHN0
eWxlVG9Vc2UuZGlzcGxheSgpID09IE5PTkUsIHN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpLCBzdHls
ZVRvVXNlLnRleHRJbmRlbnQoKSwKICAgICAgICAgc3R5bGUoKS5kaXJlY3Rpb24oKSwgaXNPdmVy
cmlkZShzdHlsZSgpLnVuaWNvZGVCaWRpKCkpLCBQb3B1cE1lbnVTdHlsZTo6RGVmYXVsdEJhY2tn
cm91bmRDb2xvciwKLSAgICAgICAgUG9wdXBNZW51U3R5bGU6OlNlbGVjdFBvcHVwLCB0aGVtZSgp
LnBvcHVwTWVudVNpemUoJnN0eWxlVG9Vc2UsIGFic0JvdW5kcykpOworICAgICAgICBQb3B1cE1l
bnVTdHlsZTo6U2VsZWN0UG9wdXAsIHRoZW1lKCkucG9wdXBNZW51U2l6ZShzdHlsZVRvVXNlLCBh
YnNCb3VuZHMpKTsKIH0KIAogSG9zdFdpbmRvdyogUmVuZGVyTWVudUxpc3Q6Omhvc3RXaW5kb3co
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCShy
ZXZpc2lvbiAxNzA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgUmVuZGVyTWV0ZXI6OnVw
ZGF0ZUxvZ2ljYWxXaWR0aCgpCiB7CiAgICAgUmVuZGVyQm94Ojp1cGRhdGVMb2dpY2FsV2lkdGgo
KTsKIAotICAgIEludFNpemUgZnJhbWVTaXplID0gdGhlbWUoKS5tZXRlclNpemVGb3JCb3VuZHMo
dGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFtZVJlY3QoKSkpOworICAgIEludFNpemUgZnJh
bWVTaXplID0gdGhlbWUoKS5tZXRlclNpemVGb3JCb3VuZHMoKnRoaXMsIHBpeGVsU25hcHBlZElu
dFJlY3QoZnJhbWVSZWN0KCkpKTsKICAgICBzZXRMb2dpY2FsV2lkdGgoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IGZyYW1lU2l6ZS53aWR0aCgpIDogZnJhbWVTaXplLmhlaWdodCgpKTsKIH0K
IApAQCAtNjcsNyArNjcsNyBAQCB2b2lkIFJlbmRlck1ldGVyOjpjb21wdXRlTG9naWNhbEhlaWdo
dChMCiAgICAgICAgIGZyYW1lLnNldEhlaWdodChjb21wdXRlZFZhbHVlcy5tX2V4dGVudCk7CiAg
ICAgZWxzZQogICAgICAgICBmcmFtZS5zZXRXaWR0aChjb21wdXRlZFZhbHVlcy5tX2V4dGVudCk7
Ci0gICAgSW50U2l6ZSBmcmFtZVNpemUgPSB0aGVtZSgpLm1ldGVyU2l6ZUZvckJvdW5kcyh0aGlz
LCBwaXhlbFNuYXBwZWRJbnRSZWN0KGZyYW1lKSk7CisgICAgSW50U2l6ZSBmcmFtZVNpemUgPSB0
aGVtZSgpLm1ldGVyU2l6ZUZvckJvdW5kcygqdGhpcywgcGl4ZWxTbmFwcGVkSW50UmVjdChmcmFt
ZSkpOwogICAgIGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50ID0gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IGZyYW1lU2l6ZS5oZWlnaHQoKSA6IGZyYW1lU2l6ZS53aWR0aCgpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTcw
NDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNTMsMTAgKzEwNTMsMTAgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50
T3V0bGluZShQYWludEluZgogICAgIGludCBvdXRsaW5lT2Zmc2V0ID0gc3R5bGVUb1VzZS5vdXRs
aW5lT2Zmc2V0KCk7CiAKICAgICAvLyBPbmx5IHBhaW50IHRoZSBmb2N1cyByaW5nIGJ5IGhhbmQg
aWYgdGhlIHRoZW1lIGlzbid0IGFibGUgdG8gZHJhdyBpdC4KLSAgICBpZiAoc3R5bGVUb1VzZS5v
dXRsaW5lU3R5bGVJc0F1dG8oKSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZygmc3R5bGVU
b1VzZSkpCisgICAgaWYgKHN0eWxlVG9Vc2Uub3V0bGluZVN0eWxlSXNBdXRvKCkgJiYgIXRoZW1l
KCkuc3VwcG9ydHNGb2N1c1Jpbmcoc3R5bGVUb1VzZSkpCiAgICAgICAgIHBhaW50Rm9jdXNSaW5n
KHBhaW50SW5mbywgcGFpbnRSZWN0LmxvY2F0aW9uKCksICZzdHlsZVRvVXNlKTsKIAotICAgIGlm
IChoYXNPdXRsaW5lQW5ub3RhdGlvbigpICYmICFzdHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0
bygpICYmICF0aGVtZSgpLnN1cHBvcnRzRm9jdXNSaW5nKCZzdHlsZVRvVXNlKSkKKyAgICBpZiAo
aGFzT3V0bGluZUFubm90YXRpb24oKSAmJiAhc3R5bGVUb1VzZS5vdXRsaW5lU3R5bGVJc0F1dG8o
KSAmJiAhdGhlbWUoKS5zdXBwb3J0c0ZvY3VzUmluZyhzdHlsZVRvVXNlKSkKICAgICAgICAgYWRk
UERGVVJMUmVjdChwYWludEluZm8sIHBhaW50UmVjdC5sb2NhdGlvbigpKTsKIAogICAgIGlmIChz
dHlsZVRvVXNlLm91dGxpbmVTdHlsZUlzQXV0bygpIHx8IHN0eWxlVG9Vc2Uub3V0bGluZVN0eWxl
KCkgPT0gQk5PTkUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9n
cmVzcy5jcHAJKHJldmlzaW9uIDE3MDQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJQcm9ncmVzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDggKzkwLDggQEAgdm9pZCBS
ZW5kZXJQcm9ncmVzczo6YW5pbWF0aW9uVGltZXJGaXJlZAogCiB2b2lkIFJlbmRlclByb2dyZXNz
Ojp1cGRhdGVBbmltYXRpb25TdGF0ZSgpCiB7Ci0gICAgbV9hbmltYXRpb25EdXJhdGlvbiA9IHRo
ZW1lKCkuYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcih0aGlzKTsKLSAgICBtX2FuaW1h
dGlvblJlcGVhdEludGVydmFsID0gdGhlbWUoKS5hbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclBy
b2dyZXNzQmFyKHRoaXMpOworICAgIG1fYW5pbWF0aW9uRHVyYXRpb24gPSB0aGVtZSgpLmFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoKnRoaXMpOworICAgIG1fYW5pbWF0aW9uUmVwZWF0
SW50ZXJ2YWwgPSB0aGVtZSgpLmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIo
KnRoaXMpOwogCiAgICAgYm9vbCBhbmltYXRpbmcgPSBzdHlsZSgpLmhhc0FwcGVhcmFuY2UoKSAm
JiBtX2FuaW1hdGlvbkR1cmF0aW9uID4gMDsKICAgICBpZiAoYW5pbWF0aW5nID09IG1fYW5pbWF0
aW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9uIDE3MDQyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmxheW91dAogI2lmIFBMQVRGT1JNKElPUykKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5v
dCBiZSBhZGp1c3Rpbmcgc3R5bGVzIGR1cmluZyBsYXlvdXQuIDxyZGFyOi8vcHJvYmxlbS83Njc1
NDkzPgogICAgIGlmIChpbnB1dEVsZW1lbnQoKS5pc1NlYXJjaEZpZWxkKCkpCi0gICAgICAgIFJl
bmRlclRoZW1lSU9TOjphZGp1c3RSb3VuZEJvcmRlclJhZGl1cyhzdHlsZSgpLCB0aGlzKTsKKyAg
ICAgICAgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKHN0eWxlKCksICp0
aGlzKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAJKHJldmlzaW9uIDE3MDQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgUmVuZGVyVGhl
bWU6OlJlbmRlclRoZW1lKCkKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
KiBlLCBib29sIFVBSGFzQXBwZWFyYW5jZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25z
dCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCit2
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUsIGJvb2wgVUFIYXNBcHBlYXJhbmNlLCBj
b25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29u
c3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikKIHsKICAgICAvLyBGb3JjZSBpbmxpbmUgYW5kIHRh
YmxlIGRpc3BsYXkgc3R5bGVzIHRvIGJlIGlubGluZS1ibG9jayAoZXhjZXB0IGZvciB0YWJsZS0g
d2hpY2ggaXMgYmxvY2spCiAgICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLmFwcGVhcmFuY2Uo
KTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVS
ZXNvbAogICAgIGVsc2UgaWYgKHN0eWxlLmRpc3BsYXkoKSA9PSBDT01QQUNUIHx8IHN0eWxlLmRp
c3BsYXkoKSA9PSBMSVNUX0lURU0gfHwgc3R5bGUuZGlzcGxheSgpID09IFRBQkxFKQogICAgICAg
ICBzdHlsZS5zZXREaXNwbGF5KEJMT0NLKTsKIAotICAgIGlmIChVQUhhc0FwcGVhcmFuY2UgJiYg
aXNDb250cm9sU3R5bGVkKCZzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29s
b3IpKSB7CisgICAgaWYgKFVBSGFzQXBwZWFyYW5jZSAmJiBpc0NvbnRyb2xTdHlsZWQoc3R5bGUs
IGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKSkgewogICAgICAgICBpZiAocGFy
dCA9PSBNZW51bGlzdFBhcnQpIHsKICAgICAgICAgICAgIHN0eWxlLnNldEFwcGVhcmFuY2UoTWVu
dWxpc3RCdXR0b25QYXJ0KTsKICAgICAgICAgICAgIHBhcnQgPSBNZW51bGlzdEJ1dHRvblBhcnQ7
CkBAIC0xOTIsMjUgKzE5MiwyNSBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHls
ZVJlc29sCiAgICAgc3dpdGNoIChzdHlsZS5hcHBlYXJhbmNlKCkpIHsKICNpZiAhVVNFKE5FV19U
SEVNRSkKICAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdENoZWNr
Ym94U3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1
c3RDaGVja2JveFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIFJhZGlv
UGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFJhZGlvU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZz
dHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RSYWRpb1N0eWxlKHN0eWxlUmVzb2x2ZXIs
IHN0eWxlLCBlKTsKICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgogICAgIGNhc2UgU3F1YXJlQnV0
dG9uUGFydDoKICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgogICAgIGNhc2UgQnV0dG9uUGFy
dDoKLSAgICAgICAgcmV0dXJuIGFkanVzdEJ1dHRvblN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5
bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0QnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwg
c3R5bGUsIGUpOwogICAgIGNhc2UgSW5uZXJTcGluQnV0dG9uUGFydDoKLSAgICAgICAgcmV0dXJu
IGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOwor
ICAgICAgICByZXR1cm4gYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwg
c3R5bGUsIGUpOwogI2VuZGlmCiAgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgotICAgICAgICByZXR1
cm4gYWRqdXN0VGV4dEZpZWxkU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAg
ICAgIHJldHVybiBhZGp1c3RUZXh0RmllbGRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7
CiAgICAgY2FzZSBUZXh0QXJlYVBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RUZXh0QXJlYVN0
eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0VGV4
dEFyZWFTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBNZW51bGlzdFBh
cnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RNZW51TGlzdFN0eWxlKCZzdHlsZVJlc29sdmVyLCAm
c3R5bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0TWVudUxpc3RTdHlsZShzdHlsZVJlc29s
dmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6Ci0gICAgICAgIHJl
dHVybiBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCAqZSk7
CisgICAgICAgIHJldHVybiBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKHN0eWxlUmVzb2x2ZXIs
IHN0eWxlLCBlKTsKICAgICBjYXNlIE1lZGlhUGxheUJ1dHRvblBhcnQ6CiAgICAgY2FzZSBNZWRp
YUN1cnJlbnRUaW1lUGFydDoKICAgICBjYXNlIE1lZGlhVGltZVJlbWFpbmluZ1BhcnQ6CkBAIC0y
MTgsMzkgKzIxOCwzOSBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShTdHlsZVJlc29s
CiAgICAgY2FzZSBNZWRpYUV4aXRGdWxsc2NyZWVuQnV0dG9uUGFydDoKICAgICBjYXNlIE1lZGlh
TXV0ZUJ1dHRvblBhcnQ6CiAgICAgY2FzZSBNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lclBhcnQ6
Ci0gICAgICAgIHJldHVybiBhZGp1c3RNZWRpYUNvbnRyb2xTdHlsZSgmc3R5bGVSZXNvbHZlciwg
JnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdE1lZGlhQ29udHJvbFN0eWxlKHN0eWxl
UmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIE1lZGlhU2xpZGVyUGFydDoKICAgICBjYXNl
IE1lZGlhVm9sdW1lU2xpZGVyUGFydDoKICAgICBjYXNlIE1lZGlhRnVsbFNjcmVlblZvbHVtZVNs
aWRlclBhcnQ6CiAgICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKICAgICBjYXNlIFNsaWRl
clZlcnRpY2FsUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoJnN0
eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RTbGlkZXJUcmFj
a1N0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIFNsaWRlclRodW1iSG9y
aXpvbnRhbFBhcnQ6CiAgICAgY2FzZSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydDoKLSAgICAgICAg
cmV0dXJuIGFkanVzdFNsaWRlclRodW1iU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7
CisgICAgICAgIHJldHVybiBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0
eWxlLCBlKTsKICAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVz
dFNlYXJjaEZpZWxkU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJl
dHVybiBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAg
ICBjYXNlIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uUGFydDoKLSAgICAgICAgcmV0dXJuIGFkanVz
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7
CisgICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKHN0eWxl
UmVzb2x2ZXIsIHN0eWxlLCBlKTsKICAgICBjYXNlIFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQ6
Ci0gICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5bGUoJnN0
eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVybiBhZGp1c3RTZWFyY2hGaWVs
ZERlY29yYXRpb25QYXJ0U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogICAgIGNhc2Ug
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5
bGUsIGUpOworICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
blBhcnRTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAgICAgY2FzZSBTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gYWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uU3R5bGUoJnN0eWxlUmVzb2x2ZXIsICZzdHlsZSwgZSk7CisgICAgICAgIHJldHVy
biBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHls
ZSwgZSk7CiAgICAgY2FzZSBQcm9ncmVzc0JhclBhcnQ6Ci0gICAgICAgIHJldHVybiBhZGp1c3RQ
cm9ncmVzc0JhclN0eWxlKCZzdHlsZVJlc29sdmVyLCAmc3R5bGUsIGUpOworICAgICAgICByZXR1
cm4gYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAjaWYg
RU5BQkxFKE1FVEVSX0VMRU1FTlQpCiAgICAgY2FzZSBNZXRlclBhcnQ6CiAgICAgY2FzZSBSZWxl
dmFuY3lMZXZlbEluZGljYXRvclBhcnQ6CiAgICAgY2FzZSBDb250aW51b3VzQ2FwYWNpdHlMZXZl
bEluZGljYXRvclBhcnQ6CiAgICAgY2FzZSBEaXNjcmV0ZUNhcGFjaXR5TGV2ZWxJbmRpY2F0b3JQ
YXJ0OgogICAgIGNhc2UgUmF0aW5nTGV2ZWxJbmRpY2F0b3JQYXJ0OgotICAgICAgICByZXR1cm4g
YWRqdXN0TWV0ZXJTdHlsZSgmc3R5bGVSZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0
dXJuIGFkanVzdE1ldGVyU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogI2VuZGlmCiAj
aWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICBjYXNlIElucHV0U3BlZWNoQnV0dG9uUGFydDoK
LSAgICAgICAgcmV0dXJuIGFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHlsZSgmc3R5bGVS
ZXNvbHZlciwgJnN0eWxlLCBlKTsKKyAgICAgICAgcmV0dXJuIGFkanVzdElucHV0RmllbGRTcGVl
Y2hCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBzdHlsZSwgZSk7CiAjZW5kaWYKICNpZiBFTkFC
TEUoU0VSVklDRV9DT05UUk9MUykKICAgICBjYXNlIEltYWdlQ29udHJvbHNCdXR0b25QYXJ0OgpA
QCAtNjg1LDkgKzY4NSw5IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzQ29udHJvbENvbnRhaW5lcihD
b24KICAgICByZXR1cm4gYXBwZWFyYW5jZSAhPSBDaGVja2JveFBhcnQgJiYgYXBwZWFyYW5jZSAh
PSBSYWRpb1BhcnQ7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmls
bExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAor
Ym9vbCBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQs
IGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChzdHls
ZS0+YXBwZWFyYW5jZSgpKSB7CisgICAgc3dpdGNoIChzdHlsZS5hcHBlYXJhbmNlKCkpIHsKICAg
ICBjYXNlIFB1c2hCdXR0b25QYXJ0OgogICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKICAgICBj
YXNlIERlZmF1bHRCdXR0b25QYXJ0OgpAQCAtNzA0LDkgKzcwNCw5IEBAIGJvb2wgUmVuZGVyVGhl
bWU6OmlzQ29udHJvbFN0eWxlZChjb25zdCAKICAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CiAgICAg
Y2FzZSBUZXh0QXJlYVBhcnQ6CiAgICAgICAgIC8vIFRlc3QgdGhlIHN0eWxlIHRvIHNlZSBpZiB0
aGUgVUEgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIG1hdGNoLgotICAgICAgICByZXR1cm4gKHN0eWxl
LT5ib3JkZXIoKSAhPSBib3JkZXIKLSAgICAgICAgICAgIHx8ICpzdHlsZS0+YmFja2dyb3VuZExh
eWVycygpICE9IGJhY2tncm91bmQKLSAgICAgICAgICAgIHx8IHN0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpICE9IGJhY2tncm91bmRDb2xvcik7
CisgICAgICAgIHJldHVybiAoc3R5bGUuYm9yZGVyKCkgIT0gYm9yZGVyCisgICAgICAgICAgICB8
fCAqc3R5bGUuYmFja2dyb3VuZExheWVycygpICE9IGJhY2tncm91bmQKKyAgICAgICAgICAgIHx8
IHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikg
IT0gYmFja2dyb3VuZENvbG9yKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpAQCAtNzIzLDE1ICs3MjMsMTUgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmVw
YWludFJlY3QoY29ucwogI2VuZGlmCiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6OnN1cHBvcnRzRm9j
dXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6
OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAg
ICByZXR1cm4gKHN0eWxlLT5oYXNBcHBlYXJhbmNlKCkgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAh
PSBUZXh0RmllbGRQYXJ0ICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gVGV4dEFyZWFQYXJ0ICYm
IHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gTWVudWxpc3RCdXR0b25QYXJ0ICYmIHN0eWxlLT5hcHBl
YXJhbmNlKCkgIT0gTGlzdGJveFBhcnQpOworICAgIHJldHVybiAoc3R5bGUuaGFzQXBwZWFyYW5j
ZSgpICYmIHN0eWxlLmFwcGVhcmFuY2UoKSAhPSBUZXh0RmllbGRQYXJ0ICYmIHN0eWxlLmFwcGVh
cmFuY2UoKSAhPSBUZXh0QXJlYVBhcnQgJiYgc3R5bGUuYXBwZWFyYW5jZSgpICE9IE1lbnVsaXN0
QnV0dG9uUGFydCAmJiBzdHlsZS5hcHBlYXJhbmNlKCkgIT0gTGlzdGJveFBhcnQpOwogfQogCiBi
b29sIFJlbmRlclRoZW1lOjpzdGF0ZUNoYW5nZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBDb250
cm9sU3RhdGVzOjpTdGF0ZXMgc3RhdGUpIGNvbnN0CiB7CiAgICAgLy8gRGVmYXVsdCBpbXBsZW1l
bnRhdGlvbiBhc3N1bWVzIHRoZSBjb250cm9scyBkb24ndCByZXNwb25kIHRvIGNoYW5nZXMgaW4g
OmhvdmVyIHN0YXRlCi0gICAgaWYgKHN0YXRlID09IENvbnRyb2xTdGF0ZXM6OkhvdmVyU3RhdGUg
JiYgIXN1cHBvcnRzSG92ZXIoJm8uc3R5bGUoKSkpCisgICAgaWYgKHN0YXRlID09IENvbnRyb2xT
dGF0ZXM6OkhvdmVyU3RhdGUgJiYgIXN1cHBvcnRzSG92ZXIoby5zdHlsZSgpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQXNzdW1lIHByZXNzZWQgc3RhdGUgaXMgb25seSByZXNw
b25kZWQgdG8gaWYgdGhlIGNvbnRyb2wgaXMgZW5hYmxlZC4KQEAgLTkwMiw3ICs5MDIsNyBAQCBi
b29sIFJlbmRlclRoZW1lOjppc0RlZmF1bHQoY29uc3QgUmVuZGVyCiAKICNpZiAhVVNFKE5FV19U
SEVNRSkKIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWU6OmFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHls
ZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgLy8gQSBzdW1tYXJ5IG9mIHRoZSBydWxlcyBmb3Ig
Y2hlY2tib3ggZGVzaWduZWQgdG8gbWF0Y2ggV2luSUU6CiAgICAgLy8gd2lkdGgvaGVpZ2h0IC0g
aG9ub3JlZCAoV2luSUUgYWN0dWFsbHkgc2NhbGVzIGl0cyBjb250cm9sIGZvciBzbWFsbCB3aWR0
aHMsIGJ1dCBsZXRzIGl0IG92ZXJmbG93IGZvciBzbWFsbCBoZWlnaHRzLikKQEAgLTkxMCwxNiAr
OTEwLDE2IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdENoZWNrYm94U3R5bGUoU3QKICAgICBz
ZXRDaGVja2JveFNpemUoc3R5bGUpOwogCiAgICAgLy8gcGFkZGluZyAtIG5vdCBob25vcmVkIGJ5
IFdpbklFLCBuZWVkcyB0byBiZSByZW1vdmVkLgotICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsK
KyAgICBzdHlsZS5yZXNldFBhZGRpbmcoKTsKIAogICAgIC8vIGJvcmRlciAtIGhvbm9yZWQgYnkg
V2luSUUsIGJ1dCBsb29rcyB0ZXJyaWJsZSAoanVzdCBwYWludHMgaW4gdGhlIGNvbnRyb2wgYm94
IGFuZCB0dXJucyBvZmYgdGhlIFdpbmRvd3MgWFAgdGhlbWUpCiAgICAgLy8gZm9yIG5vdywgd2Ug
d2lsbCBub3QgaG9ub3IgaXQuCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUu
cmVzZXRCb3JkZXIoKTsKIAotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAg
c3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RSYWRpb1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVy
JiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAvLyBBIHN1bW1h
cnkgb2YgdGhlIHJ1bGVzIGZvciBjaGVja2JveCBkZXNpZ25lZCB0byBtYXRjaCBXaW5JRToKICAg
ICAvLyB3aWR0aC9oZWlnaHQgLSBob25vcmVkIChXaW5JRSBhY3R1YWxseSBzY2FsZXMgaXRzIGNv
bnRyb2wgZm9yIHNtYWxsIHdpZHRocywgYnV0IGxldHMgaXQgb3ZlcmZsb3cgZm9yIHNtYWxsIGhl
aWdodHMuKQpAQCAtOTI3LDE2ICs5MjcsMTYgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UmFk
aW9TdHlsZShTdHlsZQogICAgIHNldFJhZGlvU2l6ZShzdHlsZSk7CiAKICAgICAvLyBwYWRkaW5n
IC0gbm90IGhvbm9yZWQgYnkgV2luSUUsIG5lZWRzIHRvIGJlIHJlbW92ZWQuCi0gICAgc3R5bGUt
PnJlc2V0UGFkZGluZygpOworICAgIHN0eWxlLnJlc2V0UGFkZGluZygpOwogCiAgICAgLy8gYm9y
ZGVyIC0gaG9ub3JlZCBieSBXaW5JRSwgYnV0IGxvb2tzIHRlcnJpYmxlIChqdXN0IHBhaW50cyBp
biB0aGUgY29udHJvbCBib3ggYW5kIHR1cm5zIG9mZiB0aGUgV2luZG93cyBYUCB0aGVtZSkKICAg
ICAvLyBmb3Igbm93LCB3ZSB3aWxsIG5vdCBob25vciBpdC4KLSAgICBzdHlsZS0+cmVzZXRCb3Jk
ZXIoKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOwogCi0gICAgc3R5bGUtPnNldEJveFNoYWRv
dyhudWxscHRyKTsKKyAgICBzdHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0QnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0
CiB7CiAgICAgLy8gTW9zdCBwbGF0Zm9ybXMgd2lsbCBjb21wbGV0ZWx5IGhvbm9yIGFsbCBDU1Ms
IGFuZCBzbyB3ZSBoYXZlIG5vIG5lZWQgdG8KICAgICAvLyBhZGp1c3QgdGhlIHN0eWxlIGF0IGFs
bCBieSBkZWZhdWx0LiBXZSB3aWxsIHN0aWxsIGFsbG93IHRoZSB0aGVtZSBhIGNyYWNrCkBAIC05
NDQsMjUgKzk0NCwyNSBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZShTdHls
CiAgICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAjZW5k
aWYKIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50Jikg
Y29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWU6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLXZv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RJbnB1dEZpZWxkU3BlZWNoQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBF
bGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlcklucHV0U3BlZWNoOjphZGp1c3RJ
bnB1dEZpZWxkU3BlZWNoQnV0dG9uU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQp
OwogfQpAQCAtOTc0LDEyICs5NzQsMTIgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRJbnB1dEZp
ZWxkU3BlZWNoQgogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKLXZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZXRlclN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewot
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93
KG51bGxwdHIpOwogfQogCi1JbnRTaXplIFJlbmRlclRoZW1lOjptZXRlclNpemVGb3JCb3VuZHMo
Y29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CitJbnRTaXpl
IFJlbmRlclRoZW1lOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXImLCBjb25z
dCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7CiB9
CkBAIC0xMDg1LDE3ICsxMDg1LDE3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlj
a3MoY29uc3QKIH0KICNlbmRpZgogCi1kb3VibGUgUmVuZGVyVGhlbWU6OmFuaW1hdGlvblJlcGVh
dEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAorZG91YmxlIFJl
bmRlclRoZW1lOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclBy
b2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotZG91YmxlIFJlbmRlclRoZW1l
OjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QK
K2RvdWJsZSBSZW5kZXJUaGVtZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5k
ZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWU6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RQcm9ncmVzc0JhclN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCkBA
IC0xMTA0LDQ5ICsxMTA0LDQ5IEBAIEludFJlY3QgUmVuZGVyVGhlbWU6OnByb2dyZXNzQmFyUmVj
dEZvckIKICAgICByZXR1cm4gYm91bmRzOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjpzaG91bGRI
YXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQpIGNvbnN0Citib29s
IFJlbmRlclRoZW1lOjpzaG91bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRFbGVtZW50JiBpbnB1
dEVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNTdGVwcGFibGUo
KSAmJiAhaW5wdXRFbGVtZW50LT5pc1JhbmdlQ29udHJvbCgpOworICAgIHJldHVybiBpbnB1dEVs
ZW1lbnQuaXNTdGVwcGFibGUoKSAmJiAhaW5wdXRFbGVtZW50LmlzUmFuZ2VDb250cm9sKCk7CiB9
CiAKIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWU6OmFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0TWVkaWFDb250cm9s
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAg
YWRqdXN0U2xpZGVyVGh1bWJTaXplKHN0eWxlLCBlbGVtZW50KTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmLCBF
bGVtZW50JikgY29uc3QKIHsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmll
bGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWU6OmFk
anVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQm
KSBjb25zdAogewogfQogCi12b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZERlY29y
YXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0Cit2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0U3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxl
KFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCi12
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNpb24gMTcwNDI4KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcg
QEAgcHVibGljOgogICAgIC8vIG1ldHJpY3MgYW5kIGRlZmF1bHRzIGdpdmVuIHRoZSBjb250ZW50
cyBvZiB0aGUgc3R5bGUuICBUaGlzIGluY2x1ZGVzIHNvcGhpc3RpY2F0ZWQgb3BlcmF0aW9ucyBs
aWtlCiAgICAgLy8gc2VsZWN0aW9uIG9mIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIGZvbnQs
IHRoZSBkaXNhYmxpbmcgb2YgYXBwZWFyYW5jZSB3aGVuIGNlcnRhaW4gb3RoZXIgcHJvcGVydGll
cyBsaWtlCiAgICAgLy8gImJvcmRlciIgYXJlIHNldCwgb3IgaWYgdGhlIGFwcGVhcmFuY2UgaXMg
bm90IHN1cHBvcnRlZCBieSB0aGUgdGhlbWUuCi0gICAgdm9pZCBhZGp1c3RTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50KiwgIGJvb2wgVUFIYXNBcHBlYXJhbmNlLCBj
b25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91
bmRDb2xvcik7CisgICAgdm9pZCBhZGp1c3RTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JiwgIGJvb2wgVUFIYXNBcHBlYXJhbmNlLCBjb25zdCBCb3JkZXJEYXRhJiwg
Y29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcik7CiAKICAgICAv
LyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcGFpbnQgdGhlIHdpZGdldCBhcyBhIGJhY2tncm91
bmQgb2YgdGhlIFJlbmRlck9iamVjdC4gIEEgd2lkZ2V0J3MgZm9yZWdyb3VuZCwgZS5nLiwgdGhl
CiAgICAgLy8gdGV4dCBvZiBhIGJ1dHRvbiwgaXMgYWx3YXlzIHJlbmRlcmVkIGJ5IHRoZSBlbmdp
bmUgaXRzZWxmLiAgVGhlIGJvb2xlYW4gcmV0dXJuIHZhbHVlIGluZGljYXRlcwpAQCAtMTE1LDcg
KzExNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMo
Y29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIC8vIFdo
ZXRoZXIgb3Igbm90IHRoZSBjb250cm9sIGhhcyBiZWVuIHN0eWxlZCBlbm91Z2ggYnkgdGhlIGF1
dGhvciB0byBkaXNhYmxlIHRoZSBuYXRpdmUgYXBwZWFyYW5jZS4KLSAgICB2aXJ0dWFsIGJvb2wg
aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsIGNv
bnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBC
b3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xv
cikgY29uc3Q7CiAKICAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJv
bCB0aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBhbGwuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
Q29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEzMywxMCArMTMzLDEw
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCkgeyB9CiAKICAgICAv
LyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0aGUgZm9jdXMg
cmluZy4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5
bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVu
ZGVyU3R5bGUmKSBjb25zdDsKIAogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUn
cyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCi0g
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJl
bmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIC8vIEEgbWV0aG9kIGFz
a2luZyBpZiB0aGUgcGxhdGZvcm0gaXMgYWJsZSB0byBzaG93IGRhdGFsaXN0IHN1Z2dlc3Rpb25z
IGZvciBhIGdpdmVuIGlucHV0IHR5cGUuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGF0YUxp
c3RVSShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTc1
LDE2ICsxNzUsMTYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KENTU1Zh
bHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIENvbG9yIHN5
c3RlbUNvbG9yKENTU1ZhbHVlSUQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBpbnQgbWluaW11bU1l
bnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gMDsg
fQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXpl
KFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogCi0gICAgdmlydHVhbCBpbnQgcG9wdXBJ
bnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25z
dCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3Ao
UmVuZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJ
bnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiAwOyB9Cisg
ICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlJikgY29u
c3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmln
aHQoUmVuZGVyU3R5bGUmKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgcG9w
dXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUmKSBjb25zdCB7IHJldHVybiAwOyB9Cisg
ICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUmKSBj
b25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBib29sIHBvcHVwT3B0aW9uU3VwcG9ydHNU
ZXh0SW5kZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFBvcHVwTWVu
dVN0eWxlOjpQb3B1cE1lbnVTaXplIHBvcHVwTWVudVNpemUoY29uc3QgUmVuZGVyU3R5bGUqLCBJ
bnRSZWN0JikgY29uc3QgeyByZXR1cm4gUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNpemVOb3Jt
YWw7IH0KKyAgICB2aXJ0dWFsIFBvcHVwTWVudVN0eWxlOjpQb3B1cE1lbnVTaXplIHBvcHVwTWVu
dVNpemUoY29uc3QgUmVuZGVyU3R5bGUmLCBJbnRSZWN0JikgY29uc3QgeyByZXR1cm4gUG9wdXBN
ZW51U3R5bGU6OlBvcHVwTWVudVNpemVOb3JtYWw7IH0KIAogICAgIHZpcnR1YWwgU2Nyb2xsYmFy
Q29udHJvbFNpemUgc2Nyb2xsYmFyQ29udHJvbFNpemVGb3JQYXJ0KENvbnRyb2xQYXJ0KSB7IHJl
dHVybiBSZWd1bGFyU2Nyb2xsYmFyOyB9CiAKQEAgLTE5Miw5ICsxOTIsOSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIDA7IH07CiAKICAg
ICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhl
IHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CisgICAgdmlydHVhbCBkb3Vi
bGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYp
IGNvbnN0OwogICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9y
IHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25G
b3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OworICAgIHZpcnR1YWwgZG91Ymxl
IGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdDsK
ICAgICB2aXJ0dWFsIEludFJlY3QgcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IEludFJlY3QmKSBjb25zdDsKIAogI2lmIEVOQUJMRShWSURFTykKQEAg
LTIxNSw3ICsyMTUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRVRFUl9FTEVN
RU5UKQotICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3QgUmVuZGVy
TWV0ZXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRTaXplIG1ldGVy
U2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciYsIGNvbnN0IEludFJlY3QmKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihDb250cm9sUGFydCkgY29uc3Q7CiAjZW5k
aWYKIApAQCAtMjMxLDcgKzIzMSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdmlydHVhbCBi
b29sIHNob3VsZFNob3dQbGFjZWhvbGRlcldoZW5Gb2N1c2VkKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlU3BpbkJ1dHRvbihIVE1M
SW5wdXRFbGVtZW50JikgY29uc3Q7CiAKICAgICAvLyBGdW5jdGlvbnMgZm9yIDxzZWxlY3Q+IGVs
ZW1lbnRzLgogICAgIHZpcnR1YWwgYm9vbCBkZWxlZ2F0ZXNNZW51TGlzdFJlbmRlcmluZygpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yNjYsMTkgKzI2NiwxOSBAQCBwcm90ZWN0ZWQ6CiAK
ICNpZiAhVVNFKE5FV19USEVNRSkKICAgICAvLyBNZXRob2RzIGZvciBlYWNoIGFwcGVhcmFuY2Ug
dmFsdWUuCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJikgY29uc3QgeyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRS
YWRpb1NpemUoUmVuZGVyU3R5bGUmKSBjb25zdCB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0
b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJT
dHlsZSopIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0
eWxlJikgY29uc3QgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50SW5u
ZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKIApAQCAtMjg2LDE1ICsyODYsMTUg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0
dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b25EZWNvcmF0aW9ucyhjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxl
UmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJldHVybiB0
cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkRGVjb3JhdGlvbnMoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1l
bnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJldHVybiB0cnVl
OyB9CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWFEZWNvcmF0aW9ucyhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJldHVybiB0
cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdERlY29yYXRpb25zKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CiAKQEAgLTMwNSw0MiArMzA1LDQyIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTcXVhcmVCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxFKE1F
VEVSX0VMRU1FTlQpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoU3R5bGVSZXNv
bHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogI2lmIEVOQUJMRShJ
TlBVVF9TUEVFQ0gpCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdElucHV0RmllbGRTcGVlY2hCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IHBhaW50SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHls
ZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTbGlkZXJUaHVtYkRlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29s
IHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlv
blBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
dHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyBy
ZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdE1lZGlhQ29udHJvbFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVk
aWFDb250cm9sU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhT3ZlcmxheVBsYXlCdXR0b24oY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5o
CShyZXZpc2lvbiAxNzA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksOSBAQCBjbGFzcyBSZW5kZXJUaGVt
ZUlPUyA6IHB1YmxpYyBSZW5kZXJUaGVtCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UmVuZGVyVGhlbWU+IGNyZWF0ZSgpOwogCi0gICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBh
ZGRpbmdSaWdodChSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgaW50
IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIHN0YXRpYyB2b2lkIGFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKFJlbmRlclN0eWxlJiwg
UmVuZGVyQm94Kik7CisgICAgc3RhdGljIHZvaWQgYWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoUmVu
ZGVyU3R5bGUmLCBSZW5kZXJCb3gmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KENT
U1ZhbHVlSUQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC01MiwxOSAr
NTIsMTkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9z
aXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0
YSYsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChj
b25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImIGJh
Y2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hT
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3hEZWNvcmF0aW9ucyhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmFkaW9TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvRGVjb3JhdGlvbnMoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRl
OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbkRlY29yYXRpb25z
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQdXNoQnV0dG9uRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUmKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludEZpbGVVcGxvYWRJY29uRGVj
b3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJP
YmplY3QmIGJ1dHRvblJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jiwg
SWNvbiosIEZpbGVVcGxvYWREZWNvcmF0aW9ucykgb3ZlcnJpZGU7CiAKQEAgLTc0LDE2ICs3NCwx
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5
bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29s
dmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRl
clRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUo
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYkRlY29yYXRpb25zKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlk
ZTsKIAogICAgIC8vIFJldHVybnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5pbWF0aW9u
IGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVh
dEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFy
KFJlbmRlclByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgLy8gUmV0dXJucyB0aGUgZHVy
YXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFs
IGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQ
cm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVh
bCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCkBAIC05Miw3ICs5Miw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIGludCBzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVyKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0
dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Qg
b3ZlcnJpZGU7CkBAIC0xMDMsNyArMTAzLDcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKICAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxl
bWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlU3BpbkJ1
dHRvbihIVE1MSW5wdXRFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoVklE
RU8pCiAgICAgdmlydHVhbCBTdHJpbmcgbWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKSBvdmVycmlk
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJl
dmlzaW9uIDE3MDQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUwLDE1ICszNTAsMTUgQEAgRmxvYXRSZWN0IFJlbmRl
clRoZW1lSU9TOjphZGRSb3VuZGVkQm9yZAogICAgIHJldHVybiBib3JkZXIucmVjdCgpOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RDaGVja2JveFN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUlP
Uzo6YWRqdXN0Q2hlY2tib3hTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxl
LCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2lj
T3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndp
ZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIExlbmd0aCBsZW5ndGggPSBMZW5ndGgoc3RhdGljX2Nhc3Q8
aW50PihjZWlsZihzdGQ6Om1heChzdHlsZS0+Zm9udFNpemUoKSwgMTApKSksIEZpeGVkKTsKKyAg
ICBMZW5ndGggbGVuZ3RoID0gTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3RkOjptYXgo
c3R5bGUuZm9udFNpemUoKSwgMTApKSksIEZpeGVkKTsKICAgICAKLSAgICBzdHlsZS0+c2V0V2lk
dGgobGVuZ3RoKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KGxlbmd0aCk7CisgICAgc3R5bGUuc2V0
V2lkdGgobGVuZ3RoKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQobGVuZ3RoKTsKIH0KIAogc3RhdGlj
IENHUG9pbnQgc2hvcnRlbmVkKENHUG9pbnQgc3RhcnQsIENHUG9pbnQgZW5kLCBmbG9hdCB3aWR0
aCkKQEAgLTQzNCwyNyArNDM0LDI3IEBAIGludCBSZW5kZXJUaGVtZUlPUzo6YmFzZWxpbmVQb3Np
dGlvbihjb24KICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24oYm94KTsK
IH0KIAotYm9vbCBSZW5kZXJUaGVtZUlPUzo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5ZXImIGJh
Y2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Citib29sIFJlbmRl
clRoZW1lSU9TOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25z
dCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3Qg
Q29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKIHsKICAgICAvLyBCdXR0b25zIGFuZCBNZW51
bGlzdEJ1dHRvbnMgYXJlIHN0eWxlZCBpZiB0aGV5IGNvbnRhaW4gYSBiYWNrZ3JvdW5kIGltYWdl
LgotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0IHx8IHN0eWxl
LT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQotICAgICAgICByZXR1cm4gIXN0
eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFs
cGhhKCkgfHwgc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKS0+aGFzSW1hZ2UoKTsKKyAgICBpZiAo
c3R5bGUuYXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisgICAgICAgIHJldHVybiAhc3R5bGUudmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5hbHBoYSgpIHx8IHN0eWxl
LmJhY2tncm91bmRMYXllcnMoKS0+aGFzSW1hZ2UoKTsKIAotICAgIGlmIChzdHlsZS0+YXBwZWFy
YW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0QXJl
YVBhcnQpCi0gICAgICAgIHJldHVybiAqc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNr
Z3JvdW5kOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkUGFydCB8fCBz
dHlsZS5hcHBlYXJhbmNlKCkgPT0gVGV4dEFyZWFQYXJ0KQorICAgICAgICByZXR1cm4gKnN0eWxl
LmJhY2tncm91bmRMYXllcnMoKSAhPSBiYWNrZ3JvdW5kOwogCiAgICAgcmV0dXJuIFJlbmRlclRo
ZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dyb3Vu
ZENvbG9yKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0UmFkaW9TdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVJT1M6OmFkanVzdFJhZGlvU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0lu
dHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgaWYgKCFz
dHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhlaWdodCgpLmlzQXV0
bygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMZW5ndGggbGVuZ3RoID0gTGVuZ3RoKHN0YXRp
Y19jYXN0PGludD4oY2VpbGYoc3RkOjptYXgoc3R5bGUtPmZvbnRTaXplKCksIDEwKSkpLCBGaXhl
ZCk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKGxlbmd0aCk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChs
ZW5ndGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSYWRpdXMoSW50U2l6ZShsZW5ndGgudmFsdWUo
KSAvIDIuMGYsIGxlbmd0aC52YWx1ZSgpIC8gMi4wZikpOworICAgIExlbmd0aCBsZW5ndGggPSBM
ZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihjZWlsZihzdGQ6Om1heChzdHlsZS5mb250U2l6ZSgpLCAx
MCkpKSwgRml4ZWQpOworICAgIHN0eWxlLnNldFdpZHRoKGxlbmd0aCk7CisgICAgc3R5bGUuc2V0
SGVpZ2h0KGxlbmd0aCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmFkaXVzKEludFNpemUobGVuZ3Ro
LnZhbHVlKCkgLyAyLjBmLCBsZW5ndGgudmFsdWUoKSAvIDIuMGYpKTsKIH0KIAogYm9vbCBSZW5k
ZXJUaGVtZUlPUzo6cGFpbnRSYWRpb0RlY29yYXRpb25zKGNvbnN0IFJlbmRlck9iamVjdCYgYm94
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTUx
NiwyMSArNTE2LDIxIEBAIGNvbnN0IGZsb2F0IE1lbnVMaXN0QXJyb3dXaWR0aCA9IDc7CiBjb25z
dCBmbG9hdCBNZW51TGlzdEFycm93SGVpZ2h0ID0gNjsKIGNvbnN0IGZsb2F0IE1lbnVMaXN0QnV0
dG9uUGFkZGluZ1JpZ2h0ID0gMTk7CiAKLWludCBSZW5kZXJUaGVtZUlPUzo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVJ
T1M6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAog
ewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKLSAg
ICAgICAgcmV0dXJuIE1lbnVMaXN0QnV0dG9uUGFkZGluZ1JpZ2h0ICsgc3R5bGUtPmJvcmRlclRv
cFdpZHRoKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBh
cnQpCisgICAgICAgIHJldHVybiBNZW51TGlzdEJ1dHRvblBhZGRpbmdSaWdodCArIHN0eWxlLmJv
cmRlclRvcFdpZHRoKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6
OmFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyQm94KiBi
b3gpCit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RSb3VuZEJvcmRlclJhZGl1cyhSZW5kZXJT
dHlsZSYgc3R5bGUsIFJlbmRlckJveCYgYm94KQogewogICAgIGlmIChzdHlsZS5hcHBlYXJhbmNl
KCkgPT0gTm9Db250cm9sUGFydCB8fCBzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCktPmhhc0ltYWdl
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGJlIHJl
bHlpbmcgb24gYm9yZGVyIHJhZGl1cyBmb3IgdGhlIGFwcGVhcmFuY2Ugb2Ygb3VyIGNvbnRyb2xz
IDxyZGFyOi8vcHJvYmxlbS83Njc1NDkzPgotICAgIExlbmd0aCByYWRpdXNXaWR0aChzdGF0aWNf
Y2FzdDxpbnQ+KHN0ZDo6bWluKGJveC0+d2lkdGgoKSwgYm94LT5oZWlnaHQoKSkgLyAyLjApLCBG
aXhlZCk7Ci0gICAgTGVuZ3RoIHJhZGl1c0hlaWdodChzdGF0aWNfY2FzdDxpbnQ+KGJveC0+aGVp
Z2h0KCkgLyAyLjApLCBGaXhlZCk7CisgICAgTGVuZ3RoIHJhZGl1c1dpZHRoKHN0YXRpY19jYXN0
PGludD4oc3RkOjptaW4oYm94LndpZHRoKCksIGJveC5oZWlnaHQoKSkgLyAyLjApLCBGaXhlZCk7
CisgICAgTGVuZ3RoIHJhZGl1c0hlaWdodChzdGF0aWNfY2FzdDxpbnQ+KGJveC5oZWlnaHQoKSAv
IDIuMCksIEZpeGVkKTsKICAgICBzdHlsZS5zZXRCb3JkZXJSYWRpdXMoTGVuZ3RoU2l6ZShyYWRp
dXNXaWR0aCwgcmFkaXVzSGVpZ2h0KSk7CiB9CiAKQEAgLTYxNiwxMCArNjE2LDggQEAgdm9pZCBS
ZW5kZXJUaGVtZUlPUzo6YWRqdXN0TWVudUxpc3RCdXR0bwogICAgIC8vICItd2Via2l0LWFwcGVh
cmFuY2U6IG1lbnVsaXN0LWJ1dHRvbiIuCiAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1M
TmFtZXM6OnNlbGVjdFRhZykgJiYgIWVsZW1lbnQuaGFzQXR0cmlidXRlKEhUTUxOYW1lczo6bXVs
dGlwbGVBdHRyKSkKICAgICAgICAgYWRqdXN0U2VsZWN0TGlzdEJ1dHRvblN0eWxlKHN0eWxlLCBl
bGVtZW50KTsKLSAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1
dFRhZykpIHsKLSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KCZlbGVtZW50KTsKLSAgICAgICAgYWRqdXN0SW5wdXRF
bGVtZW50QnV0dG9uU3R5bGUoc3R5bGUsICppbnB1dEVsZW1lbnQpOwotICAgIH0KKyAgICBlbHNl
IGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpCisgICAgICAgIGFk
anVzdElucHV0RWxlbWVudEJ1dHRvblN0eWxlKHN0eWxlLCBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50Jj4oZWxlbWVudCkpOwogfQogCiBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludE1lbnVM
aXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC03MTQsMTQgKzcxMiwx
NCBAQCBjb25zdCBDR0Zsb2F0IGtUcmFja1RoaWNrbmVzcyA9IDQuMDsKIGNvbnN0IENHRmxvYXQg
a1RyYWNrUmFkaXVzID0ga1RyYWNrVGhpY2tuZXNzIC8gMi4wOwogY29uc3QgaW50IGtEZWZhdWx0
U2xpZGVyVGh1bWJTaXplID0gMTY7CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNsaWRl
clRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCogZWxlbWVudCkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdFNsaWRl
clRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYgc2VsZWN0b3IsIFJlbmRlclN0eWxlJiBzdHlsZSwg
RWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVy
VHJhY2tTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwogCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBub3QgYmUgcmVseWluZyBvbiBib3JkZXIgcmFkaXVzIGZvciB0aGUgYXBwZWFyYW5j
ZSBvZiBvdXIgY29udHJvbHMgPHJkYXI6Ly9wcm9ibGVtLzc2NzU0OTM+CiAgICAgTGVuZ3RoIHJh
ZGl1c1dpZHRoKHN0YXRpY19jYXN0PGludD4oa1RyYWNrUmFkaXVzKSwgRml4ZWQpOwogICAgIExl
bmd0aCByYWRpdXNIZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihrVHJhY2tSYWRpdXMpLCBGaXhlZCk7
Ci0gICAgc3R5bGUtPnNldEJvcmRlclJhZGl1cyhMZW5ndGhTaXplKHJhZGl1c1dpZHRoLCByYWRp
dXNIZWlnaHQpKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJSYWRpdXMoTGVuZ3RoU2l6ZShyYWRpdXNX
aWR0aCwgcmFkaXVzSGVpZ2h0KSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xp
ZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtODAyLDIwICs4MDAsMjAgQEAgYm9vbCBSZW5k
ZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUcmFjayhjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ICYmIHN0eWxl
LT5hcHBlYXJhbmNlKCkgIT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCisgICAgaWYgKHN0eWxl
LmFwcGVhcmFuY2UoKSAhPSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ICYmIHN0eWxlLmFwcGVh
cmFuY2UoKSAhPSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gRW5mb3JjZSAiYm9yZGVyLXJhZGl1czogNTAlIi4KICAgICBMZW5ndGggbGVuZ3RoKDUw
LjBmLCBQZXJjZW50KTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmFkaXVzKExlbmd0aFNpemUobGVu
Z3RoLCBsZW5ndGgpKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJSYWRpdXMoTGVuZ3RoU2l6ZShsZW5n
dGgsIGxlbmd0aCkpOwogCiAgICAgLy8gRW5mb3JjZSBhIDE2eDE2IHNpemUgaWYgbm8gc2l6ZSBp
cyBwcm92aWRlZC4KLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSB8
fCBzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpIHsKKyAgICBpZiAoc3R5bGUud2lkdGgoKS5pc0lu
dHJpbnNpY09yQXV0bygpIHx8IHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKSB7CiAgICAgICAgIExl
bmd0aCBsZW5ndGggPSBMZW5ndGgoa0RlZmF1bHRTbGlkZXJUaHVtYlNpemUsIEZpeGVkKTsKLSAg
ICAgICAgc3R5bGUtPnNldFdpZHRoKGxlbmd0aCk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQo
bGVuZ3RoKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgobGVuZ3RoKTsKKyAgICAgICAgc3R5bGUu
c2V0SGVpZ2h0KGxlbmd0aCk7CiAgICAgfQogfQogCkBAIC04MzYsMTIgKzgzNCwxMiBAQCBib29s
IFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRodW1iRGVjCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1kb3VibGUgUmVuZGVyVGhlbWVJT1M6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJv
Z3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAorZG91YmxlIFJlbmRlclRoZW1lSU9TOjph
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29u
c3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotZG91YmxlIFJlbmRlclRoZW1lSU9TOjphbmltYXRp
b25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKK2RvdWJsZSBS
ZW5kZXJUaGVtZUlPUzo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC05NDIsMjEgKzk0MCwxOCBAQCBp
bnQgUmVuZGVyVGhlbWVJT1M6OnNsaWRlclRpY2tPZmZzZXRGcm9tCiB9CiAjZW5kaWYKIAotdm9p
ZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZUlPUzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewog
ICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwg
ZWxlbWVudCk7CiAKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghc3R5bGUtPmhhc0JvcmRlcigpKQorICAgIGlmICghc3R5bGUuaGFzQm9yZGVyKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlbmRlckJveCogYm94ID0gZWxlbWVudC0+cmVuZGVyQm94KCk7
CisgICAgUmVuZGVyQm94KiBib3ggPSBlbGVtZW50LnJlbmRlckJveCgpOwogICAgIGlmICghYm94
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhZGp1c3RSb3VuZEJvcmRlclJhZGl1cygqc3R5bGUs
IGJveCk7CisgICAgYWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoc3R5bGUsICpib3gpOwogfQogCiBi
b29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbnMoY29uc3QgUmVu
ZGVyT2JqZWN0JiBib3gsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQpAQCAtOTY0LDcgKzk1OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2Vh
cmNoRmllbGREZWMKICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGREZWNvcmF0aW9ucyhib3gsIHBh
aW50SW5mbywgcmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0
eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZShT
dHlsZVJlc29sdmVyJiBzZWxlY3RvciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVt
ZW50KSBjb25zdAogewogICAgIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZShzZWxlY3Rv
ciwgc3R5bGUsIGVsZW1lbnQpOwogCkBAIC05NzMsMTcgKzk2OCwxNCBAQCB2b2lkIFJlbmRlclRo
ZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZShTCiAgICAgLy8gU2luY2UgdGhlIGVsZW1lbnQgbWln
aHQgbm90IGJlIGluIGEgZG9jdW1lbnQsIGp1c3QgcGFzcyBudWxscHRyIGZvciB0aGUgcm9vdCBl
bGVtZW50IHN0eWxlCiAgICAgLy8gYW5kIHRoZSByZW5kZXIgdmlldy4KICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGVtU2l6ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMS4wLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7Ci0gICAgaW50IHBpeGVscyA9IGVtU2l6ZS0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoc3R5bGUsIG51bGxwdHIs
IG51bGxwdHIsIDEuMCwgZmFsc2UpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JveChMZW5ndGhC
b3goMCwgcGl4ZWxzLCAwLCBwaXhlbHMpKTsKLQotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAg
cmV0dXJuOworICAgIGludCBwaXhlbHMgPSBlbVNpemUtPmNvbXB1dGVMZW5ndGg8aW50PihDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCZzdHlsZSwgbnVsbHB0ciwgbnVsbHB0ciwgMS4wLCBmYWxz
ZSkpOworICAgIHN0eWxlLnNldFBhZGRpbmdCb3goTGVuZ3RoQm94KDAsIHBpeGVscywgMCwgcGl4
ZWxzKSk7CiAKLSAgICBSZW5kZXJCb3gqIGJveCA9IGVsZW1lbnQtPnJlbmRlckJveCgpOworICAg
IFJlbmRlckJveCogYm94ID0gZWxlbWVudC5yZW5kZXJCb3goKTsKICAgICBpZiAoIWJveCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYWRqdXN0Um91bmRCb3JkZXJSYWRpdXMoKnN0eWxlLCBib3gp
OworICAgIGFkanVzdFJvdW5kQm9yZGVyUmFkaXVzKHN0eWxlLCAqYm94KTsKIH0KIAogYm9vbCBS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3Qm
IGJveCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCkBA
IC0xMDA2LDE0ICs5OTgsMTQgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQdXNoQnV0dG9u
RGVjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUlPUzo6c2V0QnV0
dG9uU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lSU9TOjpz
ZXRCdXR0b25TaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUg
d2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5n
IHRvIGRvLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAh
c3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJp
bnNpY09yQXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gVXNlIHRoZSBmb250IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRyaW5zaWMg
d2lkdGggb2YgdGhlIGNvbnRyb2wuCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc3RhdGlj
X2Nhc3Q8aW50PihDb250cm9sQmFzZUhlaWdodCAvIENvbnRyb2xCYXNlRm9udFNpemUgKiBzdHls
ZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCkpLCBGaXhlZCkpOworICAgIHN0eWxl
LnNldEhlaWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihDb250cm9sQmFzZUhlaWdodCAvIENv
bnRyb2xCYXNlRm9udFNpemUgKiBzdHlsZS5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUo
KSksIEZpeGVkKSk7CiB9CiAKIGNvbnN0IGludCBrVGh1bWJuYWlsQm9yZGVyU3Ryb2tlV2lkdGgg
PSAxOwpAQCAtMTA4Miw3ICsxMDc0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6c2hvdWxkU2hv
d1BsYWNlaG9sZAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFJlbmRlclRoZW1lSU9TOjpz
aG91bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KikgY29uc3QKK2Jvb2wgUmVuZGVy
VGhlbWVJT1M6OnNob3VsZEhhdmVTcGluQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQmKSBjb25zdAog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5oCShyZXZpc2lvbiAxNzA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVy
T2JqZWN0JiwgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250
cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZp
bGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25z
dCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Qgb3Zl
cnJpZGU7CkBAIC02OSwzNSArNjksMzUgQEAgcHVibGljOgogICAgIC8vIFN5c3RlbSBmb250cy4K
ICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24m
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUo
UmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVu
dUxpc3RTaXplKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxF
TUVOVCkKICAgICB2aXJ0dWFsIEludFNpemUgc2xpZGVyVGlja1NpemUoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIGludCBzbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVyKCkgY29u
c3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRk
aW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgaW50IHBv
cHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSopIGNvbnN0
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJl
bmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBQb3B1cE1lbnVTdHlsZTo6
UG9wdXBNZW51U2l6ZSBwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0eWxlKiwgSW50UmVjdCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVm
dChSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgaW50IHBvcHVwSW50
ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0
eWxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBQb3B1cE1lbnVTdHlsZTo6UG9wdXBN
ZW51U2l6ZSBwb3B1cE1lbnVTaXplKGNvbnN0IFJlbmRlclN0eWxlJiwgSW50UmVjdCYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwogCiAgICAgdmlydHVhbCBib29sIHBvcHNNZW51QnlBcnJvd0tleXMoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKLSAgICB2
aXJ0dWFsIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29u
c3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNp
emVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXImLCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWV0ZXIoY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0KSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgog
CiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmltYXRpb24gZm9y
IHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50
ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVu
ZGVyUHJvZ3Jlc3MmKSBjb25zdCBvdmVycmlkZTsKICAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlv
biBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHZpcnR1YWwgZG91
YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dy
ZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBJbnRS
ZWN0IHByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJ
bnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9y
KENTU1ZhbHVlSUQpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTIzLDM5ICsxMjMsMzkgQEAgcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NlbGVjdGlvbkZvcmVncm91bmRDb2xvcnMo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBib29sIHBh
aW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0
QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
dmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNz
QmFyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAg
IHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNr
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYs
IEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmll
bGRDYW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVj
b3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9u
UGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVs
ZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMTcyLDE0ICsx
NzIsMTQgQEAgcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KGNv
bnN0IFJlbmRlck9iamVjdCYgaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0JiBwYXJ0
UmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0JikgY29u
c3Q7CiAKICAgICAvLyBHZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIGZvbnQuIFVz
ZWQgYnkgc29tZSBvZiB0aGUgY29udHJvbHMgKGxpa2UgYnV0dG9ucykuCi0gICAgTlNDb250cm9s
U2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICBOU0NvbnRy
b2xTaXplIGNvbnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSopIGNvbnN0OworICAg
IE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlJikgY29uc3Q7Cisg
ICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmKSBj
b25zdDsKICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yQ2VsbChOU0NlbGwqLCBjb25z
dCBJbnRTaXplKiBzaXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVs
ID0gMS4wZikgY29uc3Q7CiAgICAgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBjb25zdCBJ
bnRTaXplKiBzaXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0g
MS4wZik7Ci0gICAgdm9pZCBzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRT
aXplKiBzaXplcykgY29uc3Q7Ci0gICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJTdHlsZSos
IGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKLSAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1G
b250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAgIHZvaWQg
c2V0Rm9udEZyb21Db250cm9sU2l6ZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBOU0Nv
bnRyb2xTaXplKSBjb25zdDsKKyAgICB2b2lkIHNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSYs
IGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVGb3JGb250KFJl
bmRlclN0eWxlJiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAgIEludFNpemUgc2l6
ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7
CisgICAgdm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJT
dHlsZSYsIE5TQ29udHJvbFNpemUpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVDaGVja2VkU3Rh
dGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Jik7CiAgICAgdm9pZCB1cGRhdGVFbmFibGVk
U3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Jik7CkBAIC0xOTksNyArMTk5LDcgQEAg
cHJpdmF0ZToKICAgICBjb25zdCBJbnRTaXplKiBjYW5jZWxCdXR0b25TaXplcygpIGNvbnN0Owog
ICAgIGNvbnN0IEludFNpemUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0OwogICAgIHZvaWQg
c2V0U2VhcmNoQ2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmKTsK
LSAgICB2b2lkIHNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZv
aWQgc2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlJikgY29uc3Q7CiAKICAgICBOU1BvcFVw
QnV0dG9uQ2VsbCAqcG9wdXBCdXR0b24oKSBjb25zdDsKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCAq
c2VhcmNoKCkgY29uc3Q7CkBAIC0yMTAsMTAgKzIxMCwxMCBAQCBwcml2YXRlOgogCiAjaWYgRU5B
QkxFKE1FVEVSX0VMRU1FTlQpCiAgICAgTlNMZXZlbEluZGljYXRvclN0eWxlIGxldmVsSW5kaWNh
dG9yU3R5bGVGb3IoQ29udHJvbFBhcnQpIGNvbnN0OwotICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxs
ICpsZXZlbEluZGljYXRvckZvcihjb25zdCBSZW5kZXJNZXRlciopIGNvbnN0OworICAgIE5TTGV2
ZWxJbmRpY2F0b3JDZWxsICpsZXZlbEluZGljYXRvckZvcihjb25zdCBSZW5kZXJNZXRlciYpIGNv
bnN0OwogI2VuZGlmCiAKLSAgICBpbnQgbWluaW11bVByb2dyZXNzQmFySGVpZ2h0KFJlbmRlclN0
eWxlKikgY29uc3Q7CisgICAgaW50IG1pbmltdW1Qcm9ncmVzc0JhckhlaWdodChSZW5kZXJTdHls
ZSYpIGNvbnN0OwogICAgIGNvbnN0IEludFNpemUqIHByb2dyZXNzQmFyU2l6ZXMoKSBjb25zdDsK
ICAgICBjb25zdCBpbnQqIHByb2dyZXNzQmFyTWFyZ2lucyhOU0NvbnRyb2xTaXplKSBjb25zdDsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2
aXNpb24gMTcwNDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01OTksMTcgKzU5OSwxNyBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjp1c2VzVGVzdE1vZGVGb2N1c1JpCiAgICAgcmV0dXJuIFdlYkNvcmU6OnVzZXNUZXN0TW9k
ZUZvY3VzUmluZ0NvbG9yKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OmlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwK
K2Jvb2wgUmVuZGVyVGhlbWVNYWM6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBi
YWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0g
VGV4dEZpZWxkUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IFRleHRBcmVhUGFydCB8fCBz
dHlsZS0+YXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm4gc3R5bGUt
PmJvcmRlcigpICE9IGJvcmRlcjsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFRleHRG
aWVsZFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IFRleHRBcmVhUGFydCB8fCBzdHlsZS5h
cHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybiBzdHlsZS5ib3JkZXIo
KSAhPSBib3JkZXI7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBob3JyaWJsZSwgYnV0IHRoZXJl
IGlzIG5vdCBtdWNoIGVsc2UgdGhhdCBjYW4gYmUgZG9uZS4gIE1lbnUgbGlzdHMgY2Fubm90IGRy
YXcgcHJvcGVybHkgd2hlbgogICAgIC8vIHNjYWxlZC4gIFRoZXkgY2FuJ3QgcmVhbGx5IGRyYXcg
cHJvcGVybHkgd2hlbiB0cmFuc2Zvcm1lZCBlaXRoZXIuICBXZSBjYW4ndCBkZXRlY3QgdGhlIHRy
YW5zZm9ybSBjYXNlIGF0IHN0eWxlCiAgICAgLy8gYWRqdXN0bWVudCB0aW1lIHNvIHRoYXQgd2ls
bCBqdXN0IGhhdmUgdG8gc3RheSBicm9rZW4uICBXZSBjYW4gaG93ZXZlciBkZXRlY3QgdGhhdCB3
ZSdyZSB6b29taW5nLiAgSWYgem9vbWluZwogICAgIC8vIGlzIGluIGVmZmVjdCB3ZSB0cmVhdCBp
dCBsaWtlIHRoZSBjb250cm9sIGlzIHN0eWxlZC4KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdFBhcnQgJiYgc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSAxLjBmKQorICAg
IGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0ICYmIHN0eWxlLmVmZmVjdGl2
ZVpvb20oKSAhPSAxLjBmKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBSZW5k
ZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tn
cm91bmRDb2xvcik7CkBAIC03NDMsOSArNzQzLDkgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6Y29u
dHJvbFN1cHBvcnRzVGludAogICAgIHJldHVybiB0cnVlOwogfQogCi1OU0NvbnRyb2xTaXplIFJl
bmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAorTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpemVGb3JGb250KFJlbmRl
clN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNp
emUoKTsKKyAgICBpbnQgZm9udFNpemUgPSBzdHlsZS5mb250U2l6ZSgpOwogICAgIGlmIChmb250
U2l6ZSA+PSAxNikKICAgICAgICAgcmV0dXJuIE5TUmVndWxhckNvbnRyb2xTaXplOwogICAgIGlm
IChmb250U2l6ZSA+PSAxMSkKQEAgLTc3MywzNSArNzczLDM1IEBAIHZvaWQgUmVuZGVyVGhlbWVN
YWM6OnNldENvbnRyb2xTaXplKE5TQ2UKICAgICAgICAgW2NlbGwgc2V0Q29udHJvbFNpemU6c2l6
ZV07CiB9CiAKLUludFNpemUgUmVuZGVyVGhlbWVNYWM6OnNpemVGb3JGb250KFJlbmRlclN0eWxl
KiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1l
TWFjOjpzaXplRm9yRm9udChSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVz
KSBjb25zdAogewotICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKKyAg
ICBpZiAoc3R5bGUuZWZmZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKICAgICAgICAgSW50U2l6ZSBy
ZXN1bHQgPSBzaXplc1tjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpXTsKLSAgICAgICAgcmV0dXJu
IEludFNpemUocmVzdWx0LndpZHRoKCkgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpLCByZXN1bHQu
aGVpZ2h0KCkgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgcmV0dXJuIEludFNp
emUocmVzdWx0LndpZHRoKCkgKiBzdHlsZS5lZmZlY3RpdmVab29tKCksIHJlc3VsdC5oZWlnaHQo
KSAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgfQogICAgIHJldHVybiBzaXplc1tjb250
cm9sU2l6ZUZvckZvbnQoc3R5bGUpXTsKIH0KIAotSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6c2l6
ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykg
Y29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVNYWM6OnNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxl
LT5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikgeworICAgIGlmIChzdHlsZS5lZmZlY3RpdmVab29t
KCkgIT0gMS4wZikgewogICAgICAgICBJbnRTaXplIHJlc3VsdCA9IHNpemVzW2NvbnRyb2xTaXpl
Rm9yU3lzdGVtRm9udChzdHlsZSldOwotICAgICAgICByZXR1cm4gSW50U2l6ZShyZXN1bHQud2lk
dGgoKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCksIHJlc3VsdC5oZWlnaHQoKSAqIHN0eWxlLT5l
ZmZlY3RpdmVab29tKCkpOworICAgICAgICByZXR1cm4gSW50U2l6ZShyZXN1bHQud2lkdGgoKSAq
IHN0eWxlLmVmZmVjdGl2ZVpvb20oKSwgcmVzdWx0LmhlaWdodCgpICogc3R5bGUuZWZmZWN0aXZl
Wm9vbSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHNpemVzW2NvbnRyb2xTaXplRm9yU3lzdGVtRm9u
dChzdHlsZSldOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTaXplRnJvbUZvbnQoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVNYWM6OnNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEludFNp
emUqIHNpemVzKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBDaGVjayBpcyBmbGF3ZWQsIHNpbmNl
IGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8gYWNjb3VudC4KICAgICBJ
bnRTaXplIHNpemUgPSBzaXplRm9yRm9udChzdHlsZSwgc2l6ZXMpOwotICAgIGlmIChzdHlsZS0+
d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmIHNpemUud2lkdGgoKSA+IDApCi0gICAgICAg
IHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIGlmIChz
dHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDApCi0gICAgICAgIHN0
eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgaWYgKHN0
eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndpZHRoKCkgPiAwKQorICAg
ICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIGlm
IChzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4gMCkKKyAgICAgICAg
c3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi12b2lk
IFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0CiB7CiAg
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250RGVzY3JpcHRpb24u
c2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CkBAIC04MDksMTkgKzgwOSwxOSBAQCB2b2lkIFJlbmRl
clRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTCiAKICAgICBOU0ZvbnQqIGZvbnQgPSBbTlNG
b250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXpl
OmNvbnRyb2xTaXplXV07CiAgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShbZm9udCB3
ZWJDb3JlRmFtaWx5TmFtZV0pOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
W2ZvbnQgcG9pbnRTaXplXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOwotICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFtmb250IHBv
aW50U2l6ZV0gKiBzdHlsZS5lZmZlY3RpdmVab29tKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRTcGVjaWZpZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS5lZmZlY3RpdmVab29tKCkp
OwogCiAgICAgLy8gUmVzZXQgbGluZSBoZWlnaHQKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdo
dChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAKLSAgICBpZiAoc3R5bGUtPnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKQotICAgICAgICBzdHlsZS0+Zm9udCgp
LnVwZGF0ZSgwKTsKKyAgICBpZiAoc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbikpCisgICAgICAgIHN0eWxlLmZvbnQoKS51cGRhdGUoMCk7CiB9CiAKLU5TQ29udHJvbFNp
emUgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0CitOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZv
clN5c3RlbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGludCBmb250U2l6
ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGludCBmb250U2l6ZSA9IHN0eWxlLmZvbnRTaXpl
KCk7CiAgICAgaWYgKGZvbnRTaXplID49IFtOU0ZvbnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9s
U2l6ZTpOU1JlZ3VsYXJDb250cm9sU2l6ZV0pCiAgICAgICAgIHJldHVybiBOU1JlZ3VsYXJDb250
cm9sU2l6ZTsKICAgICBpZiAoZm9udFNpemUgPj0gW05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNv
bnRyb2xTaXplOk5TU21hbGxDb250cm9sU2l6ZV0pCkBAIC04NDUsNyArODQ1LDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQoY29ucwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50
JikgY29uc3QKIHsKIH0KIApAQCAtODY3LDcgKzg2Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6
OnBhaW50VGV4dEFyZWEoY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVNYWM6OmFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0QXJlYVN0
eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdAogewogfQog
CkBAIC05MTMsNyArOTEzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdChj
b25zdAogCiAgICAgLy8gTm93IGluZmxhdGUgaXQgdG8gYWNjb3VudCBmb3IgdGhlIHNoYWRvdy4K
ICAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0ID0gcmVjdDsKLSAgICBpZiAocmVjdC53aWR0aCgp
ID49IG1pbmltdW1NZW51TGlzdFNpemUoJnJlbmRlcmVyLnN0eWxlKCkpKQorICAgIGlmIChyZWN0
LndpZHRoKCkgPj0gbWluaW11bU1lbnVMaXN0U2l6ZShyZW5kZXJlci5zdHlsZSgpKSkKICAgICAg
ICAgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZVJlY3QocmVjdCwgc2l6ZSwgcG9wdXBCdXR0b25NYXJn
aW5zKCksIHpvb21MZXZlbCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKQEAgLTk0Myw5ICs5NDMsOSBAQCBib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludE1lbnVMaXN0KGNvbnN0CiAKICNpZiBFTkFCTEUoTUVURVJfRUxFTUVO
VCkKIAotSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJl
bmRlck1ldGVyKiByZW5kZXJNZXRlciwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAorSW50
U2l6ZSBSZW5kZXJUaGVtZU1hYzo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVy
JiByZW5kZXJNZXRlciwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAogewotICAgIGlmIChO
b0NvbnRyb2xQYXJ0ID09IHJlbmRlck1ldGVyLT5zdHlsZSgpLmFwcGVhcmFuY2UoKSkKKyAgICBp
ZiAoTm9Db250cm9sUGFydCA9PSByZW5kZXJNZXRlci5zdHlsZSgpLmFwcGVhcmFuY2UoKSkKICAg
ICAgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7CiAKICAgICBOU0xldmVsSW5kaWNhdG9yQ2VsbCog
Y2VsbCA9IGxldmVsSW5kaWNhdG9yRm9yKHJlbmRlck1ldGVyKTsKQEAgLTk2Miw3ICs5NjIsNyBA
QCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1ldGVyKGNvbnN0IFJlCiAKICAgICBMb2NhbEN1
cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKIAot
ICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxsKiBjZWxsID0gbGV2ZWxJbmRpY2F0b3JGb3IodG9SZW5k
ZXJNZXRlcigmcmVuZGVyT2JqZWN0KSk7CisgICAgTlNMZXZlbEluZGljYXRvckNlbGwqIGNlbGwg
PSBsZXZlbEluZGljYXRvckZvcih0b1JlbmRlck1ldGVyKHJlbmRlck9iamVjdCkpOwogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNvbnRleHQpOwog
CiAgICAgW2NlbGwgZHJhd1dpdGhGcmFtZTpyZWN0IGluVmlldzpkb2N1bWVudFZpZXdGb3IocmVu
ZGVyT2JqZWN0KV07CkBAIC0xMDAxLDE2ICsxMDAxLDE2IEBAIE5TTGV2ZWxJbmRpY2F0b3JTdHls
ZSBSZW5kZXJUaGVtZU1hYzo6bGUKIAogfQogCi1OU0xldmVsSW5kaWNhdG9yQ2VsbCogUmVuZGVy
VGhlbWVNYWM6OmxldmVsSW5kaWNhdG9yRm9yKGNvbnN0IFJlbmRlck1ldGVyKiByZW5kZXJNZXRl
cikgY29uc3QKK05TTGV2ZWxJbmRpY2F0b3JDZWxsKiBSZW5kZXJUaGVtZU1hYzo6bGV2ZWxJbmRp
Y2F0b3JGb3IoY29uc3QgUmVuZGVyTWV0ZXImIHJlbmRlck1ldGVyKSBjb25zdAogewotICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlck1ldGVyLT5zdHlsZSgpOworICAgIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSA9IHJlbmRlck1ldGVyLnN0eWxlKCk7CiAgICAgQVNTRVJUKHN0
eWxlLmFwcGVhcmFuY2UoKSAhPSBOb0NvbnRyb2xQYXJ0KTsKIAogICAgIGlmICghbV9sZXZlbElu
ZGljYXRvcikKICAgICAgICAgbV9sZXZlbEluZGljYXRvciA9IGFkb3B0TlMoW1tOU0xldmVsSW5k
aWNhdG9yQ2VsbCBhbGxvY10gaW5pdFdpdGhMZXZlbEluZGljYXRvclN0eWxlOk5TQ29udGludW91
c0NhcGFjaXR5TGV2ZWxJbmRpY2F0b3JTdHlsZV0pOwogICAgIE5TTGV2ZWxJbmRpY2F0b3JDZWxs
KiBjZWxsID0gbV9sZXZlbEluZGljYXRvci5nZXQoKTsKIAotICAgIEhUTUxNZXRlckVsZW1lbnQq
IGVsZW1lbnQgPSByZW5kZXJNZXRlci0+bWV0ZXJFbGVtZW50KCk7CisgICAgSFRNTE1ldGVyRWxl
bWVudCogZWxlbWVudCA9IHJlbmRlck1ldGVyLm1ldGVyRWxlbWVudCgpOwogICAgIGRvdWJsZSB2
YWx1ZSA9IGVsZW1lbnQtPnZhbHVlKCk7CiAKICAgICAvLyBCZWNhdXNlIE5TTGV2ZWxJbmRpY2F0
b3JDZWxsIGRvZXMgbm90IHN1cHBvcnQgb3B0aW11bS1pbi10aGUtbWlkZGxlIHR5cGUgY29sb3Jp
bmcsCkBAIC0xMDcxLDM1ICsxMDcxLDM1IEBAIEludFJlY3QgUmVuZGVyVGhlbWVNYWM6OnByb2dy
ZXNzQmFyUmVjdEYKICAgICAgICAgcmV0dXJuIHByb2dyZXNzQmFyQm91bmRzOwogCiAgICAgZmxv
YXQgem9vbUxldmVsID0gcmVuZGVyT2JqZWN0LnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwotICAg
IE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoJnJlbmRlck9i
amVjdC5zdHlsZSgpKTsKKyAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNp
emVGb3JGb250KHJlbmRlck9iamVjdC5zdHlsZSgpKTsKICAgICBJbnRTaXplIHNpemUgPSBwcm9n
cmVzc0JhclNpemVzKClbY29udHJvbFNpemVdOwogICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVp
Z2h0KCkgKiB6b29tTGV2ZWwpOwogICAgIHNpemUuc2V0V2lkdGgocHJvZ3Jlc3NCYXJCb3VuZHMu
d2lkdGgoKSk7CiAKICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBhY2NvdW50IGZvciB0aGUgc2hh
ZG93LgogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcHJvZ3Jlc3NCYXJCb3VuZHM7Ci0gICAg
aWYgKHByb2dyZXNzQmFyQm91bmRzLmhlaWdodCgpIDw9IG1pbmltdW1Qcm9ncmVzc0JhckhlaWdo
dCgmcmVuZGVyT2JqZWN0LnN0eWxlKCkpKQorICAgIGlmIChwcm9ncmVzc0JhckJvdW5kcy5oZWln
aHQoKSA8PSBtaW5pbXVtUHJvZ3Jlc3NCYXJIZWlnaHQocmVuZGVyT2JqZWN0LnN0eWxlKCkpKQog
ICAgICAgICBpbmZsYXRlZFJlY3QgPSBJbnRSZWN0KGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwg
c2l6ZSwgcHJvZ3Jlc3NCYXJNYXJnaW5zKGNvbnRyb2xTaXplKSwgem9vbUxldmVsKSk7CiAKICAg
ICByZXR1cm4gaW5mbGF0ZWRSZWN0OwogfQogCi1pbnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1Q
cm9ncmVzc0JhckhlaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhl
bWVNYWM6Om1pbmltdW1Qcm9ncmVzc0JhckhlaWdodChSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCBwcm9ncmVzc0JhclNpemVz
KCkpLmhlaWdodCgpOwogfQogCi1kb3VibGUgUmVuZGVyVGhlbWVNYWM6OmFuaW1hdGlvblJlcGVh
dEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdAorZG91YmxlIFJl
bmRlclRoZW1lTWFjOjphbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRl
clByb2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25GcmFtZVJh
dGU7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZU1hYzo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0Citkb3VibGUgUmVuZGVyVGhlbWVNYWM6OmFu
aW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAogewog
ICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbk51bUZyYW1lcyAqIHByb2dyZXNzQW5pbWF0aW9u
RnJhbWVSYXRlOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RQcm9ncmVzc0JhclN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZU1hYzo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVu
ZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3QKIHsKIH0KIApAQCAtMTEwOSw3ICsxMTA5LDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0JhcihjbwogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91
bmRzKHJlbmRlck9iamVjdCwgcmVjdCk7Ci0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9
IGNvbnRyb2xTaXplRm9yRm9udCgmcmVuZGVyT2JqZWN0LnN0eWxlKCkpOworICAgIE5TQ29udHJv
bFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQocmVuZGVyT2JqZWN0LnN0eWxl
KCkpOwogCiAgICAgY29uc3QgUmVuZGVyUHJvZ3Jlc3MmIHJlbmRlclByb2dyZXNzID0gKnRvUmVu
ZGVyUHJvZ3Jlc3MoJnJlbmRlck9iamVjdCk7CiAgICAgSElUaGVtZVRyYWNrRHJhd0luZm8gdHJh
Y2tJbmZvOwpAQCAtMTMzNSwyMiArMTMzNSwyMiBAQCBzdGF0aWMgY29uc3QgSW50U2l6ZSogbWVu
dUxpc3RCdXR0b25TaXplCiAgICAgcmV0dXJuIHNpemVzOwogfQogCi12b2lkIFJlbmRlclRoZW1l
TWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6
OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewogICAgIE5TQ29udHJvbFNpemUgY29u
dHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpOwogCi0gICAgc3R5bGUtPnJlc2V0
Qm9yZGVyKCk7Ci0gICAgc3R5bGUtPnJlc2V0UGFkZGluZygpOworICAgIHN0eWxlLnJlc2V0Qm9y
ZGVyKCk7CisgICAgc3R5bGUucmVzZXRQYWRkaW5nKCk7CiAKICAgICAvLyBIZWlnaHQgaXMgbG9j
a2VkIHRvIGF1dG8uCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworICAgIHN0
eWxlLnNldEhlaWdodChMZW5ndGgoQXV0bykpOwogCiAgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9j
a2VkIHRvIHByZQotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisgICAgc3R5bGUuc2V0
V2hpdGVTcGFjZShQUkUpOwogCiAgICAgLy8gU2V0IHRoZSBmb3JlZ3JvdW5kIGNvbG9yIHRvIGJs
YWNrIG9yIGdyYXkgd2hlbiB3ZSBoYXZlIHRoZSBhcXVhIGxvb2suCiAgICAgLy8gQ2FzdCB0byBS
R0IzMiBpcyB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGVyIGJ1Zy4KLSAgICBzdHlsZS0+c2V0Q29s
b3IoZSAmJiAhZS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkgPyBzdGF0aWNfY2FzdDxSR0JBMzI+
KENvbG9yOjpibGFjaykgOiBDb2xvcjo6ZGFya0dyYXkpOworICAgIHN0eWxlLnNldENvbG9yKCFl
LmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpID8gc3RhdGljX2Nhc3Q8UkdCQTMyPihDb2xvcjo6Ymxh
Y2spIDogQ29sb3I6OmRhcmtHcmF5KTsKIAogICAgIC8vIFNldCB0aGUgYnV0dG9uJ3MgdmVydGlj
YWwgc2l6ZS4KICAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIG1lbnVMaXN0QnV0dG9uU2l6ZXMo
KSk7CkBAIC0xMzYwLDUyICsxMzYwLDUyIEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1l
bnVMaXN0U3R5bGUKICAgICAvLyBzeXN0ZW0gZm9udCBmb3IgdGhlIGNvbnRyb2wgc2l6ZSBpbnN0
ZWFkLgogICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGNv
bnRyb2xTaXplKTsKIAotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5
bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVy
VGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSYgc3R5bGUpIGNv
bnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAg
ICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkp
W2xlZnRQYWRkaW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgaWYgKHN0eWxlLT5h
cHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQotICAgICAgICByZXR1cm4gc3R5bGVk
UG9wdXBQYWRkaW5nTGVmdCAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxl
LmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCisgICAgICAgIHJldHVybiBwb3B1cEJ1dHRv
blBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbbGVmdFBhZGRpbmddICogc3R5bGUu
ZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RC
dXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCAqIHN0eWxl
LmVmZmVjdGl2ZVpvb20oKTsKICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJlbmRlclRoZW1lTWFj
Ojpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2lu
dCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSYg
c3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQ
YXJ0KQotICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9u
dChzdHlsZSkpW3JpZ2h0UGFkZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlm
IChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgewotICAgICAgICBm
bG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKKyAgICBp
ZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAgICAgICAgcmV0dXJuIHBv
cHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtyaWdodFBhZGRpbmdd
ICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0g
TWVudWxpc3RCdXR0b25QYXJ0KSB7CisgICAgICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLmZv
bnRTaXplKCkgLyBiYXNlRm9udFNpemU7CiAgICAgICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNl
QXJyb3dXaWR0aCAqIGZvbnRTY2FsZTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
Y2VpbGYoYXJyb3dXaWR0aCArIChhcnJvd1BhZGRpbmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQg
KyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY2VpbGYoYXJyb3dXaWR0aCArIChhcnJvd1Bh
ZGRpbmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAq
IHN0eWxlLmVmZmVjdGl2ZVpvb20oKSkpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotaW50
IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJl
bmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9
PSBNZW51bGlzdFBhcnQpCi0gICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJv
bFNpemVGb3JGb250KHN0eWxlKSlbdG9wUGFkZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
OwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKLSAg
ICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ1RvcCAqIHN0eWxlLT5lZmZlY3RpdmVab29t
KCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCisgICAgICAg
IHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbdG9w
UGFkZGluZ10gKiBzdHlsZS5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxlLmFwcGVhcmFu
Y2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisgICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBh
ZGRpbmdUb3AgKiBzdHlsZS5lZmZlY3RpdmVab29tKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWlu
dCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0Jv
dHRvbShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5n
KGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2JvdHRvbVBhZGRpbmddICogc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRv
blBhcnQpCi0gICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdCb3R0b20gKiBzdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQ
YXJ0KQorICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9u
dChzdHlsZSkpW2JvdHRvbVBhZGRpbmddICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIGlm
IChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1
cm4gc3R5bGVkUG9wdXBQYWRkaW5nQm90dG9tICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOwogICAg
IHJldHVybiAwOwogfQogCi1Qb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBSZW5kZXJUaGVt
ZU1hYzo6cG9wdXBNZW51U2l6ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIEludFJlY3QmIHJl
Y3QpIGNvbnN0CitQb3B1cE1lbnVTdHlsZTo6UG9wdXBNZW51U2l6ZSBSZW5kZXJUaGVtZU1hYzo6
cG9wdXBNZW51U2l6ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEludFJlY3QmIHJlY3QpIGNv
bnN0CiB7CiAgICAgTlNQb3BVcEJ1dHRvbkNlbGwqIHBvcHVwQnV0dG9uID0gdGhpcy0+cG9wdXBC
dXR0b24oKTsKLSAgICBOU0NvbnRyb2xTaXplIHNpemUgPSBjb250cm9sU2l6ZUZvckNlbGwocG9w
dXBCdXR0b24sIHBvcHVwQnV0dG9uU2l6ZXMoKSwgcmVjdC5zaXplKCksIHN0eWxlLT5lZmZlY3Rp
dmVab29tKCkpOworICAgIE5TQ29udHJvbFNpemUgc2l6ZSA9IGNvbnRyb2xTaXplRm9yQ2VsbChw
b3B1cEJ1dHRvbiwgcG9wdXBCdXR0b25TaXplcygpLCByZWN0LnNpemUoKSwgc3R5bGUuZWZmZWN0
aXZlWm9vbSgpKTsKICAgICBzd2l0Y2ggKHNpemUpIHsKICAgICBjYXNlIE5TUmVndWxhckNvbnRy
b2xTaXplOgogICAgICAgICByZXR1cm4gUG9wdXBNZW51U3R5bGU6OlBvcHVwTWVudVNpemVOb3Jt
YWw7CkBAIC0xNDUwLDcgKzE0NTAsNyBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6
bWVudUxpc3RTCiAgICAgcmV0dXJuIHNpemVzOwogfQogCi1pbnQgUmVuZGVyVGhlbWVNYWM6Om1p
bmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRo
ZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsK
ICAgICByZXR1cm4gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIG1lbnVMaXN0U2l6ZXMoKSkud2lk
dGgoKTsKIH0KQEAgLTE0NTgsOSArMTQ1OCw5IEBAIGludCBSZW5kZXJUaGVtZU1hYzo6bWluaW11
bU1lbnVMaXN0U2l6ZSgKIGNvbnN0IGludCB0cmFja1dpZHRoID0gNTsKIGNvbnN0IGludCB0cmFj
a1JhZGl1cyA9IDI7CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIm
LCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIHN0eWxlLT5zZXRC
b3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQog
CiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCkBAIC0x
NTA0LDEwICsxNTA0LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2so
Y28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNs
aWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJT
dHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUmVuZGVyVGhlbWU6
OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOwot
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93
KG51bGxwdHIpOwogfQogCiBjb25zdCBmbG9hdCB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcg
PSAwLjFmOwpAQCAtMTYwNiw3ICsxNjA2LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2Vh
cmNoQ2VsbFN0YXRlKAogewogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5z
ZWFyY2goKTsKIAotICAgIFtzZWFyY2ggc2V0Q29udHJvbFNpemU6Y29udHJvbFNpemVGb3JGb250
KCZvLnN0eWxlKCkpXTsKKyAgICBbc2VhcmNoIHNldENvbnRyb2xTaXplOmNvbnRyb2xTaXplRm9y
Rm9udChvLnN0eWxlKCkpXTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2Ug
cmVzcG9uZCB0by4KICAgICB1cGRhdGVFbmFibGVkU3RhdGUoc2VhcmNoLCBvKTsKQEAgLTE2MTks
NDUgKzE2MTksNDUgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVNYWM6OnNlYXJjaEZpZQog
ICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoRmll
bGRTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnNl
dFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYg
dGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90
aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50cmlu
c2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgogICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgc2Vh
cmNoRmllbGRTaXplcygpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNo
RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmll
bGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUs
IEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIE92ZXJyaWRlIGJvcmRlci4KLSAgICBzdHlsZS0+
cmVzZXRCb3JkZXIoKTsKLSAgICBjb25zdCBzaG9ydCBib3JkZXJXaWR0aCA9IDIgKiBzdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVyV2lk
dGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0U3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5z
ZXRCb3JkZXJSaWdodFdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmln
aHRTdHlsZShJTlNFVCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlcldp
ZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyQm90dG9tU3R5bGUoSU5TRVQpOwotICAgIHN0eWxl
LT5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJXaWR0aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclRv
cFN0eWxlKElOU0VUKTsKKyAgICBzdHlsZS5yZXNldEJvcmRlcigpOworICAgIGNvbnN0IHNob3J0
IGJvcmRlcldpZHRoID0gMiAqIHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBzdHlsZS5zZXRC
b3JkZXJMZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNldEJvcmRlckxlZnRTdHls
ZShJTlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVyUmlnaHRXaWR0aChib3JkZXJXaWR0aCk7Cisg
ICAgc3R5bGUuc2V0Qm9yZGVyUmlnaHRTdHlsZShJTlNFVCk7CisgICAgc3R5bGUuc2V0Qm9yZGVy
Qm90dG9tV2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNldEJvcmRlckJvdHRvbVN0eWxl
KElOU0VUKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJXaWR0aCk7CisgICAg
c3R5bGUuc2V0Qm9yZGVyVG9wU3R5bGUoSU5TRVQpOwogCiAgICAgLy8gT3ZlcnJpZGUgaGVpZ2h0
LgotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKKyAgICBzdHlsZS5zZXRIZWln
aHQoTGVuZ3RoKEF1dG8pKTsKICAgICBzZXRTZWFyY2hGaWVsZFNpemUoc3R5bGUpOwogCiAgICAg
Ly8gT3ZlcnJpZGUgcGFkZGluZyBzaXplIHRvIG1hdGNoIEFwcEtpdCB0ZXh0IHBvc2l0aW9uaW5n
LgotICAgIGNvbnN0IGludCBwYWRkaW5nID0gMSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0g
ICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0
eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgY29uc3QgaW50IHBhZGRp
bmcgPSAxICogc3R5bGUuZWZmZWN0aXZlWm9vbSgpOworICAgIHN0eWxlLnNldFBhZGRpbmdMZWZ0
KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdSaWdodChMZW5n
dGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRk
aW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcs
IEZpeGVkKSk7CiAKICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVG
b3JGb250KHN0eWxlKTsKICAgICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHN0eWxlUmVzb2x2ZXIs
IHN0eWxlLCBjb250cm9sU2l6ZSk7CiAKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIp
OworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtMTcxNiwx
MiArMTcxNiwxMiBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6Y2FuY2VsQnV0CiAg
ICAgcmV0dXJuIHNpemVzOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVt
ZW50JikgY29uc3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHls
ZSwgY2FuY2VsQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXpl
LndpZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWln
aHQoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0
eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0
SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEJveFNo
YWRvdyhudWxscHRyKTsKIH0KIAogY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVNYWM6OnJlc3Vs
dHNCdXR0b25TaXplcygpIGNvbnN0CkBAIC0xNzMxLDEyICsxNzMxLDEyIEBAIGNvbnN0IEludFNp
emUqIFJlbmRlclRoZW1lTWFjOjpyZXN1bHRzQnUKIH0KIAogY29uc3QgaW50IGVtcHR5UmVzdWx0
c09mZnNldCA9IDk7Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZERlY29y
YXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRp
b25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYp
IGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJl
c3VsdHNCdXR0b25TaXplcygpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lk
dGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0
KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3co
bnVsbHB0cik7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5
UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUu
aGVpZ2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQog
CiBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnQoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpCkBAIC0x
NzQ0LDEyICsxNzQ0LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRE
ZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9
IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5
bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0Qm94
U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCks
IEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhl
ZCkpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAogYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5k
ZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQpAQCAtMTc3NywxMiArMTc3NywxMiBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJj
aEZpZWxkUmVzCiB9CiAKIGNvbnN0IGludCByZXN1bHRzQXJyb3dXaWR0aCA9IDU7Ci12b2lkIFJl
bmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2
ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEludFNpemUg
c2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7Ci0g
ICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0
aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBG
aXhlZCkpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0
V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSArIHJlc3VsdHNBcnJvd1dpZHRoLCBGaXhlZCkpOwor
ICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKKyAgICBz
dHlsZS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCkBAIC0xOTE0LDEyICsxOTE0
LDEyIEBAIGludCBSZW5kZXJUaGVtZU1hYzo6c2xpZGVyVGlja09mZnNldEZyb20KIGNvbnN0IGlu
dCBzbGlkZXJUaHVtYldpZHRoID0gMTU7CiBjb25zdCBpbnQgc2xpZGVyVGh1bWJIZWlnaHQgPSAx
NTsKIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RT
bGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAg
ICBmbG9hdCB6b29tTGV2ZWwgPSBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlmIChzdHls
ZS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgc3R5bGUtPmFw
cGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgewotICAgICAgICBzdHlsZS0+
c2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJXaWR0aCAqIHpvb21M
ZXZlbCksIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19j
YXN0PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOworICAgIGZs
b2F0IHpvb21MZXZlbCA9IHN0eWxlLmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoc3R5bGUuYXBw
ZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgc3R5bGUuYXBwZWFyYW5j
ZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7CisgICAgICAgIHN0eWxlLnNldFdpZHRo
KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRlclRodW1iV2lkdGggKiB6b29tTGV2ZWwpLCBG
aXhlZCkpOworICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4o
c2xpZGVyVGh1bWJIZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwogICAgIH0KIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCShy
ZXZpc2lvbiAxNzA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVT
YWZhcmkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsMjEgKzI1MiwyMSBAQCB2b2lkIFJlbmRl
clRoZW1lU2FmYXJpOjpzeXN0ZW1Gb250KENTU1ZhCiAgICAgZm9udERlc2NyaXB0aW9uID0gKmNh
Y2hlZERlc2M7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OmlzQ29udHJvbFN0eWxlZChj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwKK2Jvb2wg
UmVuZGVyVGhlbWVTYWZhcmk6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNr
Z3JvdW5kQ29sb3IpIGNvbnN0CiB7CiAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgU2FmYXJpVGhl
bWUuZGxsIHdlIHdvbid0IGJlIGFibGUgdG8gcGFpbnQgYW55IHRoZW1lZCBjb250cm9scy4KICAg
ICBpZiAoIVNhZmFyaVRoZW1lTGlicmFyeSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5bGUtPmFwcGVh
cmFuY2UoKSA9PSBUZXh0QXJlYVBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94
UGFydCkKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5ib3JkZXIoKSAhPSBib3JkZXI7CisgICAgaWYg
KHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2Uo
KSA9PSBUZXh0QXJlYVBhcnQgfHwgc3R5bGUuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQor
ICAgICAgICByZXR1cm4gc3R5bGUuYm9yZGVyKCkgIT0gYm9yZGVyOwogICAgIHJldHVybiBSZW5k
ZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQsIGJhY2tn
cm91bmRDb2xvcik7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFJlcGFpbnRS
ZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgbywgSW50UmVjdCYgcikKIHsKLSAgICBOU0NvbnRyb2xT
aXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KCZvLnN0eWxlKCkpOworICAgIE5T
Q29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoby5zdHlsZSgpKTsK
IAogICAgIHN3aXRjaCAoby5zdHlsZSgpLmFwcGVhcmFuY2UoKSkgewogICAgICAgICBjYXNlIENo
ZWNrYm94UGFydDogewpAQCAtMzIzLDggKzMyMyw4IEBAIGludCBSZW5kZXJUaGVtZVNhZmFyaTo6
YmFzZWxpbmVQb3NpdGlvbigKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoby5zdHlsZSgp
LmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQgfHwgby5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9
PSBSYWRpb1BhcnQpIHsKLSAgICAgICAgY29uc3QgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJv
eCgmbyk7Ci0gICAgICAgIHJldHVybiBib3gtPm1hcmdpblRvcCgpICsgYm94LT5oZWlnaHQoKSAt
IDI7IC8vIFRoZSBiYXNlbGluZSBpcyAycHggdXAgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBjaGVj
a2JveC9yYWRpbyBpbiBBcHBLaXQuCisgICAgICAgIGNvbnN0IFJlbmRlckJveCYgYm94ID0gdG9S
ZW5kZXJCb3gobyk7CisgICAgICAgIHJldHVybiBib3gubWFyZ2luVG9wKCkgKyBib3guaGVpZ2h0
KCkgLSAyOyAvLyBUaGUgYmFzZWxpbmUgaXMgMnB4IHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUg
Y2hlY2tib3gvcmFkaW8gaW4gQXBwS2l0LgogICAgIH0KIAogICAgIHJldHVybiBSZW5kZXJUaGVt
ZTo6YmFzZWxpbmVQb3NpdGlvbihvKTsKQEAgLTM0Myw5ICszNDMsOSBAQCBib29sIFJlbmRlclRo
ZW1lU2FmYXJpOjpjb250cm9sU3VwcG9ydHNUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5TQ29u
dHJvbFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6OmNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0CitOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lU2FmYXJpOjpjb250cm9s
U2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGludCBmb250U2l6
ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGludCBmb250U2l6ZSA9IHN0eWxlLmZvbnRTaXpl
KCk7CiAgICAgaWYgKGZvbnRTaXplID49IDE2KQogICAgICAgICByZXR1cm4gTlNSZWd1bGFyQ29u
dHJvbFNpemU7CiAgICAgaWYgKGZvbnRTaXplID49IDExKQpAQCAtMzY4LDI3ICszNjgsMjcgQEAg
dm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0Q29udHJvbFNpemUoTgogICAgICAgICBbY2VsbCBz
ZXRDb250cm9sU2l6ZTpzaXplXTsKIH0KICovCi1JbnRTaXplIFJlbmRlclRoZW1lU2FmYXJpOjpz
aXplRm9yRm9udChSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25z
dAorSW50U2l6ZSBSZW5kZXJUaGVtZVNhZmFyaTo6c2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKIHsKICAgICByZXR1cm4gc2l6ZXNbY29u
dHJvbFNpemVGb3JGb250KHN0eWxlKV07CiB9CiAKLUludFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6
OnNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6
ZXMpIGNvbnN0CitJbnRTaXplIFJlbmRlclRoZW1lU2FmYXJpOjpzaXplRm9yU3lzdGVtRm9udChS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAogewogICAgIHJl
dHVybiBzaXplc1tjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUpXTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZVNhZmFyaTo6c2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRTaXpl
RnJvbUZvbnQoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QK
IHsKICAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2Ug
bWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQuCiAgICAgSW50U2l6ZSBzaXplID0gc2l6
ZUZvckZvbnQoc3R5bGUsIHNpemVzKTsKLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5z
aWNPckF1dG8oKSAmJiBzaXplLndpZHRoKCkgPiAwKQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlz
QXV0bygpICYmIHNpemUuaGVpZ2h0KCkgPiAwKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIGlmIChzdHlsZS53aWR0aCgpLmlzSW50
cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgpID4gMCkKKyAgICAgICAgc3R5bGUuc2V0V2lk
dGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICBpZiAoc3R5bGUuaGVpZ2h0KCku
aXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDApCisgICAgICAgIHN0eWxlLnNldEhlaWdodChM
ZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFy
aTo6c2V0Rm9udEZyb21Db250cm9sU2l6ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0Cit2b2lk
IFJlbmRlclRoZW1lU2FmYXJpOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlJiBzdHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSkgY29uc3QKIHsKICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKQEAgLTQwMCwxNSArNDAw
LDE1IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldEZvbnRGcm9tQ29udHIKICAgICBmb250
RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShmb250U2l6ZSk7CiAKICAgICAvLyBSZXNldCBs
aW5lIGhlaWdodAotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFs
TGluZUhlaWdodCgpKTsKKyAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0
aWFsTGluZUhlaWdodCgpKTsKIAotICAgIGlmIChzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbikpCi0gICAgICAgIHN0eWxlLT5mb250KCkudXBkYXRlKHN0eWxlUmVzb2x2
ZXItPmZvbnRTZWxlY3RvcigpKTsKKyAgICBpZiAoc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbikpCisgICAgICAgIHN0eWxlLmZvbnQoKS51cGRhdGUoc3R5bGVSZXNvbHZl
ci5mb250U2VsZWN0b3IoKSk7CiB9CiAKLU5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVTYWZhcmk6
OmNvbnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitOU0Nv
bnRyb2xTaXplIFJlbmRlclRoZW1lU2FmYXJpOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVu
ZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250
U2l6ZSgpOworICAgIGludCBmb250U2l6ZSA9IHN0eWxlLmZvbnRTaXplKCk7CiAgICAgaWYgKGZv
bnRTaXplID49IDEzKQogICAgICAgICByZXR1cm4gTlNSZWd1bGFyQ29udHJvbFNpemU7CiAgICAg
aWYgKGZvbnRTaXplID49IDExKQpAQCAtNDIwLDcgKzQyMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVT
YWZhcmk6OnBhaW50Q2hlY2tib3goY28KIHsKICAgICBBU1NFUlQoU2FmYXJpVGhlbWVMaWJyYXJ5
KCkpOwogCi0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9u
dCgmby5zdHlsZSgpKTsKKyAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNp
emVGb3JGb250KG8uc3R5bGUoKSk7CiAKICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGluZmxh
dGVSZWN0KHIsIGNoZWNrYm94U2l6ZXMoKVtjb250cm9sU2l6ZV0sIGNoZWNrYm94TWFyZ2lucyhj
b250cm9sU2l6ZSkpOyAgCiAgICAgcGFpbnRUaGVtZVBhcnQoU2FmYXJpVGhlbWU6OkNoZWNrYm94
UGFydCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBpbmZsYXRlZFJlY3Qs
IGNvbnRyb2xTaXplLCBkZXRlcm1pbmVTdGF0ZShvKSk7CkBAIC00NDUsMTAgKzQ0NSwxMCBAQCBj
b25zdCBpbnQqIFJlbmRlclRoZW1lU2FmYXJpOjpjaGVja2JveE1hCiAgICAgcmV0dXJuIG1hcmdp
bnNbY29udHJvbFNpemVdOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRDaGVja2Jv
eFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6
c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICAvLyBJZiB0
aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3Ro
aW5nIHRvIGRvLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAm
JiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0lu
dHJpbnNpY09yQXV0bygpICYmICFzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gVXNlIHRoZSBmb250IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRyaW5z
aWMgd2lkdGggb2YgdGhlIGNvbnRyb2wuCkBAIC00NTksNyArNDU5LDcgQEAgYm9vbCBSZW5kZXJU
aGVtZVNhZmFyaTo6cGFpbnRSYWRpbyhjb25zdAogewogICAgIEFTU0VSVChTYWZhcmlUaGVtZUxp
YnJhcnkoKSk7CiAKLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVG
b3JGb250KCZvLnN0eWxlKCkpOworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250
cm9sU2l6ZUZvckZvbnQoby5zdHlsZSgpKTsKICAKICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9
IGluZmxhdGVSZWN0KHIsIHJhZGlvU2l6ZXMoKVtjb250cm9sU2l6ZV0sIHJhZGlvTWFyZ2lucyhj
b250cm9sU2l6ZSkpOyAgICAKICAgICBwYWludFRoZW1lUGFydChSYWRpb0J1dHRvblBhcnQsIHBh
aW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgaW5mbGF0ZWRSZWN0LCBjb250cm9s
U2l6ZSwgZGV0ZXJtaW5lU3RhdGUobykpOwpAQCAtNDg0LDE3ICs0ODQsMTcgQEAgY29uc3QgaW50
KiBSZW5kZXJUaGVtZVNhZmFyaTo6cmFkaW9NYXJnaQogICAgIHJldHVybiBtYXJnaW5zW2NvbnRy
b2xTaXplXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0UmFkaW9TaXplKFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldFJhZGlvU2l6
ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBo
ZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAg
ICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWln
aHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRo
ZSBjb250cm9sLgogICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgcmFkaW9TaXplcygpKTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0QnV0dG9uUGFkZGluZ0Zyb21Db250cm9sU2l6
ZShSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNpemUgc2l6ZSkgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVTYWZhcmk6OnNldEJ1dHRvblBhZGRpbmdGcm9tQ29udHJvbFNpemUoUmVuZGVyU3R5
bGUmIHN0eWxlLCBOU0NvbnRyb2xTaXplIHNpemUpIGNvbnN0CiB7CiAgICAgLy8gSnVzdCB1c2Ug
OHB4LiAgQXBwS2l0IHdhbnRzIHRvIHVzZSAxMXB4IGZvciBtaW5pIGJ1dHRvbnMsIGJ1dCB0aGF0
IHBhZGRpbmcgaXMganVzdCB0b28gbGFyZ2UKICAgICAvLyBmb3IgcmVhbC13b3JsZCBXZWIgc2l0
ZXMgKGNyZWF0aW5nIGEgaHVnZSBuZWNlc3NhcnkgbWluaW11bSB3aWR0aCBmb3IgYnV0dG9ucyB3
aG9zZSBzcGFjZSBpcwpAQCAtNTAyLDEzICs1MDIsMTMgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFy
aTo6c2V0QnV0dG9uUGFkZGluZwogICAgIC8vIFRoaXMgYWxzbyBndWFyYW50ZWVzIHRoZSBIVE1M
NCA8YnV0dG9uPiB3aWxsIG1hdGNoIG91ciByZW5kZXJpbmcgYnkgZGVmYXVsdCwgc2luY2Ugd2Un
cmUgdXNpbmcgYSBjb25zaXN0ZW50CiAgICAgLy8gcGFkZGluZy4KICAgICBjb25zdCBpbnQgcGFk
ZGluZyA9IDg7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhl
ZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7
Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKDAsIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDAsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGlu
Z0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ1JpZ2h0
KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3Ro
KDAsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoMCwgRml4ZWQp
KTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25z
dAogewogICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBhcHBlYXJhbmNlIGNvbnN0YW50cyBmb3IgYnV0
dG9ucy4KICAgICAvLyAoMSkgUHVzaC1idXR0b24gaXMgdGhlIGNvbnN0YW50IGZvciB0aGUgZGVm
YXVsdCBBcXVhIHN5c3RlbSBidXR0b24uICBQdXNoIGJ1dHRvbnMgd2lsbCBub3Qgc2NhbGUgdmVy
dGljYWxseSBhbmQgd2lsbCBub3QgYWxsb3cKQEAgLTUyMiwxNSArNTIyLDE1IEBAIHZvaWQgUmVu
ZGVyVGhlbWVTYWZhcmk6OmFkanVzdEJ1dHRvblN0eWwKICAgICAvLyBEZXRlcm1pbmUgb3VyIGNv
bnRyb2wgc2l6ZSBiYXNlZCBvZmYgb3VyIGZvbnQuCiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7CiAKLSAgICBpZiAoc3R5bGUtPmFwcGVh
cmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkgeworICAgIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkg
PT0gUHVzaEJ1dHRvblBhcnQpIHsKICAgICAgICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KLSAgICAg
ICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAK
ICAgICAgICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvLgotICAgICAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChBdXRvKSk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoQXV0
bykpOwogCiAgICAgICAgIC8vIFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0byBwcmUKLSAgICAgICAg
c3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKyAgICAgICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQ
UkUpOwogCiAgICAgICAgIC8vIFNldCB0aGUgYnV0dG9uJ3MgdmVydGljYWwgc2l6ZS4KICAgICAg
ICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7CkBAIC01NDQsMTEgKzU0NCwxMSBAQCB2b2lkIFJlbmRl
clRoZW1lU2FmYXJpOjphZGp1c3RCdXR0b25TdHlsCiAgICAgICAgIHNldEZvbnRGcm9tQ29udHJv
bFNpemUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGNvbnRyb2xTaXplKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICAvLyBTZXQgYSBtaW4taGVpZ2h0IHNvIHRoYXQgd2UgY2FuJ3QgZ2V0IHNtYWxsZXIg
dGhhbiB0aGUgbWluaSBidXR0b24uCi0gICAgICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3Ro
KDE1LCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRNaW5IZWlnaHQoTGVuZ3RoKDE1LCBGaXhl
ZCkpOwogCiAgICAgICAgIC8vIFJlc2V0IHRoZSB0b3AgYW5kIGJvdHRvbSBib3JkZXJzLgotICAg
ICAgICBzdHlsZS0+cmVzZXRCb3JkZXJUb3AoKTsKLSAgICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVy
Qm90dG9tKCk7CisgICAgICAgIHN0eWxlLnJlc2V0Qm9yZGVyVG9wKCk7CisgICAgICAgIHN0eWxl
LnJlc2V0Qm9yZGVyQm90dG9tKCk7CiAgICAgfQogfQogCkBAIC01NjksMTAgKzU2OSwxMCBAQCBj
b25zdCBpbnQqIFJlbmRlclRoZW1lU2FmYXJpOjpidXR0b25NYXJnCiAgICAgcmV0dXJuIG1hcmdp
bnNbY29udHJvbFNpemVdOwogfQogCi12b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpzZXRCdXR0b25T
aXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNl
dEJ1dHRvblNpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIC8vIElmIHRoZSB3
aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcg
dG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFz
dHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmlu
c2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3
aWR0aCBvZiB0aGUgY29udHJvbC4KQEAgLTYyMCw3ICs2MjAsNyBAQCBib29sIFJlbmRlclRoZW1l
U2FmYXJpOjpwYWludFRleHRGaWVsZChjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJl
bmRlclRoZW1lU2FmYXJpOjphZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVz
dFRleHRGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBj
b25zdAogewogfQogCkBAIC02NDgsNyArNjQ4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6
cGFpbnRUZXh0QXJlYShjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZVNhZmFyaTo6YWRqdXN0VGV4dEFyZWFTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFRleHRBcmVh
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0CiB7CiB9
CiAKQEAgLTY5MCw3ICs2OTAsNyBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVM
aXN0KGNvCiAgICAgc2l6ZS5zZXRXaWR0aChyLndpZHRoKCkpOwogCiAgICAgLy8gTm93IGluZmxh
dGUgaXQgdG8gYWNjb3VudCBmb3IgdGhlIHNoYWRvdy4KLSAgICBpZiAoci53aWR0aCgpID49IG1p
bmltdW1NZW51TGlzdFNpemUoJm8uc3R5bGUoKSkpCisgICAgaWYgKHIud2lkdGgoKSA+PSBtaW5p
bXVtTWVudUxpc3RTaXplKG8uc3R5bGUoKSkpCiAgICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxh
dGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcG9wdXBCdXR0b25NYXJnaW5zKGNvbnRyb2xTaXpl
KSk7CiAKICAgICBwYWludFRoZW1lUGFydChEcm9wRG93bkJ1dHRvblBhcnQsIGluZm8uY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCksIGluZmxhdGVkUmVjdCwgY29udHJvbFNpemUsIGRldGVybWlu
ZVN0YXRlKG8pKTsKQEAgLTg2NCwyMiArODY0LDIyIEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6
OnBhaW50TWVudUxpc3RCdXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgTlNDb250cm9s
U2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7CiAKLSAgICBzdHls
ZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAgc3R5bGUu
cmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS5yZXNldFBhZGRpbmcoKTsKICAgICAKICAgICAvLyBI
ZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0
bykpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoQXV0bykpOwogCiAgICAgLy8gV2hpdGUt
c3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7Cisg
ICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogCiAgICAgLy8gU2V0IHRoZSBmb3JlZ3JvdW5k
IGNvbG9yIHRvIGJsYWNrIG9yIGdyYXkgd2hlbiB3ZSBoYXZlIHRoZSBhcXVhIGxvb2suCiAgICAg
Ly8gQ2FzdCB0byBSR0IzMiBpcyB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGVyIGJ1Zy4KLSAgICBz
dHlsZS0+c2V0Q29sb3IoZSAmJiAhZS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkgPyBzdGF0aWNf
Y2FzdDxSR0JBMzI+KENvbG9yOjpibGFjaykgOiBDb2xvcjo6ZGFya0dyYXkpOworICAgIHN0eWxl
LnNldENvbG9yKCFlLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpID8gc3RhdGljX2Nhc3Q8UkdCQTMy
PihDb2xvcjo6YmxhY2spIDogQ29sb3I6OmRhcmtHcmF5KTsKIAogICAgIC8vIFNldCB0aGUgYnV0
dG9uJ3MgdmVydGljYWwgc2l6ZS4KICAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKQEAgLTg5MCw1
NiArODkwLDU2IEBAIHZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1lbnVMaXN0U3QKICAg
ICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBjb250cm9sU2l6
ZSk7CiB9CiAKLWludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJ
bnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVh
cmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCiAgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRp
bmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbbGVmdFBhZGRpbmddOwotICAgIGlmIChzdHls
ZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKKyAgICBpZiAoc3R5bGUuYXBw
ZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKICAgICAgICAgcmV0dXJuIHN0eWxlZFBv
cHVwUGFkZGluZ0xlZnQ7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUaGVtZVNhZmFy
aTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Citp
bnQgUmVuZGVyVGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5
bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVs
aXN0UGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKICAg
ICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUp
KVtyaWdodFBhZGRpbmddOwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0
QnV0dG9uUGFydCkgewotICAgICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUo
KSAvIGJhc2VGb250U2l6ZTsKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0
QnV0dG9uUGFydCkgeworICAgICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgp
IC8gYmFzZUZvbnRTaXplOwogICAgICAgICBmbG9hdCBhcnJvd1dpZHRoID0gYmFzZUFycm93V2lk
dGggKiBmb250U2NhbGU7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGFy
cm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQgKyBwYWRkaW5n
QmVmb3JlU2VwYXJhdG9yKSk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi1pbnQgUmVuZGVy
VGhlbWVTYWZhcmk6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKK2ludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVu
ZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09
IE1lbnVsaXN0UGFydCkKKyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFy
dCkKICAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQo
c3R5bGUpKVt0b3BQYWRkaW5nXTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51
bGlzdEJ1dHRvblBhcnQpCisgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1
dHRvblBhcnQpCiAgICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdUb3A7CiAgICAgcmV0
dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUaGVtZVNhZmFyaTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdC
b3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lU2FmYXJpOjpw
b3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0g
ICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQorICAgIGlmIChzdHls
ZS5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQogICAgICAgICByZXR1cm4gcG9wdXBCdXR0
b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2JvdHRvbVBhZGRpbmddOwotICAg
IGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKKyAgICBpZiAo
c3R5bGUuYXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKICAgICAgICAgcmV0dXJu
IHN0eWxlZFBvcHVwUGFkZGluZ0JvdHRvbTsKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5k
ZXJUaGVtZVNhZmFyaTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZh
cmk6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxl
JiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUt
PmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemU7CisgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUu
Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKICAgICAKLSAgICBzdHlsZS0+cmVzZXRQYWRkaW5n
KCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclJhZGl1cyhJbnRTaXplKGludChiYXNlQm9yZGVyUmFk
aXVzICsgZm9udFNjYWxlIC0gMSksIGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0g
MSkpKTsgLy8gRklYTUU6IFJvdW5kIHVwPworICAgIHN0eWxlLnJlc2V0UGFkZGluZygpOworICAg
IHN0eWxlLnNldEJvcmRlclJhZGl1cyhJbnRTaXplKGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9u
dFNjYWxlIC0gMSksIGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSkpKTsgLy8g
RklYTUU6IFJvdW5kIHVwPwogCiAgICAgY29uc3QgaW50IG1pbkhlaWdodCA9IDE1OwotICAgIHN0
eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQpKTsKKyAgICBzdHlsZS5z
ZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQpKTsKICAgICAKLSAgICBzdHlsZS0+
c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5
bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiB9CiAK
IGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lU2FmYXJpOjptZW51TGlzdFNpemVzKCkgY29uc3QK
QEAgLTk0OCw3ICs5NDgsNyBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZVNhZmFyaTo6bWVu
dUxpCiAgICAgcmV0dXJuIHNpemVzOwogfQogCi1pbnQgUmVuZGVyVGhlbWVTYWZhcmk6Om1pbmlt
dW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1l
U2FmYXJpOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsK
ICAgICByZXR1cm4gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIG1lbnVMaXN0U2l6ZXMoKSkud2lk
dGgoKTsKIH0KQEAgLTk4NywxMCArOTg3LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBh
aW50U2xpZGVyVHJhY2sKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVT
YWZhcmk6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdCAKK3ZvaWQgUmVuZGVyVGhl
bWVTYWZhcmk6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdCAKIHsgCiAgICAgUmVu
ZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGUp
OwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7IAorICAgIHN0eWxlLnNldEJveFNo
YWRvdyhudWxscHRyKTsgCiB9IAogCiBjb25zdCBmbG9hdCB2ZXJ0aWNhbFNsaWRlckhlaWdodFBh
ZGRpbmcgPSAwLjFmOwpAQCAtMTAwNSwxNCArMTAwNSwxNCBAQCBib29sIFJlbmRlclRoZW1lU2Fm
YXJpOjpwYWludFNsaWRlclRodW1iCiBjb25zdCBpbnQgc2xpZGVyVGh1bWJXaWR0aCA9IDE1Owog
Y29uc3QgaW50IHNsaWRlclRodW1iSGVpZ2h0ID0gMTU7CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZh
cmk6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRl
clN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgp
ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChM
ZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdo
dChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLmFwcGVh
cmFuY2UoKSA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IHN0eWxlLmFwcGVhcmFuY2Uo
KSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgeworICAgICAgICBzdHlsZS5zZXRXaWR0aChM
ZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0SGVpZ2h0
KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKICAgICB9IAogI2lmIEVOQUJMRShW
SURFTykKLSAgICBlbHNlIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyVGh1
bWJQYXJ0KSAKKyAgICBlbHNlIGlmIChzdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJU
aHVtYlBhcnQpIAogICAgICAgICBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRl
clRodW1iU2l6ZShzdHlsZSk7CiAjZW5kaWYKIH0KQEAgLTEwMzEsNDAgKzEwMzEsNDAgQEAgY29u
c3QgSW50U2l6ZSogUmVuZGVyVGhlbWVTYWZhcmk6OnNlYXJjaAogICAgIHJldHVybiBzaXplczsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OnNldFNlYXJjaEZpZWxk
U2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFu
ZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4K
LSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5o
ZWlnaHQoKS5pc0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1
dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0
aCBvZiB0aGUgY29udHJvbC4KICAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIHNlYXJjaEZpZWxk
U2l6ZXMoKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxk
U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRqdXN0U2VhcmNoRmll
bGRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUs
IEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgLy8gT3ZlcnJpZGUgYm9yZGVyLgotICAgIHN0eWxl
LT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0Qm9yZGVyKCk7CiAgICAgY29uc3Qgc2hv
cnQgYm9yZGVyV2lkdGggPSAyOwotICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVy
V2lkdGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0U3R5bGUoSU5TRVQpOwotICAgIHN0eWxl
LT5zZXRCb3JkZXJSaWdodFdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVy
UmlnaHRTdHlsZShJTlNFVCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlckJvdHRvbVdpZHRoKGJvcmRl
cldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyQm90dG9tU3R5bGUoSU5TRVQpOwotICAgIHN0
eWxlLT5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJXaWR0aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRl
clRvcFN0eWxlKElOU0VUKTsgICAgCisgICAgc3R5bGUuc2V0Qm9yZGVyTGVmdFdpZHRoKGJvcmRl
cldpZHRoKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJMZWZ0U3R5bGUoSU5TRVQpOworICAgIHN0eWxl
LnNldEJvcmRlclJpZ2h0V2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNldEJvcmRlclJp
Z2h0U3R5bGUoSU5TRVQpOworICAgIHN0eWxlLnNldEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlcldp
ZHRoKTsKKyAgICBzdHlsZS5zZXRCb3JkZXJCb3R0b21TdHlsZShJTlNFVCk7CisgICAgc3R5bGUu
c2V0Qm9yZGVyVG9wV2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxlLnNldEJvcmRlclRvcFN0
eWxlKElOU0VUKTsgICAgCiAgICAgCiAgICAgLy8gT3ZlcnJpZGUgaGVpZ2h0LgotICAgIHN0eWxl
LT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKEF1
dG8pKTsKICAgICBzZXRTZWFyY2hGaWVsZFNpemUoc3R5bGUpOwogICAgIAogICAgIC8vIE92ZXJy
aWRlIHBhZGRpbmcgc2l6ZSB0byBtYXRjaCBBcHBLaXQgdGV4dCBwb3NpdGlvbmluZy4KICAgICBj
b25zdCBpbnQgcGFkZGluZyA9IDE7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChw
YWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRp
bmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZp
eGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVk
KSk7CisgICAgc3R5bGUuc2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Cisg
ICAgc3R5bGUuc2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0
eWxlLnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0
UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKICAgICAKICAgICBOU0NvbnRy
b2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHN0eWxlKTsKICAgICBzZXRG
b250RnJvbUNvbnRyb2xTaXplKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBjb250cm9sU2l6ZSk7CkBA
IC0xMDkyLDExICsxMDkyLDExIEBAIGNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lU2FmYXJpOjpj
YW5jZWwKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFk
anVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JT
eXN0ZW1Gb250KHN0eWxlLCBjYW5jZWxCdXR0b25TaXplcygpKTsKLSAgICBzdHlsZS0+c2V0V2lk
dGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChz
aXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzaXplLmhl
aWdodCgpLCBGaXhlZCkpOwogfQogCiBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZVNhZmFyaTo6
cmVzdWx0c0J1dHRvblNpemVzKCkgY29uc3QKQEAgLTExMDYsMTEgKzExMDYsMTEgQEAgY29uc3Qg
SW50U2l6ZSogUmVuZGVyVGhlbWVTYWZhcmk6OnJlc3VsdAogfQogCiBjb25zdCBpbnQgZW1wdHlS
ZXN1bHRzT2Zmc2V0ID0gOTsKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZp
ZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZp
ZWxkRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxl
LCBFbGVtZW50JikgY29uc3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9u
dChzdHlsZSwgcmVzdWx0c0J1dHRvblNpemVzKCkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5n
dGgoc2l6ZS53aWR0aCgpIC0gZW1wdHlSZXN1bHRzT2Zmc2V0LCBGaXhlZCkpOwotICAgIHN0eWxl
LT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0
V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4ZWQpKTsK
KyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAK
IGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydChj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKQEAg
LTExMTgsMTEgKzExMTgsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRTZWFyY2hG
aWVsZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVTYWZh
cmk6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0CiB7CiAgICAgSW50U2l6
ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsK
LSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxl
LnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVp
Z2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCiBib29sIFJlbmRlclRoZW1l
U2FmYXJpOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRl
ck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmKQpA
QCAtMTE0MiwxMSArMTE0MiwxMSBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNlYXJj
aEZpZWxkCiB9CiAKIGNvbnN0IGludCByZXN1bHRzQXJyb3dXaWR0aCA9IDU7Ci12b2lkIFJlbmRl
clRoZW1lU2FmYXJpOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVy
VGhlbWVTYWZhcmk6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIEludFNp
emUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7
Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgKyByZXN1bHRzQXJyb3dX
aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgp
LCBGaXhlZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgKyByZXN1
bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNpemUu
aGVpZ2h0KCksIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmKQpAQCAtMTE5MCw5ICsxMTkwLDkgQEAgU3Ry
aW5nIFJlbmRlclRoZW1lU2FmYXJpOjptZWRpYUNvbnRyb2xzUwogI2VuZGlmCiAKICNpZiBFTkFC
TEUoTUVURVJfRUxFTUVOVCkKLXZvaWQgUmVuZGVyVGhlbWVTYWZhcmk6OmFkanVzdE1ldGVyU3R5
bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lU2FmYXJpOjphZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewotICAgIHN0eWxlLT5zZXRCb3hT
aGFkb3cobnVsbHB0cik7CisgICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCiBi
b29sIFJlbmRlclRoZW1lU2FmYXJpOjpzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0IHBhcnQpIGNv
bnN0CkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpzdXBwb3J0
c01ldGVyKENvCiAgICAgfQogfQogCi1JbnRTaXplIFJlbmRlclRoZW1lU2FmYXJpOjptZXRlclNp
emVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNv
bnN0CitJbnRTaXplIFJlbmRlclRoZW1lU2FmYXJpOjptZXRlclNpemVGb3JCb3VuZHMoY29uc3Qg
UmVuZGVyTWV0ZXImLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGJvdW5kcy5zaXplKCk7CiB9CkBAIC0xMjE3LDcgKzEyMTcsNyBAQCBib29sIFJlbmRlclRoZW1l
U2FmYXJpOjpwYWludE1ldGVyKGNvbnN0CiAgICAgaWYgKCFyZW5kZXJPYmplY3QuaXNNZXRlcigp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEhUTUxNZXRlckVsZW1lbnQqIGVsZW1lbnQg
PSB0b1JlbmRlck1ldGVyKCZyZW5kZXJPYmplY3QpLT5tZXRlckVsZW1lbnQoKTsKKyAgICBIVE1M
TWV0ZXJFbGVtZW50KiBlbGVtZW50ID0gdG9SZW5kZXJNZXRlcihyZW5kZXJPYmplY3QpLm1ldGVy
RWxlbWVudCgpOwogCiAgICAgaW50IHJlbWFpbmluZyA9IHN0YXRpY19jYXN0PGludD4oKDEuMCAt
IGVsZW1lbnQtPnZhbHVlUmF0aW8oKSkgKiBzdGF0aWNfY2FzdDxkb3VibGU+KHJlY3Quc2l6ZSgp
LndpZHRoKCkpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
U2FmYXJpLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lU2FmYXJpLmgJKHJldmlzaW9uIDE3MDQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZVNhZmFyaS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJP
YmplY3QmLCBJbnRSZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsCisgICAgdmlydHVhbCBib29sIGlz
Q29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEJvcmRlckRhdGEmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29s
b3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CkBAIC03NCw1NiArNzQsNTYg
QEAgcHVibGljOgogICAgIC8vIFN5c3RlbSBmb250cy4KICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVt
Rm9udChDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
aW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlJikgY29uc3Q7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFN0eWxlUmVzb2x2
ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsgCisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVy
U3R5bGUmLCBFbGVtZW50JikgY29uc3Q7IAogICAgIAotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50
ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBv
cHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZp
cnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7
CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlJikg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJT
dHlsZSYpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJl
bmRlclN0eWxlJikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdC
b3R0b20oUmVuZGVyU3R5bGUmKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIC8vIE1ldGhvZHMg
Zm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2Jv
eChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUmKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXpl
KFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5k
ZXJTdHlsZSYpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFN0
eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIFdlYkNvcmU6OkVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgV2ViQ29yZTo6RWxlbWVudCYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSYpIGNvbnN0OwogCiAg
ICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4
dEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShTdHlsZVJlc29sdmVyJiwg
UmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRU
ZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNvbHZl
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29s
IHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoU3R5
bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogCiAgICAgdmlydHVh
bCBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1i
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVs
ZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5
bGUmLCBFbGVtZW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgCiAgICAgdmlydHVh
bCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpAQCAtMTM0LDkgKzEzNCw5IEBAIHByb3RlY3Rl
ZDoKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCi0gICAgdmlydHVhbCBJbnRT
aXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciosIGNvbnN0IEludFJlY3Qm
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRz
KGNvbnN0IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c01ldGVyKENvbnRyb2xQYXJ0KSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dE1ldGVyU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1ldGVyKGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKICNlbmRpZgog
CkBAIC0xNTAsMTMgKzE1MCwxMyBAQCBwcml2YXRlOgogCiAgICAgLy8gR2V0IHRoZSBjb250cm9s
IHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LiAgVXNlZCBieSBzb21lIG9mIHRoZSBjb250cm9scyAo
bGlrZSBidXR0b25zKS4KIAotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JGb250KFJl
bmRlclN0eWxlKikgY29uc3Q7Ci0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvclN5c3Rl
bUZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXpl
Rm9yRm9udChSZW5kZXJTdHlsZSYpIGNvbnN0OworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNp
emVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlJikgY29uc3Q7CiAgICAgLy92b2lkIHNldENvbnRy
b2xTaXplKE5TQ2VsbCosIGNvbnN0IEludFNpemUqIHNpemVzLCBjb25zdCBJbnRTaXplJiBtaW5T
aXplKTsKLSAgICB2b2lkIHNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNp
emUqIHNpemVzKSBjb25zdDsKLSAgICBJbnRTaXplIHNpemVGb3JGb250KFJlbmRlclN0eWxlKiwg
Y29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAgIEludFNpemUgc2l6ZUZvclN5c3RlbUZv
bnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRGb250RnJvbUNvbnRyb2xTaXplKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIE5TQ29u
dHJvbFNpemUpIGNvbnN0OworICAgIHZvaWQgc2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlJiwg
Y29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAgIEludFNpemUgc2l6ZUZvckZvbnQoUmVu
ZGVyU3R5bGUmLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7CisgICAgSW50U2l6ZSBzaXpl
Rm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSYsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsK
KyAgICB2b2lkIHNldEZvbnRGcm9tQ29udHJvbFNpemUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7CiAKICAgICAvLyBIZWxwZXJzIGZvciBhZGp1c3Rp
bmcgYXBwZWFyYW5jZSBhbmQgZm9yIHBhaW50aW5nCiAgICAgY29uc3QgSW50U2l6ZSogY2hlY2ti
b3hTaXplcygpIGNvbnN0OwpAQCAtMTY1LDcgKzE2NSw3IEBAIHByaXZhdGU6CiAgICAgY29uc3Qg
SW50U2l6ZSogcmFkaW9TaXplcygpIGNvbnN0OwogICAgIGNvbnN0IGludCogcmFkaW9NYXJnaW5z
KE5TQ29udHJvbFNpemUpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRCdXR0b25QYWRkaW5nRnJvbUNv
bnRyb2xTaXplKFJlbmRlclN0eWxlKiwgTlNDb250cm9sU2l6ZSkgY29uc3Q7CisgICAgdm9pZCBz
ZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlJiwgTlNDb250cm9sU2l6
ZSkgY29uc3Q7CiAgICAgY29uc3QgSW50U2l6ZSogYnV0dG9uU2l6ZXMoKSBjb25zdDsKICAgICBj
b25zdCBpbnQqIGJ1dHRvbk1hcmdpbnMoTlNDb250cm9sU2l6ZSkgY29uc3Q7CiAKQEAgLTE3OCw3
ICsxNzgsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IEludFNpemUqIHNlYXJjaEZpZWxkU2l6ZXMo
KSBjb25zdDsKICAgICBjb25zdCBJbnRTaXplKiBjYW5jZWxCdXR0b25TaXplcygpIGNvbnN0Owog
ICAgIGNvbnN0IEludFNpemUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0OwotICAgIHZvaWQg
c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdm9pZCBzZXRTZWFy
Y2hGaWVsZFNpemUoUmVuZGVyU3R5bGUmKSBjb25zdDsKIAogICAgIFRoZW1lQ29udHJvbFN0YXRl
IGRldGVybWluZVN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJldmlzaW9uIDE3MDQy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5MSw3ICsyOTEsNyBAQCBTdHJpbmcgUmVuZGVyVGhlbWVXaW46OmV4dHJh
UXVpcmtzU3R5bGVTCiAgICAgcmV0dXJuIFN0cmluZyh0aGVtZVdpblF1aXJrc1VzZXJBZ2VudFN0
eWxlU2hlZXQsIHNpemVvZih0aGVtZVdpblF1aXJrc1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0K
IAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSop
IGNvbnN0Citib29sIFJlbmRlclRoZW1lV2luOjpzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0
eWxlJikgY29uc3QKIHsKICAgICAvLyBUaGUgQ2xhc3NpYy8yayBsb29rIGhhcyBubyBob3ZlciBl
ZmZlY3RzLgogICAgIHJldHVybiBoYXZlVGhlbWU7CkBAIC00MjksOSArNDI5LDkgQEAgYm9vbCBS
ZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNGb2N1cyhDb250cgogICAgIH0KIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZVdpbjo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAorYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKSBjb25zdAogewotICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5h
cHBlYXJhbmNlKCkpOworICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLmFwcGVhcmFuY2Uo
KSk7CiB9CiAKIHVuc2lnbmVkIFJlbmRlclRoZW1lV2luOjpkZXRlcm1pbmVDbGFzc2ljU3RhdGUo
Y29uc3QgUmVuZGVyT2JqZWN0JiBvLCBDb250cm9sU3ViUGFydCBzdWJQYXJ0KQpAQCAtNzMwLDEz
ICs3MzAsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRCdXR0b24oY29uc3QgUgogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0SW5uZXJTcGlu
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0SW5uZXJT
cGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUm
IHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewogICAgIGludCB3aWR0aCA9IDo6R2V0U3lzdGVt
TWV0cmljcyhTTV9DWFZTQ1JPTEwpOwogICAgIGlmICh3aWR0aCA8PSAwKQogICAgICAgICB3aWR0
aCA9IDE3OyAvLyBWaXN0YSdzIGRlZmF1bHQuCi0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3
aWR0aCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhl
ZCkpOworICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHls
ZS5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhl
bWVXaW46OnBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3Qg
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQpAQCAtNzU1LDI5ICs3NTUsMjkgQEAgYm9v
bCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRJbm5lclNwaW5CdXR0bwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OnNldENoZWNrYm94U2l6ZShSZW5kZXJT
dHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJl
IGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0
eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1
dG8oKSkKKyAgICBpZiAoIXN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5
bGUuaGVpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiAg
QSBoYXJkLWNvZGVkIHNpemUgb2YgMTMgaXMgdXNlZC4gIFRoaXMgaXMgd3JvbmcgYnV0IG5lY2Vz
c2FyeSBmb3Igbm93LiAgSXQgbWF0Y2hlcyBGaXJlZm94LgogICAgIC8vIEF0IGRpZmZlcmVudCBE
UEkgc2V0dGluZ3Mgb24gV2luZG93cywgcXVlcnlpbmcgdGhlIHRoZW1lIGdpdmVzIHlvdSBhIGxh
cmdlciBzaXplIHRoYXQgYWNjb3VudHMgZm9yCiAgICAgLy8gdGhlIGhpZ2hlciBEUEkuICBVbnRp
bCBvdXIgZW50aXJlIGVuZ2luZSBob25vcnMgYSBEUEkgc2V0dGluZyBvdGhlciB0aGFuIDk2LCB3
ZSBjYW4ndCByZWx5IG9uIHRoZSB0aGVtZSdzCiAgICAgLy8gbWV0cmljcy4KLSAgICBpZiAoc3R5
bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldFdpZHRo
KExlbmd0aCgxMywgRml4ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQot
ICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCgxMywgRml4ZWQpKTsKKyAgICBpZiAoc3R5
bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHlsZS5zZXRXaWR0aChM
ZW5ndGgoMTMsIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQorICAg
ICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKDEzLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRl
clRoZW1lV2luOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50
VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25z
dCBGbG9hdFJlY3QmIHIpCiB7Ci0gICAgZHJhd0NvbnRyb2woaS5jb250ZXh0LCAgbywgdGV4dEZp
ZWxkVGhlbWUoKSwgZ2V0VGhlbWVEYXRhKG8pLCByKTsKKyAgICBkcmF3Q29udHJvbChpLmNvbnRl
eHQsICBvLCB0ZXh0RmllbGRUaGVtZSgpLCBnZXRUaGVtZURhdGEobyksIEludFJlY3QocikpOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlz
dChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50TWVudUxp
c3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBIQU5ETEUgdGhlbWU7CiAgICAgaW50
IHBhcnQ7CkBAIC03OTIsNDYgKzc5Miw0NiBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludE1l
bnVMaXN0KGNvbnN0CiAgICAgICAgIHBhcnQgPSBURlBfVEVYVEZJRUxEOwogICAgIH0KIAotICAg
IGRyYXdDb250cm9sKHBhaW50SW5mby5jb250ZXh0LCByZW5kZXJlciwgdGhlbWUsIFRoZW1lRGF0
YShwYXJ0LCBkZXRlcm1pbmVTdGF0ZShyZW5kZXJlcikpLCByZWN0KTsKKyAgICBkcmF3Q29udHJv
bChwYWludEluZm8uY29udGV4dCwgcmVuZGVyZXIsIHRoZW1lLCBUaGVtZURhdGEocGFydCwgZGV0
ZXJtaW5lU3RhdGUocmVuZGVyZXIpKSwgSW50UmVjdChyZWN0KSk7CiAgICAgCiAgICAgcmV0dXJu
IHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhyZW5kZXJlciwgcGFpbnRJbmZvLCBGbG9h
dFJlY3QocmVjdCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RNZW51TGlzdFN0
eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdE1lbnVMaXN0U3R5bGUo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
JiBlKSBjb25zdAogewotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLnJlc2V0
Qm9yZGVyKCk7CiAgICAgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShzdHlsZVJlc29sdmVyLCBz
dHlsZSwgZSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0TWVudUxpc3RCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSYgc3R5bGUs
IEVsZW1lbnQmIGUpIGNvbnN0CiB7CiAgICAgLy8gVGhlc2UgYXJlIHRoZSBwYWRkaW5ncyBuZWVk
ZWQgdG8gcGxhY2UgdGhlIHRleHQgY29ycmVjdGx5IGluIHRoZSA8c2VsZWN0PiBib3gKICAgICBj
b25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nVG9wICAgID0gMjsKLSAgICBjb25zdCBpbnQgZHJv
cERvd25Cb3hQYWRkaW5nUmlnaHQgID0gc3R5bGUtPmRpcmVjdGlvbigpID09IExUUiA/IDQgKyBk
cm9wRG93bkJ1dHRvbldpZHRoIDogNDsKKyAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5n
UmlnaHQgID0gc3R5bGUuZGlyZWN0aW9uKCkgPT0gTFRSID8gNCArIGRyb3BEb3duQnV0dG9uV2lk
dGggOiA0OwogICAgIGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdCb3R0b20gPSAyOwotICAg
IGNvbnN0IGludCBkcm9wRG93bkJveFBhZGRpbmdMZWZ0ICAgPSBzdHlsZS0+ZGlyZWN0aW9uKCkg
PT0gTFRSID8gNCA6IDQgKyBkcm9wRG93bkJ1dHRvbldpZHRoOworICAgIGNvbnN0IGludCBkcm9w
RG93bkJveFBhZGRpbmdMZWZ0ICAgPSBzdHlsZS5kaXJlY3Rpb24oKSA9PSBMVFIgPyA0IDogNCAr
IGRyb3BEb3duQnV0dG9uV2lkdGg7CiAgICAgLy8gVGhlIDxzZWxlY3Q+IGJveCBtdXN0IGJlIGF0
IGxlYXN0IDEycHggaGlnaCBmb3IgdGhlIGJ1dHRvbiB0byByZW5kZXIgbmljZWx5IG9uIFdpbmRv
d3MKICAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hNaW5IZWlnaHQgPSAxMjsKICAgICAKICAgICAv
LyBQb3NpdGlvbiB0aGUgdGV4dCBjb3JyZWN0bHkgd2l0aGluIHRoZSBzZWxlY3QgYm94IGFuZCBt
YWtlIHRoZSBib3ggd2lkZSBlbm91Z2ggdG8gZml0IHRoZSBkcm9wZG93biBidXR0b24KLSAgICBz
dHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5nVG9wLCBGaXhlZCkp
OwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ1Jp
Z2h0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChkcm9wRG93
bkJveFBhZGRpbmdCb3R0b20sIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExl
bmd0aChkcm9wRG93bkJveFBhZGRpbmdMZWZ0LCBGaXhlZCkpOworICAgIHN0eWxlLnNldFBhZGRp
bmdUb3AoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ1RvcCwgRml4ZWQpKTsKKyAgICBzdHlsZS5z
ZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ1JpZ2h0LCBGaXhlZCkpOwor
ICAgIHN0eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ0JvdHRv
bSwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nTGVmdChMZW5ndGgoZHJvcERvd25Cb3hQ
YWRkaW5nTGVmdCwgRml4ZWQpKTsKIAogICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0bwot
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQo
TGVuZ3RoKEF1dG8pKTsKIAogICAgIC8vIENhbGN1bGF0ZSBvdXIgbWluLWhlaWdodAotICAgIGlu
dCBtaW5IZWlnaHQgPSBzdHlsZS0+Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAgICBpbnQgbWlu
SGVpZ2h0ID0gc3R5bGUuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKICAgICBtaW5IZWlnaHQgPSBt
YXgobWluSGVpZ2h0LCBkcm9wRG93bkJveE1pbkhlaWdodCk7CiAKLSAgICBzdHlsZS0+c2V0TWlu
SGVpZ2h0KExlbmd0aChtaW5IZWlnaHQsIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0TWluSGVpZ2h0
KExlbmd0aChtaW5IZWlnaHQsIEZpeGVkKSk7CiAKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc3R5bGUuc2V0TGluZUhlaWdo
dChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAgICAgCiAgICAgLy8gV2hpdGUt
c3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7Cisg
ICAgc3R5bGUuc2V0V2hpdGVTcGFjZShQUkUpOwogfQogCiBib29sIFJlbmRlclRoZW1lV2luOjpw
YWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJl
ciwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAg
LTg4NiwxNSArODg2LDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2xpZGVyVGh1bWIo
Y28KIGNvbnN0IGludCBzbGlkZXJUaHVtYldpZHRoID0gNzsKIGNvbnN0IGludCBzbGlkZXJUaHVt
YkhlaWdodCA9IDE1OwogCi12b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTbGlkZXJUaHVtYlNp
emUoUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVX
aW46OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBj
b25zdAogewotICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOworICAg
IENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS5hcHBlYXJhbmNlKCk7CiAgICAgaWYgKHBhcnQgPT0g
U2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0
aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChM
ZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0V2lkdGgo
TGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOworICAgICAgICBzdHlsZS5zZXRIZWln
aHQoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7CiAgICAgfSBlbHNlIGlmIChwYXJ0
ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRo
KExlbmd0aChzbGlkZXJUaHVtYldpZHRoLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUuc2V0
V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNl
dEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJIZWlnaHQsIEZpeGVkKSk7CiAgICAgfQogI2lmIEVO
QUJMRShWSURFTykgJiYgVVNFKENHKQogICAgIGVsc2UgaWYgKHBhcnQgPT0gTWVkaWFTbGlkZXJU
aHVtYlBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCkgCkBAIC05MDcs
MTYgKzkwNywxNiBAQCBib29sIFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkKGNvCiAg
ICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwogfQogCi12b2lkIFJlbmRlclRoZW1l
V2luOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVX
aW46OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
UmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlKSBjb25zdAogewogICAgIC8vIE92ZXJyaWRl
IHBhZGRpbmdTaXplIHRvIG1hdGNoIEFwcEtpdCB0ZXh0IHBvc2l0aW9uaW5nLgogICAgIGNvbnN0
IGludCBwYWRkaW5nID0gMTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRp
bmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywg
Rml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQpKTsK
LSAgICBpZiAoZSAmJiBlLT5mb2N1c2VkKCkgJiYgZS0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxl
Y3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkKLSAgICAgICAgc3R5bGUtPnNldE91dGxpbmVP
ZmZzZXQoLTIpOworICAgIHN0eWxlLnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhl
ZCkpOworICAgIHN0eWxlLnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsK
KyAgICBzdHlsZS5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0
eWxlLnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgaWYgKGUu
Zm9jdXNlZCgpICYmIGUuZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRB
bmRBY3RpdmUoKSkKKyAgICAgICAgc3R5bGUuc2V0T3V0bGluZU9mZnNldCgtMik7CiB9CiAKIGJv
b2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVu
ZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKQEAgLTk0NCwzMCArOTQ0LDMwIEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50U2VhcmNo
RmllbGRDYW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFk
anVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYg
c3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBi
YXNlZCBvbiB0aGUgZm9udCBzaXplCi0gICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRT
aXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7CisgICAgZmxvYXQgZm9udFNjYWxl
ID0gc3R5bGUuZm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKICAgICBp
bnQgY2FuY2VsQnV0dG9uU2l6ZSA9IGxyb3VuZGYobWluKG1heChtaW5DYW5jZWxCdXR0b25TaXpl
LCBkZWZhdWx0Q2FuY2VsQnV0dG9uU2l6ZSAqIGZvbnRTY2FsZSksIG1heENhbmNlbEJ1dHRvblNp
emUpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQp
KTsKKyAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsK
KyAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVXaW46OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblBhcnRTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsK
ICAgICBJbnRTaXplIGVtcHR5U2l6ZSgxLCAxMSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0
aChlbXB0eVNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0
aChlbXB0eVNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3Ro
KGVtcHR5U2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgo
ZW1wdHlTaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRoZW1lV2luOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdp
bjo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29s
dmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAvLyBTY2Fs
ZSB0aGUgZGVjb3JhdGlvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUKLSAgICBmbG9hdCBm
b250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6
ZTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS5mb250U2l6ZSgpIC8gZGVmYXVsdENvbnRy
b2xGb250UGl4ZWxTaXplOwogICAgIGludCBtYWduaWZpZXJTaXplID0gbHJvdW5kZihtaW4obWF4
KG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplLCBkZWZhdWx0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblNpemUgKiBmb250U2NhbGUpLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSkpOwot
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOworICAgIHN0eWxl
LnNldFdpZHRoKExlbmd0aChtYWduaWZpZXJTaXplLCBGaXhlZCkpOworICAgIHN0eWxlLnNldEhl
aWdodChMZW5ndGgobWFnbmlmaWVyU2l6ZSwgRml4ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVt
ZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJP
YmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQpA
QCAtOTkzLDE1ICs5OTMsMTUgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRTZWFyY2hGaWVs
ZFJlcwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lV2luOjphZGp1c3RTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0
eWxlLCBFbGVtZW50JikgY29uc3QKIHsKICAgICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNpemUgYmFz
ZWQgb24gdGhlIGZvbnQgc2l6ZQotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6
ZSgpIC8gZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplOworICAgIGZsb2F0IGZvbnRTY2FsZSA9
IHN0eWxlLmZvbnRTaXplKCkgLyBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNpemU7CiAgICAgaW50
IG1hZ25pZmllckhlaWdodCA9IGxyb3VuZGYobWluKG1heChtaW5TZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uU2l6ZSwgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplICog
Zm9udFNjYWxlKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplKSk7CiAgICAgaW50IG1hZ25pZmllcldpZHRoID0g
bHJvdW5kZihtYWduaWZpZXJIZWlnaHQgKiBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
V2lkdGggLyBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpOwotICAgIHN0
eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyV2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgobWFnbmlmaWVySGVpZ2h0LCBGaXhlZCkpOworICAgIHN0eWxlLnNl
dFdpZHRoKExlbmd0aChtYWduaWZpZXJXaWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWln
aHQoTGVuZ3RoKG1hZ25pZmllckhlaWdodCwgRml4ZWQpKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVt
ZVdpbjo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKQEAgLTExNTcs
OSArMTE1Nyw5IEBAIFN0cmluZyBSZW5kZXJUaGVtZVdpbjo6bWVkaWFDb250cm9sc1NjcmkKICNl
bmRpZgogCiAjaWYgRU5BQkxFKE1FVEVSX0VMRU1FTlQpCi12b2lkIFJlbmRlclRoZW1lV2luOjph
ZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZVdpbjo6YWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKIHsKLSAgICBzdHls
ZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIHN0eWxlLnNldEJveFNoYWRvdyhudWxscHRy
KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNNZXRlcihDb250cm9sUGFydCBw
YXJ0KSBjb25zdApAQCAtMTE3Miw3ICsxMTcyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3Vw
cG9ydHNNZXRlcihDb250cgogICAgIH0KIH0KIAotSW50U2l6ZSBSZW5kZXJUaGVtZVdpbjo6bWV0
ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29uc3QgSW50UmVjdCYgYm91bmRz
KSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZVdpbjo6bWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0
IFJlbmRlck1ldGVyJiwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAogewogICAgIHJldHVy
biBib3VuZHMuc2l6ZSgpOwogfQpAQCAtMTE4Miw3ICsxMTgyLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZVdpbjo6cGFpbnRNZXRlcihjb25zdCBSZQogICAgIGlmICghcmVuZGVyT2JqZWN0LmlzTWV0ZXIo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBIVE1MTWV0ZXJFbGVtZW50KiBlbGVtZW50
ID0gdG9SZW5kZXJNZXRlcigmcmVuZGVyT2JqZWN0KS0+bWV0ZXJFbGVtZW50KCk7CisgICAgSFRN
TE1ldGVyRWxlbWVudCogZWxlbWVudCA9IHRvUmVuZGVyTWV0ZXIocmVuZGVyT2JqZWN0KS5tZXRl
ckVsZW1lbnQoKTsKIAogICAgIFRoZW1lRGF0YSB0aGVtZSA9IGdldFRoZW1lRGF0YShyZW5kZXJP
YmplY3QpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4u
aAkocmV2aXNpb24gMTcwNDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDc0ICs1NSw3NCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBTdHJpbmcgZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7CiAKICAgICAvLyBBIG1ldGhv
ZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRy
YXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0
IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29u
c3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgQ29sb3IgcGxh
dGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgQ29s
b3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIFN5
c3RlbSBmb250cy4KLSAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChDU1NWYWx1ZUlELCBGb250
RGVzY3JpcHRpb24mKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKENTU1Zh
bHVlSUQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KENTU1ZhbHVlSUQsIEZv
bnREZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVt
Q29sb3IoQ1NTVmFsdWVJRCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRDaGVja2JveChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChjb25zdCBSZW5k
ZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikgb3ZlcnJp
ZGUKICAgICB7IHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhjb25z
dCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikg
b3ZlcnJpZGUKICAgICB7IHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsgfQotICAgIHZpcnR1
YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorICAgIHZpcnR1
YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdCBvdmVycmlkZQog
ICAgIHsgcmV0dXJuIHNldENoZWNrYm94U2l6ZShzdHlsZSk7IH0KIAotICAgIHZpcnR1YWwgYm9v
bCBwYWludEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50SW5u
ZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUo
U3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9i
amVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJ
bmZvJiBpLCBjb25zdCBGbG9hdFJlY3QmIHIpIG92ZXJyaWRlCiAgICAgeyByZXR1cm4gcGFpbnRU
ZXh0RmllbGQobywgaSwgcik7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0
eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50JikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRp
b25zKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVj
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBi
b29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNp
emUoUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50
U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxl
JiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBib29sIHBvcHVwT3B0
aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBwb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxl
bWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZERlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvblBh
cnQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVj
b3JhdGlvblBhcnRTdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0
aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jikgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0
eWxlJiwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiwgRWxlbWVudCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7CisgICAgdmly
dHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdCB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHsgfQotICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYp
IGNvbnN0IG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHls
ZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3Qgb3Zl
cnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlIHsgfQog
CiAgICAgc3RhdGljIHZvaWQgc2V0V2ViS2l0SXNCZWluZ1VubG9hZGVkKCk7CiAKICAgICBzdGF0
aWMgU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZShDRlN0cmluZ1JlZiBuYW1lLCBDRlN0
cmluZ1JlZiB0eXBlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25z
dCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmlu
Zyhjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOwogCiAjaWYgRU5BQkxFKFZJREVP
KQogICAgIHZpcnR1YWwgU3RyaW5nIG1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkgb3ZlcnJpZGU7
CkBAIC0xMzAsMTMgKzEzMCwxMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRVRF
Ul9FTEVNRU5UKQotICAgIHZpcnR1YWwgSW50U2l6ZSBtZXRlclNpemVGb3JCb3VuZHMoY29uc3Qg
UmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBJbnRTaXplIG1ldGVyU2l6ZUZvckJvdW5kcyhjb25zdCBSZW5kZXJNZXRlciYsIGNvbnN0IElu
dFJlY3QmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNZXRlcihD
b250cm9sUGFydCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1ldGVy
U3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxlKFN0eWxlUmVzb2x2ZXImLCBS
ZW5kZXJTdHlsZSYsIEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZXRlcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jikgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93
UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CiAKIHByaXZhdGU6CiAgICAgZW51bSBDb250cm9sU3ViUGFydCB7
CkBAIC0xNDgsNyArMTQ4LDcgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJUaGVtZVdpbigpOwogICAg
IHZpcnR1YWwgflJlbmRlclRoZW1lV2luKCk7CiAKLSAgICB2b2lkIGFkZEludHJpbnNpY01hcmdp
bnMoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVu
ZGVyU3R5bGUmKSBjb25zdDsKICAgICB2b2lkIGNsb3NlKCk7CiAKICAgICB1bnNpZ25lZCBkZXRl
cm1pbmVTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QmKTsK
</data>
<flag name="review"
          id="258330"
          type_id="1"
          status="+"
          setter="zalan"
    />
    <flag name="commit-queue"
          id="258343"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>