<?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>53185</bug_id>
          
          <creation_ts>2011-01-26 12:17:26 -0800</creation_ts>
          <short_desc>[chromium] revert r68310 because of race conditions detected by tsans</short_desc>
          <delta_ts>2011-02-04 06:15:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tony Chang">tony</reporter>
          <assigned_to name="Tony Chang">tony</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dumi</cc>
    
    <cc>levin</cc>
    
    <cc>michaeln</cc>
    
    <cc>phajdan.jr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>340392</commentid>
    <comment_count>0</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-26 12:17:26 -0800</bug_when>
    <thetext>[chromium] revert r68310 because of race conditions detected by tsans</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340393</commentid>
    <comment_count>1</comment_count>
      <attachid>80221</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-26 12:18:20 -0800</bug_when>
    <thetext>Created attachment 80221
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340398</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-26 12:22:52 -0800</bug_when>
    <thetext>Attachment 80221 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:45:  The parameter name &quot;file&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:45:  chromium_sqlite3_initialize_unix_sqlite3_file is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:46:  The parameter name &quot;vfs&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:46:  The parameter name &quot;file&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:46:  chromium_sqlite3_fill_in_unix_sqlite3_file is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:47:  The parameter name &quot;file&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:47:  chromium_sqlite3_get_reusable_file_handle is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:48:  The parameter name &quot;file&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:48:  chromium_sqlite3_update_reusable_file_handle is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:49:  The parameter name &quot;file&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:49:  chromium_sqlite3_destroy_reusable_file_handle is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:125:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:155:  Use 0 instead of NULL.  [readability/null] [4]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:173:  unix_vfs is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 14 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340400</commentid>
    <comment_count>3</comment_count>
      <attachid>80221</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-26 12:27:56 -0800</bug_when>
    <thetext>Comment on attachment 80221
Patch

Fails to link:


  LINK(target) out/Release/DumpRenderTree
out/Release/obj.target/third_party/WebKit/Source/WebCore/WebCore.gyp/libwebcore_platform.a(SQLiteFileSystemChromiumPosix.o): In function `(anonymous namespace)::chromiumOpen(sqlite3_vfs*, char const*, sqlite3_file*, int, int*)&apos;:
SQLiteFileSystemChromiumPosix.cpp:(.text._ZN118_GLOBAL__N_third_party_WebKit_Source_WebCore_platform_sql_chromium_SQLiteFileSystemChromiumPosix.cpp_00000000_DC8A7F2712chromiumOpenEP11sqlite3_vfsPKcP12sqlite3_fileiPi+0x13): undefined reference to `chromium_sqlite3_initialize_unix_sqlite3_file&apos;
SQLiteFileSystemChromiumPosix.cpp:(.text._ZN118_GLOBAL__N_third_party_WebKit_Source_WebCore_platform_sql_chromium_SQLiteFileSystemChromiumPosix.cpp_00000000_DC8A7F2712chromiumOpenEP11sqlite3_vfsPKcP12sqlite3_fileiPi+0x34): undefined reference to `chromium_sqlite3_get_reusable_file_handle&apos;
SQLiteFileSystemChromiumPosix.cpp:(.text._ZN118_GLOBAL__N_third_party_WebKit_Source_WebCore_platform_sql_chromium_SQLiteFileSystemChromiumPosix.cpp_00000000_DC8A7F2712chromiumOpenEP11sqlite3_vfsPKcP12sqlite3_fileiPi+0x68): undefined reference to `chromium_sqlite3_update_reusable_file_handle&apos;
SQLiteFileSystemChromiumPosix.cpp:(.text._ZN118_GLOBAL__N_third_party_WebKit_Source_WebCore_platform_sql_chromium_SQLiteFileSystemChromiumPosix.cpp_00000000_DC8A7F2712chromiumOpenEP11sqlite3_vfsPKcP12sqlite3_fileiPi+0xcf): undefined reference to `chromium_sqlite3_fill_in_unix_sqlite3_file&apos;
SQLiteFileSystemChromiumPosix.cpp:(.text._ZN118_GLOBAL__N_third_party_WebKit_Source_WebCore_platform_sql_chromium_SQLiteFileSystemChromiumPosix.cpp_00000000_DC8A7F2712chromiumOpenEP11sqlite3_vfsPKcP12sqlite3_fileiPi+0xe7): undefined reference to `chromium_sqlite3_destroy_reusable_file_handle&apos;
SQLiteFileSystemChromiumPosix.cpp:(.text._ZN118_GLOBAL__N_third_party_WebKit_Source_WebCore_platform_sql_chromium_SQLiteFileSystemChromiumPosix.cpp_00000000_DC8A7F2712chromiumOpenEP11sqlite3_vfsPKcP12sqlite3_fileiPi+0x140): undefined reference to `chromium_sqlite3_destroy_reusable_file_handle&apos;
collect2: ld returned 1 exit status
make: *** [out/Release/DumpRenderTree] Error 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340402</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-26 12:29:53 -0800</bug_when>
    <thetext>Attachment 80221 did not build on chromium:
Build output: http://queues.webkit.org/results/7600320</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340408</commentid>
    <comment_count>5</comment_count>
      <attachid>80225</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-26 12:36:00 -0800</bug_when>
    <thetext>Created attachment 80225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340410</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-26 12:37:51 -0800</bug_when>
    <thetext>Attachment 80225 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:45:  The parameter name &quot;file&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:45:  chromium_sqlite3_initialize_unix_sqlite3_file is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:46:  The parameter name &quot;vfs&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:46:  The parameter name &quot;file&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:46:  chromium_sqlite3_fill_in_unix_sqlite3_file is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:47:  The parameter name &quot;file&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:47:  chromium_sqlite3_get_reusable_file_handle is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:48:  The parameter name &quot;file&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:48:  chromium_sqlite3_update_reusable_file_handle is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:49:  The parameter name &quot;file&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:49:  chromium_sqlite3_destroy_reusable_file_handle is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:125:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:155:  Use 0 instead of NULL.  [readability/null] [4]
Source/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:173:  unix_vfs is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 14 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340436</commentid>
    <comment_count>7</comment_count>
      <attachid>80225</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-26 13:30:59 -0800</bug_when>
    <thetext>Comment on attachment 80225
Patch

http://trac.webkit.org/changeset/76713</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345455</commentid>
    <comment_count>8</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-02-04 06:15:32 -0800</bug_when>
    <thetext>This appears to be resolved so I&apos;m marking it as such.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80221</attachid>
            <date>2011-01-26 12:18:20 -0800</date>
            <delta_ts>2011-01-26 12:35:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53185-20110126121942.patch</filename>
            <type>text/plain</type>
            <size>41006</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNTIxMjZhNTIxZTI5OThlYmU2MTJlM2Y5ZjIyMGJmOWFmOGJiMTk1Li5l
MTRmZjU2ZTc1Yzc5NGI3OTlhMGI0MzIxYzgzZjRlMWZkOTliZDc3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTEtMDEtMjYgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21p
dW1dIHJldmVydCByNjgzMTAgYmVjYXVzZSBvZiByYWNlIGNvbmRpdGlvbnMgZGV0ZWN0ZWQgYnkg
dHNhbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUz
MTg1CisKKyAgICAgICAgQ2F1c2VzIHN0YWJpbGl0eSBwcm9ibGVtcyBmb3IgQ2hyb21pdW0sIGh0
dHA6Ly9jcmJ1Zy5jb20vNzA1ODkKKworICAgICAgICAqIHBsYXRmb3JtL3NxbC9jaHJvbWl1bS9T
UUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1Qb3NpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxp
dGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUyk6CisKIDIwMTEtMDEtMjYgIE5hdGUgQ2hh
cGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJh
cnRoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NR
TGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVBvc2l4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1Qb3NpeC5jcHAKaW5kZXggMzdm
OTZiZTY5YjBhN2VhODIxMGM5ZTU1NmQ5YTFmZmYwZjk3N2Q2YS4uNmRiYzM4NDA3NTU2ODMzNzM1
ZTYyNDFkY2NkYmE4MmYxMGQyY2Q3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVBvc2l4LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9t
aXVtUG9zaXguY3BwCkBAIC0zNCw5MzggKzM0LDIzIEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Ccmlk
Z2UuaCIKICNpbmNsdWRlIDxzcWxpdGUzLmg+CiAKLSNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1
ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4K
LSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUg
PHVuaXN0ZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotLy8gQ2hyb21pdW0ncyBQ
b3NpeCBpbXBsZW1lbnRhdGlvbiBvZiBTUUxpdGUgVkZTLgotLy8gVGhpcyBpcyBoZWF2aWx5IGJh
c2VkIG9uIFNRTGl0ZSdzIG9zX3VuaXguYywKLS8vIHdpdGhvdXQgcGFydHMgd2UgZG9uJ3QgbmVl
ZC4KLQotLy8gSWRlbnRpZmllcyBhIGZpbGUgYnkgaXRzIGRldmljZSBudW1iZXIgYW5kIGlub2Rl
Lgotc3RydWN0IENocm9taXVtRmlsZUlkIHsKLSAgICBkZXZfdCBkZXY7IC8vIERldmljZSBudW1i
ZXIuCi0gICAgaW5vX3QgaW5vOyAvLyBJbm9kZSBudW1iZXIuCi19OwotCi0vLyBJbmZvcm1hdGlv
biBhYm91dCBmaWxlIGxvY2tzIChvbmUgcGVyIG9wZW4gaW5vZGUpLiBOb3RlIHRoYXQgbWFueSBv
cGVuCi0vLyBmaWxlIGRlc2NyaXB0b3JzIG1heSByZWZlciB0byB0aGUgc2FtZSBpbm9kZS4KLXN0
cnVjdCBDaHJvbWl1bUxvY2tJbmZvIHsKLSAgICBDaHJvbWl1bUZpbGVJZCBsb2NrS2V5OyAvLyBG
aWxlIGlkZW50aWZpZXIuCi0gICAgaW50IGNudDsgLy8gTnVtYmVyIG9mIHNoYXJlZCBsb2NrcyBo
ZWxkLgotICAgIGludCBsb2NrdHlwZTsgLy8gVHlwZSBvZiB0aGUgbG9jay4KLSAgICBpbnQgblJl
ZjsgLy8gUmVmZXJlbmNlIGNvdW50LgotCi0gICAgLy8gRG91YmxlLWxpbmtlZCBsaXN0IHBvaW50
ZXJzLgotICAgIENocm9taXVtTG9ja0luZm8qIHBOZXh0OyAKLSAgICBDaHJvbWl1bUxvY2tJbmZv
KiBwUHJldjsKLX07Ci0KLS8vIEluZm9ybWF0aW9uIGFib3V0IGEgZmlsZSBkZXNjcmlwdG9yIHRo
YXQgY2Fubm90IGJlIGNsb3NlZCBpbW1lZGlhdGVseS4KLXN0cnVjdCBDaHJvbWl1bVVudXNlZEZk
IHsKLSAgICBpbnQgZmQ7IC8vIEZpbGUgZGVzY3JpcHRvci4KLSAgICBpbnQgZmxhZ3M7IC8vIEZs
YWdzIHRoaXMgZmlsZSBkZXNjcmlwdG9yIHdhcyBvcGVuZWQgd2l0aC4KLSAgICBDaHJvbWl1bVVu
dXNlZEZkKiBwTmV4dDsgLy8gTmV4dCB1bnVzZWQgZmlsZSBkZXNjcmlwdG9yIG9uIHRoZSBzYW1l
IGZpbGUuCi19OwotCi0vLyBJbmZvcm1hdGlvbiBhYm91dCBhbiBvcGVuIGlub2RlLiBXaGVuIHdl
IHdhbnQgdG8gY2xvc2UgYW4gaW5vZGUKLS8vIHRoYXQgc3RpbGwgaGFzIGxvY2tzLCB3ZSBkZWZl
ciB0aGUgY2xvc2UgdW50aWwgYWxsIGxvY2tzIGFyZSBjbGVhcmVkLgotc3RydWN0IENocm9taXVt
T3BlbkluZm8gewotICAgIENocm9taXVtRmlsZUlkIGZpbGVJZDsgLy8gVGhlIGxvb2t1cCBrZXku
Ci0gICAgaW50IG5SZWY7IC8vIFJlZmVyZW5jZSBjb3VudC4KLSAgICBpbnQgbkxvY2s7IC8vIE51
bWJlciBvZiBvdXRzdGFuZGluZyBsb2Nrcy4KLSAgICBDaHJvbWl1bVVudXNlZEZkKiBwVW51c2Vk
OyAvLyBMaXN0IG9mIGZpbGUgZGVzY3JpcHRvcnMgdG8gY2xvc2UuCi0KLSAgICAvLyBEb3VibGUt
bGlua2VkIGxpc3QgcG9pbnRlcnMuCi0gICAgQ2hyb21pdW1PcGVuSW5mbyogcE5leHQ7Ci0gICAg
Q2hyb21pdW1PcGVuSW5mbyogcFByZXY7Ci19OwotCi0vLyBLZWVwIHRyYWNrIG9mIGxvY2tzIGFu
ZCBpbm9kZXMgaW4gZG91YmxlLWxpbmtlZCBsaXN0cy4KLXN0YXRpYyBzdHJ1Y3QgQ2hyb21pdW1M
b2NrSW5mbyogbG9ja0xpc3QgPSAwOwotc3RhdGljIHN0cnVjdCBDaHJvbWl1bU9wZW5JbmZvKiBv
cGVuTGlzdCA9IDA7Ci0KLS8vIEV4dGVuc2lvbiBvZiBzcWxpdGUzX2ZpbGUgc3BlY2lmaWMgdG8g
dGhlIGNocm9taXVtIFZGUy4KLXN0cnVjdCBDaHJvbWl1bUZpbGUgewotICAgIHNxbGl0ZTNfaW9f
bWV0aG9kcyBjb25zdCogcE1ldGhvZDsgLy8gSW1wbGVtZW50YXRpb24gb2Ygc3FsaXRlM19maWxl
LgotICAgIENocm9taXVtT3BlbkluZm8qIHBPcGVuOyAvLyBJbmZvcm1hdGlvbiBhYm91dCBhbGwg
b3BlbiBmaWxlIGRlc2NyaXB0b3JzIGZvciB0aGlzIGZpbGUuCi0gICAgQ2hyb21pdW1Mb2NrSW5m
byogcExvY2s7IC8vIEluZm9ybWF0aW9uIGFib3V0IGFsbCBsb2NrcyBmb3IgdGhpcyBmaWxlLgot
ICAgIGludCBoOyAvLyBGaWxlIGRlc2NyaXB0b3IuCi0gICAgaW50IGRpcmZkOyAvLyBGaWxlIGRl
c2NyaXB0b3IgZm9yIHRoZSBmaWxlIGRpcmVjdG9yeS4KLSAgICB1bnNpZ25lZCBjaGFyIGxvY2t0
eXBlOyAvLyBUeXBlIG9mIHRoZSBsb2NrIHVzZWQgZm9yIHRoaXMgZmlsZS4KLSAgICBpbnQgbGFz
dEVycm5vOyAvLyBWYWx1ZSBvZiBlcnJubyBmb3IgbGFzdCBvcGVyYXRpb24gb24gdGhpcyBmaWxl
LgotICAgIENocm9taXVtVW51c2VkRmQqIHBVbnVzZWQ7IC8vIEluZm9ybWF0aW9uIGFib3V0IHVu
dXNlZCBmaWxlIGRlc2NyaXB0b3JzIGZvciB0aGlzIGZpbGUuCi19OwotCi0vLyBUaGUgZm9sbG93
aW5nIGNvbnN0YW50cyBzcGVjaWZ5IHRoZSByYW5nZSBvZiBieXRlcyB1c2VkIGZvciBsb2NraW5n
LgotLy8gU1FMaXRlU2hhcmVkU2l6ZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBp
biB0aGUgcG9vbCBmcm9tIHdoaWNoCi0vLyBhIHJhbmRvbSBieXRlIGlzIHNlbGVjdGVkIGZvciBh
IHNoYXJlZCBsb2NrLiAgVGhlIHBvb2wgb2YgYnl0ZXMgZm9yCi0vLyBzaGFyZWQgbG9ja3MgYmVn
aW5zIGF0IFNRTGl0ZVNoYXJlZEZpcnN0Qnl0ZS4gCi0vLyBUaGUgdmFsdWVzIGFyZSB0aGUgc2Ft
ZSBhcyB1c2VkIGJ5IFNRTGl0ZSBmb3IgY29tcGF0aWJpbGl0eS4KLXN0YXRpYyBjb25zdCBvZmZf
dCBTUUxpdGVQZW5kaW5nQnl0ZSA9IDB4NDAwMDAwMDA7Ci1zdGF0aWMgY29uc3Qgb2ZmX3QgU1FM
aXRlUmVzZXJ2ZWRCeXRlID0gU1FMaXRlUGVuZGluZ0J5dGUgKyAxOwotc3RhdGljIGNvbnN0IG9m
Zl90IFNRTGl0ZVNoYXJlZEZpcnN0Qnl0ZSA9IFNRTGl0ZVBlbmRpbmdCeXRlICsgMjsKLXN0YXRp
YyBjb25zdCBvZmZfdCBTUUxpdGVTaGFyZWRTaXplID0gNTEwOwotCi0vLyBNYXBzIGEgUE9TSVgg
ZXJyb3IgY29kZSB0byBhbiBTUUxpdGUgZXJyb3IgY29kZS4KLXN0YXRpYyBpbnQgc3FsaXRlRXJy
b3JGcm9tUG9zaXhFcnJvcihpbnQgcG9zaXhFcnJvciwgaW50IHNxbGl0ZUlPRXJyKQotewotICAg
IHN3aXRjaCAocG9zaXhFcnJvcikgewotICAgIGNhc2UgMDogCi0gICAgICAgIHJldHVybiBTUUxJ
VEVfT0s7Ci0gICAgY2FzZSBFQUdBSU46Ci0gICAgY2FzZSBFVElNRURPVVQ6Ci0gICAgY2FzZSBF
QlVTWToKLSAgICBjYXNlIEVJTlRSOgotICAgIGNhc2UgRU5PTENLOiAgCi0gICAgICAgIHJldHVy
biBTUUxJVEVfQlVTWTsKLSAgICBjYXNlIEVBQ0NFUzogCi0gICAgICAgIC8vIEVBQ0NFUyBpcyBs
aWtlIEVBR0FJTiBkdXJpbmcgbG9ja2luZyBvcGVyYXRpb25zLgotICAgICAgICBpZiAoKHNxbGl0
ZUlPRXJyID09IFNRTElURV9JT0VSUl9MT0NLKSB8fAotICAgICAgICAgICAgKHNxbGl0ZUlPRXJy
ID09IFNRTElURV9JT0VSUl9VTkxPQ0spIHx8Ci0gICAgICAgICAgICAoc3FsaXRlSU9FcnIgPT0g
U1FMSVRFX0lPRVJSX1JETE9DSykgfHwKLSAgICAgICAgICAgIChzcWxpdGVJT0VyciA9PSBTUUxJ
VEVfSU9FUlJfQ0hFQ0tSRVNFUlZFRExPQ0spKQotICAgICAgICAgICAgcmV0dXJuIFNRTElURV9C
VVNZOwotICAgICAgICByZXR1cm4gU1FMSVRFX1BFUk07Ci0gICAgY2FzZSBFUEVSTTogCi0gICAg
ICAgIHJldHVybiBTUUxJVEVfUEVSTTsKLSAgICBjYXNlIEVERUFETEs6Ci0gICAgICAgIHJldHVy
biBTUUxJVEVfSU9FUlJfQkxPQ0tFRDsKLSAgICBkZWZhdWx0OiAKLSAgICAgICAgcmV0dXJuIHNx
bGl0ZUlPRXJyOwotICAgIH0KLX0KLQotLy8gUmVsZWFzZXMgYSBDaHJvbWl1bUxvY2tJbmZvIHN0
cnVjdHVyZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBieSBmaW5kTG9ja0luZm8oKS4KLXN0YXRpYyB2
b2lkIHJlbGVhc2VMb2NrSW5mbyhDaHJvbWl1bUxvY2tJbmZvKiBwTG9jaykKLXsKLSAgICBpZiAo
IXBMb2NrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwTG9jay0+blJlZi0tOwotICAgIGlmIChw
TG9jay0+blJlZiA+IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwTG9jay0+cFByZXYp
IHsKLSAgICAgICAgQVNTRVJUKHBMb2NrLT5wUHJldi0+cE5leHQgPT0gcExvY2spOwotICAgICAg
ICBwTG9jay0+cFByZXYtPnBOZXh0ID0gcExvY2stPnBOZXh0OwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEFTU0VSVChsb2NrTGlzdCA9PSBwTG9jayk7Ci0gICAgICAgIGxvY2tMaXN0ID0gcExvY2st
PnBOZXh0OwotICAgIH0KLSAgICBpZiAocExvY2stPnBOZXh0KSB7Ci0gICAgICAgIEFTU0VSVChw
TG9jay0+cE5leHQtPnBQcmV2ID09IHBMb2NrKTsKLSAgICAgICAgcExvY2stPnBOZXh0LT5wUHJl
diA9IHBMb2NrLT5wUHJldjsKLSAgICB9Ci0KLSAgICBzcWxpdGUzX2ZyZWUocExvY2spOwotfQot
Ci0vLyBSZWxlYXNlcyBhIENocm9taXVtT3BlbkluZm8gc3RydWN0dXJlIHByZXZpb3VzbHkgYWxs
b2NhdGVkIGJ5IGZpbmRMb2NrSW5mbygpLgotc3RhdGljIHZvaWQgcmVsZWFzZU9wZW5JbmZvKENo
cm9taXVtT3BlbkluZm8qIHBPcGVuKQotewotICAgIGlmICghcE9wZW4pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHBPcGVuLT5uUmVmLS07Ci0gICAgaWYgKHBPcGVuLT5uUmVmID4gMCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKHBPcGVuLT5wUHJldikgewotICAgICAgICBBU1NFUlQocE9w
ZW4tPnBQcmV2LT5wTmV4dCA9PSBwT3Blbik7Ci0gICAgICAgIHBPcGVuLT5wUHJldi0+cE5leHQg
PSBwT3Blbi0+cE5leHQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG9wZW5MaXN0ID09
IHBPcGVuKTsKLSAgICAgICAgb3Blbkxpc3QgPSBwT3Blbi0+cE5leHQ7Ci0gICAgfQotICAgIGlm
IChwT3Blbi0+cE5leHQpIHsKLSAgICAgICAgQVNTRVJUKHBPcGVuLT5wTmV4dC0+cFByZXYgPT0g
cE9wZW4pOwotICAgICAgICBwT3Blbi0+cE5leHQtPnBQcmV2ID0gcE9wZW4tPnBQcmV2OwotICAg
IH0KLQotICAgIEFTU0VSVCghcE9wZW4tPnBVbnVzZWQpOyAvLyBNYWtlIHN1cmUgd2UncmUgbm90
IGxlYWtpbmcgbWVtb3J5IGFuZCBmaWxlIGRlc2NyaXB0b3JzLgotCi0gICAgc3FsaXRlM19mcmVl
KHBPcGVuKTsKLX0KLQotLy8gTG9jYXRlcyBDaHJvbWl1bUxvY2tJbmZvIGFuZCBDaHJvbWl1bU9w
ZW5JbmZvIGZvciBnaXZlbiBmaWxlIGRlc2NyaXB0b3IgKGNyZWF0aW5nIG5ldyBvbmVzIGlmIG5l
ZWRlZCkuCi0vLyBSZXR1cm5zIGEgU1FMaXRlIGVycm9yIGNvZGUuCi1zdGF0aWMgaW50IGZpbmRM
b2NrSW5mbyhDaHJvbWl1bUZpbGUqIHBGaWxlLCBDaHJvbWl1bUxvY2tJbmZvKiogcHBMb2NrLCBD
aHJvbWl1bU9wZW5JbmZvKiogcHBPcGVuKQotewotICAgIGludCBmZCA9IHBGaWxlLT5oOwotICAg
IHN0cnVjdCBzdGF0IHN0YXRidWY7Ci0gICAgaW50IHJjID0gZnN0YXQoZmQsICZzdGF0YnVmKTsK
LSAgICBpZiAocmMpIHsKLSAgICAgICAgcEZpbGUtPmxhc3RFcnJubyA9IGVycm5vOwotI2lmZGVm
IEVPVkVSRkxPVwotICAgICAgICBpZiAocEZpbGUtPmxhc3RFcnJubyA9PSBFT1ZFUkZMT1cpCi0g
ICAgICAgICAgICByZXR1cm4gU1FMSVRFX05PTEZTOwotI2VuZGlmCi0gICAgICAgIHJldHVybiBT
UUxJVEVfSU9FUlI7Ci0gICAgfQotCi0jaWYgT1MoREFSV0lOKQotICAgIC8vIE9uIE9TIFggb24g
YW4gbXNkb3MvZmF0IGZpbGVzeXN0ZW1zLCB0aGUgaW5vZGUgbnVtYmVyIGlzIHJlcG9ydGVkCi0g
ICAgLy8gaW5jb3JyZWN0bHkgZm9yIHplcm8tc2l6ZSBmaWxlcy4gU2VlIGh0dHA6Ly93d3cuc3Fs
aXRlLm9yZy9jdnN0cmFjL3RrdHZpZXc/dG49MzI2MC4KLSAgICAvLyBUbyB3b3JrIGFyb3VuZCB0
aGlzIHByb2JsZW0gd2UgYWx3YXlzIGluY3JlYXNlIHRoZSBmaWxlIHNpemUgdG8gMSBieSB3cml0
aW5nIGEgc2luZ2xlIGJ5dGUKLSAgICAvLyBwcmlvciB0byBhY2Nlc3NpbmcgdGhlIGlub2RlIG51
bWJlci4gVGhlIG9uZSBieXRlIHdyaXR0ZW4gaXMgYW4gQVNDSUkgJ1MnIGNoYXJhY3RlciB3aGlj
aAotICAgIC8vIGFsc28gaGFwcGVucyB0byBiZSB0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgaGVhZGVy
IG9mIGV2ZXJ5IFNRTGl0ZSBkYXRhYmFzZS4gIEluIHRoaXMgd2F5LAotICAgIC8vIGlmIHRoZXJl
IGlzIGEgcmFjZSBjb25kaXRpb24gc3VjaCB0aGF0IGFub3RoZXIgdGhyZWFkIGhhcyBhbHJlYWR5
IHBvcHVsYXRlZCB0aGUgZmlyc3QgcGFnZQotICAgIC8vIG9mIHRoZSBkYXRhYmFzZSwgbm8gZGFt
YWdlIGlzIGRvbmUuCi0gICAgaWYgKCFzdGF0YnVmLnN0X3NpemUpIHsKLSAgICAgICAgcmMgPSB3
cml0ZShmZCwgIlMiLCAxKTsKLSAgICAgICAgaWYgKHJjICE9IDEpCi0gICAgICAgICAgICByZXR1
cm4gU1FMSVRFX0lPRVJSOwotICAgICAgICByYyA9IGZzdGF0KGZkLCAmc3RhdGJ1Zik7Ci0gICAg
ICAgIGlmIChyYykgewotICAgICAgICAgICAgcEZpbGUtPmxhc3RFcnJubyA9IGVycm5vOwotICAg
ICAgICAgICAgcmV0dXJuIFNRTElURV9JT0VSUjsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgot
Ci0gICAgQ2hyb21pdW1GaWxlSWQgZmlsZUlkOwotICAgIG1lbXNldCgmZmlsZUlkLCAwLCBzaXpl
b2YoZmlsZUlkKSk7Ci0gICAgZmlsZUlkLmRldiA9IHN0YXRidWYuc3RfZGV2OwotICAgIGZpbGVJ
ZC5pbm8gPSBzdGF0YnVmLnN0X2lubzsKLQotICAgIENocm9taXVtTG9ja0luZm8qIHBMb2NrID0g
MDsKLQotICAgIGlmIChwcExvY2spIHsKLSAgICAgICAgcExvY2sgPSBsb2NrTGlzdDsKLSAgICAg
ICAgd2hpbGUgKHBMb2NrICYmIG1lbWNtcCgmZmlsZUlkLCAmcExvY2stPmxvY2tLZXksIHNpemVv
ZihmaWxlSWQpKSkKLSAgICAgICAgICAgIHBMb2NrID0gcExvY2stPnBOZXh0OwotICAgICAgICBp
ZiAocExvY2spCi0gICAgICAgICAgICBwTG9jay0+blJlZisrOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIHBMb2NrID0gc3RhdGljX2Nhc3Q8Q2hyb21pdW1Mb2NrSW5mbyo+KHNxbGl0ZTNf
bWFsbG9jKHNpemVvZigqcExvY2spKSk7Ci0gICAgICAgICAgICBpZiAoIXBMb2NrKQotICAgICAg
ICAgICAgICAgIHJldHVybiBTUUxJVEVfTk9NRU07Ci0gICAgICAgICAgICBwTG9jay0+bG9ja0tl
eSA9IGZpbGVJZDsKLSAgICAgICAgICAgIHBMb2NrLT5uUmVmID0gMTsKLSAgICAgICAgICAgIHBM
b2NrLT5jbnQgPSAwOwotICAgICAgICAgICAgcExvY2stPmxvY2t0eXBlID0gMDsKLSAgICAgICAg
ICAgIHBMb2NrLT5wTmV4dCA9IGxvY2tMaXN0OwotICAgICAgICAgICAgcExvY2stPnBQcmV2ID0g
MDsKLSAgICAgICAgICAgIGlmIChsb2NrTGlzdCkKLSAgICAgICAgICAgICAgICBsb2NrTGlzdC0+
cFByZXYgPSBwTG9jazsKLSAgICAgICAgICAgIGxvY2tMaXN0ID0gcExvY2s7Ci0gICAgICAgIH0K
LSAgICAgICAgKnBwTG9jayA9IHBMb2NrOwotICAgIH0KLQotICAgIGlmIChwcE9wZW4pIHsKLSAg
ICAgICAgQ2hyb21pdW1PcGVuSW5mbyogcE9wZW4gPSBvcGVuTGlzdDsKLSAgICAgICAgd2hpbGUg
KHBPcGVuICYmIG1lbWNtcCgmZmlsZUlkLCAmcE9wZW4tPmZpbGVJZCwgc2l6ZW9mKGZpbGVJZCkp
KQotICAgICAgICAgICAgcE9wZW4gPSBwT3Blbi0+cE5leHQ7Ci0gICAgICAgIGlmIChwT3BlbikK
LSAgICAgICAgICAgIHBPcGVuLT5uUmVmKys7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
cE9wZW4gPSBzdGF0aWNfY2FzdDxDaHJvbWl1bU9wZW5JbmZvKj4oc3FsaXRlM19tYWxsb2Moc2l6
ZW9mKCpwT3BlbikpKTsKLSAgICAgICAgICAgIGlmICghcE9wZW4pIHsKLSAgICAgICAgICAgICAg
ICByZWxlYXNlTG9ja0luZm8ocExvY2spOwotICAgICAgICAgICAgICAgIHJldHVybiBTUUxJVEVf
Tk9NRU07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZW1zZXQocE9wZW4sIDAsIHNpemVv
ZigqcE9wZW4pKTsKLSAgICAgICAgICAgIHBPcGVuLT5maWxlSWQgPSBmaWxlSWQ7Ci0gICAgICAg
ICAgICBwT3Blbi0+blJlZiA9IDE7Ci0gICAgICAgICAgICBwT3Blbi0+cE5leHQgPSBvcGVuTGlz
dDsKLSAgICAgICAgICAgIGlmIChvcGVuTGlzdCkKLSAgICAgICAgICAgICAgICBvcGVuTGlzdC0+
cFByZXYgPSBwT3BlbjsKLSAgICAgICAgICAgIG9wZW5MaXN0ID0gcE9wZW47Ci0gICAgICAgIH0K
LSAgICAgICAgKnBwT3BlbiA9IHBPcGVuOwotICAgIH0KLQotICAgIHJldHVybiByYzsKLX0KLQot
Ly8gQ2hlY2tzIGlmIHRoZXJlIGlzIGEgUkVTRVJWRUQgbG9jayBoZWxkIG9uIHRoZSBzcGVjaWZp
ZWQgZmlsZSBieSB0aGlzIG9yIGFueSBvdGhlciBwcm9jZXNzLgotLy8gSWYgdGhlIGxvY2sgaXMg
aGVsZCwgc2V0cyBwUmVzT3V0IHRvIGEgbm9uLXplcm8gdmFsdWUuIFJldHVybnMgYSBTUUxpdGUg
ZXJyb3IgY29kZS4KLXN0YXRpYyBpbnQgY2hyb21pdW1DaGVja1Jlc2VydmVkTG9jayhzcWxpdGUz
X2ZpbGUqIGlkLCBpbnQqIHBSZXNPdXQpCi17Ci0gICAgQ2hyb21pdW1GaWxlKiBwRmlsZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Q2hyb21pdW1GaWxlKj4oaWQpOwotICAgIEFTU0VSVChwRmlsZSk7Ci0K
LSAgICAvLyBMb29rIGZvciBsb2NrcyBoZWxkIGJ5IHRoaXMgcHJvY2Vzcy4KLSAgICBpbnQgcmVz
ZXJ2ZWQgPSAwOwotICAgIGlmIChwRmlsZS0+cExvY2stPmxvY2t0eXBlID4gU1FMSVRFX0xPQ0tf
U0hBUkVEKQotICAgICAgICByZXNlcnZlZCA9IDE7Ci0KLSAgICAvLyBMb29rIGZvciBsb2NrcyBo
ZWxkIGJ5IG90aGVyIHByb2Nlc3Nlcy4KLSAgICBpbnQgcmMgPSBTUUxJVEVfT0s7Ci0gICAgaWYg
KCFyZXNlcnZlZCkgewotICAgICAgICBzdHJ1Y3QgZmxvY2sgbG9jazsKLSAgICAgICAgbG9jay5s
X3doZW5jZSA9IFNFRUtfU0VUOwotICAgICAgICBsb2NrLmxfc3RhcnQgPSBTUUxpdGVSZXNlcnZl
ZEJ5dGU7Ci0gICAgICAgIGxvY2subF9sZW4gPSAxOwotICAgICAgICBsb2NrLmxfdHlwZSA9IEZf
V1JMQ0s7Ci0gICAgICAgIGlmICgtMSA9PSBmY250bChwRmlsZS0+aCwgRl9HRVRMSywgJmxvY2sp
KSB7Ci0gICAgICAgICAgICBpbnQgdEVycm5vID0gZXJybm87Ci0gICAgICAgICAgICByYyA9IHNx
bGl0ZUVycm9yRnJvbVBvc2l4RXJyb3IodEVycm5vLCBTUUxJVEVfSU9FUlJfQ0hFQ0tSRVNFUlZF
RExPQ0spOwotICAgICAgICAgICAgcEZpbGUtPmxhc3RFcnJubyA9IHRFcnJubzsKLSAgICAgICAg
fSBlbHNlIGlmIChsb2NrLmxfdHlwZSAhPSBGX1VOTENLKQotICAgICAgICAgICAgcmVzZXJ2ZWQg
PSAxOwotICAgIH0KLQotICAgICpwUmVzT3V0ID0gcmVzZXJ2ZWQ7Ci0gICAgcmV0dXJuIHJjOwot
fQotCi0vLyBQZXJmb3JtcyBhIGZpbGUgbG9ja2luZyBvcGVyYXRpb24gb24gYSByYW5nZSBvZiBi
eXRlcyBpbiBhIGZpbGUuCi0vLyBUaGUgfG9wfCBwYXJhbWV0ZXIgc2hvdWxkIGJlIG9uZSBvZiBG
X1JGTENLLCBGX1dSTENLIG9yIEZfVU5MQ0suCi0vLyBSZXR1cm5zIGEgVW5peCBlcnJvciBjb2Rl
LCBhbmQgYWxzbyB3cml0ZXMgaXQgdG8gcEVycmNvZGUuCi1zdGF0aWMgaW50IHJhbmdlTG9jayhD
aHJvbWl1bUZpbGUqIHBGaWxlLCBpbnQgb3AsIGludCogcEVycmNvZGUpCi17Ci0gICAgc3RydWN0
IGZsb2NrIGxvY2s7Ci0gICAgbG9jay5sX3R5cGUgPSBvcDsKLSAgICBsb2NrLmxfc3RhcnQgPSBT
UUxpdGVTaGFyZWRGaXJzdEJ5dGU7Ci0gICAgbG9jay5sX3doZW5jZSA9IFNFRUtfU0VUOwotICAg
IGxvY2subF9sZW4gPSBTUUxpdGVTaGFyZWRTaXplOwotICAgIGludCByYyA9IGZjbnRsKHBGaWxl
LT5oLCBGX1NFVExLLCAmbG9jayk7Ci0gICAgKnBFcnJjb2RlID0gZXJybm87Ci0gICAgcmV0dXJu
IHJjOwotfQotCi0vLyBMb2NrcyB0aGUgZmlsZSB3aXRoIHRoZSBsb2NrIHNwZWNpZmllZCBieSBw
YXJhbWV0ZXIgbG9ja3R5cGUgLSBvbmUKLS8vIG9mIHRoZSBmb2xsb3dpbmc6Ci0vLwotLy8gICAg
ICgxKSBTUUxJVEVfTE9DS19TSEFSRUQKLS8vICAgICAoMikgU1FMSVRFX0xPQ0tfUkVTRVJWRUQK
LS8vICAgICAoMykgU1FMSVRFX0xPQ0tfUEVORElORwotLy8gICAgICg0KSBTUUxJVEVfTE9DS19F
WENMVVNJVkUKLS8vCi0vLyBTb21ldGltZXMgd2hlbiByZXF1ZXN0aW5nIG9uZSBsb2NrIHN0YXRl
LCBhZGRpdGlvbmFsIGxvY2sgc3RhdGVzCi0vLyBhcmUgaW5zZXJ0ZWQgaW4gYmV0d2Vlbi4gIFRo
ZSBsb2NraW5nIG1pZ2h0IGZhaWwgb24gb25lIG9mIHRoZSBsYXRlcgotLy8gdHJhbnNpdGlvbnMg
bGVhdmluZyB0aGUgbG9jayBzdGF0ZSBkaWZmZXJlbnQgZnJvbSB3aGF0IGl0IHN0YXJ0ZWQgYnV0
Ci0vLyBzdGlsbCBzaG9ydCBvZiBpdHMgZ29hbC4gIFRoZSBmb2xsb3dpbmcgY2hhcnQgc2hvd3Mg
dGhlIGFsbG93ZWQKLS8vIHRyYW5zaXRpb25zIGFuZCB0aGUgaW5zZXJ0ZWQgaW50ZXJtZWRpYXRl
IHN0YXRlczoKLS8vCi0vLyAgICBVTkxPQ0tFRCAtPiBTSEFSRUQKLS8vICAgIFNIQVJFRCAtPiBS
RVNFUlZFRAotLy8gICAgU0hBUkVEIC0+IChQRU5ESU5HKSAtPiBFWENMVVNJVkUKLS8vICAgIFJF
U0VSVkVEIC0+IChQRU5ESU5HKSAtPiBFWENMVVNJVkUKLS8vICAgIFBFTkRJTkcgLT4gRVhDTFVT
SVZFCi1zdGF0aWMgaW50IGNocm9taXVtTG9jayhzcWxpdGUzX2ZpbGUqIGlkLCBpbnQgbG9ja3R5
cGUpCi17Ci0gICAgLy8gVG8gb2J0YWluIGEgU0hBUkVEIGxvY2ssIGEgcmVhZC1sb2NrIGlzIG9i
dGFpbmVkIG9uIHRoZSAncGVuZGluZwotICAgIC8vIGJ5dGUnLiAgSWYgdGhpcyBpcyBzdWNjZXNz
ZnVsLCBhIHJhbmRvbSBieXRlIGZyb20gdGhlICdzaGFyZWQgYnl0ZQotICAgIC8vIHJhbmdlJyBp
cyByZWFkLWxvY2tlZCBhbmQgdGhlIGxvY2sgb24gdGhlICdwZW5kaW5nIGJ5dGUnIHJlbGVhc2Vk
LgotICAgIC8vCi0gICAgLy8gQSBwcm9jZXNzIG1heSBvbmx5IG9idGFpbiBhIFJFU0VSVkVEIGxv
Y2sgYWZ0ZXIgaXQgaGFzIGEgU0hBUkVEIGxvY2suCi0gICAgLy8gQSBSRVNFUlZFRCBsb2NrIGlz
IGltcGxlbWVudGVkIGJ5IGdyYWJiaW5nIGEgd3JpdGUtbG9jayBvbiB0aGUKLSAgICAvLyAncmVz
ZXJ2ZWQgYnl0ZScuIAotICAgIC8vCi0gICAgLy8gQSBwcm9jZXNzIG1heSBvbmx5IG9idGFpbiBh
IFBFTkRJTkcgbG9jayBhZnRlciBpdCBoYXMgb2J0YWluZWQgYQotICAgIC8vIFNIQVJFRCBsb2Nr
LiBBIFBFTkRJTkcgbG9jayBpcyBpbXBsZW1lbnRlZCBieSBvYnRhaW5pbmcgYSB3cml0ZS1sb2Nr
Ci0gICAgLy8gb24gdGhlICdwZW5kaW5nIGJ5dGUnLiBUaGlzIGVuc3VyZXMgdGhhdCBubyBuZXcg
U0hBUkVEIGxvY2tzIGNhbiBiZQotICAgIC8vIG9idGFpbmVkLCBidXQgZXhpc3RpbmcgU0hBUkVE
IGxvY2tzIGFyZSBhbGxvd2VkIHRvIHBlcnNpc3QuIEEgcHJvY2VzcwotICAgIC8vIGRvZXMgbm90
IGhhdmUgdG8gb2J0YWluIGEgUkVTRVJWRUQgbG9jayBvbiB0aGUgd2F5IHRvIGEgUEVORElORyBs
b2NrLgotICAgIC8vIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSB0aGUgYWxnb3JpdGhtIGZvciBy
b2xsaW5nIGJhY2sgYSBqb3VybmFsIGZpbGUKLSAgICAvLyBhZnRlciBhIGNyYXNoLgotICAgIC8v
Ci0gICAgLy8gQW4gRVhDTFVTSVZFIGxvY2ssIG9idGFpbmVkIGFmdGVyIGEgUEVORElORyBsb2Nr
IGlzIGhlbGQsIGlzCi0gICAgLy8gaW1wbGVtZW50ZWQgYnkgb2J0YWluaW5nIGEgd3JpdGUtbG9j
ayBvbiB0aGUgZW50aXJlICdzaGFyZWQgYnl0ZQotICAgIC8vIHJhbmdlJy4gU2luY2UgYWxsIG90
aGVyIGxvY2tzIHJlcXVpcmUgYSByZWFkLWxvY2sgb24gb25lIG9mIHRoZSBieXRlcwotICAgIC8v
IHdpdGhpbiB0aGlzIHJhbmdlLCB0aGlzIGVuc3VyZXMgdGhhdCBubyBvdGhlciBsb2NrcyBhcmUg
aGVsZCBvbiB0aGUKLSAgICAvLyBkYXRhYmFzZS4gCi0KLSAgICBpbnQgcmMgPSBTUUxJVEVfT0s7
Ci0gICAgc3RydWN0IGZsb2NrIGxvY2s7Ci0gICAgaW50IHMgPSAwOwotICAgIGludCB0RXJybm87
Ci0KLSAgICBDaHJvbWl1bUZpbGUqIHBGaWxlID0gcmVpbnRlcnByZXRfY2FzdDxDaHJvbWl1bUZp
bGUqPihpZCk7Ci0gICAgQVNTRVJUKHBGaWxlKTsKLQotICAgIENocm9taXVtTG9ja0luZm8qIHBM
b2NrID0gcEZpbGUtPnBMb2NrOwotCi0gICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIGxvY2sg
b2YgdGhpcyB0eXBlIG9yIG1vcmUgcmVzdHJpY3RpdmUsIGRvIG5vdGhpbmcuCi0gICAgaWYgKHBG
aWxlLT5sb2NrdHlwZSA+PSBsb2NrdHlwZSkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLQot
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBuZXZlciBtb3ZlIGZyb20gdW5sb2NrZWQgdG8gYW55dGhpbmcg
aGlnaGVyIHRoYW4gc2hhcmVkIGxvY2suCi0gICAgQVNTRVJUKHBGaWxlLT5sb2NrdHlwZSAhPSBT
UUxJVEVfTE9DS19OT05FIHx8IGxvY2t0eXBlID09IFNRTElURV9MT0NLX1NIQVJFRCk7Ci0KLSAg
ICAvLyBNYWtlIHN1cmUgd2UgbmV2ZXIgcmVxdWVzdCBhIHBlbmRpbmcgbG9jay4KLSAgICBBU1NF
UlQobG9ja3R5cGUgIT0gU1FMSVRFX0xPQ0tfUEVORElORyk7Ci0KLSAgICAvLyBNYWtlIHN1cmUg
YSBzaGFyZWQgbG9jayBpcyBhbHdheXMgaGVsZCB3aGVuIGEgUkVTRVJWRUQgbG9jayBpcyByZXF1
ZXN0ZWQuCi0gICAgQVNTRVJUKGxvY2t0eXBlICE9IFNRTElURV9MT0NLX1JFU0VSVkVEIHx8IHBG
aWxlLT5sb2NrdHlwZSA9PSBTUUxJVEVfTE9DS19TSEFSRUQpOwotCi0gICAgLy8gSWYgc29tZSB0
aHJlYWQgdXNpbmcgdGhpcyBQSUQgaGFzIGEgbG9jayB2aWEgYSBkaWZmZXJlbnQgQ2hyb21pdW1G
aWxlCi0gICAgLy8gaGFuZGxlIHRoYXQgcHJlY2x1ZGVzIHRoZSByZXF1ZXN0ZWQgbG9jaywgcmV0
dXJuIEJVU1kuCi0gICAgaWYgKHBGaWxlLT5sb2NrdHlwZSAhPSBwTG9jay0+bG9ja3R5cGUgJiYK
LSAgICAgICAgKHBMb2NrLT5sb2NrdHlwZSA+PSBTUUxJVEVfTE9DS19QRU5ESU5HIHx8IGxvY2t0
eXBlID4gU1FMSVRFX0xPQ0tfU0hBUkVEKSkKLSAgICAgICAgcmV0dXJuIFNRTElURV9CVVNZOwot
Ci0gICAgLy8gSWYgYSBTSEFSRUQgbG9jayBpcyByZXF1ZXN0ZWQsIGFuZCBzb21lIHRocmVhZCB1
c2luZyB0aGlzIFBJRCBhbHJlYWR5Ci0gICAgLy8gaGFzIGEgU0hBUkVEIG9yIFJFU0VSVkVEIGxv
Y2ssIHRoZW4ganVzdCBpbmNyZW1lbnQgcmVmZXJlbmNlIGNvdW50cy4KLSAgICBpZiAobG9ja3R5
cGUgPT0gU1FMSVRFX0xPQ0tfU0hBUkVEICYmCi0gICAgICAgIChwTG9jay0+bG9ja3R5cGUgPT0g
U1FMSVRFX0xPQ0tfU0hBUkVEIHx8IHBMb2NrLT5sb2NrdHlwZSA9PSBTUUxJVEVfTE9DS19SRVNF
UlZFRCkpIHsKLSAgICAgICAgQVNTRVJUKCFwRmlsZS0+bG9ja3R5cGUpOwotICAgICAgICBBU1NF
UlQocExvY2stPmNudCA+IDApOwotICAgICAgICBwRmlsZS0+bG9ja3R5cGUgPSBTUUxJVEVfTE9D
S19TSEFSRUQ7Ci0gICAgICAgIHBMb2NrLT5jbnQrKzsKLSAgICAgICAgcEZpbGUtPnBPcGVuLT5u
TG9jaysrOwotICAgICAgICByZXR1cm4gU1FMSVRFX09LOwotICAgIH0KLQotICAgIC8vIEEgUEVO
RElORyBsb2NrIGlzIG5lZWRlZCBiZWZvcmUgYWNxdWlyaW5nIGEgU0hBUkVEIGxvY2sgYW5kIGJl
Zm9yZQotICAgIC8vIGFjcXVpcmluZyBhbiBFWENMVVNJVkUgbG9jay4gIEZvciB0aGUgU0hBUkVE
IGxvY2ssIHRoZSBQRU5ESU5HIHdpbGwKLSAgICAvLyBiZSByZWxlYXNlZC4KLSAgICBsb2NrLmxf
bGVuID0gMTsKLSAgICBsb2NrLmxfd2hlbmNlID0gU0VFS19TRVQ7Ci0gICAgaWYgKGxvY2t0eXBl
ID09IFNRTElURV9MT0NLX1NIQVJFRCB8fAotICAgICAgICAobG9ja3R5cGUgPT0gU1FMSVRFX0xP
Q0tfRVhDTFVTSVZFICYmIHBGaWxlLT5sb2NrdHlwZSA8IFNRTElURV9MT0NLX1BFTkRJTkcpKSB7
Ci0gICAgICAgIGxvY2subF90eXBlID0gKGxvY2t0eXBlID09IFNRTElURV9MT0NLX1NIQVJFRCA/
IEZfUkRMQ0sgOiBGX1dSTENLKTsKLSAgICAgICAgbG9jay5sX3N0YXJ0ID0gU1FMaXRlUGVuZGlu
Z0J5dGU7Ci0gICAgICAgIHMgPSBmY250bChwRmlsZS0+aCwgRl9TRVRMSywgJmxvY2spOwotICAg
ICAgICBpZiAocyA9PSAtMSkgewotICAgICAgICAgICAgdEVycm5vID0gZXJybm87Ci0gICAgICAg
ICAgICByYyA9IHNxbGl0ZUVycm9yRnJvbVBvc2l4RXJyb3IodEVycm5vLCBTUUxJVEVfSU9FUlJf
TE9DSyk7Ci0gICAgICAgICAgICBpZiAoKHJjICE9IFNRTElURV9PSykgJiYgKHJjICE9IFNRTElU
RV9CVVNZKSkKLSAgICAgICAgICAgICAgICBwRmlsZS0+bGFzdEVycm5vID0gdEVycm5vOwotICAg
ICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxvY2t0eXBl
ID09IFNRTElURV9MT0NLX1NIQVJFRCkgewotICAgICAgICBBU1NFUlQoIXBMb2NrLT5jbnQpOwot
ICAgICAgICBBU1NFUlQoIXBMb2NrLT5sb2NrdHlwZSk7Ci0KLSAgICAgICAgcyA9IHJhbmdlTG9j
ayhwRmlsZSwgRl9SRExDSywgJnRFcnJubyk7Ci0KLSAgICAgICAgLy8gRHJvcCB0aGUgdGVtcG9y
YXJ5IFBFTkRJTkcgbG9jay4KLSAgICAgICAgbG9jay5sX3N0YXJ0ID0gU1FMaXRlUGVuZGluZ0J5
dGU7Ci0gICAgICAgIGxvY2subF9sZW4gPSAxOwotICAgICAgICBsb2NrLmxfdHlwZSA9IEZfVU5M
Q0s7Ci0gICAgICAgIGlmIChmY250bChwRmlsZS0+aCwgRl9TRVRMSywgJmxvY2spKSB7Ci0gICAg
ICAgICAgICBpZiAocyAhPSAtMSkgewotICAgICAgICAgICAgICAgIHRFcnJubyA9IGVycm5vOyAK
LSAgICAgICAgICAgICAgICByYyA9IHNxbGl0ZUVycm9yRnJvbVBvc2l4RXJyb3IodEVycm5vLCBT
UUxJVEVfSU9FUlJfVU5MT0NLKTsgCi0gICAgICAgICAgICAgICAgaWYgKChyYyAhPSBTUUxJVEVf
T0spICYmIChyYyAhPSBTUUxJVEVfQlVTWSkpCi0gICAgICAgICAgICAgICAgICAgIHBGaWxlLT5s
YXN0RXJybm8gPSB0RXJybm87Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzID09IC0xKSB7Ci0gICAgICAgICAgICByYyA9
IHNxbGl0ZUVycm9yRnJvbVBvc2l4RXJyb3IodEVycm5vLCBTUUxJVEVfSU9FUlJfTE9DSyk7Ci0g
ICAgICAgICAgICBpZiAoKHJjICE9IFNRTElURV9PSykgJiYgKHJjICE9IFNRTElURV9CVVNZKSkK
LSAgICAgICAgICAgICAgICBwRmlsZS0+bGFzdEVycm5vID0gdEVycm5vOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgcEZpbGUtPmxvY2t0eXBlID0gU1FMSVRFX0xPQ0tfU0hBUkVEOwot
ICAgICAgICAgICAgcEZpbGUtPnBPcGVuLT5uTG9jaysrOwotICAgICAgICAgICAgcExvY2stPmNu
dCA9IDE7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGxvY2t0eXBlID09IFNRTElURV9MT0NL
X0VYQ0xVU0lWRSAmJiBwTG9jay0+Y250ID4gMSkgewotICAgICAgICAvLyBXZSBhcmUgdHJ5aW5n
IGZvciBhbiBleGNsdXNpdmUgbG9jayBidXQgYW5vdGhlciB0aHJlYWQgaW4gdGhlCi0gICAgICAg
IC8vIHNhbWUgcHJvY2VzcyBpcyBzdGlsbCBob2xkaW5nIGEgc2hhcmVkIGxvY2suCi0gICAgICAg
IHJjID0gU1FMSVRFX0JVU1k7Ci0gICAgfSAgZWxzZSB7Ci0gICAgICAgIC8vIFRoZSByZXF1ZXN0
IHdhcyBmb3IgYSBSRVNFUlZFRCBvciBFWENMVVNJVkUgbG9jay4gIEl0IGlzCi0gICAgICAgIC8v
IGFzc3VtZWQgdGhhdCB0aGVyZSBpcyBhIFNIQVJFRCBvciBncmVhdGVyIGxvY2sgb24gdGhlIGZp
bGUKLSAgICAgICAgLy8gYWxyZWFkeS4KLSAgICAgICAgQVNTRVJUKHBGaWxlLT5sb2NrdHlwZSk7
Ci0gICAgICAgIGxvY2subF90eXBlID0gRl9XUkxDSzsKLSAgICAgICAgc3dpdGNoIChsb2NrdHlw
ZSkgewotICAgICAgICBjYXNlIFNRTElURV9MT0NLX1JFU0VSVkVEOgotICAgICAgICAgICAgbG9j
ay5sX3N0YXJ0ID0gU1FMaXRlUmVzZXJ2ZWRCeXRlOwotICAgICAgICAgICAgcyA9IGZjbnRsKHBG
aWxlLT5oLCBGX1NFVExLLCAmbG9jayk7Ci0gICAgICAgICAgICB0RXJybm8gPSBlcnJubzsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNRTElURV9MT0NLX0VYQ0xVU0lWRToKLSAg
ICAgICAgICAgIHMgPSByYW5nZUxvY2socEZpbGUsIEZfV1JMQ0ssICZ0RXJybm8pOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocyA9PSAtMSkgewotICAgICAgICAgICAg
cmMgPSBzcWxpdGVFcnJvckZyb21Qb3NpeEVycm9yKHRFcnJubywgU1FMSVRFX0lPRVJSX0xPQ0sp
OwotICAgICAgICAgICAgaWYgKChyYyAhPSBTUUxJVEVfT0spICYmIChyYyAhPSBTUUxJVEVfQlVT
WSkpCi0gICAgICAgICAgICAgICAgcEZpbGUtPmxhc3RFcnJubyA9IHRFcnJubzsKLSAgICAgICAg
fQotICAgIH0KLSAgCi0gICAgaWYgKHJjID09IFNRTElURV9PSykgewotICAgICAgICBwRmlsZS0+
bG9ja3R5cGUgPSBsb2NrdHlwZTsKLSAgICAgICAgcExvY2stPmxvY2t0eXBlID0gbG9ja3R5cGU7
Ci0gICAgfSBlbHNlIGlmIChsb2NrdHlwZSA9PSBTUUxJVEVfTE9DS19FWENMVVNJVkUpIHsKLSAg
ICAgICAgcEZpbGUtPmxvY2t0eXBlID0gU1FMSVRFX0xPQ0tfUEVORElORzsKLSAgICAgICAgcExv
Y2stPmxvY2t0eXBlID0gU1FMSVRFX0xPQ0tfUEVORElORzsKLSAgICB9Ci0KLSAgICByZXR1cm4g
cmM7Ci19Ci0KLS8vIENsb3NlcyBhbGwgZmlsZSBkZXNjcmlwdG9ycyBmb3IgZ2l2ZW4gQ2hyb21p
dW1GaWxlIGZvciB3aGljaCB0aGUgY2xvc2UgaGFzIGJlZW4gZGVmZXJyZWQuCi0vLyBSZXR1cm5z
IGEgU1FMaXRlIGVycm9yIGNvZGUuCi1zdGF0aWMgaW50IGNsb3NlUGVuZGluZ0ZkcyhDaHJvbWl1
bUZpbGUqIHBGaWxlKQotewotICAgIGludCByYyA9IFNRTElURV9PSzsKLSAgICBDaHJvbWl1bU9w
ZW5JbmZvKiBwT3BlbiA9IHBGaWxlLT5wT3BlbjsKLSAgICBDaHJvbWl1bVVudXNlZEZkKiBwRXJy
b3IgPSAwOwotICAgIENocm9taXVtVW51c2VkRmQqIHBOZXh0OwotICAgIGZvciAoQ2hyb21pdW1V
bnVzZWRGZCogcCA9IHBPcGVuLT5wVW51c2VkOyBwOyBwID0gcE5leHQpIHsKLSAgICAgICAgcE5l
eHQgPSBwLT5wTmV4dDsKLSAgICAgICAgaWYgKGNsb3NlKHAtPmZkKSkgewotICAgICAgICAgICAg
cEZpbGUtPmxhc3RFcnJubyA9IGVycm5vOwotICAgICAgICAgICAgcmMgPSBTUUxJVEVfSU9FUlJf
Q0xPU0U7Ci0gICAgICAgICAgICBwLT5wTmV4dCA9IHBFcnJvcjsKLSAgICAgICAgICAgIHBFcnJv
ciA9IHA7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3FsaXRlM19mcmVlKHApOwotICAg
IH0KLSAgICBwT3Blbi0+cFVudXNlZCA9IHBFcnJvcjsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLS8v
IExvd2VycyB0aGUgbG9ja2luZyBsZXZlbCBvbiBmaWxlIGRlc2NyaXB0b3IuCi0vLyBsb2NrdHlw
ZSBtdXN0IGJlIGVpdGhlciBTUUxJVEVfTE9DS19OT05FIG9yIFNRTElURV9MT0NLX1NIQVJFRC4K
LXN0YXRpYyBpbnQgY2hyb21pdW1VbmxvY2soc3FsaXRlM19maWxlKiBpZCwgaW50IGxvY2t0eXBl
KQotewotICAgIENocm9taXVtRmlsZSogcEZpbGUgPSByZWludGVycHJldF9jYXN0PENocm9taXVt
RmlsZSo+KGlkKTsKLSAgICBBU1NFUlQocEZpbGUpOwotICAgIEFTU0VSVChsb2NrdHlwZSA8PSBT
UUxJVEVfTE9DS19TSEFSRUQpOwotCi0gICAgaWYgKHBGaWxlLT5sb2NrdHlwZSA8PSBsb2NrdHlw
ZSkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLQotICAgIENocm9taXVtTG9ja0luZm8qIHBM
b2NrID0gcEZpbGUtPnBMb2NrOwotICAgIEFTU0VSVChwTG9jay0+Y250KTsKLQotICAgIHN0cnVj
dCBmbG9jayBsb2NrOwotICAgIGludCByYyA9IFNRTElURV9PSzsKLSAgICBpbnQgaCA9IHBGaWxl
LT5oOwotICAgIGludCB0RXJybm87Ci0KLSAgICBpZiAocEZpbGUtPmxvY2t0eXBlID4gU1FMSVRF
X0xPQ0tfU0hBUkVEKSB7Ci0gICAgICAgIEFTU0VSVChwTG9jay0+bG9ja3R5cGUgPT0gcEZpbGUt
PmxvY2t0eXBlKTsKLQotICAgICAgICBpZiAobG9ja3R5cGUgPT0gU1FMSVRFX0xPQ0tfU0hBUkVE
ICYmIHJhbmdlTG9jayhwRmlsZSwgRl9SRExDSywgJnRFcnJubykgPT0gLTEpIHsKLSAgICAgICAg
ICAgIHJjID0gc3FsaXRlRXJyb3JGcm9tUG9zaXhFcnJvcih0RXJybm8sIFNRTElURV9JT0VSUl9S
RExPQ0spOwotICAgICAgICAgICAgaWYgKChyYyAhPSBTUUxJVEVfT0spICYmIChyYyAhPSBTUUxJ
VEVfQlVTWSkpCi0gICAgICAgICAgICAgICAgcEZpbGUtPmxhc3RFcnJubyA9IHRFcnJubzsKLSAg
ICAgICAgICAgIGlmIChyYyA9PSBTUUxJVEVfT0spCi0gICAgICAgICAgICAgICAgcEZpbGUtPmxv
Y2t0eXBlID0gbG9ja3R5cGU7Ci0gICAgICAgICAgICByZXR1cm4gcmM7Ci0gICAgICAgIH0KLSAg
ICAgICAgbG9jay5sX3R5cGUgPSBGX1VOTENLOwotICAgICAgICBsb2NrLmxfd2hlbmNlID0gU0VF
S19TRVQ7Ci0gICAgICAgIGxvY2subF9zdGFydCA9IFNRTGl0ZVBlbmRpbmdCeXRlOwotICAgICAg
ICBsb2NrLmxfbGVuID0gMjsKLSAgICAgICAgaWYgKGZjbnRsKGgsIEZfU0VUTEssICZsb2NrKSAh
PSAtMSkKLSAgICAgICAgICAgIHBMb2NrLT5sb2NrdHlwZSA9IFNRTElURV9MT0NLX1NIQVJFRDsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0RXJybm8gPSBlcnJubzsKLSAgICAgICAgICAg
IHJjID0gc3FsaXRlRXJyb3JGcm9tUG9zaXhFcnJvcih0RXJybm8sIFNRTElURV9JT0VSUl9VTkxP
Q0spOwotICAgICAgICAgICAgaWYgKChyYyAhPSBTUUxJVEVfT0spICYmIChyYyAhPSBTUUxJVEVf
QlVTWSkpCi0gICAgICAgICAgICAgICAgcEZpbGUtPmxhc3RFcnJubyA9IHRFcnJubzsKLSAgICAg
ICAgICAgIGlmIChyYyA9PSBTUUxJVEVfT0spCi0gICAgICAgICAgICAgICAgcEZpbGUtPmxvY2t0
eXBlID0gbG9ja3R5cGU7Ci0gICAgICAgICAgICByZXR1cm4gcmM7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgaWYgKGxvY2t0eXBlID09IFNRTElURV9MT0NLX05PTkUpIHsKLSAgICAgICAgc3RydWN0
IENocm9taXVtT3BlbkluZm8gKnBPcGVuOwotCi0gICAgICAgIHBMb2NrLT5jbnQtLTsKLQotICAg
ICAgICAvLyBSZWxlYXNlIHRoZSBsb2NrIHVzaW5nIGFuIE9TIGNhbGwgb25seSB3aGVuIGFsbCB0
aHJlYWRzIGluIHRoaXMgc2FtZSBwcm9jZXNzIGhhdmUgcmVsZWFzZWQgdGhlIGxvY2suCi0gICAg
ICAgIGlmICghcExvY2stPmNudCkgewotICAgICAgICAgICAgbG9jay5sX3R5cGUgPSBGX1VOTENL
OwotICAgICAgICAgICAgbG9jay5sX3doZW5jZSA9IFNFRUtfU0VUOwotICAgICAgICAgICAgbG9j
ay5sX3N0YXJ0ID0gbG9jay5sX2xlbiA9IDBMOwotICAgICAgICAgICAgaWYgKGZjbnRsKGgsIEZf
U0VUTEssICZsb2NrKSAhPSAtMSkKLSAgICAgICAgICAgICAgICBwTG9jay0+bG9ja3R5cGUgPSBT
UUxJVEVfTE9DS19OT05FOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdEVy
cm5vID0gZXJybm87Ci0gICAgICAgICAgICAgICAgcmMgPSBzcWxpdGVFcnJvckZyb21Qb3NpeEVy
cm9yKHRFcnJubywgU1FMSVRFX0lPRVJSX1VOTE9DSyk7Ci0gICAgICAgICAgICAgICAgaWYgKChy
YyAhPSBTUUxJVEVfT0spICYmIChyYyAhPSBTUUxJVEVfQlVTWSkpCi0gICAgICAgICAgICAgICAg
ICAgIHBGaWxlLT5sYXN0RXJybm8gPSB0RXJybm87Ci0gICAgICAgICAgICAgICAgcExvY2stPmxv
Y2t0eXBlID0gU1FMSVRFX0xPQ0tfTk9ORTsKLSAgICAgICAgICAgICAgICBwRmlsZS0+bG9ja3R5
cGUgPSBTUUxJVEVfTE9DS19OT05FOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgcE9wZW4gPSBwRmlsZS0+cE9wZW47Ci0gICAgICAgIHBPcGVuLT5uTG9jay0tOwotICAgICAg
ICBBU1NFUlQocE9wZW4tPm5Mb2NrID49IDApOwotICAgICAgICBpZiAoIXBPcGVuLT5uTG9jaykg
ewotICAgICAgICAgICAgaW50IHJjMiA9IGNsb3NlUGVuZGluZ0ZkcyhwRmlsZSk7Ci0gICAgICAg
ICAgICBpZiAocmMgPT0gU1FMSVRFX09LKQotICAgICAgICAgICAgICAgIHJjID0gcmMyOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJjID09IFNRTElURV9PSykKLSAgICAgICAgcEZpbGUt
PmxvY2t0eXBlID0gbG9ja3R5cGU7Ci0gICAgcmV0dXJuIHJjOworLy8gRGVmaW5lZCBpbiBDaHJv
bWl1bSdzIGNvZGViYXNlIGluIHRoaXJkX3BhcnR5L3NxbGl0ZS9zcmMvb3NfdW5peC5jCitleHRl
cm4gIkMiIHsKK3ZvaWQgY2hyb21pdW1fc3FsaXRlM19pbml0aWFsaXplX3VuaXhfc3FsaXRlM19m
aWxlKHNxbGl0ZTNfZmlsZSogZmlsZSk7CitpbnQgY2hyb21pdW1fc3FsaXRlM19maWxsX2luX3Vu
aXhfc3FsaXRlM19maWxlKHNxbGl0ZTNfdmZzKiB2ZnMsIGludCBmZCwgaW50IGRpcmZkLCBzcWxp
dGUzX2ZpbGUqIGZpbGUsIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQgbm9Mb2NrKTsKK2ludCBj
aHJvbWl1bV9zcWxpdGUzX2dldF9yZXVzYWJsZV9maWxlX2hhbmRsZShzcWxpdGUzX2ZpbGUqIGZp
bGUsIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQgZmxhZ3MsIGludCogZmQpOwordm9pZCBjaHJv
bWl1bV9zcWxpdGUzX3VwZGF0ZV9yZXVzYWJsZV9maWxlX2hhbmRsZShzcWxpdGUzX2ZpbGUqIGZp
bGUsIGludCBmZCwgaW50IGZsYWdzKTsKK3ZvaWQgY2hyb21pdW1fc3FsaXRlM19kZXN0cm95X3Jl
dXNhYmxlX2ZpbGVfaGFuZGxlKHNxbGl0ZTNfZmlsZSogZmlsZSk7CiB9CiAKLS8vIENsb3NlcyBh
bGwgZmlsZSBoYW5kbGVzIGZvciBnaXZlbiBDaHJvbWl1bUZpbGUgYW5kIHNldHMgYWxsIGl0cyBm
aWVsZHMgdG8gMC4KLS8vIFJldHVybnMgYSBTUUxpdGUgZXJyb3IgY29kZS4KLXN0YXRpYyBpbnQg
Y2hyb21pdW1DbG9zZU5vTG9jayhzcWxpdGUzX2ZpbGUqIGlkKQotewotICAgIENocm9taXVtRmls
ZSogcEZpbGUgPSByZWludGVycHJldF9jYXN0PENocm9taXVtRmlsZSo+KGlkKTsKLSAgICBpZiAo
IXBGaWxlKQotICAgICAgICByZXR1cm4gU1FMSVRFX09LOwotICAgIGlmIChwRmlsZS0+ZGlyZmQg
Pj0gMCkgewotICAgICAgICBpZiAoY2xvc2UocEZpbGUtPmRpcmZkKSkgewotICAgICAgICAgICAg
cEZpbGUtPmxhc3RFcnJubyA9IGVycm5vOwotICAgICAgICAgICAgcmV0dXJuIFNRTElURV9JT0VS
Ul9ESVJfQ0xPU0U7Ci0gICAgICAgIH0KLSAgICAgICAgcEZpbGUtPmRpcmZkID0gLTE7Ci0gICAg
fQotICAgIGlmIChwRmlsZS0+aCA+PSAwICYmIGNsb3NlKHBGaWxlLT5oKSkgewotICAgICAgICBw
RmlsZS0+bGFzdEVycm5vID0gZXJybm87Ci0gICAgICAgIHJldHVybiBTUUxJVEVfSU9FUlJfQ0xP
U0U7Ci0gICAgfQotICAgIHNxbGl0ZTNfZnJlZShwRmlsZS0+cFVudXNlZCk7Ci0gICAgbWVtc2V0
KHBGaWxlLCAwLCBzaXplb2YoQ2hyb21pdW1GaWxlKSk7Ci0gICAgcmV0dXJuIFNRTElURV9PSzsK
LX0KLQotLy8gQ2xvc2VzIGEgQ2hyb21pdW1GaWxlLCBpbmNsdWRpbmcgbG9ja2luZyBvcGVyYXRp
b25zLiBSZXR1cm5zIGEgU1FMaXRlIGVycm9yIGNvZGUuCi1zdGF0aWMgaW50IGNocm9taXVtQ2xv
c2Uoc3FsaXRlM19maWxlKiBpZCkKLXsKLSAgICBpZiAoIWlkKQotICAgICAgICByZXR1cm4gU1FM
SVRFX09LOwotCi0gICAgQ2hyb21pdW1GaWxlKiBwRmlsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2hy
b21pdW1GaWxlKj4oaWQpOwotICAgIGNocm9taXVtVW5sb2NrKGlkLCBTUUxJVEVfTE9DS19OT05F
KTsKLSAgICBpZiAocEZpbGUtPnBPcGVuICYmIHBGaWxlLT5wT3Blbi0+bkxvY2spIHsKLSAgICAg
ICAgLy8gSWYgdGhlcmUgYXJlIG91dHN0YW5kaW5nIGxvY2tzLCBkbyBub3QgYWN0dWFsbHkgY2xv
c2UgdGhlIGZpbGUganVzdAotICAgICAgICAvLyB5ZXQgYmVjYXVzZSB0aGF0IHdvdWxkIGNsZWFy
IHRob3NlIGxvY2tzLgotICAgICAgICBDaHJvbWl1bU9wZW5JbmZvKiBwT3BlbiA9IHBGaWxlLT5w
T3BlbjsKLSAgICAgICAgQ2hyb21pdW1VbnVzZWRGZCogcCA9IHBGaWxlLT5wVW51c2VkOwotICAg
ICAgICBwLT5wTmV4dCA9IHBPcGVuLT5wVW51c2VkOwotICAgICAgICBwT3Blbi0+cFVudXNlZCA9
IHA7Ci0gICAgICAgIHBGaWxlLT5oID0gLTE7Ci0gICAgICAgIHBGaWxlLT5wVW51c2VkID0gMDsK
LSAgICB9Ci0gICAgcmVsZWFzZUxvY2tJbmZvKHBGaWxlLT5wTG9jayk7Ci0gICAgcmVsZWFzZU9w
ZW5JbmZvKHBGaWxlLT5wT3Blbik7Ci0gICAgcmV0dXJuIGNocm9taXVtQ2xvc2VOb0xvY2soaWQp
OwotfQotCi1zdGF0aWMgaW50IGNocm9taXVtQ2hlY2tSZXNlcnZlZExvY2tOb29wKHNxbGl0ZTNf
ZmlsZSosIGludCogcFJlc091dCkKLXsKLSAgICAqcFJlc091dCA9IDA7Ci0gICAgcmV0dXJuIFNR
TElURV9PSzsKLX0KLQotc3RhdGljIGludCBjaHJvbWl1bUxvY2tOb29wKHNxbGl0ZTNfZmlsZSos
IGludCkKLXsKLSAgICByZXR1cm4gU1FMSVRFX09LOwotfQotCi1zdGF0aWMgaW50IGNocm9taXVt
VW5sb2NrTm9vcChzcWxpdGUzX2ZpbGUqLCBpbnQpCi17Ci0gICAgcmV0dXJuIFNRTElURV9PSzsK
LX0KLQotLy8gU2Vla3MgdG8gdGhlIHJlcXVlc3RlZCBvZmZzZXQgYW5kIHJlYWRzIHVwIHRvIHxj
bnR8IGJ5dGVzIGludG8gfHBCdWZ8LiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSBy
ZWFkLgotc3RhdGljIGludCBzZWVrQW5kUmVhZChDaHJvbWl1bUZpbGUqIGlkLCBzcWxpdGUzX2lu
dDY0IG9mZnNldCwgdm9pZCogcEJ1ZiwgaW50IGNudCkKLXsKLSAgICBzcWxpdGVfaW50NjQgbmV3
T2Zmc2V0ID0gbHNlZWsoaWQtPmgsIG9mZnNldCwgU0VFS19TRVQpOwotICAgIGlmIChuZXdPZmZz
ZXQgIT0gb2Zmc2V0KSB7Ci0gICAgICAgIGlkLT5sYXN0RXJybm8gPSAobmV3T2Zmc2V0ID09IC0x
KSA/IGVycm5vIDogMDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpbnQgZ290ID0g
cmVhZChpZC0+aCwgcEJ1ZiwgY250KTsKLSAgICBpZiAoZ290IDwgMCkKLSAgICAgICAgaWQtPmxh
c3RFcnJubyA9IGVycm5vOwotICAgIHJldHVybiBnb3Q7Ci19Ci0KLS8vIFJlYWRzIGRhdGEgZnJv
bSBmaWxlIGludG8gYSBidWZmZXIuIFJldHVybnMgYSBTUUxpdGUgZXJyb3IgY29kZS4KLXN0YXRp
YyBpbnQgY2hyb21pdW1SZWFkKHNxbGl0ZTNfZmlsZSogaWQsIHZvaWQqIHBCdWYsIGludCBhbXQs
IHNxbGl0ZTNfaW50NjQgb2Zmc2V0KQotewotICAgIENocm9taXVtRmlsZSogcEZpbGUgPSByZWlu
dGVycHJldF9jYXN0PENocm9taXVtRmlsZSo+KGlkKTsKLSAgICBBU1NFUlQocEZpbGUpOwotCi0g
ICAgLy8gVGhlIGJ5dGVzIGluIHRoZSBsb2NraW5nIHJhbmdlIHNob3VsZCBuZXZlciBiZSByZWFk
LgotICAgIEFTU0VSVCghcEZpbGUtPnBVbnVzZWQgfHwgb2Zmc2V0ID49IFNRTGl0ZVBlbmRpbmdC
eXRlICsgNTEyIHx8IG9mZnNldCArIGFtdCA8PSBTUUxpdGVQZW5kaW5nQnl0ZSk7Ci0KLSAgICBp
bnQgZ290ID0gc2Vla0FuZFJlYWQocEZpbGUsIG9mZnNldCwgcEJ1ZiwgYW10KTsKLSAgICBpZiAo
Z290ID09IGFtdCkKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLQotICAgIGlmIChnb3QgPCAw
KQotICAgICAgICByZXR1cm4gU1FMSVRFX0lPRVJSX1JFQUQ7Ci0KLSAgICAvLyBVbnJlYWQgcGFy
dHMgb2YgdGhlIGJ1ZmZlciBtdXN0IGJlIHplcm8tZmlsbGVkLgotICAgIG1lbXNldCgmKHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHBCdWYpKVtnb3RdLCAwLCBhbXQgLSBnb3QpOwotICAgIHBGaWxl
LT5sYXN0RXJybm8gPSAwOwotICAgIHJldHVybiBTUUxJVEVfSU9FUlJfU0hPUlRfUkVBRDsKLX0K
LQotLy8gU2Vla3MgdG8gdGhlIHJlcXVlc3RlZCBvZmZzZXQgYW5kIHdyaXRlcyB1cCB0byB8Y250
fCBieXRlcy4gUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbi4KLXN0YXRp
YyBpbnQgc2Vla0FuZFdyaXRlKENocm9taXVtRmlsZSogaWQsIHNxbGl0ZV9pbnQ2NCBvZmZzZXQs
IGNvbnN0IHZvaWQqIHBCdWYsIGludCBjbnQpCi17Ci0gICAgc3FsaXRlX2ludDY0IG5ld09mZnNl
dCA9IGxzZWVrKGlkLT5oLCBvZmZzZXQsIFNFRUtfU0VUKTsKLSAgICBpZiAobmV3T2Zmc2V0ICE9
IG9mZnNldCkgewotICAgICAgICBpZC0+bGFzdEVycm5vID0gKG5ld09mZnNldCA9PSAtMSkgPyBl
cnJubyA6IDA7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaW50IGdvdCA9IHdyaXRl
KGlkLT5oLCBwQnVmLCBjbnQpOwotICAgIGlmIChnb3QgPCAwKQotICAgICAgICBpZC0+bGFzdEVy
cm5vID0gZXJybm87Ci0gICAgcmV0dXJuIGdvdDsKLX0KLQotLy8gV3JpdGVzIGRhdGEgZnJvbSBi
dWZmZXIgaW50byBhIGZpbGUuIFJldHVybnMgYSBTUUxpdGUgZXJyb3IgY29kZS4KLXN0YXRpYyBp
bnQgY2hyb21pdW1Xcml0ZShzcWxpdGUzX2ZpbGUqIGlkLCBjb25zdCB2b2lkKiBwQnVmLCBpbnQg
YW10LCBzcWxpdGUzX2ludDY0IG9mZnNldCkKLXsKLSAgICBDaHJvbWl1bUZpbGUqIHBGaWxlID0g
cmVpbnRlcnByZXRfY2FzdDxDaHJvbWl1bUZpbGUqPihpZCk7Ci0gICAgQVNTRVJUKHBGaWxlKTsK
LSAgICBBU1NFUlQoYW10ID4gMCk7Ci0KLSAgICAvLyBUaGUgYnl0ZXMgaW4gdGhlIGxvY2tpbmcg
cmFuZ2Ugc2hvdWxkIG5ldmVyIGJlIHdyaXR0ZW4uCi0gICAgQVNTRVJUKCFwRmlsZS0+cFVudXNl
ZCB8fCBvZmZzZXQgPj0gU1FMaXRlUGVuZGluZ0J5dGUgKyA1MTIgfHwgb2Zmc2V0ICsgYW10IDw9
IFNRTGl0ZVBlbmRpbmdCeXRlKTsKLQotICAgIGludCB3cm90ZSA9IDA7Ci0gICAgd2hpbGUgKGFt
dCA+IDAgJiYgKHdyb3RlID0gc2Vla0FuZFdyaXRlKHBGaWxlLCBvZmZzZXQsIHBCdWYsIGFtdCkp
ID4gMCkgewotICAgICAgICBhbXQgLT0gd3JvdGU7Ci0gICAgICAgIG9mZnNldCArPSB3cm90ZTsK
LSAgICAgICAgcEJ1ZiA9ICYocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocEJ1ZikpW3dy
b3RlXTsKLSAgICB9Ci0gICAgaWYgKGFtdCA+IDApIHsKLSAgICAgICAgaWYgKHdyb3RlIDwgMCkK
LSAgICAgICAgICAgIHJldHVybiBTUUxJVEVfSU9FUlJfV1JJVEU7Ci0gICAgICAgIHBGaWxlLT5s
YXN0RXJybm8gPSAwOwotICAgICAgICByZXR1cm4gU1FMSVRFX0ZVTEw7Ci0gICAgfQotICAgIHJl
dHVybiBTUUxJVEVfT0s7Ci19Ci0KLXN0YXRpYyBib29sIHN5bmNXcmFwcGVyKGludCBmZCwgYm9v
bCBmdWxsU3luYykKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7
Ci0gICAgaWYgKGZ1bGxTeW5jKQotICAgICAgICBzdWNjZXNzID0gIWZjbnRsKGZkLCBGX0ZVTExG
U1lOQywgMCk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICBzdWNjZXNzID0gIWZzeW5jKGZk
KTsKLSAgICByZXR1cm4gc3VjY2VzczsKLSNlbHNlCi0gICAgcmV0dXJuICFmZGF0YXN5bmMoZmQp
OwotI2VuZGlmCi19Ci0KLS8vIE1ha2VzIHN1cmUgYWxsIHdyaXRlcyB0byBhIHBhcnRpY3VsYXIg
ZmlsZSBhcmUgY29tbWl0dGVkIHRvIGRpc2suIFJldHVybnMgYSBTUUxpdGUgZXJyb3IgY29kZS4K
LXN0YXRpYyBpbnQgY2hyb21pdW1TeW5jKHNxbGl0ZTNfZmlsZSogaWQsIGludCBmbGFncykKLXsK
LSAgICBBU1NFUlQoKGZsYWdzICYgMHgwRikgPT0gU1FMSVRFX1NZTkNfTk9STUFMIHx8IChmbGFn
cyAmIDB4MEYpID09IFNRTElURV9TWU5DX0ZVTEwpOwotCi0gICAgQ2hyb21pdW1GaWxlKiBwRmls
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2hyb21pdW1GaWxlKj4oaWQpOwotICAgIEFTU0VSVChwRmls
ZSk7Ci0KLSAgICBib29sIGlzRnVsbFN5bmMgPSAoKGZsYWdzICYgMHgwRikgPT0gU1FMSVRFX1NZ
TkNfRlVMTCk7Ci0KLSAgICBpZiAoIXN5bmNXcmFwcGVyKHBGaWxlLT5oLCBpc0Z1bGxTeW5jKSkg
ewotICAgICAgICBwRmlsZS0+bGFzdEVycm5vID0gZXJybm87Ci0gICAgICAgIHJldHVybiBTUUxJ
VEVfSU9FUlJfRlNZTkM7Ci0gICAgfQotCi0gICAgaWYgKHBGaWxlLT5kaXJmZCA+PSAwKSB7Ci0j
aWYgIU9TKERBUldJTikKLSAgICAgICAgaWYgKCFpc0Z1bGxTeW5jKSB7Ci0gICAgICAgICAgICAv
LyBJZ25vcmUgZGlyZWN0b3J5IHN5bmMgZmFpbHVyZXMsIHNlZSBodHRwOi8vd3d3LnNxbGl0ZS5v
cmcvY3ZzdHJhYy90a3R2aWV3P3RuPTE2NTcuCi0gICAgICAgICAgICBzeW5jV3JhcHBlcihwRmls
ZS0+ZGlyZmQsIGZhbHNlKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmICghY2xvc2Uo
cEZpbGUtPmRpcmZkKSkKLSAgICAgICAgICAgIHBGaWxlLT5kaXJmZCA9IC0xOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIHBGaWxlLT5sYXN0RXJybm8gPSBlcnJubzsKLSAgICAgICAgICAg
IHJldHVybiBTUUxJVEVfSU9FUlJfRElSX0NMT1NFOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIFNRTElURV9PSzsKLX0KLQotLy8gVHJ1bmNhdGVzIGFuIG9wZW4gZmlsZSB0byB0aGUg
c3BlY2lmaWVkIHNpemUuIFJldHVybnMgYSBTUUxpdGUgZXJyb3IgY29kZS4KLXN0YXRpYyBpbnQg
Y2hyb21pdW1UcnVuY2F0ZShzcWxpdGUzX2ZpbGUqIGlkLCBzcWxpdGVfaW50NjQgbkJ5dGUpCi17
Ci0gICAgQ2hyb21pdW1GaWxlKiBwRmlsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2hyb21pdW1GaWxl
Kj4oaWQpOwotICAgIEFTU0VSVChwRmlsZSk7Ci0KLSAgICBpZiAoZnRydW5jYXRlKHBGaWxlLT5o
LCBuQnl0ZSkpIHsKLSAgICAgICAgcEZpbGUtPmxhc3RFcnJubyA9IGVycm5vOwotICAgICAgICBy
ZXR1cm4gU1FMSVRFX0lPRVJSX1RSVU5DQVRFOwotICAgIH0KLQotICAgIHJldHVybiBTUUxJVEVf
T0s7Ci19Ci0KLS8vIERldGVybWluZXMgdGhlIHNpemUgb2YgYSBmaWxlIGluIGJ5dGVzLiBSZXR1
cm5zIGEgU1FMaXRlIGVycm9yIGNvZGUuCi1zdGF0aWMgaW50IGNocm9taXVtRmlsZVNpemUoc3Fs
aXRlM19maWxlKiBpZCwgc3FsaXRlX2ludDY0KiBwU2l6ZSkKLXsKLSAgICBDaHJvbWl1bUZpbGUq
IHBGaWxlID0gcmVpbnRlcnByZXRfY2FzdDxDaHJvbWl1bUZpbGUqPihpZCk7Ci0gICAgQVNTRVJU
KHBGaWxlKTsKLQotICAgIHN0cnVjdCBzdGF0IGJ1ZjsKLSAgICBpZiAoZnN0YXQocEZpbGUtPmgs
ICZidWYpKSB7Ci0gICAgICAgIHBGaWxlLT5sYXN0RXJybm8gPSBlcnJubzsKLSAgICAgICAgcmV0
dXJuIFNRTElURV9JT0VSUl9GU1RBVDsKLSAgICB9Ci0gICAgKnBTaXplID0gYnVmLnN0X3NpemU7
Ci0KLSAgICAvLyBXaGVuIG9wZW5pbmcgYSB6ZXJvLXNpemUgZGF0YWJhc2UsIGZpbmRMb2NrSW5m
byB3cml0ZXMgYSBzaW5nbGUgYnl0ZSBpbnRvIHRoYXQgZmlsZQotICAgIC8vIGluIG9yZGVyIHRv
IHdvcmsgYXJvdW5kIGEgYnVnIGluIHRoZSBPUyBYIG1zZG9zIGZpbGVzeXN0ZW0uIEluIG9yZGVy
IHRvIGF2b2lkIHByb2JsZW1zCi0gICAgLy8gd2l0aCB1cHBlciBsYXllcnMsIHdlIG5lZWQgdG8g
cmVwb3J0IHRoaXMgZmlsZSBzaXplIGFzIHplcm8gZXZlbiB0aG91Z2ggaXQgaXMgcmVhbGx5IDEu
Ci0gICAgLy8gU2VlIGh0dHA6Ly93d3cuc3FsaXRlLm9yZy9jdnN0cmFjL3RrdHZpZXc/dG49MzI2
MC4KLSAgICBpZiAoKnBTaXplID09IDEpCi0gICAgICAgICpwU2l6ZSA9IDA7Ci0KLSAgICByZXR1
cm4gU1FMSVRFX09LOwotfQotCi1zdGF0aWMgaW50IGNocm9taXVtRmlsZUNvbnRyb2woc3FsaXRl
M19maWxlKiBpZCwgaW50IG9wLCB2b2lkKiBwQXJnKQotewotICAgIENocm9taXVtRmlsZSogcEZp
bGUgPSByZWludGVycHJldF9jYXN0PENocm9taXVtRmlsZSo+KGlkKTsKLSAgICBBU1NFUlQocEZp
bGUpOwotCi0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgU1FMSVRFX0ZDTlRMX0xPQ0tTVEFU
RToKLSAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4ocEFyZykgPSBwRmlsZS0+bG9ja3R5
cGU7Ci0gICAgICAgIHJldHVybiBTUUxJVEVfT0s7Ci0gICAgY2FzZSBTUUxJVEVfTEFTVF9FUlJO
TzoKLSAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4ocEFyZykgPSBwRmlsZS0+bGFzdEVy
cm5vOwotICAgICAgICByZXR1cm4gU1FMSVRFX09LOwotICAgIH0KLSAgICByZXR1cm4gU1FMSVRF
X0VSUk9SOwotfQotCi0vLyBTYW1lIGFzIFNRTElURV9ERUZBVUxUX1NFQ1RPUl9TSVpFIGZyb20g
c3FsaXRlJ3Mgb3MuaC4KLXN0YXRpYyBjb25zdCBpbnQgU1FMaXRlRGVmYXVsdFNlY3RvclNpemUg
PSA1MTI7Ci0KLXN0YXRpYyBpbnQgY2hyb21pdW1TZWN0b3JTaXplKHNxbGl0ZTNfZmlsZSopCi17
Ci0gICAgcmV0dXJuIFNRTGl0ZURlZmF1bHRTZWN0b3JTaXplOwotfQotCi1zdGF0aWMgaW50IGNo
cm9taXVtRGV2aWNlQ2hhcmFjdGVyaXN0aWNzKHNxbGl0ZTNfZmlsZSopCi17Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzcWxpdGUzX2lvX21ldGhvZHMgcG9zaXhJb01ldGhvZHMg
PSB7Ci0gICAgMSwKLSAgICBjaHJvbWl1bUNsb3NlLAotICAgIGNocm9taXVtUmVhZCwKLSAgICBj
aHJvbWl1bVdyaXRlLAotICAgIGNocm9taXVtVHJ1bmNhdGUsCi0gICAgY2hyb21pdW1TeW5jLAot
ICAgIGNocm9taXVtRmlsZVNpemUsCi0gICAgY2hyb21pdW1Mb2NrLAotICAgIGNocm9taXVtVW5s
b2NrLAotICAgIGNocm9taXVtQ2hlY2tSZXNlcnZlZExvY2ssCi0gICAgY2hyb21pdW1GaWxlQ29u
dHJvbCwKLSAgICBjaHJvbWl1bVNlY3RvclNpemUsCi0gICAgY2hyb21pdW1EZXZpY2VDaGFyYWN0
ZXJpc3RpY3MKLX07Ci0KLXN0YXRpYyBjb25zdCBzcWxpdGUzX2lvX21ldGhvZHMgbm9sb2NrSW9N
ZXRob2RzID0gewotICAgIDEsCi0gICAgY2hyb21pdW1DbG9zZU5vTG9jaywKLSAgICBjaHJvbWl1
bVJlYWQsCi0gICAgY2hyb21pdW1Xcml0ZSwKLSAgICBjaHJvbWl1bVRydW5jYXRlLAotICAgIGNo
cm9taXVtU3luYywKLSAgICBjaHJvbWl1bUZpbGVTaXplLAotICAgIGNocm9taXVtTG9ja05vb3As
Ci0gICAgY2hyb21pdW1VbmxvY2tOb29wLAotICAgIGNocm9taXVtQ2hlY2tSZXNlcnZlZExvY2tO
b29wLAotICAgIGNocm9taXVtRmlsZUNvbnRyb2wsCi0gICAgY2hyb21pdW1TZWN0b3JTaXplLAot
ICAgIGNocm9taXVtRGV2aWNlQ2hhcmFjdGVyaXN0aWNzCi19OwotCi0vLyBJbml0aWFsaXplcyBh
IENocm9taXVtRmlsZS4gUmV0dXJucyBhIFNRTGl0ZSBlcnJvciBjb2RlLgotc3RhdGljIGludCBm
aWxsSW5DaHJvbWl1bUZpbGUoc3FsaXRlM192ZnMqIHBWZnMsIGludCBoLCBpbnQgZGlyZmQsIHNx
bGl0ZTNfZmlsZSogcElkLCBjb25zdCBjaGFyKiB6RmlsZW5hbWUsIGludCBub0xvY2spCi17Ci0g
ICAgQ2hyb21pdW1GaWxlKiBwTmV3ID0gcmVpbnRlcnByZXRfY2FzdDxDaHJvbWl1bUZpbGUqPihw
SWQpOwotCi0gICAgQVNTRVJUKCFwTmV3LT5wTG9jayk7Ci0gICAgQVNTRVJUKCFwTmV3LT5wT3Bl
bik7Ci0KLSAgICBwTmV3LT5oID0gaDsKLSAgICBwTmV3LT5kaXJmZCA9IGRpcmZkOwotCi0gICAg
aW50IHJjID0gU1FMSVRFX09LOwotICAgIGNvbnN0IHNxbGl0ZTNfaW9fbWV0aG9kcyogcExvY2tp
bmdTdHlsZTsKLSAgICBpZiAobm9Mb2NrKQotICAgICAgICBwTG9ja2luZ1N0eWxlID0gJm5vbG9j
a0lvTWV0aG9kczsKLSAgICBlbHNlIHsKLSAgICAgICAgcExvY2tpbmdTdHlsZSA9ICZwb3NpeElv
TWV0aG9kczsKLSAgICAgICAgcmMgPSBmaW5kTG9ja0luZm8ocE5ldywgJnBOZXctPnBMb2NrLCAm
cE5ldy0+cE9wZW4pOwotICAgICAgICBpZiAocmMgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgICAg
ICAvLyBJZiBhbiBlcnJvciBvY2N1cmVkIGluIGZpbmRMb2NrSW5mbygpLCBjbG9zZSB0aGUgZmls
ZSBkZXNjcmlwdG9yCi0gICAgICAgICAgICAvLyBpbW1lZGlhdGVseS4gVGhpcyBjYW4gaGFwcGVu
IGluIHR3byBzY2VuYXJpb3M6Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gICAoYSkg
QSBjYWxsIHRvIGZzdGF0KCkgZmFpbGVkLgotICAgICAgICAgICAgLy8gICAoYikgQSBtYWxsb2Mg
ZmFpbGVkLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFNjZW5hcmlvIChiKSBtYXkg
b25seSBvY2N1ciBpZiB0aGUgcHJvY2VzcyBpcyBob2xkaW5nIG5vIG90aGVyCi0gICAgICAgICAg
ICAvLyBmaWxlIGRlc2NyaXB0b3JzIG9wZW4gb24gdGhlIHNhbWUgZmlsZS4gSWYgdGhlcmUgd2Vy
ZSBvdGhlciBmaWxlCi0gICAgICAgICAgICAvLyBkZXNjcmlwdG9ycyBvbiB0aGlzIGZpbGUsIHRo
ZW4gbm8gbWFsbG9jIHdvdWxkIGJlIHJlcXVpcmVkIGJ5Ci0gICAgICAgICAgICAvLyBmaW5kTG9j
a0luZm8oKS4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgaXQgaXMgcXVpdGUgc2FmZSB0byBjbG9zZQot
ICAgICAgICAgICAgLy8gaGFuZGxlIGggLSBhcyBpdCBpcyBndWFyYW50ZWVkIHRoYXQgbm8gcG9z
aXggbG9ja3Mgd2lsbCBiZSByZWxlYXNlZAotICAgICAgICAgICAgLy8gYnkgZG9pbmcgc28uCi0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gSWYgc2NlbmFyaW8gKGEpIGNhdXNlZCB0aGUg
ZXJyb3IgdGhlbiB0aGluZ3MgYXJlIG5vdCBzbyBzYWZlLiBUaGUKLSAgICAgICAgICAgIC8vIGlt
cGxpY2l0IGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IGlmIGZzdGF0KCkgZmFpbHMsIHRoaW5ncyBh
cmUgaW4KLSAgICAgICAgICAgIC8vIHN1Y2ggYmFkIHNoYXBlIHRoYXQgZHJvcHBpbmcgYSBsb2Nr
IG9yIHR3byBkb2Vzbid0IG1hdHRlciBtdWNoLgotICAgICAgICAgICAgY2xvc2UoaCk7Ci0gICAg
ICAgICAgICBoID0gLTE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwTmV3LT5sYXN0RXJybm8g
PSAwOwotICAgIGlmIChyYyAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgaWYgKGRpcmZkID49IDAp
Ci0gICAgICAgICAgICBjbG9zZShkaXJmZCk7Ci0gICAgICAgIGlmIChoID49IDApCi0gICAgICAg
ICAgICBjbG9zZShoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcE5ldy0+cE1ldGhvZCA9IHBMb2Nr
aW5nU3R5bGU7Ci0gICAgcmV0dXJuIHJjOwotfQotCi0vLyBTZWFyY2hlcyBmb3IgYW4gdW51c2Vk
IGZpbGUgZGVzY3JpcHRvciB0aGF0IHdhcyBvcGVuZWQgb24gdGhlIGRhdGFiYXNlIAotLy8gZmls
ZSBpZGVudGlmaWVkIGJ5IHpQYXRoIHdpdGggbWF0Y2hpbmcgZmxhZ3MuIFJldHVybnMgMCBpZiBu
b3QgZm91bmQuCi1zdGF0aWMgQ2hyb21pdW1VbnVzZWRGZCogZmluZFJldXNhYmxlRmQoY29uc3Qg
Y2hhciogelBhdGgsIGludCBmbGFncykKLXsKLSAgICBDaHJvbWl1bVVudXNlZEZkKiBwVW51c2Vk
ID0gMDsKLQotICAgIHN0cnVjdCBzdGF0IHNTdGF0OwotICAgIGlmICghc3RhdCh6UGF0aCwgJnNT
dGF0KSkgewotICAgICAgICBDaHJvbWl1bUZpbGVJZCBpZDsKLSAgICAgICAgaWQuZGV2ID0gc1N0
YXQuc3RfZGV2OwotICAgICAgICBpZC5pbm8gPSBzU3RhdC5zdF9pbm87Ci0KLSAgICAgICAgQ2hy
b21pdW1PcGVuSW5mbyogcE8gPSAwOwotICAgICAgICBmb3IgKHBPID0gb3Blbkxpc3Q7IHBPICYm
IG1lbWNtcCgmaWQsICZwTy0+ZmlsZUlkLCBzaXplb2YoaWQpKTsgcE8gPSBwTy0+cE5leHQpIHsg
fQotICAgICAgICBpZiAocE8pIHsKLSAgICAgICAgICAgIENocm9taXVtVW51c2VkRmQqKiBwcDsK
LSAgICAgICAgICAgIGZvciAocHAgPSAmcE8tPnBVbnVzZWQ7ICpwcCAmJiAoKnBwKS0+ZmxhZ3Mg
IT0gZmxhZ3M7IHBwID0gJigoKnBwKS0+cE5leHQpKSB7IH0KLSAgICAgICAgICAgIHBVbnVzZWQg
PSAqcHA7Ci0gICAgICAgICAgICBpZiAocFVudXNlZCkKLSAgICAgICAgICAgICAgICAqcHAgPSBw
VW51c2VkLT5wTmV4dDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcFVudXNlZDsKLX0K
Ky8vIENocm9taXVtJ3MgUG9zaXggaW1wbGVtZW50YXRpb24gb2YgU1FMaXRlIFZGUworbmFtZXNw
YWNlIHsKIAogLy8gT3BlbnMgYSBmaWxlLgogLy8KQEAgLTk3NCwyNiArNTksMTQgQEAgc3RhdGlj
IENocm9taXVtVW51c2VkRmQqIGZpbmRSZXVzYWJsZUZkKGNvbnN0IGNoYXIqIHpQYXRoLCBpbnQg
ZmxhZ3MpCiAvLyBpZCAtIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3aWxsIG1hbmlwdWxhdGUgdGhlIG5l
d2x5IG9wZW5lZCBmaWxlLgogLy8gZGVzaXJlZEZsYWdzIC0gdGhlIGRlc2lyZWQgb3BlbiBtb2Rl
IGZsYWdzLgogLy8gdXNlZEZsYWdzIC0gdGhlIGFjdHVhbCBvcGVuIG1vZGUgZmxhZ3MgdGhhdCB3
ZXJlIHVzZWQuCi1zdGF0aWMgaW50IGNocm9taXVtT3BlbihzcWxpdGUzX3ZmcyogdmZzLCBjb25z
dCBjaGFyKiBmaWxlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNxbGl0ZTNfZmlsZSog
aWQsIGludCBkZXNpcmVkRmxhZ3MsIGludCogdXNlZEZsYWdzKQoraW50IGNocm9taXVtT3Blbihz
cWxpdGUzX3ZmcyogdmZzLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwKKyAgICAgICAgICAgICAgICAg
c3FsaXRlM19maWxlKiBpZCwgaW50IGRlc2lyZWRGbGFncywgaW50KiB1c2VkRmxhZ3MpCiB7Ci0g
ICAgLy8gVGhlIG1hc2sgMHgwMDAwN0YwMCBnaXZlcyB1cyB0aGUgNyBiaXRzIHRoYXQgZGV0ZXJt
aW5lIHRoZSB0eXBlIG9mIHRoZSBmaWxlIFNRTGl0ZSBpcyB0cnlpbmcgdG8gb3Blbi4KLSAgICBp
bnQgZmlsZVR5cGUgPSBkZXNpcmVkRmxhZ3MgJiAweDAwMDA3RjAwOwotCi0gICAgbWVtc2V0KGlk
LCAwLCBzaXplb2YoQ2hyb21pdW1GaWxlKSk7Ci0gICAgQ2hyb21pdW1GaWxlKiBjaHJvbWl1bUZp
bGUgPSByZWludGVycHJldF9jYXN0PENocm9taXVtRmlsZSo+KGlkKTsKKyAgICBjaHJvbWl1bV9z
cWxpdGUzX2luaXRpYWxpemVfdW5peF9zcWxpdGUzX2ZpbGUoaWQpOwogICAgIGludCBmZCA9IC0x
OwotICAgIGlmIChmaWxlVHlwZSA9PSBTUUxJVEVfT1BFTl9NQUlOX0RCKSB7Ci0gICAgICAgIENo
cm9taXVtVW51c2VkRmQqIHVudXNlZEZkID0gZmluZFJldXNhYmxlRmQoZmlsZU5hbWUsIGRlc2ly
ZWRGbGFncyk7Ci0gICAgICAgIGlmICh1bnVzZWRGZCkKLSAgICAgICAgICAgIGZkID0gdW51c2Vk
RmQtPmZkOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHVudXNlZEZkID0gc3RhdGljX2Nh
c3Q8Q2hyb21pdW1VbnVzZWRGZCo+KHNxbGl0ZTNfbWFsbG9jKHNpemVvZigqdW51c2VkRmQpKSk7
Ci0gICAgICAgICAgICBpZiAoIXVudXNlZEZkKQotICAgICAgICAgICAgICAgIHJldHVybiBTUUxJ
VEVfTk9NRU07Ci0gICAgICAgIH0KLSAgICAgICAgY2hyb21pdW1GaWxlLT5wVW51c2VkID0gdW51
c2VkRmQ7Ci0gICAgfQorICAgIGludCByZXN1bHQgPSBjaHJvbWl1bV9zcWxpdGUzX2dldF9yZXVz
YWJsZV9maWxlX2hhbmRsZShpZCwgZmlsZU5hbWUsIGRlc2lyZWRGbGFncywgJmZkKTsKKyAgICBp
ZiAocmVzdWx0ICE9IFNRTElURV9PSykKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIGlm
IChmZCA8IDApIHsKICAgICAgICAgZmQgPSBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VPcGVuRmls
ZShmaWxlTmFtZSwgZGVzaXJlZEZsYWdzKTsKQEAgLTEwMDMsMjQgKzc2LDIzIEBAIHN0YXRpYyBp
bnQgY2hyb21pdW1PcGVuKHNxbGl0ZTNfdmZzKiB2ZnMsIGNvbnN0IGNoYXIqIGZpbGVOYW1lLAog
ICAgICAgICB9CiAgICAgfQogICAgIGlmIChmZCA8IDApIHsKLSAgICAgICAgc3FsaXRlM19mcmVl
KGNocm9taXVtRmlsZS0+cFVudXNlZCk7CisgICAgICAgIGNocm9taXVtX3NxbGl0ZTNfZGVzdHJv
eV9yZXVzYWJsZV9maWxlX2hhbmRsZShpZCk7CiAgICAgICAgIHJldHVybiBTUUxJVEVfQ0FOVE9Q
RU47CiAgICAgfQogCiAgICAgaWYgKHVzZWRGbGFncykKICAgICAgICAgKnVzZWRGbGFncyA9IGRl
c2lyZWRGbGFnczsKLSAgICBpZiAoY2hyb21pdW1GaWxlLT5wVW51c2VkKSB7Ci0gICAgICAgIGNo
cm9taXVtRmlsZS0+cFVudXNlZC0+ZmQgPSBmZDsKLSAgICAgICAgY2hyb21pdW1GaWxlLT5wVW51
c2VkLT5mbGFncyA9IGRlc2lyZWRGbGFnczsKLSAgICB9CisgICAgY2hyb21pdW1fc3FsaXRlM191
cGRhdGVfcmV1c2FibGVfZmlsZV9oYW5kbGUoaWQsIGZkLCBkZXNpcmVkRmxhZ3MpOwogCiAgICAg
ZmNudGwoZmQsIEZfU0VURkQsIGZjbnRsKGZkLCBGX0dFVEZEKSB8IEZEX0NMT0VYRUMpOwogCisg
ICAgLy8gVGhlIG1hc2sgMHgwMDAwN0YwMCBnaXZlcyB1cyB0aGUgNyBiaXRzIHRoYXQgZGV0ZXJt
aW5lIHRoZSB0eXBlIG9mIHRoZSBmaWxlIFNRTGl0ZSBpcyB0cnlpbmcgdG8gb3Blbi4KKyAgICBp
bnQgZmlsZVR5cGUgPSBkZXNpcmVkRmxhZ3MgJiAweDAwMDA3RjAwOwogICAgIGludCBub0xvY2sg
PSAoZmlsZVR5cGUgIT0gU1FMSVRFX09QRU5fTUFJTl9EQik7Ci0gICAgaW50IHJjID0gZmlsbElu
Q2hyb21pdW1GaWxlKHZmcywgZmQsIC0xLCBpZCwgZmlsZU5hbWUsIG5vTG9jayk7Ci0gICAgaWYg
KHJjICE9IFNRTElURV9PSykKLSAgICAgICAgc3FsaXRlM19mcmVlKGNocm9taXVtRmlsZS0+cFVu
dXNlZCk7Ci0gICAgcmV0dXJuIHJjOworICAgIHJlc3VsdCA9IGNocm9taXVtX3NxbGl0ZTNfZmls
bF9pbl91bml4X3NxbGl0ZTNfZmlsZSh2ZnMsIGZkLCAtMSwgaWQsIGZpbGVOYW1lLCBub0xvY2sp
OworICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX09LKQorICAgICAgICBjaHJvbWl1bV9zcWxpdGUz
X2Rlc3Ryb3lfcmV1c2FibGVfZmlsZV9oYW5kbGUoaWQpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIC8vIERlbGV0ZXMgdGhlIGdpdmVuIGZpbGUuCkBAIC0xMDI5LDcgKzEwMSw3IEBAIHN0YXRp
YyBpbnQgY2hyb21pdW1PcGVuKHNxbGl0ZTNfdmZzKiB2ZnMsIGNvbnN0IGNoYXIqIGZpbGVOYW1l
LAogLy8gZmlsZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KIC8vIHN5bmNEaXIgLSBkZXRl
cm1pbmVzIGlmIHRoZSBkaXJlY3RvcnkgdG8gd2hpY2ggdGhpcyBmaWxlIGJlbG9uZ3MKIC8vICAg
ICAgICAgICBzaG91bGQgYmUgc3luY2hlZCBhZnRlciB0aGUgZmlsZSBpcyBkZWxldGVkLgotc3Rh
dGljIGludCBjaHJvbWl1bURlbGV0ZShzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYXIqIGZpbGVOYW1l
LCBpbnQgc3luY0RpcikKK2ludCBjaHJvbWl1bURlbGV0ZShzcWxpdGUzX3ZmcyosIGNvbnN0IGNo
YXIqIGZpbGVOYW1lLCBpbnQgc3luY0RpcikKIHsKICAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6
OmRhdGFiYXNlRGVsZXRlRmlsZShmaWxlTmFtZSwgc3luY0Rpcik7CiB9CkBAIC0xMDQwLDcgKzEx
Miw3IEBAIHN0YXRpYyBpbnQgY2hyb21pdW1EZWxldGUoc3FsaXRlM192ZnMqLCBjb25zdCBjaGFy
KiBmaWxlTmFtZSwgaW50IHN5bmNEaXIpCiAvLyBmaWxlTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBm
aWxlLgogLy8gZmxhZyAtIHRoZSB0eXBlIG9mIHRlc3QgdG8gbWFrZSBvbiB0aGlzIGZpbGUuCiAv
LyByZXMgLSB0aGUgcmVzdWx0Lgotc3RhdGljIGludCBjaHJvbWl1bUFjY2VzcyhzcWxpdGUzX3Zm
cyosIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQgZmxhZywgaW50KiByZXMpCitpbnQgY2hyb21p
dW1BY2Nlc3Moc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IGZsYWcsIGlu
dCogcmVzKQogewogICAgIGludCBhdHRyID0gc3RhdGljX2Nhc3Q8aW50PihQbGF0Zm9ybUJyaWRn
ZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhmaWxlTmFtZSkpOwogICAgIGlmIChhdHRyIDwg
MCkgewpAQCAtMTA1MCw3ICsxMjIsNyBAQCBzdGF0aWMgaW50IGNocm9taXVtQWNjZXNzKHNxbGl0
ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBmbGFnLCBpbnQqIHJlcwogCiAgICAg
c3dpdGNoIChmbGFnKSB7CiAgICAgY2FzZSBTUUxJVEVfQUNDRVNTX0VYSVNUUzoKLSAgICAgICAg
KnJlcyA9IDE7IC8vIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsIGF0dHIgPCAwCisgICAgICAg
ICpyZXMgPSAxOyAgIC8vIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsIGF0dHIgPCAwCiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19SRUFEV1JJVEU6CiAgICAgICAgICpy
ZXMgPSAoYXR0ciAmIFdfT0spICYmIChhdHRyICYgUl9PSyk7CkBAIC0xMDcxLDggKzE0Myw4IEBA
IHN0YXRpYyBpbnQgY2hyb21pdW1BY2Nlc3Moc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxl
TmFtZSwgaW50IGZsYWcsIGludCogcmVzCiAvLyByZWxhdGl2ZVBhdGggLSB0aGUgcmVsYXRpdmUg
cGF0aC4KIC8vIGJ1ZlNpemUgLSB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciBpbiBieXRl
cy4KIC8vIGFic29sdXRlUGF0aCAtIHRoZSBvdXRwdXQgYnVmZmVyIHdoZXJlIHRoZSBhYnNvbHV0
ZSBwYXRoIHdpbGwgYmUgc3RvcmVkLgotc3RhdGljIGludCBjaHJvbWl1bUZ1bGxQYXRobmFtZShz
cWxpdGUzX3ZmcyogdmZzLCBjb25zdCBjaGFyKiByZWxhdGl2ZVBhdGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCwgY2hhciogYWJzb2x1dGVQYXRoKQoraW50IGNocm9taXVt
RnVsbFBhdGhuYW1lKHNxbGl0ZTNfdmZzKiB2ZnMsIGNvbnN0IGNoYXIqIHJlbGF0aXZlUGF0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGNoYXIqIGFic29sdXRlUGF0aCkKIHsKICAg
ICAvLyBUaGUgcmVuZGVyZXIgcHJvY2VzcyBkb2Vzbid0IG5lZWQgdG8ga25vdyB0aGUgYWJzb2x1
dGUgcGF0aCBvZiB0aGUgZmlsZQogICAgIHNxbGl0ZTNfc25wcmludGYodmZzLT5teFBhdGhuYW1l
LCBhYnNvbHV0ZVBhdGgsICIlcyIsIHJlbGF0aXZlUGF0aCk7CkBAIC0xMDgwLDEwNyArMTUyLDQ0
IEBAIHN0YXRpYyBpbnQgY2hyb21pdW1GdWxsUGF0aG5hbWUoc3FsaXRlM192ZnMqIHZmcywgY29u
c3QgY2hhciogcmVsYXRpdmVQYXRoLAogfQogCiAjaWZuZGVmIFNRTElURV9PTUlUX0xPQURfRVhU
RU5TSU9OCi0vLyBXZSBkaXNhbGxvdyBsb2FkaW5nIERTT3MgaW5zaWRlIHRoZSByZW5kZXJlciBw
cm9jZXNzLCBzbyB0aGUgZm9sbG93aW5nIHByb2NlZHVyZXMgYXJlIG5vLW9wLgotc3RhdGljIHZv
aWQqIGNocm9taXVtRGxPcGVuKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhciopCi17Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGNocm9taXVtRGxFcnJvcihzcWxpdGUzX3ZmcyosIGlu
dCwgY2hhciopCi17Ci19Ci0KLXN0YXRpYyB2b2lkICgqY2hyb21pdW1EbFN5bShzcWxpdGUzX3Zm
cyosIHZvaWQqLCBjb25zdCBjaGFyKikpKCkKKy8vIFJldHVybnMgTlVMTCwgdGh1cyBkaXNhbGxv
d2luZyBsb2FkaW5nIGxpYnJhcmllcyBpbiB0aGUgcmVuZGVyZXIgcHJvY2Vzcy4KKy8vCisvLyB2
ZnMgLSBwb2ludGVyIHRvIHRoZSBzcWxpdGUzX3ZmcyBvYmplY3QuCisvLyBmaWxlTmFtZSAtIHRo
ZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBmaWxlLgordm9pZCogY2hyb21pdW1EbE9wZW4o
c3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKikKIHsKICAgICByZXR1cm4gMDsKIH0KLQotc3RhdGlj
IHZvaWQgY2hyb21pdW1EbENsb3NlKHNxbGl0ZTNfdmZzKiwgdm9pZCopCi17Ci19CiAjZWxzZQog
I2RlZmluZSBjaHJvbWl1bURsT3BlbiAwCi0jZGVmaW5lIGNocm9taXVtRGxFcnJvciAwCi0jZGVm
aW5lIGNocm9taXVtRGxTeW0gMAotI2RlZmluZSBjaHJvbWl1bURsQ2xvc2UgMAogI2VuZGlmIC8v
IFNRTElURV9PTUlUX0xPQURfRVhURU5TSU9OCiAKLS8vIEdlbmVyYXRlcyBhIHNlZWQgZm9yIFNR
TGl0ZSdzIFBSTkcuCi1zdGF0aWMgaW50IGNocm9taXVtUmFuZG9tbmVzcyhzcWxpdGUzX3Zmcyos
IGludCBuQnVmLCBjaGFyICp6QnVmKQotewotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+
KG5CdWYpID49IChzaXplb2YodGltZV90KSArIHNpemVvZihpbnQpKSk7Ci0KLSAgICBtZW1zZXQo
ekJ1ZiwgMCwgbkJ1Zik7Ci0gICAgaW50IGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9O
TFkpOwotICAgIGlmIChmZCA8IDApIHsKLSAgICAgICAgdGltZV90IHQ7Ci0gICAgICAgIHRpbWUo
JnQpOwotICAgICAgICBtZW1jcHkoekJ1ZiwgJnQsIHNpemVvZih0KSk7Ci0gICAgICAgIGludCBw
aWQgPSBnZXRwaWQoKTsKLSAgICAgICAgbWVtY3B5KCZ6QnVmW3NpemVvZih0KV0sICZwaWQsIHNp
emVvZihwaWQpKTsKLSAgICAgICAgcmV0dXJuIHNpemVvZih0KSArIHNpemVvZihwaWQpOwotICAg
IH0KLSAgICBuQnVmID0gcmVhZChmZCwgekJ1ZiwgbkJ1Zik7Ci0gICAgY2xvc2UoZmQpOwotICAg
IHJldHVybiBuQnVmOwotfQotCi0vLyBTbGVlcHMgZm9yIGF0IGxlYXN0IHxtaWNyb3NlY29uZHN8
LCBhbmQgcmV0dXJucyB0aGUgYWN0dWFsCi0vLyBhbW91bnQgb2YgdGltZSBzcGVudCBzbGVlcGlu
ZyAoaW4gbWljcm9zZWNvbmRzKS4KLXN0YXRpYyBpbnQgY2hyb21pdW1TbGVlcChzcWxpdGUzX3Zm
cyosIGludCBtaWNyb3NlY29uZHMpCi17Ci0jaWYgT1MoREFSV0lOKQotICAgIHVzbGVlcChtaWNy
b3NlY29uZHMpOwotICAgIHJldHVybiBtaWNyb3NlY29uZHM7Ci0jZWxzZQotICAgIC8vIFJvdW5k
IHRvIHRoZSBuZWFyZXN0IHNlY29uZC4KLSAgICBpbnQgc2Vjb25kcyA9IChtaWNyb3NlY29uZHMg
KyA5OTk5OTkpIC8gMTAwMDAwMDsKLSAgICBzbGVlcChzZWNvbmRzKTsKLSAgICByZXR1cm4gc2Vj
b25kcyAqIDEwMDAwMDA7Ci0jZW5kaWYKLX0KLQotLy8gUmV0cmlldmVzIHRoZSBjdXJyZW50IHN5
c3RlbSB0aW1lIChVVEMpLgotc3RhdGljIGludCBjaHJvbWl1bUN1cnJlbnRUaW1lKHNxbGl0ZTNf
dmZzKiwgZG91YmxlKiBub3cpCi17Ci0gICAgc3RydWN0IHRpbWV2YWwgdGltZXZhbDsKLSAgICBn
ZXR0aW1lb2ZkYXkoJnRpbWV2YWwsIDApOwotICAgICpub3cgPSAyNDQwNTg3LjUgKyB0aW1ldmFs
LnR2X3NlYyAvIDg2NDAwLjAgKyB0aW1ldmFsLnR2X3VzZWMgLyA4NjQwMDAwMDAwMC4wOwotICAg
IHJldHVybiAwOwotfQotCi0vLyBUaGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gU1FMaXRl
IGNvcmUuCi1zdGF0aWMgaW50IGNocm9taXVtR2V0TGFzdEVycm9yKHNxbGl0ZTNfdmZzKiwgaW50
LCBjaGFyKikKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotLy8gU2FtZSBhcyBNQVhfUEFUSE5BTUUg
ZnJvbSBzcWxpdGUncyBvc191bml4LmMuCi1zdGF0aWMgY29uc3QgaW50IGNocm9taXVtTWF4UGF0
aG5hbWUgPSA1MTI7Cit9IC8vIG5hbWVzcGFjZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZv
aWQgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKQogeworICAgIHNxbGl0ZTNf
dmZzKiB1bml4X3ZmcyA9IHNxbGl0ZTNfdmZzX2ZpbmQoInVuaXgiKTsKICAgICBzdGF0aWMgc3Fs
aXRlM192ZnMgY2hyb21pdW1fdmZzID0gewogICAgICAgICAxLAotICAgICAgICBzaXplb2YoQ2hy
b21pdW1GaWxlKSwKLSAgICAgICAgY2hyb21pdW1NYXhQYXRobmFtZSwKKyAgICAgICAgdW5peF92
ZnMtPnN6T3NGaWxlLAorICAgICAgICB1bml4X3Zmcy0+bXhQYXRobmFtZSwKICAgICAgICAgMCwK
ICAgICAgICAgImNocm9taXVtX3ZmcyIsCi0gICAgICAgIDAsCisgICAgICAgIHVuaXhfdmZzLT5w
QXBwRGF0YSwKICAgICAgICAgY2hyb21pdW1PcGVuLAogICAgICAgICBjaHJvbWl1bURlbGV0ZSwK
ICAgICAgICAgY2hyb21pdW1BY2Nlc3MsCiAgICAgICAgIGNocm9taXVtRnVsbFBhdGhuYW1lLAog
ICAgICAgICBjaHJvbWl1bURsT3BlbiwKLSAgICAgICAgY2hyb21pdW1EbEVycm9yLAotICAgICAg
ICBjaHJvbWl1bURsU3ltLAotICAgICAgICBjaHJvbWl1bURsQ2xvc2UsCi0gICAgICAgIGNocm9t
aXVtUmFuZG9tbmVzcywKLSAgICAgICAgY2hyb21pdW1TbGVlcCwKLSAgICAgICAgY2hyb21pdW1D
dXJyZW50VGltZSwKLSAgICAgICAgY2hyb21pdW1HZXRMYXN0RXJyb3IKKyAgICAgICAgdW5peF92
ZnMtPnhEbEVycm9yLAorICAgICAgICB1bml4X3Zmcy0+eERsU3ltLAorICAgICAgICB1bml4X3Zm
cy0+eERsQ2xvc2UsCisgICAgICAgIHVuaXhfdmZzLT54UmFuZG9tbmVzcywKKyAgICAgICAgdW5p
eF92ZnMtPnhTbGVlcCwKKyAgICAgICAgdW5peF92ZnMtPnhDdXJyZW50VGltZSwKKyAgICAgICAg
dW5peF92ZnMtPnhHZXRMYXN0RXJyb3IKICAgICB9OwogICAgIHNxbGl0ZTNfdmZzX3JlZ2lzdGVy
KCZjaHJvbWl1bV92ZnMsIDApOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80225</attachid>
            <date>2011-01-26 12:36:00 -0800</date>
            <delta_ts>2011-01-26 13:30:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53185-20110126123723.patch</filename>
            <type>text/plain</type>
            <size>42017</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNTIxMjZhNTIxZTI5OThlYmU2MTJlM2Y5ZjIyMGJmOWFmOGJiMTk1Li4x
YzEwZTk4MDBhNGVmM2ExZmEyN2U4MjE2OWE2YTExMjc2OTRmOTA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTEtMDEtMjYgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4K
KworICAgICAgICBVbnJldmlld2VkLgorCisgICAgICAgIFtjaHJvbWl1bV0gcmV2ZXJ0IHI2ODMx
MCBiZWNhdXNlIG9mIHJhY2UgY29uZGl0aW9ucyBkZXRlY3RlZCBieSB0c2FucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMxODUKKworICAgICAgICBD
YXVzZXMgc3RhYmlsaXR5IHByb2JsZW1zIGZvciBDaHJvbWl1bSwgaHR0cDovL2NyYnVnLmNvbS83
MDU4OQorCisgICAgICAgICogcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1D
aHJvbWl1bVBvc2l4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OnJl
Z2lzdGVyU1FMaXRlVkZTKToKKwogMjAxMS0wMS0yNiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNo
cm9taXVtUG9zaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NR
TGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVBvc2l4LmNwcAppbmRleCAzN2Y5NmJlNjliMGE3ZWE4MjEw
YzllNTU2ZDlhMWZmZjBmOTc3ZDZhLi42ZGJjMzg0MDc1NTY4MzM3MzVlNjI0MWRjY2RiYTgyZjEw
ZDJjZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0v
U1FMaXRlRmlsZVN5c3RlbUNocm9taXVtUG9zaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1Qb3NpeC5jcHAKQEAg
LTM0LDkzOCArMzQsMjMgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUg
PHNxbGl0ZTMuaD4KIAotI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNp
bmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy90
aW1lLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi0vLyBDaHJvbWl1bSdzIFBvc2l4IGltcGxlbWVudGF0
aW9uIG9mIFNRTGl0ZSBWRlMuCi0vLyBUaGlzIGlzIGhlYXZpbHkgYmFzZWQgb24gU1FMaXRlJ3Mg
b3NfdW5peC5jLAotLy8gd2l0aG91dCBwYXJ0cyB3ZSBkb24ndCBuZWVkLgotCi0vLyBJZGVudGlm
aWVzIGEgZmlsZSBieSBpdHMgZGV2aWNlIG51bWJlciBhbmQgaW5vZGUuCi1zdHJ1Y3QgQ2hyb21p
dW1GaWxlSWQgewotICAgIGRldl90IGRldjsgLy8gRGV2aWNlIG51bWJlci4KLSAgICBpbm9fdCBp
bm87IC8vIElub2RlIG51bWJlci4KLX07Ci0KLS8vIEluZm9ybWF0aW9uIGFib3V0IGZpbGUgbG9j
a3MgKG9uZSBwZXIgb3BlbiBpbm9kZSkuIE5vdGUgdGhhdCBtYW55IG9wZW4KLS8vIGZpbGUgZGVz
Y3JpcHRvcnMgbWF5IHJlZmVyIHRvIHRoZSBzYW1lIGlub2RlLgotc3RydWN0IENocm9taXVtTG9j
a0luZm8gewotICAgIENocm9taXVtRmlsZUlkIGxvY2tLZXk7IC8vIEZpbGUgaWRlbnRpZmllci4K
LSAgICBpbnQgY250OyAvLyBOdW1iZXIgb2Ygc2hhcmVkIGxvY2tzIGhlbGQuCi0gICAgaW50IGxv
Y2t0eXBlOyAvLyBUeXBlIG9mIHRoZSBsb2NrLgotICAgIGludCBuUmVmOyAvLyBSZWZlcmVuY2Ug
Y291bnQuCi0KLSAgICAvLyBEb3VibGUtbGlua2VkIGxpc3QgcG9pbnRlcnMuCi0gICAgQ2hyb21p
dW1Mb2NrSW5mbyogcE5leHQ7IAotICAgIENocm9taXVtTG9ja0luZm8qIHBQcmV2OwotfTsKLQot
Ly8gSW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCBjYW5ub3QgYmUgY2xv
c2VkIGltbWVkaWF0ZWx5Lgotc3RydWN0IENocm9taXVtVW51c2VkRmQgewotICAgIGludCBmZDsg
Ly8gRmlsZSBkZXNjcmlwdG9yLgotICAgIGludCBmbGFnczsgLy8gRmxhZ3MgdGhpcyBmaWxlIGRl
c2NyaXB0b3Igd2FzIG9wZW5lZCB3aXRoLgotICAgIENocm9taXVtVW51c2VkRmQqIHBOZXh0OyAv
LyBOZXh0IHVudXNlZCBmaWxlIGRlc2NyaXB0b3Igb24gdGhlIHNhbWUgZmlsZS4KLX07Ci0KLS8v
IEluZm9ybWF0aW9uIGFib3V0IGFuIG9wZW4gaW5vZGUuIFdoZW4gd2Ugd2FudCB0byBjbG9zZSBh
biBpbm9kZQotLy8gdGhhdCBzdGlsbCBoYXMgbG9ja3MsIHdlIGRlZmVyIHRoZSBjbG9zZSB1bnRp
bCBhbGwgbG9ja3MgYXJlIGNsZWFyZWQuCi1zdHJ1Y3QgQ2hyb21pdW1PcGVuSW5mbyB7Ci0gICAg
Q2hyb21pdW1GaWxlSWQgZmlsZUlkOyAvLyBUaGUgbG9va3VwIGtleS4KLSAgICBpbnQgblJlZjsg
Ly8gUmVmZXJlbmNlIGNvdW50LgotICAgIGludCBuTG9jazsgLy8gTnVtYmVyIG9mIG91dHN0YW5k
aW5nIGxvY2tzLgotICAgIENocm9taXVtVW51c2VkRmQqIHBVbnVzZWQ7IC8vIExpc3Qgb2YgZmls
ZSBkZXNjcmlwdG9ycyB0byBjbG9zZS4KLQotICAgIC8vIERvdWJsZS1saW5rZWQgbGlzdCBwb2lu
dGVycy4KLSAgICBDaHJvbWl1bU9wZW5JbmZvKiBwTmV4dDsKLSAgICBDaHJvbWl1bU9wZW5JbmZv
KiBwUHJldjsKLX07Ci0KLS8vIEtlZXAgdHJhY2sgb2YgbG9ja3MgYW5kIGlub2RlcyBpbiBkb3Vi
bGUtbGlua2VkIGxpc3RzLgotc3RhdGljIHN0cnVjdCBDaHJvbWl1bUxvY2tJbmZvKiBsb2NrTGlz
dCA9IDA7Ci1zdGF0aWMgc3RydWN0IENocm9taXVtT3BlbkluZm8qIG9wZW5MaXN0ID0gMDsKLQot
Ly8gRXh0ZW5zaW9uIG9mIHNxbGl0ZTNfZmlsZSBzcGVjaWZpYyB0byB0aGUgY2hyb21pdW0gVkZT
Lgotc3RydWN0IENocm9taXVtRmlsZSB7Ci0gICAgc3FsaXRlM19pb19tZXRob2RzIGNvbnN0KiBw
TWV0aG9kOyAvLyBJbXBsZW1lbnRhdGlvbiBvZiBzcWxpdGUzX2ZpbGUuCi0gICAgQ2hyb21pdW1P
cGVuSW5mbyogcE9wZW47IC8vIEluZm9ybWF0aW9uIGFib3V0IGFsbCBvcGVuIGZpbGUgZGVzY3Jp
cHRvcnMgZm9yIHRoaXMgZmlsZS4KLSAgICBDaHJvbWl1bUxvY2tJbmZvKiBwTG9jazsgLy8gSW5m
b3JtYXRpb24gYWJvdXQgYWxsIGxvY2tzIGZvciB0aGlzIGZpbGUuCi0gICAgaW50IGg7IC8vIEZp
bGUgZGVzY3JpcHRvci4KLSAgICBpbnQgZGlyZmQ7IC8vIEZpbGUgZGVzY3JpcHRvciBmb3IgdGhl
IGZpbGUgZGlyZWN0b3J5LgotICAgIHVuc2lnbmVkIGNoYXIgbG9ja3R5cGU7IC8vIFR5cGUgb2Yg
dGhlIGxvY2sgdXNlZCBmb3IgdGhpcyBmaWxlLgotICAgIGludCBsYXN0RXJybm87IC8vIFZhbHVl
IG9mIGVycm5vIGZvciBsYXN0IG9wZXJhdGlvbiBvbiB0aGlzIGZpbGUuCi0gICAgQ2hyb21pdW1V
bnVzZWRGZCogcFVudXNlZDsgLy8gSW5mb3JtYXRpb24gYWJvdXQgdW51c2VkIGZpbGUgZGVzY3Jp
cHRvcnMgZm9yIHRoaXMgZmlsZS4KLX07Ci0KLS8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIHNw
ZWNpZnkgdGhlIHJhbmdlIG9mIGJ5dGVzIHVzZWQgZm9yIGxvY2tpbmcuCi0vLyBTUUxpdGVTaGFy
ZWRTaXplIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBwb29sIGZyb20g
d2hpY2gKLS8vIGEgcmFuZG9tIGJ5dGUgaXMgc2VsZWN0ZWQgZm9yIGEgc2hhcmVkIGxvY2suICBU
aGUgcG9vbCBvZiBieXRlcyBmb3IKLS8vIHNoYXJlZCBsb2NrcyBiZWdpbnMgYXQgU1FMaXRlU2hh
cmVkRmlyc3RCeXRlLiAKLS8vIFRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIHVzZWQgYnkgU1FM
aXRlIGZvciBjb21wYXRpYmlsaXR5Lgotc3RhdGljIGNvbnN0IG9mZl90IFNRTGl0ZVBlbmRpbmdC
eXRlID0gMHg0MDAwMDAwMDsKLXN0YXRpYyBjb25zdCBvZmZfdCBTUUxpdGVSZXNlcnZlZEJ5dGUg
PSBTUUxpdGVQZW5kaW5nQnl0ZSArIDE7Ci1zdGF0aWMgY29uc3Qgb2ZmX3QgU1FMaXRlU2hhcmVk
Rmlyc3RCeXRlID0gU1FMaXRlUGVuZGluZ0J5dGUgKyAyOwotc3RhdGljIGNvbnN0IG9mZl90IFNR
TGl0ZVNoYXJlZFNpemUgPSA1MTA7Ci0KLS8vIE1hcHMgYSBQT1NJWCBlcnJvciBjb2RlIHRvIGFu
IFNRTGl0ZSBlcnJvciBjb2RlLgotc3RhdGljIGludCBzcWxpdGVFcnJvckZyb21Qb3NpeEVycm9y
KGludCBwb3NpeEVycm9yLCBpbnQgc3FsaXRlSU9FcnIpCi17Ci0gICAgc3dpdGNoIChwb3NpeEVy
cm9yKSB7Ci0gICAgY2FzZSAwOiAKLSAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKLSAgICBjYXNl
IEVBR0FJTjoKLSAgICBjYXNlIEVUSU1FRE9VVDoKLSAgICBjYXNlIEVCVVNZOgotICAgIGNhc2Ug
RUlOVFI6Ci0gICAgY2FzZSBFTk9MQ0s6ICAKLSAgICAgICAgcmV0dXJuIFNRTElURV9CVVNZOwot
ICAgIGNhc2UgRUFDQ0VTOiAKLSAgICAgICAgLy8gRUFDQ0VTIGlzIGxpa2UgRUFHQUlOIGR1cmlu
ZyBsb2NraW5nIG9wZXJhdGlvbnMuCi0gICAgICAgIGlmICgoc3FsaXRlSU9FcnIgPT0gU1FMSVRF
X0lPRVJSX0xPQ0spIHx8Ci0gICAgICAgICAgICAoc3FsaXRlSU9FcnIgPT0gU1FMSVRFX0lPRVJS
X1VOTE9DSykgfHwKLSAgICAgICAgICAgIChzcWxpdGVJT0VyciA9PSBTUUxJVEVfSU9FUlJfUkRM
T0NLKSB8fAotICAgICAgICAgICAgKHNxbGl0ZUlPRXJyID09IFNRTElURV9JT0VSUl9DSEVDS1JF
U0VSVkVETE9DSykpCi0gICAgICAgICAgICByZXR1cm4gU1FMSVRFX0JVU1k7Ci0gICAgICAgIHJl
dHVybiBTUUxJVEVfUEVSTTsKLSAgICBjYXNlIEVQRVJNOiAKLSAgICAgICAgcmV0dXJuIFNRTElU
RV9QRVJNOwotICAgIGNhc2UgRURFQURMSzoKLSAgICAgICAgcmV0dXJuIFNRTElURV9JT0VSUl9C
TE9DS0VEOwotICAgIGRlZmF1bHQ6IAotICAgICAgICByZXR1cm4gc3FsaXRlSU9FcnI7Ci0gICAg
fQotfQotCi0vLyBSZWxlYXNlcyBhIENocm9taXVtTG9ja0luZm8gc3RydWN0dXJlIHByZXZpb3Vz
bHkgYWxsb2NhdGVkIGJ5IGZpbmRMb2NrSW5mbygpLgotc3RhdGljIHZvaWQgcmVsZWFzZUxvY2tJ
bmZvKENocm9taXVtTG9ja0luZm8qIHBMb2NrKQotewotICAgIGlmICghcExvY2spCi0gICAgICAg
IHJldHVybjsKLQotICAgIHBMb2NrLT5uUmVmLS07Ci0gICAgaWYgKHBMb2NrLT5uUmVmID4gMCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHBMb2NrLT5wUHJldikgewotICAgICAgICBBU1NF
UlQocExvY2stPnBQcmV2LT5wTmV4dCA9PSBwTG9jayk7Ci0gICAgICAgIHBMb2NrLT5wUHJldi0+
cE5leHQgPSBwTG9jay0+cE5leHQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGxvY2tM
aXN0ID09IHBMb2NrKTsKLSAgICAgICAgbG9ja0xpc3QgPSBwTG9jay0+cE5leHQ7Ci0gICAgfQot
ICAgIGlmIChwTG9jay0+cE5leHQpIHsKLSAgICAgICAgQVNTRVJUKHBMb2NrLT5wTmV4dC0+cFBy
ZXYgPT0gcExvY2spOwotICAgICAgICBwTG9jay0+cE5leHQtPnBQcmV2ID0gcExvY2stPnBQcmV2
OwotICAgIH0KLQotICAgIHNxbGl0ZTNfZnJlZShwTG9jayk7Ci19Ci0KLS8vIFJlbGVhc2VzIGEg
Q2hyb21pdW1PcGVuSW5mbyBzdHJ1Y3R1cmUgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgZmluZExv
Y2tJbmZvKCkuCi1zdGF0aWMgdm9pZCByZWxlYXNlT3BlbkluZm8oQ2hyb21pdW1PcGVuSW5mbyog
cE9wZW4pCi17Ci0gICAgaWYgKCFwT3BlbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcE9wZW4t
Pm5SZWYtLTsKLSAgICBpZiAocE9wZW4tPm5SZWYgPiAwKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAocE9wZW4tPnBQcmV2KSB7Ci0gICAgICAgIEFTU0VSVChwT3Blbi0+cFByZXYtPnBOZXh0
ID09IHBPcGVuKTsKLSAgICAgICAgcE9wZW4tPnBQcmV2LT5wTmV4dCA9IHBPcGVuLT5wTmV4dDsK
LSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQob3Blbkxpc3QgPT0gcE9wZW4pOwotICAgICAg
ICBvcGVuTGlzdCA9IHBPcGVuLT5wTmV4dDsKLSAgICB9Ci0gICAgaWYgKHBPcGVuLT5wTmV4dCkg
ewotICAgICAgICBBU1NFUlQocE9wZW4tPnBOZXh0LT5wUHJldiA9PSBwT3Blbik7Ci0gICAgICAg
IHBPcGVuLT5wTmV4dC0+cFByZXYgPSBwT3Blbi0+cFByZXY7Ci0gICAgfQotCi0gICAgQVNTRVJU
KCFwT3Blbi0+cFVudXNlZCk7IC8vIE1ha2Ugc3VyZSB3ZSdyZSBub3QgbGVha2luZyBtZW1vcnkg
YW5kIGZpbGUgZGVzY3JpcHRvcnMuCi0KLSAgICBzcWxpdGUzX2ZyZWUocE9wZW4pOwotfQotCi0v
LyBMb2NhdGVzIENocm9taXVtTG9ja0luZm8gYW5kIENocm9taXVtT3BlbkluZm8gZm9yIGdpdmVu
IGZpbGUgZGVzY3JpcHRvciAoY3JlYXRpbmcgbmV3IG9uZXMgaWYgbmVlZGVkKS4KLS8vIFJldHVy
bnMgYSBTUUxpdGUgZXJyb3IgY29kZS4KLXN0YXRpYyBpbnQgZmluZExvY2tJbmZvKENocm9taXVt
RmlsZSogcEZpbGUsIENocm9taXVtTG9ja0luZm8qKiBwcExvY2ssIENocm9taXVtT3BlbkluZm8q
KiBwcE9wZW4pCi17Ci0gICAgaW50IGZkID0gcEZpbGUtPmg7Ci0gICAgc3RydWN0IHN0YXQgc3Rh
dGJ1ZjsKLSAgICBpbnQgcmMgPSBmc3RhdChmZCwgJnN0YXRidWYpOwotICAgIGlmIChyYykgewot
ICAgICAgICBwRmlsZS0+bGFzdEVycm5vID0gZXJybm87Ci0jaWZkZWYgRU9WRVJGTE9XCi0gICAg
ICAgIGlmIChwRmlsZS0+bGFzdEVycm5vID09IEVPVkVSRkxPVykKLSAgICAgICAgICAgIHJldHVy
biBTUUxJVEVfTk9MRlM7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIFNRTElURV9JT0VSUjsKLSAg
ICB9Ci0KLSNpZiBPUyhEQVJXSU4pCi0gICAgLy8gT24gT1MgWCBvbiBhbiBtc2Rvcy9mYXQgZmls
ZXN5c3RlbXMsIHRoZSBpbm9kZSBudW1iZXIgaXMgcmVwb3J0ZWQKLSAgICAvLyBpbmNvcnJlY3Rs
eSBmb3IgemVyby1zaXplIGZpbGVzLiBTZWUgaHR0cDovL3d3dy5zcWxpdGUub3JnL2N2c3RyYWMv
dGt0dmlldz90bj0zMjYwLgotICAgIC8vIFRvIHdvcmsgYXJvdW5kIHRoaXMgcHJvYmxlbSB3ZSBh
bHdheXMgaW5jcmVhc2UgdGhlIGZpbGUgc2l6ZSB0byAxIGJ5IHdyaXRpbmcgYSBzaW5nbGUgYnl0
ZQotICAgIC8vIHByaW9yIHRvIGFjY2Vzc2luZyB0aGUgaW5vZGUgbnVtYmVyLiBUaGUgb25lIGJ5
dGUgd3JpdHRlbiBpcyBhbiBBU0NJSSAnUycgY2hhcmFjdGVyIHdoaWNoCi0gICAgLy8gYWxzbyBo
YXBwZW5zIHRvIGJlIHRoZSBmaXJzdCBieXRlIGluIHRoZSBoZWFkZXIgb2YgZXZlcnkgU1FMaXRl
IGRhdGFiYXNlLiAgSW4gdGhpcyB3YXksCi0gICAgLy8gaWYgdGhlcmUgaXMgYSByYWNlIGNvbmRp
dGlvbiBzdWNoIHRoYXQgYW5vdGhlciB0aHJlYWQgaGFzIGFscmVhZHkgcG9wdWxhdGVkIHRoZSBm
aXJzdCBwYWdlCi0gICAgLy8gb2YgdGhlIGRhdGFiYXNlLCBubyBkYW1hZ2UgaXMgZG9uZS4KLSAg
ICBpZiAoIXN0YXRidWYuc3Rfc2l6ZSkgewotICAgICAgICByYyA9IHdyaXRlKGZkLCAiUyIsIDEp
OwotICAgICAgICBpZiAocmMgIT0gMSkKLSAgICAgICAgICAgIHJldHVybiBTUUxJVEVfSU9FUlI7
Ci0gICAgICAgIHJjID0gZnN0YXQoZmQsICZzdGF0YnVmKTsKLSAgICAgICAgaWYgKHJjKSB7Ci0g
ICAgICAgICAgICBwRmlsZS0+bGFzdEVycm5vID0gZXJybm87Ci0gICAgICAgICAgICByZXR1cm4g
U1FMSVRFX0lPRVJSOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICBDaHJvbWl1bUZp
bGVJZCBmaWxlSWQ7Ci0gICAgbWVtc2V0KCZmaWxlSWQsIDAsIHNpemVvZihmaWxlSWQpKTsKLSAg
ICBmaWxlSWQuZGV2ID0gc3RhdGJ1Zi5zdF9kZXY7Ci0gICAgZmlsZUlkLmlubyA9IHN0YXRidWYu
c3RfaW5vOwotCi0gICAgQ2hyb21pdW1Mb2NrSW5mbyogcExvY2sgPSAwOwotCi0gICAgaWYgKHBw
TG9jaykgewotICAgICAgICBwTG9jayA9IGxvY2tMaXN0OwotICAgICAgICB3aGlsZSAocExvY2sg
JiYgbWVtY21wKCZmaWxlSWQsICZwTG9jay0+bG9ja0tleSwgc2l6ZW9mKGZpbGVJZCkpKQotICAg
ICAgICAgICAgcExvY2sgPSBwTG9jay0+cE5leHQ7Ci0gICAgICAgIGlmIChwTG9jaykKLSAgICAg
ICAgICAgIHBMb2NrLT5uUmVmKys7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcExvY2sg
PSBzdGF0aWNfY2FzdDxDaHJvbWl1bUxvY2tJbmZvKj4oc3FsaXRlM19tYWxsb2Moc2l6ZW9mKCpw
TG9jaykpKTsKLSAgICAgICAgICAgIGlmICghcExvY2spCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFNRTElURV9OT01FTTsKLSAgICAgICAgICAgIHBMb2NrLT5sb2NrS2V5ID0gZmlsZUlkOwotICAg
ICAgICAgICAgcExvY2stPm5SZWYgPSAxOwotICAgICAgICAgICAgcExvY2stPmNudCA9IDA7Ci0g
ICAgICAgICAgICBwTG9jay0+bG9ja3R5cGUgPSAwOwotICAgICAgICAgICAgcExvY2stPnBOZXh0
ID0gbG9ja0xpc3Q7Ci0gICAgICAgICAgICBwTG9jay0+cFByZXYgPSAwOwotICAgICAgICAgICAg
aWYgKGxvY2tMaXN0KQotICAgICAgICAgICAgICAgIGxvY2tMaXN0LT5wUHJldiA9IHBMb2NrOwot
ICAgICAgICAgICAgbG9ja0xpc3QgPSBwTG9jazsKLSAgICAgICAgfQotICAgICAgICAqcHBMb2Nr
ID0gcExvY2s7Ci0gICAgfQotCi0gICAgaWYgKHBwT3BlbikgewotICAgICAgICBDaHJvbWl1bU9w
ZW5JbmZvKiBwT3BlbiA9IG9wZW5MaXN0OwotICAgICAgICB3aGlsZSAocE9wZW4gJiYgbWVtY21w
KCZmaWxlSWQsICZwT3Blbi0+ZmlsZUlkLCBzaXplb2YoZmlsZUlkKSkpCi0gICAgICAgICAgICBw
T3BlbiA9IHBPcGVuLT5wTmV4dDsKLSAgICAgICAgaWYgKHBPcGVuKQotICAgICAgICAgICAgcE9w
ZW4tPm5SZWYrKzsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwT3BlbiA9IHN0YXRpY19j
YXN0PENocm9taXVtT3BlbkluZm8qPihzcWxpdGUzX21hbGxvYyhzaXplb2YoKnBPcGVuKSkpOwot
ICAgICAgICAgICAgaWYgKCFwT3BlbikgewotICAgICAgICAgICAgICAgIHJlbGVhc2VMb2NrSW5m
byhwTG9jayk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNRTElURV9OT01FTTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1lbXNldChwT3BlbiwgMCwgc2l6ZW9mKCpwT3BlbikpOwotICAg
ICAgICAgICAgcE9wZW4tPmZpbGVJZCA9IGZpbGVJZDsKLSAgICAgICAgICAgIHBPcGVuLT5uUmVm
ID0gMTsKLSAgICAgICAgICAgIHBPcGVuLT5wTmV4dCA9IG9wZW5MaXN0OwotICAgICAgICAgICAg
aWYgKG9wZW5MaXN0KQotICAgICAgICAgICAgICAgIG9wZW5MaXN0LT5wUHJldiA9IHBPcGVuOwot
ICAgICAgICAgICAgb3Blbkxpc3QgPSBwT3BlbjsKLSAgICAgICAgfQotICAgICAgICAqcHBPcGVu
ID0gcE9wZW47Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi0vLyBDaGVja3MgaWYgdGhl
cmUgaXMgYSBSRVNFUlZFRCBsb2NrIGhlbGQgb24gdGhlIHNwZWNpZmllZCBmaWxlIGJ5IHRoaXMg
b3IgYW55IG90aGVyIHByb2Nlc3MuCi0vLyBJZiB0aGUgbG9jayBpcyBoZWxkLCBzZXRzIHBSZXNP
dXQgdG8gYSBub24temVybyB2YWx1ZS4gUmV0dXJucyBhIFNRTGl0ZSBlcnJvciBjb2RlLgotc3Rh
dGljIGludCBjaHJvbWl1bUNoZWNrUmVzZXJ2ZWRMb2NrKHNxbGl0ZTNfZmlsZSogaWQsIGludCog
cFJlc091dCkKLXsKLSAgICBDaHJvbWl1bUZpbGUqIHBGaWxlID0gcmVpbnRlcnByZXRfY2FzdDxD
aHJvbWl1bUZpbGUqPihpZCk7Ci0gICAgQVNTRVJUKHBGaWxlKTsKLQotICAgIC8vIExvb2sgZm9y
IGxvY2tzIGhlbGQgYnkgdGhpcyBwcm9jZXNzLgotICAgIGludCByZXNlcnZlZCA9IDA7Ci0gICAg
aWYgKHBGaWxlLT5wTG9jay0+bG9ja3R5cGUgPiBTUUxJVEVfTE9DS19TSEFSRUQpCi0gICAgICAg
IHJlc2VydmVkID0gMTsKLQotICAgIC8vIExvb2sgZm9yIGxvY2tzIGhlbGQgYnkgb3RoZXIgcHJv
Y2Vzc2VzLgotICAgIGludCByYyA9IFNRTElURV9PSzsKLSAgICBpZiAoIXJlc2VydmVkKSB7Ci0g
ICAgICAgIHN0cnVjdCBmbG9jayBsb2NrOwotICAgICAgICBsb2NrLmxfd2hlbmNlID0gU0VFS19T
RVQ7Ci0gICAgICAgIGxvY2subF9zdGFydCA9IFNRTGl0ZVJlc2VydmVkQnl0ZTsKLSAgICAgICAg
bG9jay5sX2xlbiA9IDE7Ci0gICAgICAgIGxvY2subF90eXBlID0gRl9XUkxDSzsKLSAgICAgICAg
aWYgKC0xID09IGZjbnRsKHBGaWxlLT5oLCBGX0dFVExLLCAmbG9jaykpIHsKLSAgICAgICAgICAg
IGludCB0RXJybm8gPSBlcnJubzsKLSAgICAgICAgICAgIHJjID0gc3FsaXRlRXJyb3JGcm9tUG9z
aXhFcnJvcih0RXJybm8sIFNRTElURV9JT0VSUl9DSEVDS1JFU0VSVkVETE9DSyk7Ci0gICAgICAg
ICAgICBwRmlsZS0+bGFzdEVycm5vID0gdEVycm5vOwotICAgICAgICB9IGVsc2UgaWYgKGxvY2su
bF90eXBlICE9IEZfVU5MQ0spCi0gICAgICAgICAgICByZXNlcnZlZCA9IDE7Ci0gICAgfQotCi0g
ICAgKnBSZXNPdXQgPSByZXNlcnZlZDsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLS8vIFBlcmZvcm1z
IGEgZmlsZSBsb2NraW5nIG9wZXJhdGlvbiBvbiBhIHJhbmdlIG9mIGJ5dGVzIGluIGEgZmlsZS4K
LS8vIFRoZSB8b3B8IHBhcmFtZXRlciBzaG91bGQgYmUgb25lIG9mIEZfUkZMQ0ssIEZfV1JMQ0sg
b3IgRl9VTkxDSy4KLS8vIFJldHVybnMgYSBVbml4IGVycm9yIGNvZGUsIGFuZCBhbHNvIHdyaXRl
cyBpdCB0byBwRXJyY29kZS4KLXN0YXRpYyBpbnQgcmFuZ2VMb2NrKENocm9taXVtRmlsZSogcEZp
bGUsIGludCBvcCwgaW50KiBwRXJyY29kZSkKLXsKLSAgICBzdHJ1Y3QgZmxvY2sgbG9jazsKLSAg
ICBsb2NrLmxfdHlwZSA9IG9wOwotICAgIGxvY2subF9zdGFydCA9IFNRTGl0ZVNoYXJlZEZpcnN0
Qnl0ZTsKLSAgICBsb2NrLmxfd2hlbmNlID0gU0VFS19TRVQ7Ci0gICAgbG9jay5sX2xlbiA9IFNR
TGl0ZVNoYXJlZFNpemU7Ci0gICAgaW50IHJjID0gZmNudGwocEZpbGUtPmgsIEZfU0VUTEssICZs
b2NrKTsKLSAgICAqcEVycmNvZGUgPSBlcnJubzsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLS8vIExv
Y2tzIHRoZSBmaWxlIHdpdGggdGhlIGxvY2sgc3BlY2lmaWVkIGJ5IHBhcmFtZXRlciBsb2NrdHlw
ZSAtIG9uZQotLy8gb2YgdGhlIGZvbGxvd2luZzoKLS8vCi0vLyAgICAgKDEpIFNRTElURV9MT0NL
X1NIQVJFRAotLy8gICAgICgyKSBTUUxJVEVfTE9DS19SRVNFUlZFRAotLy8gICAgICgzKSBTUUxJ
VEVfTE9DS19QRU5ESU5HCi0vLyAgICAgKDQpIFNRTElURV9MT0NLX0VYQ0xVU0lWRQotLy8KLS8v
IFNvbWV0aW1lcyB3aGVuIHJlcXVlc3Rpbmcgb25lIGxvY2sgc3RhdGUsIGFkZGl0aW9uYWwgbG9j
ayBzdGF0ZXMKLS8vIGFyZSBpbnNlcnRlZCBpbiBiZXR3ZWVuLiAgVGhlIGxvY2tpbmcgbWlnaHQg
ZmFpbCBvbiBvbmUgb2YgdGhlIGxhdGVyCi0vLyB0cmFuc2l0aW9ucyBsZWF2aW5nIHRoZSBsb2Nr
IHN0YXRlIGRpZmZlcmVudCBmcm9tIHdoYXQgaXQgc3RhcnRlZCBidXQKLS8vIHN0aWxsIHNob3J0
IG9mIGl0cyBnb2FsLiAgVGhlIGZvbGxvd2luZyBjaGFydCBzaG93cyB0aGUgYWxsb3dlZAotLy8g
dHJhbnNpdGlvbnMgYW5kIHRoZSBpbnNlcnRlZCBpbnRlcm1lZGlhdGUgc3RhdGVzOgotLy8KLS8v
ICAgIFVOTE9DS0VEIC0+IFNIQVJFRAotLy8gICAgU0hBUkVEIC0+IFJFU0VSVkVECi0vLyAgICBT
SEFSRUQgLT4gKFBFTkRJTkcpIC0+IEVYQ0xVU0lWRQotLy8gICAgUkVTRVJWRUQgLT4gKFBFTkRJ
TkcpIC0+IEVYQ0xVU0lWRQotLy8gICAgUEVORElORyAtPiBFWENMVVNJVkUKLXN0YXRpYyBpbnQg
Y2hyb21pdW1Mb2NrKHNxbGl0ZTNfZmlsZSogaWQsIGludCBsb2NrdHlwZSkKLXsKLSAgICAvLyBU
byBvYnRhaW4gYSBTSEFSRUQgbG9jaywgYSByZWFkLWxvY2sgaXMgb2J0YWluZWQgb24gdGhlICdw
ZW5kaW5nCi0gICAgLy8gYnl0ZScuICBJZiB0aGlzIGlzIHN1Y2Nlc3NmdWwsIGEgcmFuZG9tIGJ5
dGUgZnJvbSB0aGUgJ3NoYXJlZCBieXRlCi0gICAgLy8gcmFuZ2UnIGlzIHJlYWQtbG9ja2VkIGFu
ZCB0aGUgbG9jayBvbiB0aGUgJ3BlbmRpbmcgYnl0ZScgcmVsZWFzZWQuCi0gICAgLy8KLSAgICAv
LyBBIHByb2Nlc3MgbWF5IG9ubHkgb2J0YWluIGEgUkVTRVJWRUQgbG9jayBhZnRlciBpdCBoYXMg
YSBTSEFSRUQgbG9jay4KLSAgICAvLyBBIFJFU0VSVkVEIGxvY2sgaXMgaW1wbGVtZW50ZWQgYnkg
Z3JhYmJpbmcgYSB3cml0ZS1sb2NrIG9uIHRoZQotICAgIC8vICdyZXNlcnZlZCBieXRlJy4gCi0g
ICAgLy8KLSAgICAvLyBBIHByb2Nlc3MgbWF5IG9ubHkgb2J0YWluIGEgUEVORElORyBsb2NrIGFm
dGVyIGl0IGhhcyBvYnRhaW5lZCBhCi0gICAgLy8gU0hBUkVEIGxvY2suIEEgUEVORElORyBsb2Nr
IGlzIGltcGxlbWVudGVkIGJ5IG9idGFpbmluZyBhIHdyaXRlLWxvY2sKLSAgICAvLyBvbiB0aGUg
J3BlbmRpbmcgYnl0ZScuIFRoaXMgZW5zdXJlcyB0aGF0IG5vIG5ldyBTSEFSRUQgbG9ja3MgY2Fu
IGJlCi0gICAgLy8gb2J0YWluZWQsIGJ1dCBleGlzdGluZyBTSEFSRUQgbG9ja3MgYXJlIGFsbG93
ZWQgdG8gcGVyc2lzdC4gQSBwcm9jZXNzCi0gICAgLy8gZG9lcyBub3QgaGF2ZSB0byBvYnRhaW4g
YSBSRVNFUlZFRCBsb2NrIG9uIHRoZSB3YXkgdG8gYSBQRU5ESU5HIGxvY2suCi0gICAgLy8gVGhp
cyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IHRoZSBhbGdvcml0aG0gZm9yIHJvbGxpbmcgYmFjayBhIGpv
dXJuYWwgZmlsZQotICAgIC8vIGFmdGVyIGEgY3Jhc2guCi0gICAgLy8KLSAgICAvLyBBbiBFWENM
VVNJVkUgbG9jaywgb2J0YWluZWQgYWZ0ZXIgYSBQRU5ESU5HIGxvY2sgaXMgaGVsZCwgaXMKLSAg
ICAvLyBpbXBsZW1lbnRlZCBieSBvYnRhaW5pbmcgYSB3cml0ZS1sb2NrIG9uIHRoZSBlbnRpcmUg
J3NoYXJlZCBieXRlCi0gICAgLy8gcmFuZ2UnLiBTaW5jZSBhbGwgb3RoZXIgbG9ja3MgcmVxdWly
ZSBhIHJlYWQtbG9jayBvbiBvbmUgb2YgdGhlIGJ5dGVzCi0gICAgLy8gd2l0aGluIHRoaXMgcmFu
Z2UsIHRoaXMgZW5zdXJlcyB0aGF0IG5vIG90aGVyIGxvY2tzIGFyZSBoZWxkIG9uIHRoZQotICAg
IC8vIGRhdGFiYXNlLiAKLQotICAgIGludCByYyA9IFNRTElURV9PSzsKLSAgICBzdHJ1Y3QgZmxv
Y2sgbG9jazsKLSAgICBpbnQgcyA9IDA7Ci0gICAgaW50IHRFcnJubzsKLQotICAgIENocm9taXVt
RmlsZSogcEZpbGUgPSByZWludGVycHJldF9jYXN0PENocm9taXVtRmlsZSo+KGlkKTsKLSAgICBB
U1NFUlQocEZpbGUpOwotCi0gICAgQ2hyb21pdW1Mb2NrSW5mbyogcExvY2sgPSBwRmlsZS0+cExv
Y2s7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgbG9jayBvZiB0aGlzIHR5cGUgb3Ig
bW9yZSByZXN0cmljdGl2ZSwgZG8gbm90aGluZy4KLSAgICBpZiAocEZpbGUtPmxvY2t0eXBlID49
IGxvY2t0eXBlKQotICAgICAgICByZXR1cm4gU1FMSVRFX09LOwotCi0gICAgLy8gTWFrZSBzdXJl
IHdlIG5ldmVyIG1vdmUgZnJvbSB1bmxvY2tlZCB0byBhbnl0aGluZyBoaWdoZXIgdGhhbiBzaGFy
ZWQgbG9jay4KLSAgICBBU1NFUlQocEZpbGUtPmxvY2t0eXBlICE9IFNRTElURV9MT0NLX05PTkUg
fHwgbG9ja3R5cGUgPT0gU1FMSVRFX0xPQ0tfU0hBUkVEKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3
ZSBuZXZlciByZXF1ZXN0IGEgcGVuZGluZyBsb2NrLgotICAgIEFTU0VSVChsb2NrdHlwZSAhPSBT
UUxJVEVfTE9DS19QRU5ESU5HKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBhIHNoYXJlZCBsb2NrIGlz
IGFsd2F5cyBoZWxkIHdoZW4gYSBSRVNFUlZFRCBsb2NrIGlzIHJlcXVlc3RlZC4KLSAgICBBU1NF
UlQobG9ja3R5cGUgIT0gU1FMSVRFX0xPQ0tfUkVTRVJWRUQgfHwgcEZpbGUtPmxvY2t0eXBlID09
IFNRTElURV9MT0NLX1NIQVJFRCk7Ci0KLSAgICAvLyBJZiBzb21lIHRocmVhZCB1c2luZyB0aGlz
IFBJRCBoYXMgYSBsb2NrIHZpYSBhIGRpZmZlcmVudCBDaHJvbWl1bUZpbGUKLSAgICAvLyBoYW5k
bGUgdGhhdCBwcmVjbHVkZXMgdGhlIHJlcXVlc3RlZCBsb2NrLCByZXR1cm4gQlVTWS4KLSAgICBp
ZiAocEZpbGUtPmxvY2t0eXBlICE9IHBMb2NrLT5sb2NrdHlwZSAmJgotICAgICAgICAocExvY2st
PmxvY2t0eXBlID49IFNRTElURV9MT0NLX1BFTkRJTkcgfHwgbG9ja3R5cGUgPiBTUUxJVEVfTE9D
S19TSEFSRUQpKQotICAgICAgICByZXR1cm4gU1FMSVRFX0JVU1k7Ci0KLSAgICAvLyBJZiBhIFNI
QVJFRCBsb2NrIGlzIHJlcXVlc3RlZCwgYW5kIHNvbWUgdGhyZWFkIHVzaW5nIHRoaXMgUElEIGFs
cmVhZHkKLSAgICAvLyBoYXMgYSBTSEFSRUQgb3IgUkVTRVJWRUQgbG9jaywgdGhlbiBqdXN0IGlu
Y3JlbWVudCByZWZlcmVuY2UgY291bnRzLgotICAgIGlmIChsb2NrdHlwZSA9PSBTUUxJVEVfTE9D
S19TSEFSRUQgJiYKLSAgICAgICAgKHBMb2NrLT5sb2NrdHlwZSA9PSBTUUxJVEVfTE9DS19TSEFS
RUQgfHwgcExvY2stPmxvY2t0eXBlID09IFNRTElURV9MT0NLX1JFU0VSVkVEKSkgewotICAgICAg
ICBBU1NFUlQoIXBGaWxlLT5sb2NrdHlwZSk7Ci0gICAgICAgIEFTU0VSVChwTG9jay0+Y250ID4g
MCk7Ci0gICAgICAgIHBGaWxlLT5sb2NrdHlwZSA9IFNRTElURV9MT0NLX1NIQVJFRDsKLSAgICAg
ICAgcExvY2stPmNudCsrOwotICAgICAgICBwRmlsZS0+cE9wZW4tPm5Mb2NrKys7Ci0gICAgICAg
IHJldHVybiBTUUxJVEVfT0s7Ci0gICAgfQotCi0gICAgLy8gQSBQRU5ESU5HIGxvY2sgaXMgbmVl
ZGVkIGJlZm9yZSBhY3F1aXJpbmcgYSBTSEFSRUQgbG9jayBhbmQgYmVmb3JlCi0gICAgLy8gYWNx
dWlyaW5nIGFuIEVYQ0xVU0lWRSBsb2NrLiAgRm9yIHRoZSBTSEFSRUQgbG9jaywgdGhlIFBFTkRJ
Tkcgd2lsbAotICAgIC8vIGJlIHJlbGVhc2VkLgotICAgIGxvY2subF9sZW4gPSAxOwotICAgIGxv
Y2subF93aGVuY2UgPSBTRUVLX1NFVDsKLSAgICBpZiAobG9ja3R5cGUgPT0gU1FMSVRFX0xPQ0tf
U0hBUkVEIHx8Ci0gICAgICAgIChsb2NrdHlwZSA9PSBTUUxJVEVfTE9DS19FWENMVVNJVkUgJiYg
cEZpbGUtPmxvY2t0eXBlIDwgU1FMSVRFX0xPQ0tfUEVORElORykpIHsKLSAgICAgICAgbG9jay5s
X3R5cGUgPSAobG9ja3R5cGUgPT0gU1FMSVRFX0xPQ0tfU0hBUkVEID8gRl9SRExDSyA6IEZfV1JM
Q0spOwotICAgICAgICBsb2NrLmxfc3RhcnQgPSBTUUxpdGVQZW5kaW5nQnl0ZTsKLSAgICAgICAg
cyA9IGZjbnRsKHBGaWxlLT5oLCBGX1NFVExLLCAmbG9jayk7Ci0gICAgICAgIGlmIChzID09IC0x
KSB7Ci0gICAgICAgICAgICB0RXJybm8gPSBlcnJubzsKLSAgICAgICAgICAgIHJjID0gc3FsaXRl
RXJyb3JGcm9tUG9zaXhFcnJvcih0RXJybm8sIFNRTElURV9JT0VSUl9MT0NLKTsKLSAgICAgICAg
ICAgIGlmICgocmMgIT0gU1FMSVRFX09LKSAmJiAocmMgIT0gU1FMSVRFX0JVU1kpKQotICAgICAg
ICAgICAgICAgIHBGaWxlLT5sYXN0RXJybm8gPSB0RXJybm87Ci0gICAgICAgICAgICByZXR1cm4g
cmM7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobG9ja3R5cGUgPT0gU1FMSVRFX0xPQ0tf
U0hBUkVEKSB7Ci0gICAgICAgIEFTU0VSVCghcExvY2stPmNudCk7Ci0gICAgICAgIEFTU0VSVCgh
cExvY2stPmxvY2t0eXBlKTsKLQotICAgICAgICBzID0gcmFuZ2VMb2NrKHBGaWxlLCBGX1JETENL
LCAmdEVycm5vKTsKLQotICAgICAgICAvLyBEcm9wIHRoZSB0ZW1wb3JhcnkgUEVORElORyBsb2Nr
LgotICAgICAgICBsb2NrLmxfc3RhcnQgPSBTUUxpdGVQZW5kaW5nQnl0ZTsKLSAgICAgICAgbG9j
ay5sX2xlbiA9IDE7Ci0gICAgICAgIGxvY2subF90eXBlID0gRl9VTkxDSzsKLSAgICAgICAgaWYg
KGZjbnRsKHBGaWxlLT5oLCBGX1NFVExLLCAmbG9jaykpIHsKLSAgICAgICAgICAgIGlmIChzICE9
IC0xKSB7Ci0gICAgICAgICAgICAgICAgdEVycm5vID0gZXJybm87IAotICAgICAgICAgICAgICAg
IHJjID0gc3FsaXRlRXJyb3JGcm9tUG9zaXhFcnJvcih0RXJybm8sIFNRTElURV9JT0VSUl9VTkxP
Q0spOyAKLSAgICAgICAgICAgICAgICBpZiAoKHJjICE9IFNRTElURV9PSykgJiYgKHJjICE9IFNR
TElURV9CVVNZKSkKLSAgICAgICAgICAgICAgICAgICAgcEZpbGUtPmxhc3RFcnJubyA9IHRFcnJu
bzsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKHMgPT0gLTEpIHsKLSAgICAgICAgICAgIHJjID0gc3FsaXRlRXJyb3JGcm9t
UG9zaXhFcnJvcih0RXJybm8sIFNRTElURV9JT0VSUl9MT0NLKTsKLSAgICAgICAgICAgIGlmICgo
cmMgIT0gU1FMSVRFX09LKSAmJiAocmMgIT0gU1FMSVRFX0JVU1kpKQotICAgICAgICAgICAgICAg
IHBGaWxlLT5sYXN0RXJybm8gPSB0RXJybm87Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBwRmlsZS0+bG9ja3R5cGUgPSBTUUxJVEVfTE9DS19TSEFSRUQ7Ci0gICAgICAgICAgICBwRmls
ZS0+cE9wZW4tPm5Mb2NrKys7Ci0gICAgICAgICAgICBwTG9jay0+Y250ID0gMTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAobG9ja3R5cGUgPT0gU1FMSVRFX0xPQ0tfRVhDTFVTSVZFICYmIHBM
b2NrLT5jbnQgPiAxKSB7Ci0gICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgZm9yIGFuIGV4Y2x1c2l2
ZSBsb2NrIGJ1dCBhbm90aGVyIHRocmVhZCBpbiB0aGUKLSAgICAgICAgLy8gc2FtZSBwcm9jZXNz
IGlzIHN0aWxsIGhvbGRpbmcgYSBzaGFyZWQgbG9jay4KLSAgICAgICAgcmMgPSBTUUxJVEVfQlVT
WTsKLSAgICB9ICBlbHNlIHsKLSAgICAgICAgLy8gVGhlIHJlcXVlc3Qgd2FzIGZvciBhIFJFU0VS
VkVEIG9yIEVYQ0xVU0lWRSBsb2NrLiAgSXQgaXMKLSAgICAgICAgLy8gYXNzdW1lZCB0aGF0IHRo
ZXJlIGlzIGEgU0hBUkVEIG9yIGdyZWF0ZXIgbG9jayBvbiB0aGUgZmlsZQotICAgICAgICAvLyBh
bHJlYWR5LgotICAgICAgICBBU1NFUlQocEZpbGUtPmxvY2t0eXBlKTsKLSAgICAgICAgbG9jay5s
X3R5cGUgPSBGX1dSTENLOwotICAgICAgICBzd2l0Y2ggKGxvY2t0eXBlKSB7Ci0gICAgICAgIGNh
c2UgU1FMSVRFX0xPQ0tfUkVTRVJWRUQ6Ci0gICAgICAgICAgICBsb2NrLmxfc3RhcnQgPSBTUUxp
dGVSZXNlcnZlZEJ5dGU7Ci0gICAgICAgICAgICBzID0gZmNudGwocEZpbGUtPmgsIEZfU0VUTEss
ICZsb2NrKTsKLSAgICAgICAgICAgIHRFcnJubyA9IGVycm5vOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgU1FMSVRFX0xPQ0tfRVhDTFVTSVZFOgotICAgICAgICAgICAgcyA9IHJh
bmdlTG9jayhwRmlsZSwgRl9XUkxDSywgJnRFcnJubyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChzID09IC0xKSB7Ci0gICAgICAgICAgICByYyA9IHNxbGl0ZUVycm9y
RnJvbVBvc2l4RXJyb3IodEVycm5vLCBTUUxJVEVfSU9FUlJfTE9DSyk7Ci0gICAgICAgICAgICBp
ZiAoKHJjICE9IFNRTElURV9PSykgJiYgKHJjICE9IFNRTElURV9CVVNZKSkKLSAgICAgICAgICAg
ICAgICBwRmlsZS0+bGFzdEVycm5vID0gdEVycm5vOwotICAgICAgICB9Ci0gICAgfQotICAKLSAg
ICBpZiAocmMgPT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIHBGaWxlLT5sb2NrdHlwZSA9IGxvY2t0
eXBlOwotICAgICAgICBwTG9jay0+bG9ja3R5cGUgPSBsb2NrdHlwZTsKLSAgICB9IGVsc2UgaWYg
KGxvY2t0eXBlID09IFNRTElURV9MT0NLX0VYQ0xVU0lWRSkgewotICAgICAgICBwRmlsZS0+bG9j
a3R5cGUgPSBTUUxJVEVfTE9DS19QRU5ESU5HOwotICAgICAgICBwTG9jay0+bG9ja3R5cGUgPSBT
UUxJVEVfTE9DS19QRU5ESU5HOwotICAgIH0KLQotICAgIHJldHVybiByYzsKLX0KLQotLy8gQ2xv
c2VzIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGZvciBnaXZlbiBDaHJvbWl1bUZpbGUgZm9yIHdoaWNo
IHRoZSBjbG9zZSBoYXMgYmVlbiBkZWZlcnJlZC4KLS8vIFJldHVybnMgYSBTUUxpdGUgZXJyb3Ig
Y29kZS4KLXN0YXRpYyBpbnQgY2xvc2VQZW5kaW5nRmRzKENocm9taXVtRmlsZSogcEZpbGUpCi17
Ci0gICAgaW50IHJjID0gU1FMSVRFX09LOwotICAgIENocm9taXVtT3BlbkluZm8qIHBPcGVuID0g
cEZpbGUtPnBPcGVuOwotICAgIENocm9taXVtVW51c2VkRmQqIHBFcnJvciA9IDA7Ci0gICAgQ2hy
b21pdW1VbnVzZWRGZCogcE5leHQ7Ci0gICAgZm9yIChDaHJvbWl1bVVudXNlZEZkKiBwID0gcE9w
ZW4tPnBVbnVzZWQ7IHA7IHAgPSBwTmV4dCkgewotICAgICAgICBwTmV4dCA9IHAtPnBOZXh0Owot
ICAgICAgICBpZiAoY2xvc2UocC0+ZmQpKSB7Ci0gICAgICAgICAgICBwRmlsZS0+bGFzdEVycm5v
ID0gZXJybm87Ci0gICAgICAgICAgICByYyA9IFNRTElURV9JT0VSUl9DTE9TRTsKLSAgICAgICAg
ICAgIHAtPnBOZXh0ID0gcEVycm9yOwotICAgICAgICAgICAgcEVycm9yID0gcDsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBzcWxpdGUzX2ZyZWUocCk7Ci0gICAgfQotICAgIHBPcGVuLT5w
VW51c2VkID0gcEVycm9yOwotICAgIHJldHVybiByYzsKLX0KLQotLy8gTG93ZXJzIHRoZSBsb2Nr
aW5nIGxldmVsIG9uIGZpbGUgZGVzY3JpcHRvci4KLS8vIGxvY2t0eXBlIG11c3QgYmUgZWl0aGVy
IFNRTElURV9MT0NLX05PTkUgb3IgU1FMSVRFX0xPQ0tfU0hBUkVELgotc3RhdGljIGludCBjaHJv
bWl1bVVubG9jayhzcWxpdGUzX2ZpbGUqIGlkLCBpbnQgbG9ja3R5cGUpCi17Ci0gICAgQ2hyb21p
dW1GaWxlKiBwRmlsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2hyb21pdW1GaWxlKj4oaWQpOwotICAg
IEFTU0VSVChwRmlsZSk7Ci0gICAgQVNTRVJUKGxvY2t0eXBlIDw9IFNRTElURV9MT0NLX1NIQVJF
RCk7Ci0KLSAgICBpZiAocEZpbGUtPmxvY2t0eXBlIDw9IGxvY2t0eXBlKQotICAgICAgICByZXR1
cm4gU1FMSVRFX09LOwotCi0gICAgQ2hyb21pdW1Mb2NrSW5mbyogcExvY2sgPSBwRmlsZS0+cExv
Y2s7Ci0gICAgQVNTRVJUKHBMb2NrLT5jbnQpOwotCi0gICAgc3RydWN0IGZsb2NrIGxvY2s7Ci0g
ICAgaW50IHJjID0gU1FMSVRFX09LOwotICAgIGludCBoID0gcEZpbGUtPmg7Ci0gICAgaW50IHRF
cnJubzsKLQotICAgIGlmIChwRmlsZS0+bG9ja3R5cGUgPiBTUUxJVEVfTE9DS19TSEFSRUQpIHsK
LSAgICAgICAgQVNTRVJUKHBMb2NrLT5sb2NrdHlwZSA9PSBwRmlsZS0+bG9ja3R5cGUpOwotCi0g
ICAgICAgIGlmIChsb2NrdHlwZSA9PSBTUUxJVEVfTE9DS19TSEFSRUQgJiYgcmFuZ2VMb2NrKHBG
aWxlLCBGX1JETENLLCAmdEVycm5vKSA9PSAtMSkgewotICAgICAgICAgICAgcmMgPSBzcWxpdGVF
cnJvckZyb21Qb3NpeEVycm9yKHRFcnJubywgU1FMSVRFX0lPRVJSX1JETE9DSyk7Ci0gICAgICAg
ICAgICBpZiAoKHJjICE9IFNRTElURV9PSykgJiYgKHJjICE9IFNRTElURV9CVVNZKSkKLSAgICAg
ICAgICAgICAgICBwRmlsZS0+bGFzdEVycm5vID0gdEVycm5vOwotICAgICAgICAgICAgaWYgKHJj
ID09IFNRTElURV9PSykKLSAgICAgICAgICAgICAgICBwRmlsZS0+bG9ja3R5cGUgPSBsb2NrdHlw
ZTsKLSAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAgfQotICAgICAgICBsb2NrLmxfdHlw
ZSA9IEZfVU5MQ0s7Ci0gICAgICAgIGxvY2subF93aGVuY2UgPSBTRUVLX1NFVDsKLSAgICAgICAg
bG9jay5sX3N0YXJ0ID0gU1FMaXRlUGVuZGluZ0J5dGU7Ci0gICAgICAgIGxvY2subF9sZW4gPSAy
OwotICAgICAgICBpZiAoZmNudGwoaCwgRl9TRVRMSywgJmxvY2spICE9IC0xKQotICAgICAgICAg
ICAgcExvY2stPmxvY2t0eXBlID0gU1FMSVRFX0xPQ0tfU0hBUkVEOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIHRFcnJubyA9IGVycm5vOwotICAgICAgICAgICAgcmMgPSBzcWxpdGVFcnJv
ckZyb21Qb3NpeEVycm9yKHRFcnJubywgU1FMSVRFX0lPRVJSX1VOTE9DSyk7Ci0gICAgICAgICAg
ICBpZiAoKHJjICE9IFNRTElURV9PSykgJiYgKHJjICE9IFNRTElURV9CVVNZKSkKLSAgICAgICAg
ICAgICAgICBwRmlsZS0+bGFzdEVycm5vID0gdEVycm5vOwotICAgICAgICAgICAgaWYgKHJjID09
IFNRTElURV9PSykKLSAgICAgICAgICAgICAgICBwRmlsZS0+bG9ja3R5cGUgPSBsb2NrdHlwZTsK
LSAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobG9ja3R5
cGUgPT0gU1FMSVRFX0xPQ0tfTk9ORSkgewotICAgICAgICBzdHJ1Y3QgQ2hyb21pdW1PcGVuSW5m
byAqcE9wZW47Ci0KLSAgICAgICAgcExvY2stPmNudC0tOwotCi0gICAgICAgIC8vIFJlbGVhc2Ug
dGhlIGxvY2sgdXNpbmcgYW4gT1MgY2FsbCBvbmx5IHdoZW4gYWxsIHRocmVhZHMgaW4gdGhpcyBz
YW1lIHByb2Nlc3MgaGF2ZSByZWxlYXNlZCB0aGUgbG9jay4KLSAgICAgICAgaWYgKCFwTG9jay0+
Y250KSB7Ci0gICAgICAgICAgICBsb2NrLmxfdHlwZSA9IEZfVU5MQ0s7Ci0gICAgICAgICAgICBs
b2NrLmxfd2hlbmNlID0gU0VFS19TRVQ7Ci0gICAgICAgICAgICBsb2NrLmxfc3RhcnQgPSBsb2Nr
LmxfbGVuID0gMEw7Ci0gICAgICAgICAgICBpZiAoZmNudGwoaCwgRl9TRVRMSywgJmxvY2spICE9
IC0xKQotICAgICAgICAgICAgICAgIHBMb2NrLT5sb2NrdHlwZSA9IFNRTElURV9MT0NLX05PTkU7
Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB0RXJybm8gPSBlcnJubzsKLSAg
ICAgICAgICAgICAgICByYyA9IHNxbGl0ZUVycm9yRnJvbVBvc2l4RXJyb3IodEVycm5vLCBTUUxJ
VEVfSU9FUlJfVU5MT0NLKTsKLSAgICAgICAgICAgICAgICBpZiAoKHJjICE9IFNRTElURV9PSykg
JiYgKHJjICE9IFNRTElURV9CVVNZKSkKLSAgICAgICAgICAgICAgICAgICAgcEZpbGUtPmxhc3RF
cnJubyA9IHRFcnJubzsKLSAgICAgICAgICAgICAgICBwTG9jay0+bG9ja3R5cGUgPSBTUUxJVEVf
TE9DS19OT05FOwotICAgICAgICAgICAgICAgIHBGaWxlLT5sb2NrdHlwZSA9IFNRTElURV9MT0NL
X05PTkU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwT3BlbiA9IHBGaWxl
LT5wT3BlbjsKLSAgICAgICAgcE9wZW4tPm5Mb2NrLS07Ci0gICAgICAgIEFTU0VSVChwT3Blbi0+
bkxvY2sgPj0gMCk7Ci0gICAgICAgIGlmICghcE9wZW4tPm5Mb2NrKSB7Ci0gICAgICAgICAgICBp
bnQgcmMyID0gY2xvc2VQZW5kaW5nRmRzKHBGaWxlKTsKLSAgICAgICAgICAgIGlmIChyYyA9PSBT
UUxJVEVfT0spCi0gICAgICAgICAgICAgICAgcmMgPSByYzI7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAocmMgPT0gU1FMSVRFX09LKQotICAgICAgICBwRmlsZS0+bG9ja3R5cGUgPSBsb2Nr
dHlwZTsKLSAgICByZXR1cm4gcmM7CisvLyBEZWZpbmVkIGluIENocm9taXVtJ3MgY29kZWJhc2Ug
aW4gdGhpcmRfcGFydHkvc3FsaXRlL3NyYy9vc191bml4LmMKK2V4dGVybiAiQyIgewordm9pZCBj
aHJvbWl1bV9zcWxpdGUzX2luaXRpYWxpemVfdW5peF9zcWxpdGUzX2ZpbGUoc3FsaXRlM19maWxl
KiBmaWxlKTsKK2ludCBjaHJvbWl1bV9zcWxpdGUzX2ZpbGxfaW5fdW5peF9zcWxpdGUzX2ZpbGUo
c3FsaXRlM192ZnMqIHZmcywgaW50IGZkLCBpbnQgZGlyZmQsIHNxbGl0ZTNfZmlsZSogZmlsZSwg
Y29uc3QgY2hhciogZmlsZU5hbWUsIGludCBub0xvY2spOworaW50IGNocm9taXVtX3NxbGl0ZTNf
Z2V0X3JldXNhYmxlX2ZpbGVfaGFuZGxlKHNxbGl0ZTNfZmlsZSogZmlsZSwgY29uc3QgY2hhciog
ZmlsZU5hbWUsIGludCBmbGFncywgaW50KiBmZCk7Cit2b2lkIGNocm9taXVtX3NxbGl0ZTNfdXBk
YXRlX3JldXNhYmxlX2ZpbGVfaGFuZGxlKHNxbGl0ZTNfZmlsZSogZmlsZSwgaW50IGZkLCBpbnQg
ZmxhZ3MpOwordm9pZCBjaHJvbWl1bV9zcWxpdGUzX2Rlc3Ryb3lfcmV1c2FibGVfZmlsZV9oYW5k
bGUoc3FsaXRlM19maWxlKiBmaWxlKTsKIH0KIAotLy8gQ2xvc2VzIGFsbCBmaWxlIGhhbmRsZXMg
Zm9yIGdpdmVuIENocm9taXVtRmlsZSBhbmQgc2V0cyBhbGwgaXRzIGZpZWxkcyB0byAwLgotLy8g
UmV0dXJucyBhIFNRTGl0ZSBlcnJvciBjb2RlLgotc3RhdGljIGludCBjaHJvbWl1bUNsb3NlTm9M
b2NrKHNxbGl0ZTNfZmlsZSogaWQpCi17Ci0gICAgQ2hyb21pdW1GaWxlKiBwRmlsZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Q2hyb21pdW1GaWxlKj4oaWQpOwotICAgIGlmICghcEZpbGUpCi0gICAgICAg
IHJldHVybiBTUUxJVEVfT0s7Ci0gICAgaWYgKHBGaWxlLT5kaXJmZCA+PSAwKSB7Ci0gICAgICAg
IGlmIChjbG9zZShwRmlsZS0+ZGlyZmQpKSB7Ci0gICAgICAgICAgICBwRmlsZS0+bGFzdEVycm5v
ID0gZXJybm87Ci0gICAgICAgICAgICByZXR1cm4gU1FMSVRFX0lPRVJSX0RJUl9DTE9TRTsKLSAg
ICAgICAgfQotICAgICAgICBwRmlsZS0+ZGlyZmQgPSAtMTsKLSAgICB9Ci0gICAgaWYgKHBGaWxl
LT5oID49IDAgJiYgY2xvc2UocEZpbGUtPmgpKSB7Ci0gICAgICAgIHBGaWxlLT5sYXN0RXJybm8g
PSBlcnJubzsKLSAgICAgICAgcmV0dXJuIFNRTElURV9JT0VSUl9DTE9TRTsKLSAgICB9Ci0gICAg
c3FsaXRlM19mcmVlKHBGaWxlLT5wVW51c2VkKTsKLSAgICBtZW1zZXQocEZpbGUsIDAsIHNpemVv
ZihDaHJvbWl1bUZpbGUpKTsKLSAgICByZXR1cm4gU1FMSVRFX09LOwotfQotCi0vLyBDbG9zZXMg
YSBDaHJvbWl1bUZpbGUsIGluY2x1ZGluZyBsb2NraW5nIG9wZXJhdGlvbnMuIFJldHVybnMgYSBT
UUxpdGUgZXJyb3IgY29kZS4KLXN0YXRpYyBpbnQgY2hyb21pdW1DbG9zZShzcWxpdGUzX2ZpbGUq
IGlkKQotewotICAgIGlmICghaWQpCi0gICAgICAgIHJldHVybiBTUUxJVEVfT0s7Ci0KLSAgICBD
aHJvbWl1bUZpbGUqIHBGaWxlID0gcmVpbnRlcnByZXRfY2FzdDxDaHJvbWl1bUZpbGUqPihpZCk7
Ci0gICAgY2hyb21pdW1VbmxvY2soaWQsIFNRTElURV9MT0NLX05PTkUpOwotICAgIGlmIChwRmls
ZS0+cE9wZW4gJiYgcEZpbGUtPnBPcGVuLT5uTG9jaykgewotICAgICAgICAvLyBJZiB0aGVyZSBh
cmUgb3V0c3RhbmRpbmcgbG9ja3MsIGRvIG5vdCBhY3R1YWxseSBjbG9zZSB0aGUgZmlsZSBqdXN0
Ci0gICAgICAgIC8vIHlldCBiZWNhdXNlIHRoYXQgd291bGQgY2xlYXIgdGhvc2UgbG9ja3MuCi0g
ICAgICAgIENocm9taXVtT3BlbkluZm8qIHBPcGVuID0gcEZpbGUtPnBPcGVuOwotICAgICAgICBD
aHJvbWl1bVVudXNlZEZkKiBwID0gcEZpbGUtPnBVbnVzZWQ7Ci0gICAgICAgIHAtPnBOZXh0ID0g
cE9wZW4tPnBVbnVzZWQ7Ci0gICAgICAgIHBPcGVuLT5wVW51c2VkID0gcDsKLSAgICAgICAgcEZp
bGUtPmggPSAtMTsKLSAgICAgICAgcEZpbGUtPnBVbnVzZWQgPSAwOwotICAgIH0KLSAgICByZWxl
YXNlTG9ja0luZm8ocEZpbGUtPnBMb2NrKTsKLSAgICByZWxlYXNlT3BlbkluZm8ocEZpbGUtPnBP
cGVuKTsKLSAgICByZXR1cm4gY2hyb21pdW1DbG9zZU5vTG9jayhpZCk7Ci19Ci0KLXN0YXRpYyBp
bnQgY2hyb21pdW1DaGVja1Jlc2VydmVkTG9ja05vb3Aoc3FsaXRlM19maWxlKiwgaW50KiBwUmVz
T3V0KQotewotICAgICpwUmVzT3V0ID0gMDsKLSAgICByZXR1cm4gU1FMSVRFX09LOwotfQotCi1z
dGF0aWMgaW50IGNocm9taXVtTG9ja05vb3Aoc3FsaXRlM19maWxlKiwgaW50KQotewotICAgIHJl
dHVybiBTUUxJVEVfT0s7Ci19Ci0KLXN0YXRpYyBpbnQgY2hyb21pdW1VbmxvY2tOb29wKHNxbGl0
ZTNfZmlsZSosIGludCkKLXsKLSAgICByZXR1cm4gU1FMSVRFX09LOwotfQotCi0vLyBTZWVrcyB0
byB0aGUgcmVxdWVzdGVkIG9mZnNldCBhbmQgcmVhZHMgdXAgdG8gfGNudHwgYnl0ZXMgaW50byB8
cEJ1ZnwuIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJlYWQuCi1zdGF0aWMgaW50
IHNlZWtBbmRSZWFkKENocm9taXVtRmlsZSogaWQsIHNxbGl0ZTNfaW50NjQgb2Zmc2V0LCB2b2lk
KiBwQnVmLCBpbnQgY250KQotewotICAgIHNxbGl0ZV9pbnQ2NCBuZXdPZmZzZXQgPSBsc2Vlayhp
ZC0+aCwgb2Zmc2V0LCBTRUVLX1NFVCk7Ci0gICAgaWYgKG5ld09mZnNldCAhPSBvZmZzZXQpIHsK
LSAgICAgICAgaWQtPmxhc3RFcnJubyA9IChuZXdPZmZzZXQgPT0gLTEpID8gZXJybm8gOiAwOwot
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGludCBnb3QgPSByZWFkKGlkLT5oLCBwQnVm
LCBjbnQpOwotICAgIGlmIChnb3QgPCAwKQotICAgICAgICBpZC0+bGFzdEVycm5vID0gZXJybm87
Ci0gICAgcmV0dXJuIGdvdDsKLX0KLQotLy8gUmVhZHMgZGF0YSBmcm9tIGZpbGUgaW50byBhIGJ1
ZmZlci4gUmV0dXJucyBhIFNRTGl0ZSBlcnJvciBjb2RlLgotc3RhdGljIGludCBjaHJvbWl1bVJl
YWQoc3FsaXRlM19maWxlKiBpZCwgdm9pZCogcEJ1ZiwgaW50IGFtdCwgc3FsaXRlM19pbnQ2NCBv
ZmZzZXQpCi17Ci0gICAgQ2hyb21pdW1GaWxlKiBwRmlsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2hy
b21pdW1GaWxlKj4oaWQpOwotICAgIEFTU0VSVChwRmlsZSk7Ci0KLSAgICAvLyBUaGUgYnl0ZXMg
aW4gdGhlIGxvY2tpbmcgcmFuZ2Ugc2hvdWxkIG5ldmVyIGJlIHJlYWQuCi0gICAgQVNTRVJUKCFw
RmlsZS0+cFVudXNlZCB8fCBvZmZzZXQgPj0gU1FMaXRlUGVuZGluZ0J5dGUgKyA1MTIgfHwgb2Zm
c2V0ICsgYW10IDw9IFNRTGl0ZVBlbmRpbmdCeXRlKTsKLQotICAgIGludCBnb3QgPSBzZWVrQW5k
UmVhZChwRmlsZSwgb2Zmc2V0LCBwQnVmLCBhbXQpOwotICAgIGlmIChnb3QgPT0gYW10KQotICAg
ICAgICByZXR1cm4gU1FMSVRFX09LOwotCi0gICAgaWYgKGdvdCA8IDApCi0gICAgICAgIHJldHVy
biBTUUxJVEVfSU9FUlJfUkVBRDsKLQotICAgIC8vIFVucmVhZCBwYXJ0cyBvZiB0aGUgYnVmZmVy
IG11c3QgYmUgemVyby1maWxsZWQuCi0gICAgbWVtc2V0KCYocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4ocEJ1ZikpW2dvdF0sIDAsIGFtdCAtIGdvdCk7Ci0gICAgcEZpbGUtPmxhc3RFcnJubyA9IDA7
Ci0gICAgcmV0dXJuIFNRTElURV9JT0VSUl9TSE9SVF9SRUFEOwotfQotCi0vLyBTZWVrcyB0byB0
aGUgcmVxdWVzdGVkIG9mZnNldCBhbmQgd3JpdGVzIHVwIHRvIHxjbnR8IGJ5dGVzLiBSZXR1cm5z
IG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuLgotc3RhdGljIGludCBzZWVrQW5kV3Jp
dGUoQ2hyb21pdW1GaWxlKiBpZCwgc3FsaXRlX2ludDY0IG9mZnNldCwgY29uc3Qgdm9pZCogcEJ1
ZiwgaW50IGNudCkKLXsKLSAgICBzcWxpdGVfaW50NjQgbmV3T2Zmc2V0ID0gbHNlZWsoaWQtPmgs
IG9mZnNldCwgU0VFS19TRVQpOwotICAgIGlmIChuZXdPZmZzZXQgIT0gb2Zmc2V0KSB7Ci0gICAg
ICAgIGlkLT5sYXN0RXJybm8gPSAobmV3T2Zmc2V0ID09IC0xKSA/IGVycm5vIDogMDsKLSAgICAg
ICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpbnQgZ290ID0gd3JpdGUoaWQtPmgsIHBCdWYsIGNu
dCk7Ci0gICAgaWYgKGdvdCA8IDApCi0gICAgICAgIGlkLT5sYXN0RXJybm8gPSBlcnJubzsKLSAg
ICByZXR1cm4gZ290OwotfQotCi0vLyBXcml0ZXMgZGF0YSBmcm9tIGJ1ZmZlciBpbnRvIGEgZmls
ZS4gUmV0dXJucyBhIFNRTGl0ZSBlcnJvciBjb2RlLgotc3RhdGljIGludCBjaHJvbWl1bVdyaXRl
KHNxbGl0ZTNfZmlsZSogaWQsIGNvbnN0IHZvaWQqIHBCdWYsIGludCBhbXQsIHNxbGl0ZTNfaW50
NjQgb2Zmc2V0KQotewotICAgIENocm9taXVtRmlsZSogcEZpbGUgPSByZWludGVycHJldF9jYXN0
PENocm9taXVtRmlsZSo+KGlkKTsKLSAgICBBU1NFUlQocEZpbGUpOwotICAgIEFTU0VSVChhbXQg
PiAwKTsKLQotICAgIC8vIFRoZSBieXRlcyBpbiB0aGUgbG9ja2luZyByYW5nZSBzaG91bGQgbmV2
ZXIgYmUgd3JpdHRlbi4KLSAgICBBU1NFUlQoIXBGaWxlLT5wVW51c2VkIHx8IG9mZnNldCA+PSBT
UUxpdGVQZW5kaW5nQnl0ZSArIDUxMiB8fCBvZmZzZXQgKyBhbXQgPD0gU1FMaXRlUGVuZGluZ0J5
dGUpOwotCi0gICAgaW50IHdyb3RlID0gMDsKLSAgICB3aGlsZSAoYW10ID4gMCAmJiAod3JvdGUg
PSBzZWVrQW5kV3JpdGUocEZpbGUsIG9mZnNldCwgcEJ1ZiwgYW10KSkgPiAwKSB7Ci0gICAgICAg
IGFtdCAtPSB3cm90ZTsKLSAgICAgICAgb2Zmc2V0ICs9IHdyb3RlOwotICAgICAgICBwQnVmID0g
JihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwQnVmKSlbd3JvdGVdOwotICAgIH0KLSAg
ICBpZiAoYW10ID4gMCkgewotICAgICAgICBpZiAod3JvdGUgPCAwKQotICAgICAgICAgICAgcmV0
dXJuIFNRTElURV9JT0VSUl9XUklURTsKLSAgICAgICAgcEZpbGUtPmxhc3RFcnJubyA9IDA7Ci0g
ICAgICAgIHJldHVybiBTUUxJVEVfRlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIFNRTElURV9PSzsK
LX0KLQotc3RhdGljIGJvb2wgc3luY1dyYXBwZXIoaW50IGZkLCBib29sIGZ1bGxTeW5jKQotewot
I2lmIE9TKERBUldJTikKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBpZiAoZnVsbFN5
bmMpCi0gICAgICAgIHN1Y2Nlc3MgPSAhZmNudGwoZmQsIEZfRlVMTEZTWU5DLCAwKTsKLSAgICBp
ZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHN1Y2Nlc3MgPSAhZnN5bmMoZmQpOwotICAgIHJldHVybiBz
dWNjZXNzOwotI2Vsc2UKLSAgICByZXR1cm4gIWZkYXRhc3luYyhmZCk7Ci0jZW5kaWYKLX0KLQot
Ly8gTWFrZXMgc3VyZSBhbGwgd3JpdGVzIHRvIGEgcGFydGljdWxhciBmaWxlIGFyZSBjb21taXR0
ZWQgdG8gZGlzay4gUmV0dXJucyBhIFNRTGl0ZSBlcnJvciBjb2RlLgotc3RhdGljIGludCBjaHJv
bWl1bVN5bmMoc3FsaXRlM19maWxlKiBpZCwgaW50IGZsYWdzKQotewotICAgIEFTU0VSVCgoZmxh
Z3MgJiAweDBGKSA9PSBTUUxJVEVfU1lOQ19OT1JNQUwgfHwgKGZsYWdzICYgMHgwRikgPT0gU1FM
SVRFX1NZTkNfRlVMTCk7Ci0KLSAgICBDaHJvbWl1bUZpbGUqIHBGaWxlID0gcmVpbnRlcnByZXRf
Y2FzdDxDaHJvbWl1bUZpbGUqPihpZCk7Ci0gICAgQVNTRVJUKHBGaWxlKTsKLQotICAgIGJvb2wg
aXNGdWxsU3luYyA9ICgoZmxhZ3MgJiAweDBGKSA9PSBTUUxJVEVfU1lOQ19GVUxMKTsKLQotICAg
IGlmICghc3luY1dyYXBwZXIocEZpbGUtPmgsIGlzRnVsbFN5bmMpKSB7Ci0gICAgICAgIHBGaWxl
LT5sYXN0RXJybm8gPSBlcnJubzsKLSAgICAgICAgcmV0dXJuIFNRTElURV9JT0VSUl9GU1lOQzsK
LSAgICB9Ci0KLSAgICBpZiAocEZpbGUtPmRpcmZkID49IDApIHsKLSNpZiAhT1MoREFSV0lOKQot
ICAgICAgICBpZiAoIWlzRnVsbFN5bmMpIHsKLSAgICAgICAgICAgIC8vIElnbm9yZSBkaXJlY3Rv
cnkgc3luYyBmYWlsdXJlcywgc2VlIGh0dHA6Ly93d3cuc3FsaXRlLm9yZy9jdnN0cmFjL3RrdHZp
ZXc/dG49MTY1Ny4KLSAgICAgICAgICAgIHN5bmNXcmFwcGVyKHBGaWxlLT5kaXJmZCwgZmFsc2Up
OwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFjbG9zZShwRmlsZS0+ZGlyZmQpKQot
ICAgICAgICAgICAgcEZpbGUtPmRpcmZkID0gLTE7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgcEZpbGUtPmxhc3RFcnJubyA9IGVycm5vOwotICAgICAgICAgICAgcmV0dXJuIFNRTElURV9J
T0VSUl9ESVJfQ0xPU0U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gU1FMSVRFX09L
OwotfQotCi0vLyBUcnVuY2F0ZXMgYW4gb3BlbiBmaWxlIHRvIHRoZSBzcGVjaWZpZWQgc2l6ZS4g
UmV0dXJucyBhIFNRTGl0ZSBlcnJvciBjb2RlLgotc3RhdGljIGludCBjaHJvbWl1bVRydW5jYXRl
KHNxbGl0ZTNfZmlsZSogaWQsIHNxbGl0ZV9pbnQ2NCBuQnl0ZSkKLXsKLSAgICBDaHJvbWl1bUZp
bGUqIHBGaWxlID0gcmVpbnRlcnByZXRfY2FzdDxDaHJvbWl1bUZpbGUqPihpZCk7Ci0gICAgQVNT
RVJUKHBGaWxlKTsKLQotICAgIGlmIChmdHJ1bmNhdGUocEZpbGUtPmgsIG5CeXRlKSkgewotICAg
ICAgICBwRmlsZS0+bGFzdEVycm5vID0gZXJybm87Ci0gICAgICAgIHJldHVybiBTUUxJVEVfSU9F
UlJfVFJVTkNBVEU7Ci0gICAgfQotCi0gICAgcmV0dXJuIFNRTElURV9PSzsKLX0KLQotLy8gRGV0
ZXJtaW5lcyB0aGUgc2l6ZSBvZiBhIGZpbGUgaW4gYnl0ZXMuIFJldHVybnMgYSBTUUxpdGUgZXJy
b3IgY29kZS4KLXN0YXRpYyBpbnQgY2hyb21pdW1GaWxlU2l6ZShzcWxpdGUzX2ZpbGUqIGlkLCBz
cWxpdGVfaW50NjQqIHBTaXplKQotewotICAgIENocm9taXVtRmlsZSogcEZpbGUgPSByZWludGVy
cHJldF9jYXN0PENocm9taXVtRmlsZSo+KGlkKTsKLSAgICBBU1NFUlQocEZpbGUpOwotCi0gICAg
c3RydWN0IHN0YXQgYnVmOwotICAgIGlmIChmc3RhdChwRmlsZS0+aCwgJmJ1ZikpIHsKLSAgICAg
ICAgcEZpbGUtPmxhc3RFcnJubyA9IGVycm5vOwotICAgICAgICByZXR1cm4gU1FMSVRFX0lPRVJS
X0ZTVEFUOwotICAgIH0KLSAgICAqcFNpemUgPSBidWYuc3Rfc2l6ZTsKLQotICAgIC8vIFdoZW4g
b3BlbmluZyBhIHplcm8tc2l6ZSBkYXRhYmFzZSwgZmluZExvY2tJbmZvIHdyaXRlcyBhIHNpbmds
ZSBieXRlIGludG8gdGhhdCBmaWxlCi0gICAgLy8gaW4gb3JkZXIgdG8gd29yayBhcm91bmQgYSBi
dWcgaW4gdGhlIE9TIFggbXNkb3MgZmlsZXN5c3RlbS4gSW4gb3JkZXIgdG8gYXZvaWQgcHJvYmxl
bXMKLSAgICAvLyB3aXRoIHVwcGVyIGxheWVycywgd2UgbmVlZCB0byByZXBvcnQgdGhpcyBmaWxl
IHNpemUgYXMgemVybyBldmVuIHRob3VnaCBpdCBpcyByZWFsbHkgMS4KLSAgICAvLyBTZWUgaHR0
cDovL3d3dy5zcWxpdGUub3JnL2N2c3RyYWMvdGt0dmlldz90bj0zMjYwLgotICAgIGlmICgqcFNp
emUgPT0gMSkKLSAgICAgICAgKnBTaXplID0gMDsKLQotICAgIHJldHVybiBTUUxJVEVfT0s7Ci19
Ci0KLXN0YXRpYyBpbnQgY2hyb21pdW1GaWxlQ29udHJvbChzcWxpdGUzX2ZpbGUqIGlkLCBpbnQg
b3AsIHZvaWQqIHBBcmcpCi17Ci0gICAgQ2hyb21pdW1GaWxlKiBwRmlsZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Q2hyb21pdW1GaWxlKj4oaWQpOwotICAgIEFTU0VSVChwRmlsZSk7Ci0KLSAgICBzd2l0
Y2ggKG9wKSB7Ci0gICAgY2FzZSBTUUxJVEVfRkNOVExfTE9DS1NUQVRFOgotICAgICAgICAqcmVp
bnRlcnByZXRfY2FzdDxpbnQqPihwQXJnKSA9IHBGaWxlLT5sb2NrdHlwZTsKLSAgICAgICAgcmV0
dXJuIFNRTElURV9PSzsKLSAgICBjYXNlIFNRTElURV9MQVNUX0VSUk5POgotICAgICAgICAqcmVp
bnRlcnByZXRfY2FzdDxpbnQqPihwQXJnKSA9IHBGaWxlLT5sYXN0RXJybm87Ci0gICAgICAgIHJl
dHVybiBTUUxJVEVfT0s7Ci0gICAgfQotICAgIHJldHVybiBTUUxJVEVfRVJST1I7Ci19Ci0KLS8v
IFNhbWUgYXMgU1FMSVRFX0RFRkFVTFRfU0VDVE9SX1NJWkUgZnJvbSBzcWxpdGUncyBvcy5oLgot
c3RhdGljIGNvbnN0IGludCBTUUxpdGVEZWZhdWx0U2VjdG9yU2l6ZSA9IDUxMjsKLQotc3RhdGlj
IGludCBjaHJvbWl1bVNlY3RvclNpemUoc3FsaXRlM19maWxlKikKLXsKLSAgICByZXR1cm4gU1FM
aXRlRGVmYXVsdFNlY3RvclNpemU7Ci19Ci0KLXN0YXRpYyBpbnQgY2hyb21pdW1EZXZpY2VDaGFy
YWN0ZXJpc3RpY3Moc3FsaXRlM19maWxlKikKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGlj
IGNvbnN0IHNxbGl0ZTNfaW9fbWV0aG9kcyBwb3NpeElvTWV0aG9kcyA9IHsKLSAgICAxLAotICAg
IGNocm9taXVtQ2xvc2UsCi0gICAgY2hyb21pdW1SZWFkLAotICAgIGNocm9taXVtV3JpdGUsCi0g
ICAgY2hyb21pdW1UcnVuY2F0ZSwKLSAgICBjaHJvbWl1bVN5bmMsCi0gICAgY2hyb21pdW1GaWxl
U2l6ZSwKLSAgICBjaHJvbWl1bUxvY2ssCi0gICAgY2hyb21pdW1VbmxvY2ssCi0gICAgY2hyb21p
dW1DaGVja1Jlc2VydmVkTG9jaywKLSAgICBjaHJvbWl1bUZpbGVDb250cm9sLAotICAgIGNocm9t
aXVtU2VjdG9yU2l6ZSwKLSAgICBjaHJvbWl1bURldmljZUNoYXJhY3RlcmlzdGljcwotfTsKLQot
c3RhdGljIGNvbnN0IHNxbGl0ZTNfaW9fbWV0aG9kcyBub2xvY2tJb01ldGhvZHMgPSB7Ci0gICAg
MSwKLSAgICBjaHJvbWl1bUNsb3NlTm9Mb2NrLAotICAgIGNocm9taXVtUmVhZCwKLSAgICBjaHJv
bWl1bVdyaXRlLAotICAgIGNocm9taXVtVHJ1bmNhdGUsCi0gICAgY2hyb21pdW1TeW5jLAotICAg
IGNocm9taXVtRmlsZVNpemUsCi0gICAgY2hyb21pdW1Mb2NrTm9vcCwKLSAgICBjaHJvbWl1bVVu
bG9ja05vb3AsCi0gICAgY2hyb21pdW1DaGVja1Jlc2VydmVkTG9ja05vb3AsCi0gICAgY2hyb21p
dW1GaWxlQ29udHJvbCwKLSAgICBjaHJvbWl1bVNlY3RvclNpemUsCi0gICAgY2hyb21pdW1EZXZp
Y2VDaGFyYWN0ZXJpc3RpY3MKLX07Ci0KLS8vIEluaXRpYWxpemVzIGEgQ2hyb21pdW1GaWxlLiBS
ZXR1cm5zIGEgU1FMaXRlIGVycm9yIGNvZGUuCi1zdGF0aWMgaW50IGZpbGxJbkNocm9taXVtRmls
ZShzcWxpdGUzX3ZmcyogcFZmcywgaW50IGgsIGludCBkaXJmZCwgc3FsaXRlM19maWxlKiBwSWQs
IGNvbnN0IGNoYXIqIHpGaWxlbmFtZSwgaW50IG5vTG9jaykKLXsKLSAgICBDaHJvbWl1bUZpbGUq
IHBOZXcgPSByZWludGVycHJldF9jYXN0PENocm9taXVtRmlsZSo+KHBJZCk7Ci0KLSAgICBBU1NF
UlQoIXBOZXctPnBMb2NrKTsKLSAgICBBU1NFUlQoIXBOZXctPnBPcGVuKTsKLQotICAgIHBOZXct
PmggPSBoOwotICAgIHBOZXctPmRpcmZkID0gZGlyZmQ7Ci0KLSAgICBpbnQgcmMgPSBTUUxJVEVf
T0s7Ci0gICAgY29uc3Qgc3FsaXRlM19pb19tZXRob2RzKiBwTG9ja2luZ1N0eWxlOwotICAgIGlm
IChub0xvY2spCi0gICAgICAgIHBMb2NraW5nU3R5bGUgPSAmbm9sb2NrSW9NZXRob2RzOwotICAg
IGVsc2UgewotICAgICAgICBwTG9ja2luZ1N0eWxlID0gJnBvc2l4SW9NZXRob2RzOwotICAgICAg
ICByYyA9IGZpbmRMb2NrSW5mbyhwTmV3LCAmcE5ldy0+cExvY2ssICZwTmV3LT5wT3Blbik7Ci0g
ICAgICAgIGlmIChyYyAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIC8vIElmIGFuIGVycm9y
IG9jY3VyZWQgaW4gZmluZExvY2tJbmZvKCksIGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IKLSAg
ICAgICAgICAgIC8vIGltbWVkaWF0ZWx5LiBUaGlzIGNhbiBoYXBwZW4gaW4gdHdvIHNjZW5hcmlv
czoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgIChhKSBBIGNhbGwgdG8gZnN0YXQo
KSBmYWlsZWQuCi0gICAgICAgICAgICAvLyAgIChiKSBBIG1hbGxvYyBmYWlsZWQuCi0gICAgICAg
ICAgICAvLwotICAgICAgICAgICAgLy8gU2NlbmFyaW8gKGIpIG1heSBvbmx5IG9jY3VyIGlmIHRo
ZSBwcm9jZXNzIGlzIGhvbGRpbmcgbm8gb3RoZXIKLSAgICAgICAgICAgIC8vIGZpbGUgZGVzY3Jp
cHRvcnMgb3BlbiBvbiB0aGUgc2FtZSBmaWxlLiBJZiB0aGVyZSB3ZXJlIG90aGVyIGZpbGUKLSAg
ICAgICAgICAgIC8vIGRlc2NyaXB0b3JzIG9uIHRoaXMgZmlsZSwgdGhlbiBubyBtYWxsb2Mgd291
bGQgYmUgcmVxdWlyZWQgYnkKLSAgICAgICAgICAgIC8vIGZpbmRMb2NrSW5mbygpLiBJZiB0aGlz
IGlzIHRoZSBjYXNlLCBpdCBpcyBxdWl0ZSBzYWZlIHRvIGNsb3NlCi0gICAgICAgICAgICAvLyBo
YW5kbGUgaCAtIGFzIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBubyBwb3NpeCBsb2NrcyB3aWxsIGJl
IHJlbGVhc2VkCi0gICAgICAgICAgICAvLyBieSBkb2luZyBzby4KLSAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAvLyBJZiBzY2VuYXJpbyAoYSkgY2F1c2VkIHRoZSBlcnJvciB0aGVuIHRoaW5n
cyBhcmUgbm90IHNvIHNhZmUuIFRoZQotICAgICAgICAgICAgLy8gaW1wbGljaXQgYXNzdW1wdGlv
biBoZXJlIGlzIHRoYXQgaWYgZnN0YXQoKSBmYWlscywgdGhpbmdzIGFyZSBpbgotICAgICAgICAg
ICAgLy8gc3VjaCBiYWQgc2hhcGUgdGhhdCBkcm9wcGluZyBhIGxvY2sgb3IgdHdvIGRvZXNuJ3Qg
bWF0dGVyIG11Y2guCi0gICAgICAgICAgICBjbG9zZShoKTsKLSAgICAgICAgICAgIGggPSAtMTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHBOZXctPmxhc3RFcnJubyA9IDA7Ci0gICAgaWYgKHJj
ICE9IFNRTElURV9PSykgewotICAgICAgICBpZiAoZGlyZmQgPj0gMCkKLSAgICAgICAgICAgIGNs
b3NlKGRpcmZkKTsKLSAgICAgICAgaWYgKGggPj0gMCkKLSAgICAgICAgICAgIGNsb3NlKGgpOwot
ICAgIH0gZWxzZQotICAgICAgICBwTmV3LT5wTWV0aG9kID0gcExvY2tpbmdTdHlsZTsKLSAgICBy
ZXR1cm4gcmM7Ci19Ci0KLS8vIFNlYXJjaGVzIGZvciBhbiB1bnVzZWQgZmlsZSBkZXNjcmlwdG9y
IHRoYXQgd2FzIG9wZW5lZCBvbiB0aGUgZGF0YWJhc2UgCi0vLyBmaWxlIGlkZW50aWZpZWQgYnkg
elBhdGggd2l0aCBtYXRjaGluZyBmbGFncy4gUmV0dXJucyAwIGlmIG5vdCBmb3VuZC4KLXN0YXRp
YyBDaHJvbWl1bVVudXNlZEZkKiBmaW5kUmV1c2FibGVGZChjb25zdCBjaGFyKiB6UGF0aCwgaW50
IGZsYWdzKQotewotICAgIENocm9taXVtVW51c2VkRmQqIHBVbnVzZWQgPSAwOwotCi0gICAgc3Ry
dWN0IHN0YXQgc1N0YXQ7Ci0gICAgaWYgKCFzdGF0KHpQYXRoLCAmc1N0YXQpKSB7Ci0gICAgICAg
IENocm9taXVtRmlsZUlkIGlkOwotICAgICAgICBpZC5kZXYgPSBzU3RhdC5zdF9kZXY7Ci0gICAg
ICAgIGlkLmlubyA9IHNTdGF0LnN0X2lubzsKLQotICAgICAgICBDaHJvbWl1bU9wZW5JbmZvKiBw
TyA9IDA7Ci0gICAgICAgIGZvciAocE8gPSBvcGVuTGlzdDsgcE8gJiYgbWVtY21wKCZpZCwgJnBP
LT5maWxlSWQsIHNpemVvZihpZCkpOyBwTyA9IHBPLT5wTmV4dCkgeyB9Ci0gICAgICAgIGlmIChw
TykgewotICAgICAgICAgICAgQ2hyb21pdW1VbnVzZWRGZCoqIHBwOwotICAgICAgICAgICAgZm9y
IChwcCA9ICZwTy0+cFVudXNlZDsgKnBwICYmICgqcHApLT5mbGFncyAhPSBmbGFnczsgcHAgPSAm
KCgqcHApLT5wTmV4dCkpIHsgfQotICAgICAgICAgICAgcFVudXNlZCA9ICpwcDsKLSAgICAgICAg
ICAgIGlmIChwVW51c2VkKQotICAgICAgICAgICAgICAgICpwcCA9IHBVbnVzZWQtPnBOZXh0Owot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwVW51c2VkOwotfQorLy8gQ2hyb21pdW0ncyBQ
b3NpeCBpbXBsZW1lbnRhdGlvbiBvZiBTUUxpdGUgVkZTCituYW1lc3BhY2UgewogCiAvLyBPcGVu
cyBhIGZpbGUuCiAvLwpAQCAtOTc0LDI2ICs1OSwxNCBAQCBzdGF0aWMgQ2hyb21pdW1VbnVzZWRG
ZCogZmluZFJldXNhYmxlRmQoY29uc3QgY2hhciogelBhdGgsIGludCBmbGFncykKIC8vIGlkIC0g
dGhlIHN0cnVjdHVyZSB0aGF0IHdpbGwgbWFuaXB1bGF0ZSB0aGUgbmV3bHkgb3BlbmVkIGZpbGUu
CiAvLyBkZXNpcmVkRmxhZ3MgLSB0aGUgZGVzaXJlZCBvcGVuIG1vZGUgZmxhZ3MuCiAvLyB1c2Vk
RmxhZ3MgLSB0aGUgYWN0dWFsIG9wZW4gbW9kZSBmbGFncyB0aGF0IHdlcmUgdXNlZC4KLXN0YXRp
YyBpbnQgY2hyb21pdW1PcGVuKHNxbGl0ZTNfdmZzKiB2ZnMsIGNvbnN0IGNoYXIqIGZpbGVOYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgc3FsaXRlM19maWxlKiBpZCwgaW50IGRlc2lyZWRG
bGFncywgaW50KiB1c2VkRmxhZ3MpCitpbnQgY2hyb21pdW1PcGVuKHNxbGl0ZTNfdmZzKiB2ZnMs
IGNvbnN0IGNoYXIqIGZpbGVOYW1lLAorICAgICAgICAgICAgICAgICBzcWxpdGUzX2ZpbGUqIGlk
LCBpbnQgZGVzaXJlZEZsYWdzLCBpbnQqIHVzZWRGbGFncykKIHsKLSAgICAvLyBUaGUgbWFzayAw
eDAwMDA3RjAwIGdpdmVzIHVzIHRoZSA3IGJpdHMgdGhhdCBkZXRlcm1pbmUgdGhlIHR5cGUgb2Yg
dGhlIGZpbGUgU1FMaXRlIGlzIHRyeWluZyB0byBvcGVuLgotICAgIGludCBmaWxlVHlwZSA9IGRl
c2lyZWRGbGFncyAmIDB4MDAwMDdGMDA7Ci0KLSAgICBtZW1zZXQoaWQsIDAsIHNpemVvZihDaHJv
bWl1bUZpbGUpKTsKLSAgICBDaHJvbWl1bUZpbGUqIGNocm9taXVtRmlsZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Q2hyb21pdW1GaWxlKj4oaWQpOworICAgIGNocm9taXVtX3NxbGl0ZTNfaW5pdGlhbGl6
ZV91bml4X3NxbGl0ZTNfZmlsZShpZCk7CiAgICAgaW50IGZkID0gLTE7Ci0gICAgaWYgKGZpbGVU
eXBlID09IFNRTElURV9PUEVOX01BSU5fREIpIHsKLSAgICAgICAgQ2hyb21pdW1VbnVzZWRGZCog
dW51c2VkRmQgPSBmaW5kUmV1c2FibGVGZChmaWxlTmFtZSwgZGVzaXJlZEZsYWdzKTsKLSAgICAg
ICAgaWYgKHVudXNlZEZkKQotICAgICAgICAgICAgZmQgPSB1bnVzZWRGZC0+ZmQ7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgdW51c2VkRmQgPSBzdGF0aWNfY2FzdDxDaHJvbWl1bVVudXNl
ZEZkKj4oc3FsaXRlM19tYWxsb2Moc2l6ZW9mKCp1bnVzZWRGZCkpKTsKLSAgICAgICAgICAgIGlm
ICghdW51c2VkRmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNRTElURV9OT01FTTsKLSAgICAg
ICAgfQotICAgICAgICBjaHJvbWl1bUZpbGUtPnBVbnVzZWQgPSB1bnVzZWRGZDsKLSAgICB9Cisg
ICAgaW50IHJlc3VsdCA9IGNocm9taXVtX3NxbGl0ZTNfZ2V0X3JldXNhYmxlX2ZpbGVfaGFuZGxl
KGlkLCBmaWxlTmFtZSwgZGVzaXJlZEZsYWdzLCAmZmQpOworICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX09LKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgaWYgKGZkIDwgMCkgewogICAg
ICAgICBmZCA9IFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGZpbGVOYW1lLCBkZXNp
cmVkRmxhZ3MpOwpAQCAtMTAwMywyNCArNzYsMjMgQEAgc3RhdGljIGludCBjaHJvbWl1bU9wZW4o
c3FsaXRlM192ZnMqIHZmcywgY29uc3QgY2hhciogZmlsZU5hbWUsCiAgICAgICAgIH0KICAgICB9
CiAgICAgaWYgKGZkIDwgMCkgewotICAgICAgICBzcWxpdGUzX2ZyZWUoY2hyb21pdW1GaWxlLT5w
VW51c2VkKTsKKyAgICAgICAgY2hyb21pdW1fc3FsaXRlM19kZXN0cm95X3JldXNhYmxlX2ZpbGVf
aGFuZGxlKGlkKTsKICAgICAgICAgcmV0dXJuIFNRTElURV9DQU5UT1BFTjsKICAgICB9CiAKICAg
ICBpZiAodXNlZEZsYWdzKQogICAgICAgICAqdXNlZEZsYWdzID0gZGVzaXJlZEZsYWdzOwotICAg
IGlmIChjaHJvbWl1bUZpbGUtPnBVbnVzZWQpIHsKLSAgICAgICAgY2hyb21pdW1GaWxlLT5wVW51
c2VkLT5mZCA9IGZkOwotICAgICAgICBjaHJvbWl1bUZpbGUtPnBVbnVzZWQtPmZsYWdzID0gZGVz
aXJlZEZsYWdzOwotICAgIH0KKyAgICBjaHJvbWl1bV9zcWxpdGUzX3VwZGF0ZV9yZXVzYWJsZV9m
aWxlX2hhbmRsZShpZCwgZmQsIGRlc2lyZWRGbGFncyk7CiAKICAgICBmY250bChmZCwgRl9TRVRG
RCwgZmNudGwoZmQsIEZfR0VURkQpIHwgRkRfQ0xPRVhFQyk7CiAKKyAgICAvLyBUaGUgbWFzayAw
eDAwMDA3RjAwIGdpdmVzIHVzIHRoZSA3IGJpdHMgdGhhdCBkZXRlcm1pbmUgdGhlIHR5cGUgb2Yg
dGhlIGZpbGUgU1FMaXRlIGlzIHRyeWluZyB0byBvcGVuLgorICAgIGludCBmaWxlVHlwZSA9IGRl
c2lyZWRGbGFncyAmIDB4MDAwMDdGMDA7CiAgICAgaW50IG5vTG9jayA9IChmaWxlVHlwZSAhPSBT
UUxJVEVfT1BFTl9NQUlOX0RCKTsKLSAgICBpbnQgcmMgPSBmaWxsSW5DaHJvbWl1bUZpbGUodmZz
LCBmZCwgLTEsIGlkLCBmaWxlTmFtZSwgbm9Mb2NrKTsKLSAgICBpZiAocmMgIT0gU1FMSVRFX09L
KQotICAgICAgICBzcWxpdGUzX2ZyZWUoY2hyb21pdW1GaWxlLT5wVW51c2VkKTsKLSAgICByZXR1
cm4gcmM7CisgICAgcmVzdWx0ID0gY2hyb21pdW1fc3FsaXRlM19maWxsX2luX3VuaXhfc3FsaXRl
M19maWxlKHZmcywgZmQsIC0xLCBpZCwgZmlsZU5hbWUsIG5vTG9jayk7CisgICAgaWYgKHJlc3Vs
dCAhPSBTUUxJVEVfT0spCisgICAgICAgIGNocm9taXVtX3NxbGl0ZTNfZGVzdHJveV9yZXVzYWJs
ZV9maWxlX2hhbmRsZShpZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLy8gRGVsZXRlcyB0
aGUgZ2l2ZW4gZmlsZS4KQEAgLTEwMjksNyArMTAxLDcgQEAgc3RhdGljIGludCBjaHJvbWl1bU9w
ZW4oc3FsaXRlM192ZnMqIHZmcywgY29uc3QgY2hhciogZmlsZU5hbWUsCiAvLyBmaWxlTmFtZSAt
IHRoZSBuYW1lIG9mIHRoZSBmaWxlLgogLy8gc3luY0RpciAtIGRldGVybWluZXMgaWYgdGhlIGRp
cmVjdG9yeSB0byB3aGljaCB0aGlzIGZpbGUgYmVsb25ncwogLy8gICAgICAgICAgIHNob3VsZCBi
ZSBzeW5jaGVkIGFmdGVyIHRoZSBmaWxlIGlzIGRlbGV0ZWQuCi1zdGF0aWMgaW50IGNocm9taXVt
RGVsZXRlKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBzeW5jRGlyKQor
aW50IGNocm9taXVtRGVsZXRlKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsIGlu
dCBzeW5jRGlyKQogewogICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVG
aWxlKGZpbGVOYW1lLCBzeW5jRGlyKTsKIH0KQEAgLTEwNDAsNyArMTEyLDcgQEAgc3RhdGljIGlu
dCBjaHJvbWl1bURlbGV0ZShzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQg
c3luY0RpcikKIC8vIGZpbGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUuCiAvLyBmbGFnIC0g
dGhlIHR5cGUgb2YgdGVzdCB0byBtYWtlIG9uIHRoaXMgZmlsZS4KIC8vIHJlcyAtIHRoZSByZXN1
bHQuCi1zdGF0aWMgaW50IGNocm9taXVtQWNjZXNzKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhciog
ZmlsZU5hbWUsIGludCBmbGFnLCBpbnQqIHJlcykKK2ludCBjaHJvbWl1bUFjY2VzcyhzcWxpdGUz
X3ZmcyosIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQgZmxhZywgaW50KiByZXMpCiB7CiAgICAg
aW50IGF0dHIgPSBzdGF0aWNfY2FzdDxpbnQ+KFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZUdldEZp
bGVBdHRyaWJ1dGVzKGZpbGVOYW1lKSk7CiAgICAgaWYgKGF0dHIgPCAwKSB7CkBAIC0xMDUwLDcg
KzEyMiw3IEBAIHN0YXRpYyBpbnQgY2hyb21pdW1BY2Nlc3Moc3FsaXRlM192ZnMqLCBjb25zdCBj
aGFyKiBmaWxlTmFtZSwgaW50IGZsYWcsIGludCogcmVzCiAKICAgICBzd2l0Y2ggKGZsYWcpIHsK
ICAgICBjYXNlIFNRTElURV9BQ0NFU1NfRVhJU1RTOgotICAgICAgICAqcmVzID0gMTsgLy8gaWYg
dGhlIGZpbGUgZG9lc24ndCBleGlzdCwgYXR0ciA8IDAKKyAgICAgICAgKnJlcyA9IDE7ICAgLy8g
aWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgYXR0ciA8IDAKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBTUUxJVEVfQUNDRVNTX1JFQURXUklURToKICAgICAgICAgKnJlcyA9IChhdHRyICYgV19P
SykgJiYgKGF0dHIgJiBSX09LKTsKQEAgLTEwNzEsOCArMTQzLDggQEAgc3RhdGljIGludCBjaHJv
bWl1bUFjY2VzcyhzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQgZmxhZywg
aW50KiByZXMKIC8vIHJlbGF0aXZlUGF0aCAtIHRoZSByZWxhdGl2ZSBwYXRoLgogLy8gYnVmU2l6
ZSAtIHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyIGluIGJ5dGVzLgogLy8gYWJzb2x1dGVQ
YXRoIC0gdGhlIG91dHB1dCBidWZmZXIgd2hlcmUgdGhlIGFic29sdXRlIHBhdGggd2lsbCBiZSBz
dG9yZWQuCi1zdGF0aWMgaW50IGNocm9taXVtRnVsbFBhdGhuYW1lKHNxbGl0ZTNfdmZzKiB2ZnMs
IGNvbnN0IGNoYXIqIHJlbGF0aXZlUGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50LCBjaGFyKiBhYnNvbHV0ZVBhdGgpCitpbnQgY2hyb21pdW1GdWxsUGF0aG5hbWUoc3Fs
aXRlM192ZnMqIHZmcywgY29uc3QgY2hhciogcmVsYXRpdmVQYXRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCwgY2hhciogYWJzb2x1dGVQYXRoKQogewogICAgIC8vIFRoZSByZW5kZXJl
ciBwcm9jZXNzIGRvZXNuJ3QgbmVlZCB0byBrbm93IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBm
aWxlCiAgICAgc3FsaXRlM19zbnByaW50Zih2ZnMtPm14UGF0aG5hbWUsIGFic29sdXRlUGF0aCwg
IiVzIiwgcmVsYXRpdmVQYXRoKTsKQEAgLTEwODAsMTA3ICsxNTIsNDQgQEAgc3RhdGljIGludCBj
aHJvbWl1bUZ1bGxQYXRobmFtZShzcWxpdGUzX3ZmcyogdmZzLCBjb25zdCBjaGFyKiByZWxhdGl2
ZVBhdGgsCiB9CiAKICNpZm5kZWYgU1FMSVRFX09NSVRfTE9BRF9FWFRFTlNJT04KLS8vIFdlIGRp
c2FsbG93IGxvYWRpbmcgRFNPcyBpbnNpZGUgdGhlIHJlbmRlcmVyIHByb2Nlc3MsIHNvIHRoZSBm
b2xsb3dpbmcgcHJvY2VkdXJlcyBhcmUgbm8tb3AuCi1zdGF0aWMgdm9pZCogY2hyb21pdW1EbE9w
ZW4oc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKikKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotc3Rh
dGljIHZvaWQgY2hyb21pdW1EbEVycm9yKHNxbGl0ZTNfdmZzKiwgaW50LCBjaGFyKikKLXsKLX0K
LQotc3RhdGljIHZvaWQgKCpjaHJvbWl1bURsU3ltKHNxbGl0ZTNfdmZzKiwgdm9pZCosIGNvbnN0
IGNoYXIqKSkoKQorLy8gUmV0dXJucyBOVUxMLCB0aHVzIGRpc2FsbG93aW5nIGxvYWRpbmcgbGli
cmFyaWVzIGluIHRoZSByZW5kZXJlciBwcm9jZXNzLgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8g
dGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZpbGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIHNo
YXJlZCBsaWJyYXJ5IGZpbGUuCit2b2lkKiBjaHJvbWl1bURsT3BlbihzcWxpdGUzX3ZmcyosIGNv
bnN0IGNoYXIqKQogewogICAgIHJldHVybiAwOwogfQotCi1zdGF0aWMgdm9pZCBjaHJvbWl1bURs
Q2xvc2Uoc3FsaXRlM192ZnMqLCB2b2lkKikKLXsKLX0KICNlbHNlCiAjZGVmaW5lIGNocm9taXVt
RGxPcGVuIDAKLSNkZWZpbmUgY2hyb21pdW1EbEVycm9yIDAKLSNkZWZpbmUgY2hyb21pdW1EbFN5
bSAwCi0jZGVmaW5lIGNocm9taXVtRGxDbG9zZSAwCiAjZW5kaWYgLy8gU1FMSVRFX09NSVRfTE9B
RF9FWFRFTlNJT04KIAotLy8gR2VuZXJhdGVzIGEgc2VlZCBmb3IgU1FMaXRlJ3MgUFJORy4KLXN0
YXRpYyBpbnQgY2hyb21pdW1SYW5kb21uZXNzKHNxbGl0ZTNfdmZzKiwgaW50IG5CdWYsIGNoYXIg
KnpCdWYpCi17Ci0gICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4obkJ1ZikgPj0gKHNpemVv
Zih0aW1lX3QpICsgc2l6ZW9mKGludCkpKTsKLQotICAgIG1lbXNldCh6QnVmLCAwLCBuQnVmKTsK
LSAgICBpbnQgZmQgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7Ci0gICAgaWYgKGZk
IDwgMCkgewotICAgICAgICB0aW1lX3QgdDsKLSAgICAgICAgdGltZSgmdCk7Ci0gICAgICAgIG1l
bWNweSh6QnVmLCAmdCwgc2l6ZW9mKHQpKTsKLSAgICAgICAgaW50IHBpZCA9IGdldHBpZCgpOwot
ICAgICAgICBtZW1jcHkoJnpCdWZbc2l6ZW9mKHQpXSwgJnBpZCwgc2l6ZW9mKHBpZCkpOwotICAg
ICAgICByZXR1cm4gc2l6ZW9mKHQpICsgc2l6ZW9mKHBpZCk7Ci0gICAgfQotICAgIG5CdWYgPSBy
ZWFkKGZkLCB6QnVmLCBuQnVmKTsKLSAgICBjbG9zZShmZCk7Ci0gICAgcmV0dXJuIG5CdWY7Ci19
Ci0KLS8vIFNsZWVwcyBmb3IgYXQgbGVhc3QgfG1pY3Jvc2Vjb25kc3wsIGFuZCByZXR1cm5zIHRo
ZSBhY3R1YWwKLS8vIGFtb3VudCBvZiB0aW1lIHNwZW50IHNsZWVwaW5nIChpbiBtaWNyb3NlY29u
ZHMpLgotc3RhdGljIGludCBjaHJvbWl1bVNsZWVwKHNxbGl0ZTNfdmZzKiwgaW50IG1pY3Jvc2Vj
b25kcykKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAgdXNsZWVwKG1pY3Jvc2Vjb25kcyk7Ci0gICAg
cmV0dXJuIG1pY3Jvc2Vjb25kczsKLSNlbHNlCi0gICAgLy8gUm91bmQgdG8gdGhlIG5lYXJlc3Qg
c2Vjb25kLgotICAgIGludCBzZWNvbmRzID0gKG1pY3Jvc2Vjb25kcyArIDk5OTk5OSkgLyAxMDAw
MDAwOwotICAgIHNsZWVwKHNlY29uZHMpOwotICAgIHJldHVybiBzZWNvbmRzICogMTAwMDAwMDsK
LSNlbmRpZgotfQotCi0vLyBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUgKFVUQyku
Ci1zdGF0aWMgaW50IGNocm9taXVtQ3VycmVudFRpbWUoc3FsaXRlM192ZnMqLCBkb3VibGUqIG5v
dykKLXsKLSAgICBzdHJ1Y3QgdGltZXZhbCB0aW1ldmFsOwotICAgIGdldHRpbWVvZmRheSgmdGlt
ZXZhbCwgMCk7Ci0gICAgKm5vdyA9IDI0NDA1ODcuNSArIHRpbWV2YWwudHZfc2VjIC8gODY0MDAu
MCArIHRpbWV2YWwudHZfdXNlYyAvIDg2NDAwMDAwMDAwLjA7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LS8vIFRoaXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiBTUUxpdGUgY29yZS4KLXN0YXRpYyBp
bnQgY2hyb21pdW1HZXRMYXN0RXJyb3Ioc3FsaXRlM192ZnMqLCBpbnQsIGNoYXIqKQotewotICAg
IHJldHVybiAwOwotfQotCi0vLyBTYW1lIGFzIE1BWF9QQVRITkFNRSBmcm9tIHNxbGl0ZSdzIG9z
X3VuaXguYy4KLXN0YXRpYyBjb25zdCBpbnQgY2hyb21pdW1NYXhQYXRobmFtZSA9IDUxMjsKK30g
Ly8gbmFtZXNwYWNlCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBTUUxpdGVGaWxlU3lz
dGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpCiB7CisgICAgc3FsaXRlM192ZnMqIHVuaXhfdmZzID0g
c3FsaXRlM192ZnNfZmluZCgidW5peCIpOwogICAgIHN0YXRpYyBzcWxpdGUzX3ZmcyBjaHJvbWl1
bV92ZnMgPSB7CiAgICAgICAgIDEsCi0gICAgICAgIHNpemVvZihDaHJvbWl1bUZpbGUpLAotICAg
ICAgICBjaHJvbWl1bU1heFBhdGhuYW1lLAorICAgICAgICB1bml4X3Zmcy0+c3pPc0ZpbGUsCisg
ICAgICAgIHVuaXhfdmZzLT5teFBhdGhuYW1lLAogICAgICAgICAwLAogICAgICAgICAiY2hyb21p
dW1fdmZzIiwKLSAgICAgICAgMCwKKyAgICAgICAgdW5peF92ZnMtPnBBcHBEYXRhLAogICAgICAg
ICBjaHJvbWl1bU9wZW4sCiAgICAgICAgIGNocm9taXVtRGVsZXRlLAogICAgICAgICBjaHJvbWl1
bUFjY2VzcywKICAgICAgICAgY2hyb21pdW1GdWxsUGF0aG5hbWUsCiAgICAgICAgIGNocm9taXVt
RGxPcGVuLAotICAgICAgICBjaHJvbWl1bURsRXJyb3IsCi0gICAgICAgIGNocm9taXVtRGxTeW0s
Ci0gICAgICAgIGNocm9taXVtRGxDbG9zZSwKLSAgICAgICAgY2hyb21pdW1SYW5kb21uZXNzLAot
ICAgICAgICBjaHJvbWl1bVNsZWVwLAotICAgICAgICBjaHJvbWl1bUN1cnJlbnRUaW1lLAotICAg
ICAgICBjaHJvbWl1bUdldExhc3RFcnJvcgorICAgICAgICB1bml4X3Zmcy0+eERsRXJyb3IsCisg
ICAgICAgIHVuaXhfdmZzLT54RGxTeW0sCisgICAgICAgIHVuaXhfdmZzLT54RGxDbG9zZSwKKyAg
ICAgICAgdW5peF92ZnMtPnhSYW5kb21uZXNzLAorICAgICAgICB1bml4X3Zmcy0+eFNsZWVwLAor
ICAgICAgICB1bml4X3Zmcy0+eEN1cnJlbnRUaW1lLAorICAgICAgICB1bml4X3Zmcy0+eEdldExh
c3RFcnJvcgogICAgIH07CiAgICAgc3FsaXRlM192ZnNfcmVnaXN0ZXIoJmNocm9taXVtX3Zmcywg
MCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDQwNmZkYjZkMGU0NzY1YzVhNGQ5
MjhkODkzOGMxNmQwMjczOWI5N2MuLmE5ODliODc0M2YzYTliMTVkOTliODEzZDVmZWIwYjhhOGY0
Yzc0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEt
MDEtMjYgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KKworICAgICAgICBVbnJldmll
d2VkLgorCisgICAgICAgIFtjaHJvbWl1bV0gcmV2ZXJ0IHI2ODMxMCBiZWNhdXNlIG9mIHJhY2Ug
Y29uZGl0aW9ucyBkZXRlY3RlZCBieSB0c2FucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMxODUKKworICAgICAgICAqIERFUFM6IFJvbGwgY2hyb21p
dW0gdG8gNzI2NzMgdG8gcGljayB1cCBzcWxpdGUgcmV2ZXJ0LgorCiAyMDExLTAxLTI2ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
TmF0ZSBDaGFwaW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0RFUFMgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0RFUFMKaW5kZXggZDdkOTdkZjk2MWRhMDQxZjRjNzVlYTRm
OTYwZDQ1MmY1MDhmNGJkMy4uNjczMDQwN2UwYTgxZDk0NzJiYzM4NjI2NTY1ZDY5NDMyZDRmNzJj
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9ERVBTCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vREVQUwpAQCAtMzIsNyArMzIsNyBAQAogCiB2YXJzID0gewogICAnY2hy
b21pdW1fc3ZuJzogJ2h0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3N2bi90cnVuay9zcmMnLAotICAn
Y2hyb21pdW1fcmV2JzogJzcyNTgxJworICAnY2hyb21pdW1fcmV2JzogJzcyNjczJwogfQogCiBk
ZXBzID0gewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>