<?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>172053</bug_id>
          
          <creation_ts>2017-05-12 15:08:03 -0700</creation_ts>
          <short_desc>Rename WKContentExtension to WKContentRuleList</short_desc>
          <delta_ts>2017-05-17 21:36:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1308088</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-12 15:08:03 -0700</bug_when>
    <thetext>Rename WKContentExtension to WKContentRuleList</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308163</commentid>
    <comment_count>1</comment_count>
      <attachid>309970</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-12 17:03:42 -0700</bug_when>
    <thetext>Created attachment 309970
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308165</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-12 17:06:24 -0700</bug_when>
    <thetext>Attachment 309970 did not pass style-queue:


ERROR: Source/WebKit2/Shared/WebCompiledContentRuleList.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.h:88:  make_error_code is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.cpp:248:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.cpp:256:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.cpp:263:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.cpp:269:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.cpp:280:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.cpp:530:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.cpp:535:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 9 in 50 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>1308173</commentid>
    <comment_count>3</comment_count>
      <attachid>309975</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-12 17:25:01 -0700</bug_when>
    <thetext>Created attachment 309975
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308175</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-12 17:28:12 -0700</bug_when>
    <thetext>Attachment 309975 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/Cocoa/APIContentRuleListStoreCocoa.mm:40:  No space between ^ and block definition.  [whitespace/brackets] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.h:88:  make_error_code is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.cpp:248:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.cpp:256:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.cpp:263:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.cpp:269:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.cpp:280:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.cpp:530:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/API/APIContentRuleListStore.cpp:535:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 9 in 52 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>1308182</commentid>
    <comment_count>5</comment_count>
      <attachid>309975</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-05-12 17:38:27 -0700</bug_when>
    <thetext>Comment on attachment 309975
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308216</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-12 18:33:51 -0700</bug_when>
    <thetext>http://trac.webkit.org/r216809</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309970</attachid>
            <date>2017-05-12 17:03:42 -0700</date>
            <delta_ts>2017-05-12 17:25:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172053-20170512170420.patch</filename>
            <type>text/plain</type>
            <size>316663</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA1LTEyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVuYW1lIFdL
Q29udGVudEV4dGVuc2lvbiB0byBXS0NvbnRlbnRSdWxlTGlzdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMDUzCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8zMjE0MTAwNT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIEFQSSB0ZXN0cy4KKworICAgICAgICAqIEVuZ2xp
c2gubHByb2ovTG9jYWxpemFibGUuc3RyaW5nczoKKwogMjAxNy0wNS0wOSAgWW91ZW5uIEZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmcmVzaCB3ZWJydGMgV1BUIHRlc3Rz
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5z
dHJpbmdzCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9q
L0xvY2FsaXphYmxlLnN0cmluZ3MJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw4ICsxNjMsOCBAQAog
LyogU3VidGl0bGUgb2YgdGhlIGxhYmVsIHRvIHNob3cgb24gYSBzbmFwc2hvdHRlZCBwbHVnLWlu
ICovCiAiQ2xpY2sgdG8gcmVzdGFydCIgPSAiQ2xpY2sgdG8gcmVzdGFydCI7CiAKLS8qIFdLRXJy
b3JDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkIGRlc2NyaXB0aW9uICovCi0iQ29t
cGlsaW5nIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQiID0gIkNvbXBpbGluZyBhIFdL
VXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkIjsKKy8qIFdLRXJyb3JDb250ZW50UnVsZUxpc3RT
dG9yZUNvbXBpbGVGYWlsZWQgZGVzY3JpcHRpb24gKi8KKyJDb21waWxpbmcgYSBXS0NvbnRlbnRS
dWxlTGlzdCBmYWlsZWQiID0gIkNvbXBpbGluZyBhIFdLQ29udGVudFJ1bGVMaXN0IGZhaWxlZCI7
CiAKIC8qIFdlYktpdEVycm9yQ2Fubm90U2hvd01JTUVUeXBlIGRlc2NyaXB0aW9uICovCiAiQ29u
dGVudCB3aXRoIHNwZWNpZmllZCBNSU1FIHR5cGUgY2Fu4oCZdCBiZSBzaG93biIgPSAiQ29udGVu
dCB3aXRoIHNwZWNpZmllZCBNSU1FIHR5cGUgY2Fu4oCZdCBiZSBzaG93biI7CkBAIC0zNTIsMTEg
KzM1MiwxMSBAQAogLyogTG9vayBVcCBjb250ZXh0IG1lbnUgaXRlbSB3aXRoIHNlbGVjdGVkIHdv
cmQgKi8KICJMb29rIFVwIOKAnCVz4oCdIiA9ICJMb29rIFVwIOKAnCVz4oCdIjsKIAotLyogV0tF
cnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxvb2t1cEZhaWxlZCBkZXNjcmlwdGlvbiAqLwotIkxv
b2tpbmcgdXAgYSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uIGZhaWxlZCIgPSAiTG9va2luZyB1cCBh
IFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkIjsKKy8qIFdLRXJyb3JDb250ZW50UnVsZUxp
c3RTdG9yZUxvb2t1cEZhaWxlZCBkZXNjcmlwdGlvbiAqLworIkxvb2tpbmcgdXAgYSBXS0NvbnRl
bnRSdWxlTGlzdCBmYWlsZWQiID0gIkxvb2tpbmcgdXAgYSBXS0NvbnRlbnRSdWxlTGlzdCBmYWls
ZWQiOwogCi0vKiBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlVmVyc2lvbk1pc21hdGNoIGRl
c2NyaXB0aW9uICovCi0iTG9va2luZyB1cCBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZm91bmQg
YSBiaW5hcnkgdGhhdCBpcyBpbmNvbXBhdGlibGUiID0gIkxvb2tpbmcgdXAgYSBXS1VzZXJDb250
ZW50RXh0ZW5zaW9uIGZvdW5kIGEgYmluYXJ5IHRoYXQgaXMgaW5jb21wYXRpYmxlIjsKKy8qIFdL
RXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZVZlcnNpb25NaXNtYXRjaCBkZXNjcmlwdGlvbiAqLwor
Ikxvb2tpbmcgdXAgYSBXS0NvbnRlbnRSdWxlTGlzdCBmb3VuZCBhIGJpbmFyeSB0aGF0IGlzIGlu
Y29tcGF0aWJsZSIgPSAiTG9va2luZyB1cCBhIFdLQ29udGVudFJ1bGVMaXN0IGZvdW5kIGEgYmlu
YXJ5IHRoYXQgaXMgaW5jb21wYXRpYmxlIjsKIAogLyogTWVkaWEgTG9vcCBjb250ZXh0IG1lbnUg
aXRlbSAqLwogIkxvb3AiID0gIkxvb3AiOwpAQCAtNDk2LDggKzQ5Niw4IEBACiAvKiBSZWxvYWQg
Y29udGV4dCBtZW51IGl0ZW0gKi8KICJSZWxvYWQiID0gIlJlbG9hZCI7CiAKLS8qIFdLRXJyb3JD
b250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQgZGVzY3JpcHRpb24gKi8KLSJSZW1vdmlu
ZyBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkIiA9ICJSZW1vdmluZyBhIFdLVXNlckNv
bnRlbnRFeHRlbnNpb24gZmFpbGVkIjsKKy8qIFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZVJl
bW92ZUZhaWxlZCBkZXNjcmlwdGlvbiAqLworIlJlbW92aW5nIGEgV0tDb250ZW50UnVsZUxpc3Qg
ZmFpbGVkIiA9ICJSZW1vdmluZyBhIFdLQ29udGVudFJ1bGVMaXN0IGZhaWxlZCI7CiAKIC8qIGRl
ZmF1bHQgbGFiZWwgZm9yIFJlc2V0IGJ1dHRvbnMgaW4gZm9ybXMgb24gd2ViIHBhZ2VzICovCiAi
UmVzZXQiID0gIlJlc2V0IjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNyBAQAor
MjAxNy0wNS0xMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgor
CisgICAgICAgIFJlbmFtZSBXS0NvbnRlbnRFeHRlbnNpb24gdG8gV0tDb250ZW50UnVsZUxpc3QK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjA1Mwor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzIxNDEwMDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQSU9iamVjdC5oOgorICAg
ICAgICAqIFNoYXJlZC9BUEkvQ29jb2EvV2ViS2l0Lmg6CisgICAgICAgICogU2hhcmVkL0FQSS9j
L1dLRGVwcmVjYXRlZEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXS1BhZ2VHcm91cEFkZFVzZXJD
b250ZW50RmlsdGVyKToKKyAgICAgICAgKFdLUGFnZUdyb3VwUmVtb3ZlVXNlckNvbnRlbnRGaWx0
ZXIpOgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9BUElPYmplY3QubW06CisgICAgICAgIChBUEk6
Ok9iamVjdDo6bmV3T2JqZWN0KToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1dlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9XZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1dl
YkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAuCisgICAgICAgIChXZWJLaXQ6
OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6fldlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50UnVs
ZUxpc3Q6OmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0OjpmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29k
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0OjpmaWx0ZXJz
V2l0aG91dENvbmRpdGlvbnNCeXRlY29kZUxlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
bXBpbGVkQ29udGVudFJ1bGVMaXN0OjpmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0OjpmaWx0ZXJzV2l0aENv
bmRpdGlvbnNCeXRlY29kZUxlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29u
dGVudFJ1bGVMaXN0Ojp0b3BVUkxGaWx0ZXJzQnl0ZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6dG9wVVJMRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OmFjdGlvbnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6YWN0aW9uc0xlbmd0
aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246On5XZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b246OmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhvdXRDb25kaXRpb25z
Qnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRF
eHRlbnNpb246OmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlTGVuZ3RoKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpmaWx0ZXJz
V2l0aENvbmRpdGlvbnNCeXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVMZW5n
dGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b246OnRvcFVSTEZpbHRlcnNCeXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6dG9wVVJMRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjph
Y3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uOjphY3Rpb25zTGVuZ3RoKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViQ29t
cGlsZWRDb250ZW50UnVsZUxpc3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oLgorICAgICAgICAqIFNoYXJlZC9XZWJDb21w
aWxlZENvbnRlbnRSdWxlTGlzdERhdGEuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHAuCisgICAgICAgIChXZWJL
aXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhOjpkZWNvZGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjplbmNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlz
dERhdGEuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEuaC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50
UnVsZUxpc3REYXRhOjpXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjpXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb25EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnM6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5oOiBSZW1v
dmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25T
dG9yZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVM
aXN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250
ZW50RXh0ZW5zaW9uLmNwcC4KKyAgICAgICAgKEFQSTo6Q29udGVudFJ1bGVMaXN0OjpDb250ZW50
UnVsZUxpc3QpOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxpc3Q6On5Db250ZW50UnVsZUxp
c3QpOgorICAgICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uOjpDb250ZW50RXh0ZW5zaW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKEFQSTo6Q29udGVudEV4dGVuc2lvbjo6fkNvbnRlbnRFeHRlbnNp
b24pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4
dGVuc2lvbi5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3Rv
cmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRl
bnRFeHRlbnNpb25TdG9yZS5jcHAuCisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3Jl
OjpsZWdhY3lEZWZhdWx0U3RvcmUpOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxpc3RTdG9y
ZTo6bm9uTGVnYWN5RGRlZmF1bHRTdG9yZSk6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlz
dFN0b3JlOjpkZWZhdWx0U3RvcmUpOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxpc3RTdG9y
ZTo6c3RvcmVXaXRoUGF0aCk6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpD
b250ZW50UnVsZUxpc3RTdG9yZSk6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3Jl
Ojp+Q29udGVudFJ1bGVMaXN0U3RvcmUpOgorICAgICAgICAoQVBJOjpjb25zdHJ1Y3RlZFBhdGhQ
cmVmaXgpOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxpc3RNZXRhRGF0YTo6ZmlsZVNpemUp
OgorICAgICAgICAoQVBJOjplbmNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAg
IChBUEk6OmRlY29kZUNvbnRlbnRSdWxlTGlzdE1ldGFEYXRhKToKKyAgICAgICAgKEFQSTo6b3Bl
bkFuZE1hcENvbnRlbnRSdWxlTGlzdCk6CisgICAgICAgIChBUEk6OmNvbXBpbGVkVG9GaWxlKToK
KyAgICAgICAgKEFQSTo6Y3JlYXRlRXh0ZW5zaW9uKToKKyAgICAgICAgKEFQSTo6Q29udGVudFJ1
bGVMaXN0U3RvcmU6Omxvb2t1cENvbnRlbnRSdWxlTGlzdCk6CisgICAgICAgIChBUEk6OkNvbnRl
bnRSdWxlTGlzdFN0b3JlOjpnZXRBdmFpbGFibGVDb250ZW50UnVsZUxpc3RJZGVudGlmaWVycyk6
CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpjb21waWxlQ29udGVudFJ1bGVM
aXN0KToKKyAgICAgICAgKEFQSTo6Q29udGVudFJ1bGVMaXN0U3RvcmU6OnJlbW92ZUNvbnRlbnRS
dWxlTGlzdCk6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpzeW5jaHJvbm91
c1JlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHMpOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxp
c3RTdG9yZTo6aW52YWxpZGF0ZUNvbnRlbnRSdWxlTGlzdFZlcnNpb24pOgorICAgICAgICAoQVBJ
OjpDb250ZW50UnVsZUxpc3RTdG9yZTo6Z2V0Q29udGVudFJ1bGVMaXN0U291cmNlKToKKyAgICAg
ICAgKEFQSTo6Y29udGVudFJ1bGVMaXN0U3RvcmVFcnJvckNhdGVnb3J5KToKKyAgICAgICAgKEFQ
STo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUpOiBEZWxldGVkLgorICAgICAg
ICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgpOiBEZWxldGVkLgor
ICAgICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkNvbnRlbnRFeHRlbnNpb25TdG9y
ZSk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6fkNvbnRl
bnRFeHRlbnNpb25TdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkNvbnRlbnRFeHRlbnNp
b25NZXRhRGF0YTo6ZmlsZVNpemUpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjplbmNvZGVDb250
ZW50RXh0ZW5zaW9uTWV0YURhdGEpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpkZWNvZGVDb250
ZW50RXh0ZW5zaW9uTWV0YURhdGEpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpvcGVuQW5kTWFw
Q29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkNvbnRlbnRFeHRlbnNp
b25TdG9yZTo6bG9va3VwQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChBUEk6
OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Z2V0QXZhaWxhYmxlQ29udGVudEV4dGVuc2lvbklkZW50
aWZpZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpj
b21waWxlQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkNvbnRlbnRF
eHRlbnNpb25TdG9yZTo6cmVtb3ZlQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAg
IChBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3luY2hyb25vdXNSZW1vdmVBbGxDb250ZW50
RXh0ZW5zaW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpnZXRDb250ZW50RXh0ZW5zaW9uU291cmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKEFQSTo6Y29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29y
eSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RT
dG9yZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRl
bnRFeHRlbnNpb25TdG9yZS5oLgorICAgICAgICAoQVBJOjptYWtlX2Vycm9yX2NvZGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tQYWdlR3JvdXAuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJD
b250ZW50Q29udHJvbGxlclJlZi5jcHA6CisgICAgICAgIChXS1VzZXJDb250ZW50Q29udHJvbGxl
ckFkZFVzZXJDb250ZW50RmlsdGVyKToKKyAgICAgICAgKFdLVXNlckNvbnRlbnRDb250cm9sbGVy
UmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mv
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUdldFR5cGVJRCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29jb2EubW06CisgICAgICAgIChBUEk6OkNv
bnRlbnRSdWxlTGlzdFN0b3JlOjpkZWZhdWx0U3RvcmVQYXRoKToKKyAgICAgICAgKEFQSTo6Q29u
dGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvbi5oOiBSZW1vdmVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLm1tOiBSZW1vdmVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJu
YWwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4
dGVuc2lvblN0b3JlLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVs
ZUxpc3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0NvbnRlbnRFeHRlbnNpb24uaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29u
dGVudFJ1bGVMaXN0Lm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLQ29udGVudEV4dGVuc2lvbi5tbS4KKyAgICAgICAgKC1bV0tDb250ZW50UnVsZUxp
c3QgZGVhbGxvY10pOgorICAgICAgICAoLVtXS0NvbnRlbnRSdWxlTGlzdCBfYXBpT2JqZWN0XSk6
CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVMaXN0IGlkZW50aWZpZXJdKToKKyAgICAgICAgKC1b
V0tDb250ZW50RXh0ZW5zaW9uIGRlYWxsb2NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tDb250
ZW50RXh0ZW5zaW9uIF9hcGlPYmplY3RdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tDb250ZW50
RXh0ZW5zaW9uIGlkZW50aWZpZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLQ29udGVudFJ1bGVMaXN0SW50ZXJuYWwuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oLgor
ICAgICAgICAoV2ViS2l0Ojp3cmFwcGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLQ29udGVudFJ1bGVMaXN0U3RvcmUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5oLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZS5tbTogQ29waWVkIGZyb20g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbS4KKyAgICAgICAgKHRvV0tFcnJvckNvZGUpOgorICAgICAgICAoLVtXS0NvbnRlbnRSdWxl
TGlzdFN0b3JlIGRlYWxsb2NdKToKKyAgICAgICAgKCtbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBk
ZWZhdWx0U3RvcmVdKToKKyAgICAgICAgKCtbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBzdG9yZVdp
dGhVUkw6XSk6CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgY29tcGlsZUNvbnRl
bnRSdWxlTGlzdEZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpjb21wbGV0aW9u
SGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50UnVsZUxpc3RTdG9yZSBfY29tcGlsZUNv
bnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpjb21wbGV0
aW9uSGFuZGxlcjpyZWxlYXNlc0FyZ3VtZW50Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRSdWxl
TGlzdFN0b3JlIGxvb2tVcENvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6Y29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZ2V0QXZhaWxhYmxl
Q29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnM6XSk6CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVM
aXN0U3RvcmUgcmVtb3ZlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50UnVsZUxpc3RTdG9yZSBfYXBpT2JqZWN0XSk6
CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgX3JlbW92ZUFsbENvbnRlbnRSdWxl
TGlzdHNdKToKKyAgICAgICAgKC1bV0tDb250ZW50UnVsZUxpc3RTdG9yZSBfaW52YWxpZGF0ZUNv
bnRlbnRSdWxlTGlzdFZlcnNpb25Gb3JJZGVudGlmaWVyOl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRSdWxlTGlzdFN0b3JlIF9nZXRDb250ZW50UnVsZUxpc3RTb3VyY2VGb3JJZGVudGlmaWVyOmNv
bXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIF9j
b21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjplbmNvZGVkQ29udGVudFJ1bGVMaXN0
OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZSBkZWFsbG9jXSk6IERlbGV0ZWQuCisgICAgICAgICgrW1dLQ29udGVudEV4dGVuc2lvblN0b3Jl
IGRlZmF1bHRTdG9yZV0pOiBEZWxldGVkLgorICAgICAgICAoK1tXS0NvbnRlbnRFeHRlbnNpb25T
dG9yZSBzdG9yZVdpdGhVUkw6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLQ29udGVudEV4dGVu
c2lvblN0b3JlIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjplbmNvZGVkQ29u
dGVudEV4dGVuc2lvbjpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRp
ZmllcjplbmNvZGVkQ29udGVudEV4dGVuc2lvbjpjb21wbGV0aW9uSGFuZGxlcjpyZWxlYXNlc0Fy
Z3VtZW50Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBs
b29rVXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpjb21wbGV0aW9uSGFuZGxlcjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgZ2V0QXZhaWxhYmxl
Q29udGVudEV4dGVuc2lvbklkZW50aWZpZXJzOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpj
b21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmUgX2FwaU9iamVjdF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRFeHRl
bnNpb25TdG9yZSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgX2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9u
VmVyc2lvbkZvcklkZW50aWZpZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLQ29udGVudEV4
dGVuc2lvblN0b3JlIF9nZXRDb250ZW50RXh0ZW5zaW9uU291cmNlRm9ySWRlbnRpZmllcjpjb21w
bGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmUgX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjplbmNvZGVkQ29udGVu
dEV4dGVuc2lvbjpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVJbnRlcm5hbC5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lv
blN0b3JlSW50ZXJuYWwuaC4KKyAgICAgICAgKFdlYktpdDo6d3JhcHBlcik6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVu
c2lvblN0b3JlUHJpdmF0ZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJv
ci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5tbToKKyAgICAgICAg
KGxvY2FsaXplZERlc2NyaXB0aW9uRm9yRXJyb3JDb2RlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tVc2Vy
Q29udGVudENvbnRyb2xsZXIgYWRkQ29udGVudFJ1bGVMaXN0Ol0pOgorICAgICAgICAoLVtXS1Vz
ZXJDb250ZW50Q29udHJvbGxlciByZW1vdmVDb250ZW50UnVsZUxpc3Q6XSk6CisgICAgICAgICgt
W1dLVXNlckNvbnRlbnRDb250cm9sbGVyIHJlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHNdKToKKyAg
ICAgICAgKC1bV0tVc2VyQ29udGVudENvbnRyb2xsZXIgX2FkZFVzZXJDb250ZW50RmlsdGVyOl0p
OgorICAgICAgICAoLVtXS1VzZXJDb250ZW50Q29udHJvbGxlciBfcmVtb3ZlVXNlckNvbnRlbnRG
aWx0ZXI6XSk6CisgICAgICAgICgtW1dLVXNlckNvbnRlbnRDb250cm9sbGVyIF9yZW1vdmVBbGxV
c2VyQ29udGVudEZpbHRlcnNdKToKKyAgICAgICAgKC1bV0tVc2VyQ29udGVudENvbnRyb2xsZXIg
YWRkQ29udGVudEV4dGVuc2lvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tVc2VyQ29udGVu
dENvbnRyb2xsZXIgcmVtb3ZlQ29udGVudEV4dGVuc2lvbjpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tVc2VyQ29udGVudENvbnRyb2xsZXIgcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdKTog
RGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUubW06CisgICAgICAgICh0b1VzZXJDb250ZW50UnVsZUxpc3RTdG9yZUVycm9y
KToKKyAgICAgICAgKCtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVd
KToKKyAgICAgICAgKCtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBzdG9yZVdpdGhVUkw6
XSk6CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgY29tcGlsZUNvbnRl
bnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmNvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGxv
b2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIHJlbW92ZUNvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9hcGlPYmplY3RdKToKKyAgICAgICAgKC1bX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdKToKKyAg
ICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBfaW52YWxpZGF0ZUNvbnRlbnRF
eHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjpdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZSBfaW5pdFdpdGhXS0NvbnRlbnRSdWxlTGlzdFN0b3JlOl0pOgorICAg
ICAgICAodG9Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3IpOiBEZWxldGVkLgorICAgICAg
ICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9pbml0V2l0aFdLQ29udGVudEV4dGVu
c2lvblN0b3JlOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW06CisgICAgICAg
ICgtW19XS1VzZXJDb250ZW50RmlsdGVyIF9hcGlPYmplY3RdKToKKyAgICAgICAgKC1bX1dLVXNl
ckNvbnRlbnRGaWx0ZXIgX2luaXRXaXRoV0tDb250ZW50UnVsZUxpc3Q6XSk6CisgICAgICAgICgt
W19XS1VzZXJDb250ZW50RmlsdGVyIF9pbml0V2l0aFdLQ29udGVudEV4dGVuc2lvbjpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVy
SW50ZXJuYWwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50
RmlsdGVyUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjphZGRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZENvbnRlbnRSdWxlTGlzdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVDb250ZW50UnVsZUxp
c3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVt
b3ZlQWxsQ29udGVudFJ1bGVMaXN0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5OjphZGRDb250ZW50RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZUNvbnRlbnRFeHRl
bnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eTo6cmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwOgorICAgICAgICAqIFdlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1VzZXJDb250
ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6YWRkQ29udGVudFJ1bGVMaXN0cyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQ29udGVudFJ1bGVMaXN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxDb250ZW50
UnVsZUxpc3RzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjph
ZGRDb250ZW50RXh0ZW5zaW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsQ29udGVudEV4
dGVuc2lvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9Vc2VyQ29udGVu
dC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjptX2JhY2tncm91bmRD
UFVMaW1pdCk6CisKIDIwMTctMDUtMDkgIFlvc2hpYWtpIEppdHN1a2F3YSAgPFlvc2hpYWtpLkpp
dHN1a2F3YUBzb255LmNvbT4KIAogICAgICAgICBbQ29vcmRpbmF0ZWQgR3JhcGhpY3NdIERlYnVn
IFZpc3VhbHMgZG9uJ3QgaGlkZQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDIxNjUzOSkKKysr
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCShu
b25leGlzdGVudCkKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKLQotI2lmIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1SZWY8V2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNy
ZWF0ZShXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiYgZGF0YSkKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24oV1RGTW92ZShkYXRh
KSkpOwotfQotCi1XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OldlYkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbihXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiYgZGF0YSkKLSAgICA6
IG1fZGF0YShXVEZNb3ZlKGRhdGEpKQotewotfQotCi1XZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b246On5XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24oKQotewotfQotCi1ib29sIFdlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbjo6Y29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihyZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihtX2RhdGEuZGF0YS0+ZGF0YSgpKSArIG1fZGF0YS5jb25kaXRpb25zQXBw
bHlPbmx5VG9Eb21haW5PZmZzZXQpOwotfQotCi1jb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6REZBQnl0ZWNvZGUqIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dp
dGhvdXRDb25kaXRpb25zQnl0ZWNvZGUoKSBjb25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqPihtX2RhdGEu
ZGF0YS0+ZGF0YSgpKSArIG1fZGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9m
ZnNldDsKLX0KLQotdW5zaWduZWQgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpmaWx0ZXJz
V2l0aG91dENvbmRpdGlvbnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemU7Ci19Ci0KLWNvbnN0IFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uOjpmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFC
eXRlY29kZSo+KG1fZGF0YS5kYXRhLT5kYXRhKCkpICsgbV9kYXRhLmZpbHRlcnNXaXRoQ29uZGl0
aW9uc0J5dGVjb2RlT2Zmc2V0OwotfQotCi11bnNpZ25lZCBXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb246OmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9kYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZTsKLX0KLQot
Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb246OnRvcFVSTEZpbHRlcnNCeXRlY29kZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFC
eXRlY29kZSo+KG1fZGF0YS5kYXRhLT5kYXRhKCkpICsgbV9kYXRhLnRvcFVSTEZpbHRlcnNCeXRl
Y29kZU9mZnNldDsKLX0KLQotdW5zaWduZWQgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjp0
b3BVUkxGaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEu
dG9wVVJMRmlsdGVyc0J5dGVjb2RlU2l6ZTsKLX0KLQotY29uc3QgV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b246OmFjdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXplZEFjdGlvbkJ5dGUqPihtX2RhdGEuZGF0
YS0+ZGF0YSgpKSArIG1fZGF0YS5hY3Rpb25zT2Zmc2V0OwotfQotCi11bnNpZ25lZCBXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb246OmFjdGlvbnNMZW5ndGgoKSBjb25zdAotewotICAgIHJldHVy
biBtX2RhdGEuYWN0aW9uc1NpemU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDIx
NjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b24uaAkobm9uZXhpc3RlbnQpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0KLSNpbmNsdWRlICJXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50
RXh0ZW5zaW9uQ29tcGlsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NvbXBpbGVkQ29udGVudEV4
dGVuc2lvbi5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpD
b21waWxlZENvbnRlbnRFeHRlbnNpb24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGUoV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YSYmKTsKLSAgICB2aXJ0dWFsIH5XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24oKTsKLQot
ICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgZGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YTsgfQotCi1wcml2YXRlOgotICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbihX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiYpOwotCi0gICAgY29uc3QgV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNC
eXRlY29kZSgpIGNvbnN0IGZpbmFsOwotICAgIHVuc2lnbmVkIGZpbHRlcnNXaXRob3V0Q29uZGl0
aW9uc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3QgZmluYWw7Ci0gICAgY29uc3QgV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29k
ZSgpIGNvbnN0IGZpbmFsOwotICAgIHVuc2lnbmVkIGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVj
b2RlTGVuZ3RoKCkgY29uc3QgZmluYWw7Ci0gICAgY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkRGQUJ5dGVjb2RlKiB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGUoKSBjb25zdCBmaW5hbDsK
LSAgICB1bnNpZ25lZCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSBjb25zdCBmaW5hbDsK
LSAgICBib29sIGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbigpIGNvbnN0IGZpbmFsOwotICAg
IAotICAgIGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9u
Qnl0ZSogYWN0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIHVuc2lnbmVkIGFjdGlvbnNMZW5ndGgo
KSBjb25zdCBmaW5hbDsKLSAgICAKLSAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
IG1fZGF0YTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHAJKHJldmlzaW9uIDIx
NjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YS5oIgotCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLQotI2luY2x1ZGUgIkFy
Z3VtZW50Q29kZXJzLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGE6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0
Ci17Ci0gICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwotICAgIGRhdGEtPmNyZWF0ZUhh
bmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotICAgIGVu
Y29kZXIgPDwgaGFuZGxlOwotCi0gICAgZW5jb2RlciA8PCBhY3Rpb25zT2Zmc2V0OwotICAgIGVu
Y29kZXIgPDwgYWN0aW9uc1NpemU7Ci0gICAgZW5jb2RlciA8PCBmaWx0ZXJzV2l0aG91dENvbmRp
dGlvbnNCeXRlY29kZU9mZnNldDsKLSAgICBlbmNvZGVyIDw8IGZpbHRlcnNXaXRob3V0Q29uZGl0
aW9uc0J5dGVjb2RlU2l6ZTsKLSAgICBlbmNvZGVyIDw8IGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5
dGVjb2RlT2Zmc2V0OwotICAgIGVuY29kZXIgPDwgZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNv
ZGVTaXplOwotICAgIGVuY29kZXIgPDwgdG9wVVJMRmlsdGVyc0J5dGVjb2RlT2Zmc2V0OwotICAg
IGVuY29kZXIgPDwgdG9wVVJMRmlsdGVyc0J5dGVjb2RlU2l6ZTsKLX0KLQotYm9vbCBXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiBjb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhKQotewotICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb21waWxlZENv
bnRlbnRFeHRlbnNpb25EYXRhLmRhdGEgPSBTaGFyZWRNZW1vcnk6Om1hcChoYW5kbGUsIFNoYXJl
ZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmFjdGlvbnNPZmZzZXQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhLmFjdGlvbnNTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5maWx0ZXJzV2l0aG91
dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuZmlsdGVyc1dp
dGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5maWx0ZXJz
V2l0aENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuZmlsdGVy
c1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS50b3BVUkxG
aWx0ZXJzQnl0ZWNvZGVPZmZzZXQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLnRvcFVSTEZpbHRlcnNC
eXRlY29kZVNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oCShub25l
eGlzdGVudCkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLQotI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURh
dGEuaCIKLSNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgRGVjb2RlcjsKLWNsYXNzIEVuY29kZXI7Ci19Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhIHsKLXB1YmxpYzoKLSAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKCkgPSBk
ZWZhdWx0OwotCi0gICAgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YShSZWZQdHI8U2hh
cmVkTWVtb3J5PiYmIGRhdGEsIE5ldHdvcmtDYWNoZTo6RGF0YSBmaWxlRGF0YSwgdW5zaWduZWQg
Y29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0LCB1bnNpZ25lZCBhY3Rpb25zT2Zmc2V0
LCB1bnNpZ25lZCBhY3Rpb25zU2l6ZSwgdW5zaWduZWQgZmlsdGVyc1dpdGhvdXRDb25kaXRpb25z
Qnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2Rl
U2l6ZSwgdW5zaWduZWQgZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVPZmZzZXQsIHVuc2ln
bmVkIGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwgdW5zaWduZWQgdG9wVVJMRmls
dGVyc0J5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVTaXplKQot
ICAgICAgICA6IGRhdGEoV1RGTW92ZShkYXRhKSkKLSAgICAgICAgLCBmaWxlRGF0YShmaWxlRGF0
YSkKLSAgICAgICAgLCBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQoY29uZGl0aW9u
c0FwcGx5T25seVRvRG9tYWluT2Zmc2V0KQotICAgICAgICAsIGFjdGlvbnNPZmZzZXQoYWN0aW9u
c09mZnNldCkKLSAgICAgICAgLCBhY3Rpb25zU2l6ZShhY3Rpb25zU2l6ZSkKLSAgICAgICAgLCBm
aWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldChmaWx0ZXJzV2l0aG91dENvbmRp
dGlvbnNCeXRlY29kZU9mZnNldCkKLSAgICAgICAgLCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNC
eXRlY29kZVNpemUoZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplKQotICAgICAg
ICAsIGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0KGZpbHRlcnNXaXRoQ29uZGl0
aW9uc0J5dGVjb2RlT2Zmc2V0KQotICAgICAgICAsIGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVj
b2RlU2l6ZShmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUpCi0gICAgICAgICwgdG9w
VVJMRmlsdGVyc0J5dGVjb2RlT2Zmc2V0KHRvcFVSTEZpbHRlcnNCeXRlY29kZU9mZnNldCkKLSAg
ICAgICAgLCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVTaXplKHRvcFVSTEZpbHRlcnNCeXRlY29kZVNp
emUpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0
OwotICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkRlY29kZXImLCBXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb25EYXRhJik7Ci0KLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBkYXRhOwotICAg
IE5ldHdvcmtDYWNoZTo6RGF0YSBmaWxlRGF0YTsKLSAgICB1bnNpZ25lZCBjb25kaXRpb25zQXBw
bHlPbmx5VG9Eb21haW5PZmZzZXQgeyAwIH07Ci0gICAgdW5zaWduZWQgYWN0aW9uc09mZnNldCB7
IDAgfTsKLSAgICB1bnNpZ25lZCBhY3Rpb25zU2l6ZSB7IDAgfTsKLSAgICB1bnNpZ25lZCBmaWx0
ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCB7IDAgfTsKLSAgICB1bnNpZ25lZCBm
aWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUgeyAwIH07Ci0gICAgdW5zaWduZWQg
ZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVPZmZzZXQgeyAwIH07Ci0gICAgdW5zaWduZWQg
ZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplIHsgMCB9OwotICAgIHVuc2lnbmVkIHRv
cFVSTEZpbHRlcnNCeXRlY29kZU9mZnNldCB7IDAgfTsKLSAgICB1bnNpZ25lZCB0b3BVUkxGaWx0
ZXJzQnl0ZWNvZGVTaXplIHsgMCB9OwotfTsKLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENv
bnRlbnRSdWxlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmNwcAkocmV2aXNpb24gMjE2NTM5KQkoZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcDoyMTY1Mzkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCisKKyNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVm
PFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
OjpjcmVhdGUoV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYmIGRhdGEpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKFdURk1vdmUo
ZGF0YSkpKTsKK30KKworV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpXZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb24oV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYmIGRhdGEpCisg
ICAgOiBtX2RhdGEoV1RGTW92ZShkYXRhKSkKK3sKK30KKworV2ViQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uOjp+V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKCkKK3sKK30KKworYm9vbCBXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb246OmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuY29uZGl0aW9u
c0FwcGx5T25seVRvRG9tYWluT2Zmc2V0KTsKK30KKworY29uc3QgV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmZpbHRl
cnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKj4obV9k
YXRhLmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNv
ZGVPZmZzZXQ7Cit9CisKK3Vuc2lnbmVkIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Zmls
dGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdAoreworICAgIHJldHVy
biBtX2RhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplOworfQorCitjb25z
dCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqIFdlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGUoKSBjb25zdAorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
REZBQnl0ZWNvZGUqPihtX2RhdGEuZGF0YS0+ZGF0YSgpKSArIG1fZGF0YS5maWx0ZXJzV2l0aENv
bmRpdGlvbnNCeXRlY29kZU9mZnNldDsKK30KKwordW5zaWduZWQgV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uOjpmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemU7Cit9
CisKK2NvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogV2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uOjp0b3BVUkxGaWx0ZXJzQnl0ZWNvZGUoKSBjb25zdAorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
REZBQnl0ZWNvZGUqPihtX2RhdGEuZGF0YS0+ZGF0YSgpKSArIG1fZGF0YS50b3BVUkxGaWx0ZXJz
Qnl0ZWNvZGVPZmZzZXQ7Cit9CisKK3Vuc2lnbmVkIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bjo6dG9wVVJMRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9k
YXRhLnRvcFVSTEZpbHRlcnNCeXRlY29kZVNpemU7Cit9CisKK2NvbnN0IFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZSogV2ViQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uOjphY3Rpb25zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlKj4obV9kYXRh
LmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuYWN0aW9uc09mZnNldDsKK30KKwordW5zaWduZWQgV2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjphY3Rpb25zTGVuZ3RoKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9kYXRhLmFjdGlvbnNTaXplOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5jcHAJKHJldmlz
aW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRS
dWxlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDY3ICsyNCw2NyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24u
aCIKKyNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5oIgogCiAjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVJlZjxXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb24+IFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRl
KFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmJiBkYXRhKQorUmVmPFdlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0PiBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6Y3JlYXRlKFdlYkNv
bXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YSYmIGRhdGEpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKFdURk1vdmUoZGF0YSkpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdChXVEZNb3ZlKGRh
dGEpKSk7CiB9CiAKLVdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6V2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uKFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmJiBkYXRhKQorV2Vi
Q29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0KFdlYkNv
bXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YSYmIGRhdGEpCiAgICAgOiBtX2RhdGEoV1RGTW92ZShk
YXRhKSkKIHsKIH0KIAotV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjp+V2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uKCkKK1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0Ojp+V2ViQ29tcGls
ZWRDb250ZW50UnVsZUxpc3QoKQogewogfQogCi1ib29sIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbjo6Y29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluKCkgY29uc3QKK2Jvb2wgV2ViQ29tcGls
ZWRDb250ZW50UnVsZUxpc3Q6OmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4ocmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4obV9kYXRhLmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuY29uZGl0aW9uc0FwcGx5
T25seVRvRG9tYWluT2Zmc2V0KTsKIH0KIAotY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkRGQUJ5dGVjb2RlKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmZpbHRlcnNXaXRo
b3V0Q29uZGl0aW9uc0J5dGVjb2RlKCkgY29uc3QKK2NvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkFCeXRlY29kZSogV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OmZpbHRlcnNX
aXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlKCkgY29uc3QKIHsKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKj4obV9kYXRh
LmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVP
ZmZzZXQ7CiB9CiAKLXVuc2lnbmVkIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6ZmlsdGVy
c1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdAordW5zaWduZWQgV2ViQ29t
cGlsZWRDb250ZW50UnVsZUxpc3Q6OmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlTGVu
Z3RoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9u
c0J5dGVjb2RlU2l6ZTsKIH0KIAotY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRG
QUJ5dGVjb2RlKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmZpbHRlcnNXaXRoQ29uZGl0
aW9uc0J5dGVjb2RlKCkgY29uc3QKK2NvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkFCeXRlY29kZSogV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OmZpbHRlcnNXaXRoQ29uZGl0
aW9uc0J5dGVjb2RlKCkgY29uc3QKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKj4obV9kYXRhLmRhdGEtPmRhdGEo
KSkgKyBtX2RhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVPZmZzZXQ7CiB9CiAKLXVu
c2lnbmVkIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhDb25kaXRpb25z
Qnl0ZWNvZGVMZW5ndGgoKSBjb25zdAordW5zaWduZWQgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxp
c3Q6OmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9kYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZTsKIH0KIAotY29u
c3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBXZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb246OnRvcFVSTEZpbHRlcnNCeXRlY29kZSgpIGNvbnN0Citjb25zdCBXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqIFdlYkNvbXBpbGVkQ29udGVudFJ1
bGVMaXN0Ojp0b3BVUkxGaWx0ZXJzQnl0ZWNvZGUoKSBjb25zdAogewogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqPiht
X2RhdGEuZGF0YS0+ZGF0YSgpKSArIG1fZGF0YS50b3BVUkxGaWx0ZXJzQnl0ZWNvZGVPZmZzZXQ7
CiB9CiAKLXVuc2lnbmVkIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6dG9wVVJMRmlsdGVy
c0J5dGVjb2RlTGVuZ3RoKCkgY29uc3QKK3Vuc2lnbmVkIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0Ojp0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSBjb25zdAogewogICAgIHJldHVybiBt
X2RhdGEudG9wVVJMRmlsdGVyc0J5dGVjb2RlU2l6ZTsKIH0KIAotY29uc3QgV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBXZWJDb21waWxlZENvbnRlbnRF
eHRlbnNpb246OmFjdGlvbnMoKSBjb25zdAorY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6YWN0
aW9ucygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZSo+KG1fZGF0YS5kYXRhLT5kYXRh
KCkpICsgbV9kYXRhLmFjdGlvbnNPZmZzZXQ7CiB9CiAKLXVuc2lnbmVkIFdlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbjo6YWN0aW9uc0xlbmd0aCgpIGNvbnN0Cit1bnNpZ25lZCBXZWJDb21waWxl
ZENvbnRlbnRSdWxlTGlzdDo6YWN0aW9uc0xlbmd0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
ZGF0YS5hY3Rpb25zU2l6ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21w
aWxlZENvbnRlbnRSdWxlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5oCShyZXZpc2lvbiAyMTY1MzkpCShmcm9tIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaDoyMTY1Mzkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVu
c2lvbkNvbXBpbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db21waWxlZENvbnRlbnRFeHRlbnNp
b24uaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbiBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbj4gY3JlYXRlKFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEm
Jik7CisgICAgdmlydHVhbCB+V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKCk7CisKKyAgICBX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGE7IH0KKworcHJpdmF0ZToKKyAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24oV2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYmKTsKKworICAgIGNvbnN0IFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNv
ZGUoKSBjb25zdCBmaW5hbDsKKyAgICB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNC
eXRlY29kZUxlbmd0aCgpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpERkFCeXRlY29kZSogZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGUoKSBj
b25zdCBmaW5hbDsKKyAgICB1bnNpZ25lZCBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZUxl
bmd0aCgpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpERkFCeXRlY29kZSogdG9wVVJMRmlsdGVyc0J5dGVjb2RlKCkgY29uc3QgZmluYWw7CisgICAg
dW5zaWduZWQgdG9wVVJMRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3QgZmluYWw7CisgICAg
Ym9vbCBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4oKSBjb25zdCBmaW5hbDsKKyAgICAKKyAg
ICBjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXplZEFjdGlvbkJ5dGUq
IGFjdGlvbnMoKSBjb25zdCBmaW5hbDsKKyAgICB1bnNpZ25lZCBhY3Rpb25zTGVuZ3RoKCkgY29u
c3QgZmluYWw7CisgICAgCisgICAgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBtX2Rh
dGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRD
b250ZW50UnVsZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29tcGlsZWRDb250ZW50UnVsZUxpc3QuaAkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDIxICsyNywyMSBAQAogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAot
I2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuaCIKKyNpbmNsdWRlICJX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRl
bnRFeHRlbnNpb25Db21waWxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBXZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb24gZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiB7CitjbGFzcyBXZWJDb21waWxlZENvbnRlbnRSdWxl
TGlzdCBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbj4gY3JlYXRlKFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmJik7
Ci0gICAgdmlydHVhbCB+V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKCk7CisgICAgc3RhdGlj
IFJlZjxXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdD4gY3JlYXRlKFdlYkNvbXBpbGVkQ29udGVu
dFJ1bGVMaXN0RGF0YSYmKTsKKyAgICB2aXJ0dWFsIH5XZWJDb21waWxlZENvbnRlbnRSdWxlTGlz
dCgpOwogCi0gICAgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhOyB9CisgICAgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhIGRh
dGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIAogcHJpdmF0ZToKLSAgICBXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24oV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYmKTsKKyAg
ICBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdChXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERh
dGEmJik7CiAKICAgICBjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNv
ZGUqIGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlKCkgY29uc3QgZmluYWw7CiAgICAg
dW5zaWduZWQgZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdCBm
aW5hbDsKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMoKSBjb25zdCBmaW5h
bDsKICAgICB1bnNpZ25lZCBhY3Rpb25zTGVuZ3RoKCkgY29uc3QgZmluYWw7CiAgICAgCi0gICAg
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBtX2RhdGE7CisgICAgV2ViQ29tcGlsZWRD
b250ZW50UnVsZUxpc3REYXRhIG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29u
dGVudFJ1bGVMaXN0RGF0YS5jcHAJKHJldmlzaW9uIDIxNjUzOSkJKGZyb20gU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuY3BwOjIxNjUzOSkKKysr
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oIgor
CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29k
ZXJzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbkRhdGE6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAg
U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAgIGRhdGEtPmNyZWF0ZUhhbmRsZShoYW5k
bGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAgIGVuY29kZXIgPDwg
aGFuZGxlOworCisgICAgZW5jb2RlciA8PCBhY3Rpb25zT2Zmc2V0OworICAgIGVuY29kZXIgPDwg
YWN0aW9uc1NpemU7CisgICAgZW5jb2RlciA8PCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRl
Y29kZU9mZnNldDsKKyAgICBlbmNvZGVyIDw8IGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVj
b2RlU2l6ZTsKKyAgICBlbmNvZGVyIDw8IGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlT2Zm
c2V0OworICAgIGVuY29kZXIgPDwgZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplOwor
ICAgIGVuY29kZXIgPDwgdG9wVVJMRmlsdGVyc0J5dGVjb2RlT2Zmc2V0OworICAgIGVuY29kZXIg
PDwgdG9wVVJMRmlsdGVyc0J5dGVjb2RlU2l6ZTsKK30KKworYm9vbCBXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb25EYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhJiBjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKQorewor
ICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhLmRhdGEgPSBTaGFyZWRNZW1vcnk6Om1hcChoYW5kbGUsIFNoYXJlZE1lbW9yeTo6
UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhLmFjdGlvbnNPZmZzZXQpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
LmFjdGlvbnNTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlv
bnNCeXRlY29kZU9mZnNldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuZmlsdGVyc1dpdGhvdXRDb25k
aXRpb25zQnl0ZWNvZGVTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5maWx0ZXJzV2l0aENvbmRp
dGlvbnNCeXRlY29kZU9mZnNldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuZmlsdGVyc1dpdGhDb25k
aXRpb25zQnl0ZWNvZGVTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS50b3BVUkxGaWx0ZXJzQnl0
ZWNvZGVPZmZzZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLnRvcFVSTEZpbHRlcnNCeXRlY29kZVNp
emUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0RGF0YS5jcHAJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuaCIKKyNpbmNsdWRlICJXZWJDb21w
aWxlZENvbnRlbnRSdWxlTGlzdERhdGEuaCIKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCiAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgV2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YTo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKK3ZvaWQgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhOjplbmNvZGUoSVBD
OjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhh
bmRsZTsKICAgICBkYXRhLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3Rl
Y3Rpb246OlJlYWRPbmx5KTsKQEAgLTQ4LDI4ICs0OCwyOCBAQCB2b2lkIFdlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGE6OmVuCiAgICAgZW5jb2RlciA8PCB0b3BVUkxGaWx0ZXJzQnl0ZWNv
ZGVTaXplOwogfQogCi1ib29sIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE6OmRlY29k
ZShJUEM6OkRlY29kZXImIGRlY29kZXIsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEm
IGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEpCitib29sIFdlYkNvbXBpbGVkQ29udGVudFJ1
bGVMaXN0RGF0YTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgV2ViQ29tcGlsZWRDb250
ZW50UnVsZUxpc3REYXRhJiBjb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEpCiB7CiAgICAgU2hh
cmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFuZGxl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRh
dGEuZGF0YSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0
aW9uOjpSZWFkT25seSk7CisgICAgY29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmRhdGEgPSBT
aGFyZWRNZW1vcnk6Om1hcChoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9u
bHkpOwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhLmFjdGlvbnNPZmZzZXQpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250
ZW50UnVsZUxpc3REYXRhLmFjdGlvbnNPZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmFjdGlv
bnNTaXplKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudFJ1bGVMaXN0
RGF0YS5hY3Rpb25zU2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuZmlsdGVyc1dpdGhvdXRDb25k
aXRpb25zQnl0ZWNvZGVPZmZzZXQpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRD
b250ZW50UnVsZUxpc3REYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNp
emUpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRh
LmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRh
dGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVPZmZzZXQpKQorICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoY29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9u
c0J5dGVjb2RlT2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlv
bnNCeXRlY29kZVNpemUpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50
UnVsZUxpc3REYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbkRhdGEudG9wVVJMRmlsdGVyc0J5dGVjb2RlT2Zmc2V0KSkKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS50b3BVUkxGaWx0ZXJzQnl0ZWNv
ZGVPZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLnRvcFVSTEZpbHRlcnNCeXRlY29kZVNpemUp
KQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLnRv
cFVSTEZpbHRlcnNCeXRlY29kZVNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRl
bnRSdWxlTGlzdERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmgJKHJldmlzaW9uIDIxNjUzOSkJKGZyb20gU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuaDoyMTY1
MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3RE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIk5l
dHdvcmtDYWNoZURhdGEuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgRGVjb2RlcjsKK2NsYXNzIEVu
Y29kZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb25EYXRhIHsKK3B1YmxpYzoKKyAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhKCkgPSBkZWZhdWx0OworCisgICAgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0
YShSZWZQdHI8U2hhcmVkTWVtb3J5PiYmIGRhdGEsIE5ldHdvcmtDYWNoZTo6RGF0YSBmaWxlRGF0
YSwgdW5zaWduZWQgY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0LCB1bnNpZ25lZCBh
Y3Rpb25zT2Zmc2V0LCB1bnNpZ25lZCBhY3Rpb25zU2l6ZSwgdW5zaWduZWQgZmlsdGVyc1dpdGhv
dXRDb25kaXRpb25zQnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGZpbHRlcnNXaXRob3V0Q29uZGl0
aW9uc0J5dGVjb2RlU2l6ZSwgdW5zaWduZWQgZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVP
ZmZzZXQsIHVuc2lnbmVkIGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwgdW5zaWdu
ZWQgdG9wVVJMRmlsdGVyc0J5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCB0b3BVUkxGaWx0ZXJzQnl0
ZWNvZGVTaXplKQorICAgICAgICA6IGRhdGEoV1RGTW92ZShkYXRhKSkKKyAgICAgICAgLCBmaWxl
RGF0YShmaWxlRGF0YSkKKyAgICAgICAgLCBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZz
ZXQoY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0KQorICAgICAgICAsIGFjdGlvbnNP
ZmZzZXQoYWN0aW9uc09mZnNldCkKKyAgICAgICAgLCBhY3Rpb25zU2l6ZShhY3Rpb25zU2l6ZSkK
KyAgICAgICAgLCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldChmaWx0ZXJz
V2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBmaWx0ZXJzV2l0aG91
dENvbmRpdGlvbnNCeXRlY29kZVNpemUoZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVT
aXplKQorICAgICAgICAsIGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0KGZpbHRl
cnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0KQorICAgICAgICAsIGZpbHRlcnNXaXRoQ29u
ZGl0aW9uc0J5dGVjb2RlU2l6ZShmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUpCisg
ICAgICAgICwgdG9wVVJMRmlsdGVyc0J5dGVjb2RlT2Zmc2V0KHRvcFVSTEZpbHRlcnNCeXRlY29k
ZU9mZnNldCkKKyAgICAgICAgLCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVTaXplKHRvcFVSTEZpbHRl
cnNCeXRlY29kZVNpemUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZW5jb2RlKElQQzo6RW5j
b2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkRlY29kZXImLCBXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJik7CisKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5
PiBkYXRhOworICAgIE5ldHdvcmtDYWNoZTo6RGF0YSBmaWxlRGF0YTsKKyAgICB1bnNpZ25lZCBj
b25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQgeyAwIH07CisgICAgdW5zaWduZWQgYWN0
aW9uc09mZnNldCB7IDAgfTsKKyAgICB1bnNpZ25lZCBhY3Rpb25zU2l6ZSB7IDAgfTsKKyAgICB1
bnNpZ25lZCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCB7IDAgfTsKKyAg
ICB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUgeyAwIH07Cisg
ICAgdW5zaWduZWQgZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVPZmZzZXQgeyAwIH07Cisg
ICAgdW5zaWduZWQgZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplIHsgMCB9OworICAg
IHVuc2lnbmVkIHRvcFVSTEZpbHRlcnNCeXRlY29kZU9mZnNldCB7IDAgfTsKKyAgICB1bnNpZ25l
ZCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVTaXplIHsgMCB9OworfTsKKworfQorCisjZW5kaWYgLy8g
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmgJKHJldmlzaW9uIDIx
NjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlz
dERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDExIEBAIGNsYXNzIEVuY29kZXI7
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhIHsKK2NsYXNzIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YSB7CiBwdWJsaWM6
Ci0gICAgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSgpID0gZGVmYXVsdDsKKyAgICBX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEoKSA9IGRlZmF1bHQ7CiAKLSAgICBXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKFJlZlB0cjxTaGFyZWRNZW1vcnk+JiYgZGF0YSwgTmV0
d29ya0NhY2hlOjpEYXRhIGZpbGVEYXRhLCB1bnNpZ25lZCBjb25kaXRpb25zQXBwbHlPbmx5VG9E
b21haW5PZmZzZXQsIHVuc2lnbmVkIGFjdGlvbnNPZmZzZXQsIHVuc2lnbmVkIGFjdGlvbnNTaXpl
LCB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCwgdW5zaWdu
ZWQgZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplLCB1bnNpZ25lZCBmaWx0ZXJz
V2l0aENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCwgdW5zaWduZWQgZmlsdGVyc1dpdGhDb25kaXRp
b25zQnl0ZWNvZGVTaXplLCB1bnNpZ25lZCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVPZmZzZXQsIHVu
c2lnbmVkIHRvcFVSTEZpbHRlcnNCeXRlY29kZVNpemUpCisgICAgV2ViQ29tcGlsZWRDb250ZW50
UnVsZUxpc3REYXRhKFJlZlB0cjxTaGFyZWRNZW1vcnk+JiYgZGF0YSwgTmV0d29ya0NhY2hlOjpE
YXRhIGZpbGVEYXRhLCB1bnNpZ25lZCBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQs
IHVuc2lnbmVkIGFjdGlvbnNPZmZzZXQsIHVuc2lnbmVkIGFjdGlvbnNTaXplLCB1bnNpZ25lZCBm
aWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCwgdW5zaWduZWQgZmlsdGVyc1dp
dGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplLCB1bnNpZ25lZCBmaWx0ZXJzV2l0aENvbmRpdGlv
bnNCeXRlY29kZU9mZnNldCwgdW5zaWduZWQgZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVT
aXplLCB1bnNpZ25lZCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIHRvcFVS
TEZpbHRlcnNCeXRlY29kZVNpemUpCiAgICAgICAgIDogZGF0YShXVEZNb3ZlKGRhdGEpKQogICAg
ICAgICAsIGZpbGVEYXRhKGZpbGVEYXRhKQogICAgICAgICAsIGNvbmRpdGlvbnNBcHBseU9ubHlU
b0RvbWFpbk9mZnNldChjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQpCkBAIC01OCw3
ICs1OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXIm
KSBjb25zdDsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpEZWNvZGVyJiwgV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkRl
Y29kZXImLCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEmKTsKIAogICAgIFJlZlB0cjxT
aGFyZWRNZW1vcnk+IGRhdGE7CiAgICAgTmV0d29ya0NhY2hlOjpEYXRhIGZpbGVEYXRhOwpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcAkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcg
QEAgdm9pZCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSQogICAgIGVuY29kZXIg
PDwgdXNlclN0eWxlU2hlZXRzOwogICAgIGVuY29kZXIgPDwgbWVzc2FnZUhhbmRsZXJzOwogI2lm
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgZW5jb2RlciA8PCBjb250ZW50RXh0ZW5z
aW9uczsKKyAgICBlbmNvZGVyIDw8IGNvbnRlbnRSdWxlTGlzdHM7CiAjZW5kaWYKIH0KIApAQCAt
MjUzLDcgKzI1Myw3IEBAIGJvb2wgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKEkK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJzKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmNvbnRlbnRFeHRlbnNpb25zKSkKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMuY29udGVudFJ1bGVMaXN0cykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oCShyZXZpc2lv
biAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiRHJhd2lu
Z0FyZWFJbmZvLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUgIlNl
c3Npb25TdGF0ZS5oIgotI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEu
aCIKKyNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuaCIKICNpbmNsdWRl
ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXBEYXRhLmgi
CiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXNTdG9yZS5oIgpAQCAtMTY0LDcgKzE2NCw3IEBAIHN0
cnVjdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBWZWN0b3I8V2ViVXNlclN0eWxl
U2hlZXREYXRhPiB1c2VyU3R5bGVTaGVldHM7CiAgICAgVmVjdG9yPFdlYlNjcmlwdE1lc3NhZ2VI
YW5kbGVyRGF0YT4gbWVzc2FnZUhhbmRsZXJzOwogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGE+PiBjb250ZW50RXh0ZW5zaW9uczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmlu
ZywgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4gY29udGVudFJ1bGVMaXN0czsKICNl
bmRpZgogfTsKIApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSU9iamVjdC5oCShyZXZp
c2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSU9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDMsOCArMTAzLDggQEAgcHVibGljOgogICAgICAgICBCYWNrRm9y
d2FyZExpc3RJdGVtLAogICAgICAgICBDYWNoZU1hbmFnZXIsCiAgICAgICAgIENvbG9yUGlja2Vy
UmVzdWx0TGlzdGVuZXIsCi0gICAgICAgIENvbnRlbnRFeHRlbnNpb24sCi0gICAgICAgIENvbnRl
bnRFeHRlbnNpb25TdG9yZSwKKyAgICAgICAgQ29udGVudFJ1bGVMaXN0LAorICAgICAgICBDb250
ZW50UnVsZUxpc3RTdG9yZSwKICAgICAgICAgQ29udGV4dE1lbnVMaXN0ZW5lciwKICAgICAgICAg
Q29va2llTWFuYWdlciwKICAgICAgICAgRG93bmxvYWQsCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQVBJL0NvY29hL1dlYktpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUEkvQ29jb2EvV2ViS2l0LmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9BUEkvQ29jb2EvV2ViS2l0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1
LDggQEAKIAogI2ltcG9ydCA8V2ViS2l0L1dLQmFja0ZvcndhcmRMaXN0Lmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tCYWNrRm9yd2FyZExpc3RJdGVtLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tDb250ZW50
RXh0ZW5zaW9uLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XS0NvbnRlbnRSdWxlTGlzdC5oPgorI2ltcG9ydCA8V2ViS2l0L1dL
Q29udGVudFJ1bGVMaXN0U3RvcmUuaD4KICNpbXBvcnQgPFdlYktpdC9XS0Vycm9yLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tGcmFtZUluZm8u
aD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0RlcHJlY2F0ZWRGdW5jdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0RlcHJl
Y2F0ZWRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQVBJL2MvV0tEZXByZWNhdGVkRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlICJBUElDb250
ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVMaXN0LmgiCiAjaW5jbHVk
ZSAiQVBJRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldL
QXJyYXkuaCIKQEAgLTYwLDcgKzYwLDcgQEAgV0tTdHJpbmdSZWYgV0tQYWdlR3JvdXBDb3B5SWRl
bnRpZmllcihXSwogdm9pZCBXS1BhZ2VHcm91cEFkZFVzZXJDb250ZW50RmlsdGVyKFdLUGFnZUdy
b3VwUmVmIHBhZ2VHcm91cFJlZiwgV0tVc2VyQ29udGVudEZpbHRlclJlZiBjb250ZW50RmlsdGVy
UmVmKQogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgdG9JbXBsKHBhZ2VH
cm91cFJlZiktPnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZENvbnRlbnRFeHRlbnNpb24oKnRv
SW1wbChjb250ZW50RmlsdGVyUmVmKSk7CisgICAgdG9JbXBsKHBhZ2VHcm91cFJlZiktPnVzZXJD
b250ZW50Q29udHJvbGxlcigpLmFkZENvbnRlbnRSdWxlTGlzdCgqdG9JbXBsKGNvbnRlbnRGaWx0
ZXJSZWYpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2VHcm91cFJlZik7CiAgICAgVU5V
U0VEX1BBUkFNKGNvbnRlbnRGaWx0ZXJSZWYpOwpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFdLUGFn
ZUdyb3VwQWRkVXNlckNvbnRlbnRGaWx0ZXIoV0tQCiB2b2lkIFdLUGFnZUdyb3VwUmVtb3ZlVXNl
ckNvbnRlbnRGaWx0ZXIoV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS1N0cmluZ1JlZiBj
b250ZW50RmlsdGVyTmFtZVJlZikKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQot
ICAgIHRvSW1wbChwYWdlR3JvdXBSZWYpLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVD
b250ZW50RXh0ZW5zaW9uKHRvV1RGU3RyaW5nKGNvbnRlbnRGaWx0ZXJOYW1lUmVmKSk7CisgICAg
dG9JbXBsKHBhZ2VHcm91cFJlZiktPnVzZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZUNvbnRl
bnRSdWxlTGlzdCh0b1dURlN0cmluZyhjb250ZW50RmlsdGVyTmFtZVJlZikpOwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0ocGFnZUdyb3VwUmVmKTsKICAgICBVTlVTRURfUEFSQU0oY29udGVudEZp
bHRlck5hbWVSZWYpOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVj
dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2EvQVBJT2JqZWN0
Lm1tCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2EvQVBJ
T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAjaW1wb3J0ICJXS0Jy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tCcm93c2luZ0Nv
bnRleHRHcm91cEludGVybmFsLmgiCiAjaW1wb3J0ICJXS0Nvbm5lY3Rpb25JbnRlcm5hbC5oIgot
I2ltcG9ydCAiV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldLQ29udGVu
dEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVudFJ1bGVMaXN0SW50
ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVudFJ1bGVMaXN0U3RvcmVJbnRlcm5hbC5oIgogI2lt
cG9ydCAiV0tGcmFtZUluZm9JbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tIVFRQQ29va2llU3RvcmVJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiV0tOU0FycmF5LmgiCkBAIC0yNDYsMTIgKzI0NiwxMiBAQCB2
b2lkKiBPYmplY3Q6Om5ld09iamVjdChzaXplX3Qgc2l6ZSwgVHlwCiAgICAgICAgIHdyYXBwZXIg
PSBbV0tVc2VyQ29udGVudENvbnRyb2xsZXIgYWxsb2NdOwogICAgICAgICBicmVhazsKIAotICAg
IGNhc2UgVHlwZTo6Q29udGVudEV4dGVuc2lvbjoKLSAgICAgICAgd3JhcHBlciA9IFtXS0NvbnRl
bnRFeHRlbnNpb24gYWxsb2NdOworICAgIGNhc2UgVHlwZTo6Q29udGVudFJ1bGVMaXN0OgorICAg
ICAgICB3cmFwcGVyID0gW1dLQ29udGVudFJ1bGVMaXN0IGFsbG9jXTsKICAgICAgICAgYnJlYWs7
CiAKLSAgICBjYXNlIFR5cGU6OkNvbnRlbnRFeHRlbnNpb25TdG9yZToKLSAgICAgICAgd3JhcHBl
ciA9IFtXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBhbGxvY107CisgICAgY2FzZSBUeXBlOjpDb250
ZW50UnVsZUxpc3RTdG9yZToKKyAgICAgICAgd3JhcHBlciA9IFtXS0NvbnRlbnRSdWxlTGlzdFN0
b3JlIGFsbG9jXTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFR5cGU6OlVzZXJDb250ZW50
V29ybGQ6CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZUdyb3VwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZUdyb3VwLmNwcAko
cmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VHcm91
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywxMCBAQAogI2luY2x1ZGUgIldlYlBh
Z2VHcm91cC5oIgogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKLSNpbmNsdWRlICJBUElDb250ZW50
RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVMaXN0LmgiCiAjaW5jbHVkZSAi
QVBJVXNlclNjcmlwdC5oIgogI2luY2x1ZGUgIkFQSVVzZXJTdHlsZVNoZWV0LmgiCi0jaW5jbHVk
ZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRD
b250ZW50UnVsZUxpc3QuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29u
dGVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFQ
SUNvbnRlbnRFeHRlbnNpb24uaCIKLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0K
LSNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKLQotbmFtZXNwYWNlIEFQ
SSB7Ci0KLUNvbnRlbnRFeHRlbnNpb246OkNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJp
bmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4mJiBjb250
ZW50RXh0ZW5zaW9uKQotICAgIDogbV9uYW1lKG5hbWUpCi0gICAgLCBtX2NvbXBpbGVkRXh0ZW5z
aW9uKFdURk1vdmUoY29udGVudEV4dGVuc2lvbikpCi17Ci19Ci0KLUNvbnRlbnRFeHRlbnNpb246
On5Db250ZW50RXh0ZW5zaW9uKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgQVBJCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDIxNjUz
OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5o
CShub25leGlzdGVudCkKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uOwotfQotCi1uYW1lc3BhY2UgQVBJIHsKLQotY2xhc3MgQ29udGVudEV4dGVuc2lvbiBmaW5h
bCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6VHlwZTo6Q29udGVudEV4dGVuc2lvbj4gewot
cHVibGljOgotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgc3RhdGljIFJlZjxD
b250ZW50RXh0ZW5zaW9uPiBjcmVhdGUoY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJL
aXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4mJiBjb250ZW50RXh0ZW5zaW9uKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29udGVudEV4dGVuc2lvbihuYW1lLCBX
VEZNb3ZlKGNvbnRlbnRFeHRlbnNpb24pKSk7Ci0gICAgfQotCi0gICAgQ29udGVudEV4dGVuc2lv
bihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uPiYmKTsKLSAgICB2aXJ0dWFsIH5Db250ZW50RXh0ZW5zaW9uKCk7Ci0KLSAgICBj
b25zdCBXVEY6OlN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIGNv
bnN0IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZEV4dGVuc2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsZWRFeHRlbnNpb24uZ2V0KCk7IH0KLQotcHJpdmF0
ZToKLSAgICBXVEY6OlN0cmluZyBtX25hbWU7Ci0gICAgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uPiBtX2NvbXBpbGVkRXh0ZW5zaW9uOwotI2VuZGlmIC8vIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCi19OwotCi19IC8vIG5hbWVzcGFjZSBBUEkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNp
b25TdG9yZS5jcHAJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDUz
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFQ
SUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgotCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKLQotI2luY2x1ZGUgIkFQSUNvbnRlbnRFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVEYXRhLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3RlbS5oIgotI2luY2x1
ZGUgIlNoYXJlZE1lbW9yeS5oIgotI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bi5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaD4KLSNpbmNsdWRlIDxzdHJpbmc+
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3Au
aD4KLSNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+Ci0jaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNl
L0RlY29kZXIuaD4KLSNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvRW5jb2Rlci5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OjpOZXR3b3JrQ2FjaGU7Ci0KLW5hbWVzcGFjZSBBUEkgewotCi1D
b250ZW50RXh0ZW5zaW9uU3RvcmUmIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3Jl
KCkKLXsKLSAgICBzdGF0aWMgQ29udGVudEV4dGVuc2lvblN0b3JlKiBkZWZhdWx0U3RvcmUgPSBh
ZG9wdFJlZihuZXcgQ29udGVudEV4dGVuc2lvblN0b3JlKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJu
ICpkZWZhdWx0U3RvcmU7Ci19Ci0KLVJlZjxDb250ZW50RXh0ZW5zaW9uU3RvcmU+IENvbnRlbnRF
eHRlbnNpb25TdG9yZTo6c3RvcmVXaXRoUGF0aChjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRo
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbnRlbnRFeHRlbnNpb25TdG9yZShzdG9y
ZVBhdGgpKTsKLX0KLQotQ29udGVudEV4dGVuc2lvblN0b3JlOjpDb250ZW50RXh0ZW5zaW9uU3Rv
cmUoKQotICAgIDogQ29udGVudEV4dGVuc2lvblN0b3JlKGRlZmF1bHRTdG9yZVBhdGgoKSkKLXsK
LX0KLQotQ29udGVudEV4dGVuc2lvblN0b3JlOjpDb250ZW50RXh0ZW5zaW9uU3RvcmUoY29uc3Qg
V1RGOjpTdHJpbmcmIHN0b3JlUGF0aCkKLSAgICA6IG1fc3RvcmVQYXRoKHN0b3JlUGF0aCkKLSAg
ICAsIG1fY29tcGlsZVF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJDb250ZW50RXh0ZW5zaW9uU3Rv
cmUgQ29tcGlsZSBRdWV1ZSIsIFdvcmtRdWV1ZTo6VHlwZTo6Q29uY3VycmVudCkpCi0gICAgLCBt
X3JlYWRRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiQ29udGVudEV4dGVuc2lvblN0b3JlIFJlYWQg
UXVldWUiKSkKLSAgICAsIG1fcmVtb3ZlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIkNvbnRlbnRF
eHRlbnNpb25TdG9yZSBSZW1vdmUgUXVldWUiKSkKLXsKLSAgICBXZWJDb3JlOjptYWtlQWxsRGly
ZWN0b3JpZXMoc3RvcmVQYXRoKTsKLX0KLQotQ29udGVudEV4dGVuc2lvblN0b3JlOjp+Q29udGVu
dEV4dGVuc2lvblN0b3JlKCkKLXsKLX0KLQotc3RhdGljIGNvbnN0IFN0cmluZyYgY29uc3RydWN0
ZWRQYXRoUHJlZml4KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBwcmVm
aXgoIkNvbnRlbnRFeHRlbnNpb24tIik7Ci0gICAgcmV0dXJuIHByZWZpeDsKLX0KLQotc3RhdGlj
IGNvbnN0IFN0cmluZyBjb25zdHJ1Y3RlZFBhdGhGaWx0ZXIoKQotewotICAgIHJldHVybiBtYWtl
U3RyaW5nKGNvbnN0cnVjdGVkUGF0aFByZWZpeCgpLCAnKicpOwotfQotCi1zdGF0aWMgU3RyaW5n
IGNvbnN0cnVjdGVkUGF0aChjb25zdCBTdHJpbmcmIGJhc2UsIGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllcikKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJh
c2UsIG1ha2VTdHJpbmcoY29uc3RydWN0ZWRQYXRoUHJlZml4KCksIFdlYkNvcmU6OmVuY29kZUZv
ckZpbGVOYW1lKGlkZW50aWZpZXIpKSk7Ci19Ci0KLS8vIFRoZSBzaXplIGFuZCBvZmZzZXQgb2Yg
dGhlIGRlbnNlbHkgcGFja2VkIGJ5dGVzIGluIHRoZSBmaWxlLCBub3Qgc2l6ZW9mIGFuZCBvZmZz
ZXRvZiwgd2hpY2ggd291bGQKLS8vIHJlcHJlc2VudCB0aGUgc2l6ZSBhbmQgb2Zmc2V0IG9mIHRo
ZSBzdHJ1Y3R1cmUgaW4gbWVtb3J5LCBwb3NzaWJseSB3aXRoIGNvbXBpbGVyLWFkZGVkIHBhZGRp
bmcuCi1jb25zdCBzaXplX3QgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplID0gMiAqIHNp
emVvZih1aW50MzJfdCkgKyA1ICogc2l6ZW9mKHVpbnQ2NF90KTsKLWNvbnN0IHNpemVfdCBDb25k
aXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQgPSBzaXplb2YodWludDMyX3QpICsgNSAqIHNp
emVvZih1aW50NjRfdCk7Ci0KLXN0cnVjdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgewotICAg
IHVpbnQzMl90IHZlcnNpb24geyBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkN1cnJlbnRDb250ZW50
RXh0ZW5zaW9uRmlsZVZlcnNpb24gfTsKLSAgICB1aW50NjRfdCBzb3VyY2VTaXplIHsgMCB9Owot
ICAgIHVpbnQ2NF90IGFjdGlvbnNTaXplIHsgMCB9OwotICAgIHVpbnQ2NF90IGZpbHRlcnNXaXRo
b3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSB7IDAgfTsKLSAgICB1aW50NjRfdCBmaWx0ZXJzV2l0
aENvbmRpdGlvbnNCeXRlY29kZVNpemUgeyAwIH07Ci0gICAgdWludDY0X3QgY29uZGl0aW9uZWRG
aWx0ZXJzQnl0ZWNvZGVTaXplIHsgMCB9OwotICAgIHVpbnQzMl90IGNvbmRpdGlvbnNBcHBseU9u
bHlUb0RvbWFpbiB7IGZhbHNlIH07Ci0gICAgCi0gICAgc2l6ZV90IGZpbGVTaXplKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUKLSAg
ICAgICAgICAgICsgc291cmNlU2l6ZQotICAgICAgICAgICAgKyBhY3Rpb25zU2l6ZQotICAgICAg
ICAgICAgKyBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUKLSAgICAgICAgICAg
ICsgZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplCi0gICAgICAgICAgICArIGNvbmRp
dGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZTsKLSAgICB9Ci19OwotCi1zdGF0aWMgRGF0YSBlbmNv
ZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEoY29uc3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRh
JiBtZXRhRGF0YSkKLXsKLSAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7Ci0K
LSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLnZlcnNpb247Ci0gICAgZW5jb2RlciA8PCBtZXRhRGF0
YS5zb3VyY2VTaXplOwotICAgIGVuY29kZXIgPDwgbWV0YURhdGEuYWN0aW9uc1NpemU7Ci0gICAg
ZW5jb2RlciA8PCBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemU7
Ci0gICAgZW5jb2RlciA8PCBtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNp
emU7Ci0gICAgZW5jb2RlciA8PCBtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNp
emU7Ci0gICAgZW5jb2RlciA8PCBtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47
Ci0KLSAgICBBU1NFUlQoZW5jb2Rlci5idWZmZXJTaXplKCkgPT0gQ29udGVudEV4dGVuc2lvbkZp
bGVIZWFkZXJTaXplKTsKLSAgICByZXR1cm4gRGF0YShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVy
LmJ1ZmZlclNpemUoKSk7Ci19Ci0KLXN0YXRpYyBib29sIGRlY29kZUNvbnRlbnRFeHRlbnNpb25N
ZXRhRGF0YShDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBm
aWxlRGF0YSkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBmaWxlRGF0YS5hcHBs
eShbJm1ldGFEYXRhLCAmc3VjY2VzcywgJmZpbGVEYXRhXShjb25zdCB1aW50OF90KiBkYXRhLCBz
aXplX3Qgc2l6ZSkgewotICAgICAgICAvLyBUaGUgZmlsZSBkYXRhIHNob3VsZCBiZSBtYXBwZWQg
aW50byBvbmUgY29udGludW91cyBtZW1vcnkgc2VnbWVudCBzbyB0aGUgc2l6ZQotICAgICAgICAv
LyBwYXNzZWQgdG8gdGhlIGFwcGxpZXIgc2hvdWxkIGFsd2F5cyBlcXVhbCB0aGUgZGF0YSBzaXpl
LgotICAgICAgICBpZiAoc2l6ZSAhPSBmaWxlRGF0YS5zaXplKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRh
dGEsIHNpemUpOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLnZlcnNpb24p
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KG1ldGFEYXRhLnNvdXJjZVNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmFjdGlvbnNTaXplKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5maWx0
ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29u
ZGl0aW9uc0J5dGVjb2RlU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVT
aXplKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4pKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0pOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1zdGF0aWMgYm9vbCBvcGVu
QW5kTWFwQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIHBhdGgsIENvbnRlbnRFeHRlbnNp
b25NZXRhRGF0YSYgbWV0YURhdGEsIERhdGEmIGZpbGVEYXRhKQotewotICAgIGZpbGVEYXRhID0g
bWFwRmlsZShXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0aCkuZGF0YSgpKTsK
LSAgICBpZiAoZmlsZURhdGEuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghZGVjb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKG1ldGFEYXRhLCBmaWxlRGF0YSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMg
Ym9vbCB3cml0ZURhdGFUb0ZpbGUoY29uc3QgRGF0YSYgZmlsZURhdGEsIFdlYkNvcmU6OlBsYXRm
b3JtRmlsZUhhbmRsZSBmZCkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgIGZpbGVE
YXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXpl
KSB7Ci0gICAgICAgIGlmIChXZWJDb3JlOjp3cml0ZVRvRmlsZShmZCwgKGNvbnN0IGNoYXIqKWRh
dGEsIHNpemUpID09IC0xKSB7Ci0gICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fSk7Ci0gICAgCi0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLXN0YXRpYyBzdGQ6OmVycm9yX2Nv
ZGUgY29tcGlsZWRUb0ZpbGUoU3RyaW5nJiYganNvbiwgY29uc3QgU3RyaW5nJiBmaW5hbEZpbGVQ
YXRoLCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBEYXRhJiBtYXBwZWREYXRh
KQotewotICAgIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczsKLQot
ICAgIGNsYXNzIENvbXBpbGF0aW9uQ2xpZW50IGZpbmFsIDogcHVibGljIENvbnRlbnRFeHRlbnNp
b25Db21waWxhdGlvbkNsaWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBDb21waWxhdGlvbkNs
aWVudChXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZUhhbmRsZSwgQ29udGVudEV4dGVu
c2lvbk1ldGFEYXRhJiBtZXRhRGF0YSkKLSAgICAgICAgICAgIDogbV9maWxlSGFuZGxlKGZpbGVI
YW5kbGUpCi0gICAgICAgICAgICAsIG1fbWV0YURhdGEobWV0YURhdGEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVCghbWV0YURhdGEuc291cmNlU2l6ZSk7Ci0gICAgICAgICAgICBBU1NF
UlQoIW1ldGFEYXRhLmFjdGlvbnNTaXplKTsKLSAgICAgICAgICAgIEFTU0VSVCghbWV0YURhdGEu
ZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplKTsKLSAgICAgICAgICAgIEFTU0VS
VCghbWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplKTsKLSAgICAgICAg
ICAgIEFTU0VSVCghbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplKTsKLSAg
ICAgICAgICAgIEFTU0VSVCghbWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCB3cml0ZVNvdXJjZShjb25zdCBTdHJp
bmcmIHNvdXJjZUpTT04pIGZpbmFsIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9maWx0ZXJzV2l0
aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW4pOwotICAgICAgICAgICAgQVNTRVJUKCFtX2Zp
bHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuKTsKLSAgICAgICAgICAgIEFTU0VSVCgh
bV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuKTsKLSAgICAgICAgICAgIEFTU0VSVCgh
bV9hY3Rpb25zV3JpdHRlbik7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fc291cmNlV3JpdHRlbik7
Ci0gICAgICAgICAgICB3cml0ZVRvRmlsZShzb3VyY2VKU09OLmlzOEJpdCgpKTsKLSAgICAgICAg
ICAgIG1fc291cmNlV3JpdHRlbiArPSBzaXplb2YoYm9vbCk7Ci0gICAgICAgICAgICBpZiAoc291
cmNlSlNPTi5pczhCaXQoKSkgewotICAgICAgICAgICAgICAgIHNpemVfdCBzZXJpYWxpemVkTGVu
Z3RoID0gc291cmNlSlNPTi5sZW5ndGgoKSAqIHNpemVvZihMQ2hhcik7Ci0gICAgICAgICAgICAg
ICAgd3JpdGVUb0ZpbGUoRGF0YShzb3VyY2VKU09OLmNoYXJhY3RlcnM4KCksIHNlcmlhbGl6ZWRM
ZW5ndGgpKTsKLSAgICAgICAgICAgICAgICBtX3NvdXJjZVdyaXR0ZW4gKz0gc2VyaWFsaXplZExl
bmd0aDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IHNlcmlh
bGl6ZWRMZW5ndGggPSBzb3VyY2VKU09OLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKLSAgICAg
ICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KHNvdXJjZUpTT04uY2hhcmFjdGVyczE2KCkpLCBzZXJpYWxpemVkTGVuZ3RoKSk7Ci0gICAg
ICAgICAgICAgICAgbV9zb3VyY2VXcml0dGVuICs9IHNlcmlhbGl6ZWRMZW5ndGg7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgd3JpdGVGaWx0ZXJzV2l0
aG91dENvbmRpdGlvbnNCeXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIGZp
bmFsCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9maWx0ZXJzV2l0aENvbmRpdGlv
bkJ5dGVjb2RlV3JpdHRlbik7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fY29uZGl0aW9uRmlsdGVy
c0J5dGVjb2RlV3JpdHRlbik7Ci0gICAgICAgICAgICBtX2ZpbHRlcnNXaXRob3V0Q29uZGl0aW9u
c0J5dGVjb2RlV3JpdHRlbiArPSBieXRlY29kZS5zaXplKCk7Ci0gICAgICAgICAgICB3cml0ZVRv
RmlsZShEYXRhKGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHZvaWQgd3JpdGVGaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29k
ZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIGZpbmFsCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVCghbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuKTsKLSAgICAg
ICAgICAgIG1fZmlsdGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW4gKz0gYnl0ZWNvZGUu
c2l6ZSgpOwotICAgICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0YShieXRlY29kZS5kYXRhKCksIGJ5
dGVjb2RlLnNpemUoKSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHdyaXRl
VG9wVVJMRmlsdGVyc0J5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mJiBieXRlY29kZSkgZmlu
YWwKLSAgICAgICAgewotICAgICAgICAgICAgbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0
dGVuICs9IGJ5dGVjb2RlLnNpemUoKTsKLSAgICAgICAgICAgIHdyaXRlVG9GaWxlKERhdGEoYnl0
ZWNvZGUuZGF0YSgpLCBieXRlY29kZS5zaXplKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgd3JpdGVBY3Rpb25zKFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4mJiBhY3Rpb25zLCBi
b29sIGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbikgZmluYWwKLSAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKCFtX2ZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlV3JpdHRlbik7
Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZmlsdGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0
ZW4pOwotICAgICAgICAgICAgQVNTRVJUKCFtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0
ZW4pOwotICAgICAgICAgICAgQVNTRVJUKCFtX2FjdGlvbnNXcml0dGVuKTsKLSAgICAgICAgICAg
IG1fYWN0aW9uc1dyaXR0ZW4gKz0gYWN0aW9ucy5zaXplKCk7Ci0gICAgICAgICAgICBtX2NvbmRp
dGlvbnNBcHBseU9ubHlUb0RvbWFpbiA9IGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbjsKLSAg
ICAgICAgICAgIHdyaXRlVG9GaWxlKERhdGEoYWN0aW9ucy5kYXRhKCksIGFjdGlvbnMuc2l6ZSgp
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgZmluYWxpemUoKSBmaW5hbAot
ICAgICAgICB7Ci0gICAgICAgICAgICBtX21ldGFEYXRhLnNvdXJjZVNpemUgPSBtX3NvdXJjZVdy
aXR0ZW47Ci0gICAgICAgICAgICBtX21ldGFEYXRhLmFjdGlvbnNTaXplID0gbV9hY3Rpb25zV3Jp
dHRlbjsKLSAgICAgICAgICAgIG1fbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0
ZWNvZGVTaXplID0gbV9maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW47Ci0g
ICAgICAgICAgICBtX21ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSA9
IG1fZmlsdGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW47Ci0gICAgICAgICAgICBtX21l
dGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSA9IG1fY29uZGl0aW9uRmlsdGVy
c0J5dGVjb2RlV3JpdHRlbjsKLSAgICAgICAgICAgIG1fbWV0YURhdGEuY29uZGl0aW9uc0FwcGx5
T25seVRvRG9tYWluID0gbV9jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW47Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIERhdGEgaGVhZGVyID0gZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFE
YXRhKG1fbWV0YURhdGEpOwotICAgICAgICAgICAgaWYgKCFtX2ZpbGVFcnJvciAmJiBXZWJDb3Jl
OjpzZWVrRmlsZShtX2ZpbGVIYW5kbGUsIDBsbCwgV2ViQ29yZTo6RmlsZVNlZWtPcmlnaW46OlNl
ZWtGcm9tQmVnaW5uaW5nKSA9PSAtMSkgewotICAgICAgICAgICAgICAgIFdlYkNvcmU6OmNsb3Nl
RmlsZShtX2ZpbGVIYW5kbGUpOwotICAgICAgICAgICAgICAgIG1fZmlsZUVycm9yID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdyaXRlVG9GaWxlKGhlYWRlcik7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgaGFkRXJyb3JXaGlsZVdyaXRpbmdUb0ZpbGUoKSB7
IHJldHVybiBtX2ZpbGVFcnJvcjsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCB3cml0
ZVRvRmlsZShib29sIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICB3cml0ZVRvRmlsZShE
YXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZ2YWx1ZSksIHNpemVvZih2YWx1
ZSkpKTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIHdyaXRlVG9GaWxlKGNvbnN0IERhdGEmIGRh
dGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9maWxlRXJyb3IgJiYgIXdyaXRlRGF0
YVRvRmlsZShkYXRhLCBtX2ZpbGVIYW5kbGUpKSB7Ci0gICAgICAgICAgICAgICAgV2ViQ29yZTo6
Y2xvc2VGaWxlKG1fZmlsZUhhbmRsZSk7Ci0gICAgICAgICAgICAgICAgbV9maWxlRXJyb3IgPSB0
cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9maWxlSGFuZGxlOwotICAgICAgICBDb250ZW50RXh0ZW5z
aW9uTWV0YURhdGEmIG1fbWV0YURhdGE7Ci0gICAgICAgIHNpemVfdCBtX2ZpbHRlcnNXaXRob3V0
Q29uZGl0aW9uc0J5dGVjb2RlV3JpdHRlbiB7IDAgfTsKLSAgICAgICAgc2l6ZV90IG1fZmlsdGVy
c1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW4geyAwIH07Ci0gICAgICAgIHNpemVfdCBtX2Nv
bmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4geyAwIH07Ci0gICAgICAgIHNpemVfdCBtX2Fj
dGlvbnNXcml0dGVuIHsgMCB9OwotICAgICAgICBzaXplX3QgbV9zb3VyY2VXcml0dGVuIHsgMCB9
OwotICAgICAgICBib29sIG1fY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluIHsgZmFsc2UgfTsK
LSAgICAgICAgYm9vbCBtX2ZpbGVFcnJvciB7IGZhbHNlIH07Ci0gICAgfTsKLQotICAgIGF1dG8g
dGVtcG9yYXJ5RmlsZUhhbmRsZSA9IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7
Ci0gICAgU3RyaW5nIHRlbXBvcmFyeUZpbGVQYXRoID0gV2ViQ29yZTo6b3BlblRlbXBvcmFyeUZp
bGUoIkNvbnRlbnRFeHRlbnNpb24iLCB0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKLSAgICBpZiAodGVt
cG9yYXJ5RmlsZUhhbmRsZSA9PSBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQot
ICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxl
ZDsKLSAgICAKLSAgICBjaGFyIGludmFsaWRIZWFkZXJbQ29udGVudEV4dGVuc2lvbkZpbGVIZWFk
ZXJTaXplXTsKLSAgICBtZW1zZXQoaW52YWxpZEhlYWRlciwgMHhGRiwgc2l6ZW9mKGludmFsaWRI
ZWFkZXIpKTsKLSAgICAvLyBUaGlzIGhlYWRlciB3aWxsIGJlIHJld3JpdHRlbiBpbiBDb21waWxh
dGlvbkNsaWVudDo6ZmluYWxpemUuCi0gICAgaWYgKFdlYkNvcmU6OndyaXRlVG9GaWxlKHRlbXBv
cmFyeUZpbGVIYW5kbGUsIGludmFsaWRIZWFkZXIsIHNpemVvZihpbnZhbGlkSGVhZGVyKSkgPT0g
LTEpIHsKLSAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUpOwot
ICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxl
ZDsKLSAgICB9Ci0KLSAgICBDb21waWxhdGlvbkNsaWVudCBjb21waWxhdGlvbkNsaWVudCh0ZW1w
b3JhcnlGaWxlSGFuZGxlLCBtZXRhRGF0YSk7Ci0gICAgCi0gICAgaWYgKGF1dG8gY29tcGlsZXJF
cnJvciA9IGNvbXBpbGVSdWxlTGlzdChjb21waWxhdGlvbkNsaWVudCwgV1RGTW92ZShqc29uKSkp
IHsKLSAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUpOwotICAg
ICAgICByZXR1cm4gY29tcGlsZXJFcnJvcjsKLSAgICB9Ci0gICAgaWYgKGNvbXBpbGF0aW9uQ2xp
ZW50LmhhZEVycm9yV2hpbGVXcml0aW5nVG9GaWxlKCkpIHsKLSAgICAgICAgV2ViQ29yZTo6Y2xv
c2VGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUpOwotICAgICAgICByZXR1cm4gQ29udGVudEV4dGVu
c2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKLSAgICB9Ci0gICAgCi0gICAgbWFwcGVk
RGF0YSA9IGFkb3B0QW5kTWFwRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCAwLCBtZXRhRGF0YS5m
aWxlU2l6ZSgpKTsKLSAgICBpZiAobWFwcGVkRGF0YS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7Ci0KLSAgICBpZiAo
IVdlYkNvcmU6Om1vdmVGaWxlKHRlbXBvcmFyeUZpbGVQYXRoLCBmaW5hbEZpbGVQYXRoKSkKLSAg
ICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7
Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1zdGF0aWMgUmVmPEFQSTo6Q29udGVudEV4dGVuc2lv
bj4gY3JlYXRlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgQ29udGVu
dEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCi17Ci0g
ICAgYXV0byBzaGFyZWRNZW1vcnkgPSBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0
X2Nhc3Q8dWludDhfdCo+KGZpbGVEYXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUoKSwgV2ViS2l0
OjpTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLSAgICBjb25zdCBzaXplX3Qg
aGVhZGVyQW5kU291cmNlU2l6ZSA9IENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZSArIG1l
dGFEYXRhLnNvdXJjZVNpemU7Ci0gICAgYXV0byBjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
ID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKAotICAgICAgICBXVEZN
b3ZlKHNoYXJlZE1lbW9yeSksCi0gICAgICAgIGZpbGVEYXRhLAotICAgICAgICBDb25kaXRpb25z
QXBwbHlPbmx5VG9Eb21haW5PZmZzZXQsCi0gICAgICAgIGhlYWRlckFuZFNvdXJjZVNpemUsCi0g
ICAgICAgIG1ldGFEYXRhLmFjdGlvbnNTaXplLAotICAgICAgICBoZWFkZXJBbmRTb3VyY2VTaXpl
Ci0gICAgICAgICAgICArIG1ldGFEYXRhLmFjdGlvbnNTaXplLAotICAgICAgICBtZXRhRGF0YS5m
aWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUsCi0gICAgICAgIGhlYWRlckFuZFNv
dXJjZVNpemUKLSAgICAgICAgICAgICsgbWV0YURhdGEuYWN0aW9uc1NpemUKLSAgICAgICAgICAg
ICsgbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplLAotICAgICAg
ICBtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUsCi0gICAgICAgIGhl
YWRlckFuZFNvdXJjZVNpemUKLSAgICAgICAgICAgICsgbWV0YURhdGEuYWN0aW9uc1NpemUKLSAg
ICAgICAgICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXpl
Ci0gICAgICAgICAgICArIG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6
ZSwKLSAgICAgICAgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplCi0gICAg
KTsKLSAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYktpdDo6V2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhKSk7Ci0gICAgcmV0dXJuIEFQSTo6Q29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKGlkZW50
aWZpZXIsIFdURk1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKSk7Ci19Ci0KLXZvaWQgQ29u
dGVudEV4dGVuc2lvblN0b3JlOjpsb29rdXBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3Ry
aW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRFeHRlbnNp
b24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBtX3JlYWRR
dWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmll
ciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlz
b2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewotICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3Rv
cmVQYXRoLCBpZGVudGlmaWVyKTsKLSAgICAgICAgCi0gICAgICAgIENvbnRlbnRFeHRlbnNpb25N
ZXRhRGF0YSBtZXRhRGF0YTsKLSAgICAgICAgRGF0YSBmaWxlRGF0YTsKLSAgICAgICAgaWYgKCFv
cGVuQW5kTWFwQ29udGVudEV4dGVuc2lvbihwYXRoLCBtZXRhRGF0YSwgZmlsZURhdGEpKSB7Ci0g
ICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZN
b3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0ciwg
RXJyb3I6Okxvb2t1cEZhaWxlZCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1ldGFEYXRhLnZlcnNpb24gIT0g
Q29udGVudEV4dGVuc2lvblN0b3JlOjpDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9u
KSB7Ci0gICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMg
PSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVs
bHB0ciwgRXJyb3I6OlZlcnNpb25NaXNtYXRjaCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgaWRlbnRp
ZmllciA9IFdURk1vdmUoaWRlbnRpZmllciksIGZpbGVEYXRhID0gV1RGTW92ZShmaWxlRGF0YSks
IG1ldGFEYXRhID0gV1RGTW92ZShtZXRhRGF0YSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNy
ZWF0ZUV4dGVuc2lvbihpZGVudGlmaWVyLCBtZXRhRGF0YSwgZmlsZURhdGEpLCB7IH0pOwotICAg
ICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmdldEF2
YWlsYWJsZUNvbnRlbnRFeHRlbnNpb25JZGVudGlmaWVycyhGdW5jdGlvbjx2b2lkKFdURjo6VmVj
dG9yPFdURjo6U3RyaW5nPik+IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIG1fcmVhZFF1ZXVl
LT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzdG9yZVBhdGggPSBt
X3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLQotICAgICAgICBWZWN0b3I8U3RyaW5nPiBm
dWxsUGF0aHMgPSBXZWJDb3JlOjpsaXN0RGlyZWN0b3J5KHN0b3JlUGF0aCwgY29uc3RydWN0ZWRQ
YXRoRmlsdGVyKCkpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBpZGVudGlmaWVyczsKLSAgICAg
ICAgaWRlbnRpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmdWxsUGF0aHMuc2l6ZSgpKTsK
LSAgICAgICAgY29uc3QgYXV0byBwcmVmaXhMZW5ndGggPSBjb25zdHJ1Y3RlZFBhdGhQcmVmaXgo
KS5sZW5ndGgoKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogZnVsbFBhdGhzKQot
ICAgICAgICAgICAgaWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKFdlYkNvcmU6OmRlY29kZUZy
b21GaWxlbmFtZShwYXRoLnN1YnN0cmluZyhwYXRoLnJldmVyc2VGaW5kKCcvJykgKyAxICsgcHJl
Zml4TGVuZ3RoKSkpOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVj
dGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIGlkZW50aWZpZXJzID0gV1RGTW92ZShpZGVudGlmaWVy
cyldKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGlk
ZW50aWZpZXJzKSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIENvbnRlbnRFeHRl
bnNpb25TdG9yZTo6Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlk
ZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgRnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpD
b250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCi17
Ci0gICAgQXRvbWljU3RyaW5nOjppbml0KCk7Ci0gICAgbV9jb21waWxlUXVldWUtPmRpc3BhdGNo
KFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVy
Lmlzb2xhdGVkQ29weSgpLCBqc29uID0ganNvbi5pc29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0g
bV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBhdXRvIHBhdGggPSBjb25z
dHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsKLQotICAgICAgICBDb250ZW50RXh0
ZW5zaW9uTWV0YURhdGEgbWV0YURhdGE7Ci0gICAgICAgIERhdGEgZmlsZURhdGE7Ci0gICAgICAg
IGF1dG8gZXJyb3IgPSBjb21waWxlZFRvRmlsZShXVEZNb3ZlKGpzb24pLCBwYXRoLCBtZXRhRGF0
YSwgZmlsZURhdGEpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyks
IGVycm9yID0gV1RGTW92ZShlcnJvciksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxs
cHRyLCBlcnJvcik7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9
IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGlkZW50aWZpZXIgPSBXVEZNb3ZlKGlkZW50aWZpZXIp
LCBmaWxlRGF0YSA9IFdURk1vdmUoZmlsZURhdGEpLCBtZXRhRGF0YSA9IFdURk1vdmUobWV0YURh
dGEpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0g
ICAgICAgICAgICBSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9u
ID0gY3JlYXRlRXh0ZW5zaW9uKGlkZW50aWZpZXIsIG1ldGFEYXRhLCBmaWxlRGF0YSk7Ci0gICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250ZW50RXh0ZW5zaW9uLCB7IH0pOwotICAgICAg
ICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNv
bnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZv
aWQoc3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgbV9yZW1vdmVR
dWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmll
ciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlz
b2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewotICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3Rv
cmVQYXRoLCBpZGVudGlmaWVyKTsKLQotICAgICAgICBpZiAoIVdlYkNvcmU6OmRlbGV0ZUZpbGUo
cGF0aCkpIHsKLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVk
VGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihFcnJvcjo6UmVtb3ZlRmFpbGVkKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90
ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoeyB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgQ29udGVudEV4dGVuc2lv
blN0b3JlOjpzeW5jaHJvbm91c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCkKLXsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIHBhdGggOiBXZWJDb3JlOjpsaXN0RGlyZWN0b3J5KG1fc3RvcmVQYXRo
LCAiKiIpKQotICAgICAgICBXZWJDb3JlOjpkZWxldGVGaWxlKHBhdGgpOwotfQotCi12b2lkIENv
bnRlbnRFeHRlbnNpb25TdG9yZTo6aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uKGNv
bnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyKQotewotICAgIGF1dG8gZmlsZSA9IFdlYkNvcmU6
Om9wZW5GaWxlKGNvbnN0cnVjdGVkUGF0aChtX3N0b3JlUGF0aCwgaWRlbnRpZmllciksIFdlYkNv
cmU6Ok9wZW5Gb3JXcml0ZSk7Ci0gICAgaWYgKGZpbGUgPT0gV2ViQ29yZTo6aW52YWxpZFBsYXRm
b3JtRmlsZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIENvbnRlbnRFeHRlbnNpb25NZXRh
RGF0YSBpbnZhbGlkSGVhZGVyID0gezAsIDAsIDAsIDAsIDAsIDB9OwotICAgIGF1dG8gYnl0ZXNX
cml0dGVuID0gV2ViQ29yZTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oJmludmFsaWRIZWFkZXIpLCBzaXplb2YoaW52YWxpZEhlYWRlcikpOwotICAgIEFT
U0VSVF9VTlVTRUQoYnl0ZXNXcml0dGVuLCBieXRlc1dyaXR0ZW4gPT0gc2l6ZW9mKGludmFsaWRI
ZWFkZXIpKTsKLSAgICBXZWJDb3JlOjpjbG9zZUZpbGUoZmlsZSk7Ci19Ci0KLXZvaWQgQ29udGVu
dEV4dGVuc2lvblN0b3JlOjpnZXRDb250ZW50RXh0ZW5zaW9uU291cmNlKGNvbnN0IFdURjo6U3Ry
aW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKFdURjo6U3RyaW5nKT4gY29tcGxldGlvbkhh
bmRsZXIpCi17Ci0gICAgbV9yZWFkUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBzdG9y
ZVBhdGggPSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBwYXRo
ID0gY29uc3RydWN0ZWRQYXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllcik7Ci0gICAgICAgIAotICAg
ICAgICBhdXRvIGNvbXBsZXRlID0gW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTdHJp
bmcgc291cmNlKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHNvdXJjZSA9IHNvdXJjZS5pc29sYXRl
ZENvcHkoKV0gewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHNvdXJjZSk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIENvbnRlbnRFeHRl
bnNpb25NZXRhRGF0YSBtZXRhRGF0YTsKLSAgICAgICAgRGF0YSBmaWxlRGF0YTsKLSAgICAgICAg
aWYgKCFvcGVuQW5kTWFwQ29udGVudEV4dGVuc2lvbihwYXRoLCBtZXRhRGF0YSwgZmlsZURhdGEp
KSB7Ci0gICAgICAgICAgICBjb21wbGV0ZSh7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKG1ldGFEYXRhLnZlcnNpb24pIHsKLSAg
ICAgICAgY2FzZSA5OgotICAgICAgICAgICAgaWYgKCFtZXRhRGF0YS5zb3VyY2VTaXplKSB7Ci0g
ICAgICAgICAgICAgICAgY29tcGxldGUoeyB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBib29sIGlzOEJpdCA9IGZpbGVEYXRhLmRhdGEoKVtD
b250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemVdOwotICAgICAgICAgICAgc2l6ZV90IHN0YXJ0
ID0gQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplICsgc2l6ZW9mKGJvb2wpOwotICAgICAg
ICAgICAgc2l6ZV90IGxlbmd0aCA9IG1ldGFEYXRhLnNvdXJjZVNpemUgLSBzaXplb2YoYm9vbCk7
Ci0gICAgICAgICAgICBpZiAoaXM4Qml0KQotICAgICAgICAgICAgICAgIGNvbXBsZXRlKFN0cmlu
ZyhmaWxlRGF0YS5kYXRhKCkgKyBzdGFydCwgbGVuZ3RoKSk7Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoIShsZW5ndGggJSBzaXplb2YoVUNoYXIpKSk7Ci0gICAg
ICAgICAgICAgICAgY29tcGxldGUoU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIq
PihmaWxlRGF0YS5kYXRhKCkgKyBzdGFydCksIGxlbmd0aCAvIHNpemVvZihVQ2hhcikpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IE9sZGVyIHZlcnNpb25zIGNhbm5vdCByZWNvdmVyIHRoZSBvcmlnaW5hbCBKU09OIHNvdXJjZSBm
cm9tIGRpc2suCi0gICAgICAgIGNvbXBsZXRlKHsgfSk7Ci0gICAgfSk7Ci19Ci0KLWNvbnN0IHN0
ZDo6ZXJyb3JfY2F0ZWdvcnkmIGNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKQot
ewotICAgIGNsYXNzIENvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkgOiBwdWJsaWMg
c3RkOjplcnJvcl9jYXRlZ29yeSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCBu
b2V4Y2VwdCBmaW5hbAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gImNvbnRlbnQgZXh0
ZW5zaW9uIHN0b3JlIjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0ZDo6c3RyaW5nIG1lc3NhZ2Uo
aW50IGVycm9yQ29kZSkgY29uc3QgZmluYWwKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNo
IChzdGF0aWNfY2FzdDxDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPihlcnJvckNvZGUpKSB7
Ci0gICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6Okxvb2t1cEZh
aWxlZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyBs
b29rdXAuIjsKLSAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6
VmVyc2lvbk1pc21hdGNoOgotICAgICAgICAgICAgICAgIHJldHVybiAiVmVyc2lvbiBvZiBmaWxl
IGRvZXMgbm90IG1hdGNoIHZlcnNpb24gb2YgaW50ZXJwcmV0ZXIuIjsKLSAgICAgICAgICAgIGNh
c2UgQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyBjb21waWxlLiI7Ci0gICAg
ICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OlJlbW92ZUZhaWxlZDoK
LSAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyByZW1vdmUu
IjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbnRlbnRFeHRl
bnNpb25TdG9yZUVycm9yQ2F0ZWdvcnk+IGNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5Owot
ICAgIHJldHVybiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29yeTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgQVBJCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRl
bnNpb25TdG9yZS5oCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCShub25leGlzdGVudCkKQEAgLTEsOTYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKLQotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgPHN5c3RlbV9l
cnJvcj4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdURiB7
Ci1jbGFzcyBXb3JrUXVldWU7Ci19Ci0KLW5hbWVzcGFjZSBBUEkgewotCi1jbGFzcyBDb250ZW50
RXh0ZW5zaW9uOwotCi1jbGFzcyBDb250ZW50RXh0ZW5zaW9uU3RvcmUgZmluYWwgOiBwdWJsaWMg
T2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OkNvbnRlbnRFeHRlbnNpb25TdG9yZT4gewotcHVibGlj
OgotICAgIGVudW0gY2xhc3MgRXJyb3IgewotICAgICAgICBMb29rdXBGYWlsZWQgPSAxLAotICAg
ICAgICBWZXJzaW9uTWlzbWF0Y2gsCi0gICAgICAgIENvbXBpbGVGYWlsZWQsCi0gICAgICAgIFJl
bW92ZUZhaWxlZAotICAgIH07Ci0gICAgCi0gICAgLy8gVGhpcyBzaG91bGQgYmUgaW5jcmVtZW50
ZWQgZXZlcnkgdGltZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGlzIG1hZGUgdG8gdGhlIGJ5dGVjb2Rl
LCBmaWxlIGZvcm1hdCwgZXRjLgotICAgIC8vIHRvIHByZXZlbnQgY3Jhc2hpbmcgd2hpbGUgbG9h
ZGluZyBvbGQgZGF0YS4KLSAgICAvLyBBbHNvIHVwZGF0ZSBDb250ZW50RXh0ZW5zaW9uU3RvcmU6
OmdldENvbnRlbnRFeHRlbnNpb25Tb3VyY2UgdG8gYmUgYWJsZSB0byBmaW5kIHRoZSBvcmlnaW5h
bCBKU09OCi0gICAgLy8gc291cmNlIGZyb20gb2xkIHZlcnNpb25zLgotICAgIGNvbnN0IHN0YXRp
YyB1aW50MzJfdCBDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uID0gOTsKLQotICAg
IHN0YXRpYyBDb250ZW50RXh0ZW5zaW9uU3RvcmUmIGRlZmF1bHRTdG9yZSgpOwotICAgIHN0YXRp
YyBSZWY8Q29udGVudEV4dGVuc2lvblN0b3JlPiBzdG9yZVdpdGhQYXRoKGNvbnN0IFdURjo6U3Ry
aW5nJiBzdG9yZVBhdGgpOwotCi0gICAgZXhwbGljaXQgQ29udGVudEV4dGVuc2lvblN0b3JlKCk7
Ci0gICAgZXhwbGljaXQgQ29udGVudEV4dGVuc2lvblN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBz
dG9yZVBhdGgpOwotICAgIHZpcnR1YWwgfkNvbnRlbnRFeHRlbnNpb25TdG9yZSgpOwotCi0gICAg
dm9pZCBjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmll
ciwgV1RGOjpTdHJpbmcmJiBqc29uLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRF
eHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPik7Ci0gICAgdm9pZCBsb29rdXBDb250ZW50RXh0
ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKFJlZlB0
cjxBUEk6OkNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPik7Ci0gICAgdm9pZCBy
ZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5j
dGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+KTsKLSAgICB2b2lkIGdldEF2YWlsYWJsZUNvbnRl
bnRFeHRlbnNpb25JZGVudGlmaWVycyhGdW5jdGlvbjx2b2lkKFdURjo6VmVjdG9yPFdURjo6U3Ry
aW5nPik+KTsKLQotICAgIC8vIEZvciB0ZXN0aW5nIG9ubHkuCi0gICAgdm9pZCBzeW5jaHJvbm91
c1JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29udGVu
dEV4dGVuc2lvblZlcnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIpOwotICAgIHZv
aWQgZ2V0Q29udGVudEV4dGVuc2lvblNvdXJjZShjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmll
ciwgRnVuY3Rpb248dm9pZChXVEY6OlN0cmluZyk+KTsKLQotcHJpdmF0ZToKLSAgICBXVEY6OlN0
cmluZyBkZWZhdWx0U3RvcmVQYXRoKCk7Ci0KLSAgICBjb25zdCBXVEY6OlN0cmluZyBtX3N0b3Jl
UGF0aDsKLSAgICBSZWY8V1RGOjpXb3JrUXVldWU+IG1fY29tcGlsZVF1ZXVlOwotICAgIFJlZjxX
VEY6OldvcmtRdWV1ZT4gbV9yZWFkUXVldWU7Ci0gICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX3Jl
bW92ZVF1ZXVlOwotfTsKLQotY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVu
c2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpOwotCi1pbmxpbmUgc3RkOjplcnJvcl9jb2RlIG1ha2Vf
ZXJyb3JfY29kZShDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yIGVycm9yKQotewotICAgIHJl
dHVybiB7IHN0YXRpY19jYXN0PGludD4oZXJyb3IpLCBjb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJv
ckNhdGVnb3J5KCkgfTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgQVBJCi0KLW5hbWVzcGFjZSBzdGQg
ewotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZXJyb3JfY29kZV9lbnVtPEFQSTo6Q29udGVudEV4dGVu
c2lvblN0b3JlOjpFcnJvcj4gOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKLX0KLQotI2VuZGlmIC8v
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3QuY3BwCShyZXZpc2lvbiAyMTY1Mzkp
CShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5j
cHA6MjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVs
ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgorCisj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbi5oIgorCituYW1lc3BhY2UgQVBJIHsKKworQ29udGVudEV4dGVuc2lvbjo6
Q29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmIGNvbnRlbnRFeHRlbnNpb24pCisgICAgOiBtX25h
bWUobmFtZSkKKyAgICAsIG1fY29tcGlsZWRFeHRlbnNpb24oV1RGTW92ZShjb250ZW50RXh0ZW5z
aW9uKSkKK3sKK30KKworQ29udGVudEV4dGVuc2lvbjo6fkNvbnRlbnRFeHRlbnNpb24oKQorewor
fQorCit9IC8vIG5hbWVzcGFjZSBBUEkKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxl
TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElD
b250ZW50UnVsZUxpc3QuY3BwCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDIxICsyNCwyMSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBUElD
b250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiQVBJQ29udGVudFJ1bGVMaXN0LmgiCiAKICNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCi0jaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuaCIK
IAogbmFtZXNwYWNlIEFQSSB7CiAKLUNvbnRlbnRFeHRlbnNpb246OkNvbnRlbnRFeHRlbnNpb24o
Y29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbj4mJiBjb250ZW50RXh0ZW5zaW9uKQorQ29udGVudFJ1bGVMaXN0OjpDb250ZW50UnVs
ZUxpc3QoY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29u
dGVudFJ1bGVMaXN0PiYmIGNvbnRlbnRSdWxlTGlzdCkKICAgICA6IG1fbmFtZShuYW1lKQotICAg
ICwgbV9jb21waWxlZEV4dGVuc2lvbihXVEZNb3ZlKGNvbnRlbnRFeHRlbnNpb24pKQorICAgICwg
bV9jb21waWxlZFJ1bGVMaXN0KFdURk1vdmUoY29udGVudFJ1bGVMaXN0KSkKIHsKIH0KIAotQ29u
dGVudEV4dGVuc2lvbjo6fkNvbnRlbnRFeHRlbnNpb24oKQorQ29udGVudFJ1bGVMaXN0Ojp+Q29u
dGVudFJ1bGVMaXN0KCkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdC5oCShyZXZpc2lvbiAyMTY1MzkpCShmcm9tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5oOjIxNjUzOSkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
OworfQorCituYW1lc3BhY2UgQVBJIHsKKworY2xhc3MgQ29udGVudEV4dGVuc2lvbiBmaW5hbCA6
IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6VHlwZTo6Q29udGVudEV4dGVuc2lvbj4geworcHVi
bGljOgorI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAgc3RhdGljIFJlZjxDb250
ZW50RXh0ZW5zaW9uPiBjcmVhdGUoY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6
OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4mJiBjb250ZW50RXh0ZW5zaW9uKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29udGVudEV4dGVuc2lvbihuYW1lLCBXVEZN
b3ZlKGNvbnRlbnRFeHRlbnNpb24pKSk7CisgICAgfQorCisgICAgQ29udGVudEV4dGVuc2lvbihj
b25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uPiYmKTsKKyAgICB2aXJ0dWFsIH5Db250ZW50RXh0ZW5zaW9uKCk7CisKKyAgICBjb25z
dCBXVEY6OlN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0
IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZEV4dGVuc2lvbigp
IGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsZWRFeHRlbnNpb24uZ2V0KCk7IH0KKworcHJpdmF0ZToK
KyAgICBXVEY6OlN0cmluZyBtX25hbWU7CisgICAgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uPiBtX2NvbXBpbGVkRXh0ZW5zaW9uOworI2VuZGlmIC8vIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCit9OworCit9IC8vIG5hbWVzcGFjZSBBUEkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3QuaAkocmV2aXNp
b24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVs
ZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMjggKzI5LDI4IEBACiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uOworY2xhc3MgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q7CiB9
CiAKIG5hbWVzcGFjZSBBUEkgewogCi1jbGFzcyBDb250ZW50RXh0ZW5zaW9uIGZpbmFsIDogcHVi
bGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpDb250ZW50RXh0ZW5zaW9uPiB7CitjbGFzcyBD
b250ZW50UnVsZUxpc3QgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OkNv
bnRlbnRSdWxlTGlzdD4gewogcHVibGljOgogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
Ci0gICAgc3RhdGljIFJlZjxDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGUoY29uc3QgV1RGOjpTdHJp
bmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4mJiBjb250
ZW50RXh0ZW5zaW9uKQorICAgIHN0YXRpYyBSZWY8Q29udGVudFJ1bGVMaXN0PiBjcmVhdGUoY29u
c3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0PiYmIGNvbnRlbnRSdWxlTGlzdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IENvbnRlbnRFeHRlbnNpb24obmFtZSwgV1RGTW92ZShjb250ZW50RXh0ZW5zaW9uKSkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb250ZW50UnVsZUxpc3QobmFtZSwgV1RGTW92
ZShjb250ZW50UnVsZUxpc3QpKSk7CiAgICAgfQogCi0gICAgQ29udGVudEV4dGVuc2lvbihjb25z
dCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uPiYmKTsKLSAgICB2aXJ0dWFsIH5Db250ZW50RXh0ZW5zaW9uKCk7CisgICAgQ29udGVudFJ1
bGVMaXN0KGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJDb21waWxlZENv
bnRlbnRSdWxlTGlzdD4mJik7CisgICAgdmlydHVhbCB+Q29udGVudFJ1bGVMaXN0KCk7CiAKICAg
ICBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAg
IGNvbnN0IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZEV4dGVu
c2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsZWRFeHRlbnNpb24uZ2V0KCk7IH0KKyAgICBj
b25zdCBXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0JiBjb21waWxlZFJ1bGVMaXN0
KCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxlZFJ1bGVMaXN0LmdldCgpOyB9CiAKIHByaXZhdGU6
CiAgICAgV1RGOjpTdHJpbmcgbV9uYW1lOwotICAgIFJlZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbj4gbV9jb21waWxlZEV4dGVuc2lvbjsKKyAgICBSZWY8V2ViS2l0OjpXZWJD
b21waWxlZENvbnRlbnRSdWxlTGlzdD4gbV9jb21waWxlZFJ1bGVMaXN0OwogI2VuZGlmIC8vIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAkocmV2
aXNpb24gMjE2NTM5KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRl
bnRFeHRlbnNpb25TdG9yZS5jcHA6MjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1MzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQVBJ
Q29udGVudEV4dGVuc2lvblN0b3JlLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQorCisjaW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZURhdGEuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtLmgiCisjaW5jbHVk
ZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oPgorI2luY2x1ZGUgPHN0cmluZz4K
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5o
PgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2Uv
RGVjb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9FbmNvZGVyLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTsKKworbmFtZXNwYWNlIEFQSSB7CisKK0Nv
bnRlbnRFeHRlbnNpb25TdG9yZSYgQ29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUo
KQoreworICAgIHN0YXRpYyBDb250ZW50RXh0ZW5zaW9uU3RvcmUqIGRlZmF1bHRTdG9yZSA9IGFk
b3B0UmVmKG5ldyBDb250ZW50RXh0ZW5zaW9uU3RvcmUpLmxlYWtSZWYoKTsKKyAgICByZXR1cm4g
KmRlZmF1bHRTdG9yZTsKK30KKworUmVmPENvbnRlbnRFeHRlbnNpb25TdG9yZT4gQ29udGVudEV4
dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29udGVudEV4dGVuc2lvblN0b3JlKHN0b3Jl
UGF0aCkpOworfQorCitDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkNvbnRlbnRFeHRlbnNpb25TdG9y
ZSgpCisgICAgOiBDb250ZW50RXh0ZW5zaW9uU3RvcmUoZGVmYXVsdFN0b3JlUGF0aCgpKQorewor
fQorCitDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkNvbnRlbnRFeHRlbnNpb25TdG9yZShjb25zdCBX
VEY6OlN0cmluZyYgc3RvcmVQYXRoKQorICAgIDogbV9zdG9yZVBhdGgoc3RvcmVQYXRoKQorICAg
ICwgbV9jb21waWxlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIkNvbnRlbnRFeHRlbnNpb25TdG9y
ZSBDb21waWxlIFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpDb25jdXJyZW50KSkKKyAgICAsIG1f
cmVhZFF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJDb250ZW50RXh0ZW5zaW9uU3RvcmUgUmVhZCBR
dWV1ZSIpKQorICAgICwgbV9yZW1vdmVRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiQ29udGVudEV4
dGVuc2lvblN0b3JlIFJlbW92ZSBRdWV1ZSIpKQoreworICAgIFdlYkNvcmU6Om1ha2VBbGxEaXJl
Y3RvcmllcyhzdG9yZVBhdGgpOworfQorCitDb250ZW50RXh0ZW5zaW9uU3RvcmU6On5Db250ZW50
RXh0ZW5zaW9uU3RvcmUoKQoreworfQorCitzdGF0aWMgY29uc3QgU3RyaW5nJiBjb25zdHJ1Y3Rl
ZFBhdGhQcmVmaXgoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHByZWZp
eCgiQ29udGVudEV4dGVuc2lvbi0iKTsKKyAgICByZXR1cm4gcHJlZml4OworfQorCitzdGF0aWMg
Y29uc3QgU3RyaW5nIGNvbnN0cnVjdGVkUGF0aEZpbHRlcigpCit7CisgICAgcmV0dXJuIG1ha2VT
dHJpbmcoY29uc3RydWN0ZWRQYXRoUHJlZml4KCksICcqJyk7Cit9CisKK3N0YXRpYyBTdHJpbmcg
Y29uc3RydWN0ZWRQYXRoKGNvbnN0IFN0cmluZyYgYmFzZSwgY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyKQoreworICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFz
ZSwgbWFrZVN0cmluZyhjb25zdHJ1Y3RlZFBhdGhQcmVmaXgoKSwgV2ViQ29yZTo6ZW5jb2RlRm9y
RmlsZU5hbWUoaWRlbnRpZmllcikpKTsKK30KKworLy8gVGhlIHNpemUgYW5kIG9mZnNldCBvZiB0
aGUgZGVuc2VseSBwYWNrZWQgYnl0ZXMgaW4gdGhlIGZpbGUsIG5vdCBzaXplb2YgYW5kIG9mZnNl
dG9mLCB3aGljaCB3b3VsZAorLy8gcmVwcmVzZW50IHRoZSBzaXplIGFuZCBvZmZzZXQgb2YgdGhl
IHN0cnVjdHVyZSBpbiBtZW1vcnksIHBvc3NpYmx5IHdpdGggY29tcGlsZXItYWRkZWQgcGFkZGlu
Zy4KK2NvbnN0IHNpemVfdCBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUgPSAyICogc2l6
ZW9mKHVpbnQzMl90KSArIDUgKiBzaXplb2YodWludDY0X3QpOworY29uc3Qgc2l6ZV90IENvbmRp
dGlvbnNBcHBseU9ubHlUb0RvbWFpbk9mZnNldCA9IHNpemVvZih1aW50MzJfdCkgKyA1ICogc2l6
ZW9mKHVpbnQ2NF90KTsKKworc3RydWN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSB7CisgICAg
dWludDMyX3QgdmVyc2lvbiB7IENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRF
eHRlbnNpb25GaWxlVmVyc2lvbiB9OworICAgIHVpbnQ2NF90IHNvdXJjZVNpemUgeyAwIH07Cisg
ICAgdWludDY0X3QgYWN0aW9uc1NpemUgeyAwIH07CisgICAgdWludDY0X3QgZmlsdGVyc1dpdGhv
dXRDb25kaXRpb25zQnl0ZWNvZGVTaXplIHsgMCB9OworICAgIHVpbnQ2NF90IGZpbHRlcnNXaXRo
Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSB7IDAgfTsKKyAgICB1aW50NjRfdCBjb25kaXRpb25lZEZp
bHRlcnNCeXRlY29kZVNpemUgeyAwIH07CisgICAgdWludDMyX3QgY29uZGl0aW9uc0FwcGx5T25s
eVRvRG9tYWluIHsgZmFsc2UgfTsKKyAgICAKKyAgICBzaXplX3QgZmlsZVNpemUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZQorICAg
ICAgICAgICAgKyBzb3VyY2VTaXplCisgICAgICAgICAgICArIGFjdGlvbnNTaXplCisgICAgICAg
ICAgICArIGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZQorICAgICAgICAgICAg
KyBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUKKyAgICAgICAgICAgICsgY29uZGl0
aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplOworICAgIH0KK307CisKK3N0YXRpYyBEYXRhIGVuY29k
ZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShjb25zdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEm
IG1ldGFEYXRhKQoreworICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKKwor
ICAgIGVuY29kZXIgPDwgbWV0YURhdGEudmVyc2lvbjsKKyAgICBlbmNvZGVyIDw8IG1ldGFEYXRh
LnNvdXJjZVNpemU7CisgICAgZW5jb2RlciA8PCBtZXRhRGF0YS5hY3Rpb25zU2l6ZTsKKyAgICBl
bmNvZGVyIDw8IG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZTsK
KyAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6
ZTsKKyAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6
ZTsKKyAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbjsK
KworICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9PSBDb250ZW50RXh0ZW5zaW9uRmls
ZUhlYWRlclNpemUpOworICAgIHJldHVybiBEYXRhKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIu
YnVmZmVyU2l6ZSgpKTsKK30KKworc3RhdGljIGJvb2wgZGVjb2RlQ29udGVudEV4dGVuc2lvbk1l
dGFEYXRhKENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIGNvbnN0IERhdGEmIGZp
bGVEYXRhKQoreworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIGZpbGVEYXRhLmFwcGx5
KFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNp
emVfdCBzaXplKSB7CisgICAgICAgIC8vIFRoZSBmaWxlIGRhdGEgc2hvdWxkIGJlIG1hcHBlZCBp
bnRvIG9uZSBjb250aW51b3VzIG1lbW9yeSBzZWdtZW50IHNvIHRoZSBzaXplCisgICAgICAgIC8v
IHBhc3NlZCB0byB0aGUgYXBwbGllciBzaG91bGQgYWx3YXlzIGVxdWFsIHRoZSBkYXRhIHNpemUu
CisgICAgICAgIGlmIChzaXplICE9IGZpbGVEYXRhLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoZGF0
YSwgc2l6ZSk7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEudmVyc2lvbikp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
bWV0YURhdGEuc291cmNlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuYWN0aW9uc1NpemUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmZpbHRl
cnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuZmlsdGVyc1dpdGhDb25k
aXRpb25zQnl0ZWNvZGVTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNp
emUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbikpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfSk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3N0YXRpYyBib29sIG9wZW5B
bmRNYXBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgcGF0aCwgQ29udGVudEV4dGVuc2lv
bk1ldGFEYXRhJiBtZXRhRGF0YSwgRGF0YSYgZmlsZURhdGEpCit7CisgICAgZmlsZURhdGEgPSBt
YXBGaWxlKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKS5kYXRhKCkpOwor
ICAgIGlmIChmaWxlRGF0YS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCFkZWNvZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEobWV0YURhdGEsIGZpbGVEYXRhKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBi
b29sIHdyaXRlRGF0YVRvRmlsZShjb25zdCBEYXRhJiBmaWxlRGF0YSwgV2ViQ29yZTo6UGxhdGZv
cm1GaWxlSGFuZGxlIGZkKQoreworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgZmlsZURh
dGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUp
IHsKKyAgICAgICAgaWYgKFdlYkNvcmU6OndyaXRlVG9GaWxlKGZkLCAoY29uc3QgY2hhciopZGF0
YSwgc2l6ZSkgPT0gLTEpIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
KTsKKyAgICAKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworc3RhdGljIHN0ZDo6ZXJyb3JfY29k
ZSBjb21waWxlZFRvRmlsZShTdHJpbmcmJiBqc29uLCBjb25zdCBTdHJpbmcmIGZpbmFsRmlsZVBh
dGgsIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIERhdGEmIG1hcHBlZERhdGEp
Cit7CisgICAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOworCisg
ICAgY2xhc3MgQ29tcGlsYXRpb25DbGllbnQgZmluYWwgOiBwdWJsaWMgQ29udGVudEV4dGVuc2lv
bkNvbXBpbGF0aW9uQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIENvbXBpbGF0aW9uQ2xp
ZW50KFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlSGFuZGxlLCBDb250ZW50RXh0ZW5z
aW9uTWV0YURhdGEmIG1ldGFEYXRhKQorICAgICAgICAgICAgOiBtX2ZpbGVIYW5kbGUoZmlsZUhh
bmRsZSkKKyAgICAgICAgICAgICwgbV9tZXRhRGF0YShtZXRhRGF0YSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5zb3VyY2VTaXplKTsKKyAgICAgICAgICAgIEFTU0VS
VCghbWV0YURhdGEuYWN0aW9uc1NpemUpOworICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5m
aWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUpOworICAgICAgICAgICAgQVNTRVJU
KCFtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUpOworICAgICAgICAg
ICAgQVNTRVJUKCFtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUpOworICAg
ICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4pOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHdyaXRlU291cmNlKGNvbnN0IFN0cmlu
ZyYgc291cmNlSlNPTikgZmluYWwgeworICAgICAgICAgICAgQVNTRVJUKCFtX2ZpbHRlcnNXaXRo
b3V0Q29uZGl0aW9uc0J5dGVjb2RlV3JpdHRlbik7CisgICAgICAgICAgICBBU1NFUlQoIW1fZmls
dGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW4pOworICAgICAgICAgICAgQVNTRVJUKCFt
X2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4pOworICAgICAgICAgICAgQVNTRVJUKCFt
X2FjdGlvbnNXcml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9zb3VyY2VXcml0dGVuKTsK
KyAgICAgICAgICAgIHdyaXRlVG9GaWxlKHNvdXJjZUpTT04uaXM4Qml0KCkpOworICAgICAgICAg
ICAgbV9zb3VyY2VXcml0dGVuICs9IHNpemVvZihib29sKTsKKyAgICAgICAgICAgIGlmIChzb3Vy
Y2VKU09OLmlzOEJpdCgpKSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IHNlcmlhbGl6ZWRMZW5n
dGggPSBzb3VyY2VKU09OLmxlbmd0aCgpICogc2l6ZW9mKExDaGFyKTsKKyAgICAgICAgICAgICAg
ICB3cml0ZVRvRmlsZShEYXRhKHNvdXJjZUpTT04uY2hhcmFjdGVyczgoKSwgc2VyaWFsaXplZExl
bmd0aCkpOworICAgICAgICAgICAgICAgIG1fc291cmNlV3JpdHRlbiArPSBzZXJpYWxpemVkTGVu
Z3RoOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzaXplX3Qgc2VyaWFs
aXplZExlbmd0aCA9IHNvdXJjZUpTT04ubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOworICAgICAg
ICAgICAgICAgIHdyaXRlVG9GaWxlKERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oc291cmNlSlNPTi5jaGFyYWN0ZXJzMTYoKSksIHNlcmlhbGl6ZWRMZW5ndGgpKTsKKyAgICAg
ICAgICAgICAgICBtX3NvdXJjZVdyaXR0ZW4gKz0gc2VyaWFsaXplZExlbmd0aDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCB3cml0ZUZpbHRlcnNXaXRo
b3V0Q29uZGl0aW9uc0J5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mJiBieXRlY29kZSkgZmlu
YWwKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFtX2ZpbHRlcnNXaXRoQ29uZGl0aW9u
Qnl0ZWNvZGVXcml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9jb25kaXRpb25GaWx0ZXJz
Qnl0ZWNvZGVXcml0dGVuKTsKKyAgICAgICAgICAgIG1fZmlsdGVyc1dpdGhvdXRDb25kaXRpb25z
Qnl0ZWNvZGVXcml0dGVuICs9IGJ5dGVjb2RlLnNpemUoKTsKKyAgICAgICAgICAgIHdyaXRlVG9G
aWxlKERhdGEoYnl0ZWNvZGUuZGF0YSgpLCBieXRlY29kZS5zaXplKCkpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgdm9pZCB3cml0ZUZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2Rl
KFZlY3RvcjxERkFCeXRlY29kZT4mJiBieXRlY29kZSkgZmluYWwKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKCFtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4pOworICAgICAg
ICAgICAgbV9maWx0ZXJzV2l0aENvbmRpdGlvbkJ5dGVjb2RlV3JpdHRlbiArPSBieXRlY29kZS5z
aXplKCk7CisgICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKGJ5dGVjb2RlLmRhdGEoKSwgYnl0
ZWNvZGUuc2l6ZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgd3JpdGVU
b3BVUkxGaWx0ZXJzQnl0ZWNvZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBmaW5h
bAorICAgICAgICB7CisgICAgICAgICAgICBtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0
ZW4gKz0gYnl0ZWNvZGUuc2l6ZSgpOworICAgICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0YShieXRl
Y29kZS5kYXRhKCksIGJ5dGVjb2RlLnNpemUoKSkpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCB3cml0ZUFjdGlvbnMoVmVjdG9yPFNlcmlhbGl6ZWRBY3Rpb25CeXRlPiYmIGFjdGlvbnMsIGJv
b2wgY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluKSBmaW5hbAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoIW1fZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVXcml0dGVuKTsK
KyAgICAgICAgICAgIEFTU0VSVCghbV9maWx0ZXJzV2l0aENvbmRpdGlvbkJ5dGVjb2RlV3JpdHRl
bik7CisgICAgICAgICAgICBBU1NFUlQoIW1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRl
bik7CisgICAgICAgICAgICBBU1NFUlQoIW1fYWN0aW9uc1dyaXR0ZW4pOworICAgICAgICAgICAg
bV9hY3Rpb25zV3JpdHRlbiArPSBhY3Rpb25zLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29uZGl0
aW9uc0FwcGx5T25seVRvRG9tYWluID0gY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluOworICAg
ICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0YShhY3Rpb25zLmRhdGEoKSwgYWN0aW9ucy5zaXplKCkp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBmaW5hbGl6ZSgpIGZpbmFsCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fbWV0YURhdGEuc291cmNlU2l6ZSA9IG1fc291cmNlV3Jp
dHRlbjsKKyAgICAgICAgICAgIG1fbWV0YURhdGEuYWN0aW9uc1NpemUgPSBtX2FjdGlvbnNXcml0
dGVuOworICAgICAgICAgICAgbV9tZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRl
Y29kZVNpemUgPSBtX2ZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlV3JpdHRlbjsKKyAg
ICAgICAgICAgIG1fbWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplID0g
bV9maWx0ZXJzV2l0aENvbmRpdGlvbkJ5dGVjb2RlV3JpdHRlbjsKKyAgICAgICAgICAgIG1fbWV0
YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplID0gbV9jb25kaXRpb25GaWx0ZXJz
Qnl0ZWNvZGVXcml0dGVuOworICAgICAgICAgICAgbV9tZXRhRGF0YS5jb25kaXRpb25zQXBwbHlP
bmx5VG9Eb21haW4gPSBtX2NvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbjsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgRGF0YSBoZWFkZXIgPSBlbmNvZGVDb250ZW50RXh0ZW5zaW9uTWV0YURh
dGEobV9tZXRhRGF0YSk7CisgICAgICAgICAgICBpZiAoIW1fZmlsZUVycm9yICYmIFdlYkNvcmU6
OnNlZWtGaWxlKG1fZmlsZUhhbmRsZSwgMGxsLCBXZWJDb3JlOjpGaWxlU2Vla09yaWdpbjo6U2Vl
a0Zyb21CZWdpbm5pbmcpID09IC0xKSB7CisgICAgICAgICAgICAgICAgV2ViQ29yZTo6Y2xvc2VG
aWxlKG1fZmlsZUhhbmRsZSk7CisgICAgICAgICAgICAgICAgbV9maWxlRXJyb3IgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgd3JpdGVUb0ZpbGUoaGVhZGVyKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYm9vbCBoYWRFcnJvcldoaWxlV3JpdGluZ1RvRmlsZSgpIHsg
cmV0dXJuIG1fZmlsZUVycm9yOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHdyaXRl
VG9GaWxlKGJvb2wgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdyaXRlVG9GaWxlKERh
dGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKHZhbHVl
KSkpOworICAgICAgICB9CisgICAgICAgIHZvaWQgd3JpdGVUb0ZpbGUoY29uc3QgRGF0YSYgZGF0
YSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2ZpbGVFcnJvciAmJiAhd3JpdGVEYXRh
VG9GaWxlKGRhdGEsIG1fZmlsZUhhbmRsZSkpIHsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpj
bG9zZUZpbGUobV9maWxlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICBtX2ZpbGVFcnJvciA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFdlYkNvcmU6
OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZpbGVIYW5kbGU7CisgICAgICAgIENvbnRlbnRFeHRlbnNp
b25NZXRhRGF0YSYgbV9tZXRhRGF0YTsKKyAgICAgICAgc2l6ZV90IG1fZmlsdGVyc1dpdGhvdXRD
b25kaXRpb25zQnl0ZWNvZGVXcml0dGVuIHsgMCB9OworICAgICAgICBzaXplX3QgbV9maWx0ZXJz
V2l0aENvbmRpdGlvbkJ5dGVjb2RlV3JpdHRlbiB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1fY29u
ZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbiB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1fYWN0
aW9uc1dyaXR0ZW4geyAwIH07CisgICAgICAgIHNpemVfdCBtX3NvdXJjZVdyaXR0ZW4geyAwIH07
CisgICAgICAgIGJvb2wgbV9jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4geyBmYWxzZSB9Owor
ICAgICAgICBib29sIG1fZmlsZUVycm9yIHsgZmFsc2UgfTsKKyAgICB9OworCisgICAgYXV0byB0
ZW1wb3JhcnlGaWxlSGFuZGxlID0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsK
KyAgICBTdHJpbmcgdGVtcG9yYXJ5RmlsZVBhdGggPSBXZWJDb3JlOjpvcGVuVGVtcG9yYXJ5Rmls
ZSgiQ29udGVudEV4dGVuc2lvbiIsIHRlbXBvcmFyeUZpbGVIYW5kbGUpOworICAgIGlmICh0ZW1w
b3JhcnlGaWxlSGFuZGxlID09IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCisg
ICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVk
OworICAgIAorICAgIGNoYXIgaW52YWxpZEhlYWRlcltDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRl
clNpemVdOworICAgIG1lbXNldChpbnZhbGlkSGVhZGVyLCAweEZGLCBzaXplb2YoaW52YWxpZEhl
YWRlcikpOworICAgIC8vIFRoaXMgaGVhZGVyIHdpbGwgYmUgcmV3cml0dGVuIGluIENvbXBpbGF0
aW9uQ2xpZW50OjpmaW5hbGl6ZS4KKyAgICBpZiAoV2ViQ29yZTo6d3JpdGVUb0ZpbGUodGVtcG9y
YXJ5RmlsZUhhbmRsZSwgaW52YWxpZEhlYWRlciwgc2l6ZW9mKGludmFsaWRIZWFkZXIpKSA9PSAt
MSkgeworICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7Cisg
ICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVk
OworICAgIH0KKworICAgIENvbXBpbGF0aW9uQ2xpZW50IGNvbXBpbGF0aW9uQ2xpZW50KHRlbXBv
cmFyeUZpbGVIYW5kbGUsIG1ldGFEYXRhKTsKKyAgICAKKyAgICBpZiAoYXV0byBjb21waWxlckVy
cm9yID0gY29tcGlsZVJ1bGVMaXN0KGNvbXBpbGF0aW9uQ2xpZW50LCBXVEZNb3ZlKGpzb24pKSkg
eworICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7CisgICAg
ICAgIHJldHVybiBjb21waWxlckVycm9yOworICAgIH0KKyAgICBpZiAoY29tcGlsYXRpb25DbGll
bnQuaGFkRXJyb3JXaGlsZVdyaXRpbmdUb0ZpbGUoKSkgeworICAgICAgICBXZWJDb3JlOjpjbG9z
ZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7CisgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworICAgIH0KKyAgICAKKyAgICBtYXBwZWRE
YXRhID0gYWRvcHRBbmRNYXBGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUsIDAsIG1ldGFEYXRhLmZp
bGVTaXplKCkpOworICAgIGlmIChtYXBwZWREYXRhLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKworICAgIGlmICgh
V2ViQ29yZTo6bW92ZUZpbGUodGVtcG9yYXJ5RmlsZVBhdGgsIGZpbmFsRmlsZVBhdGgpKQorICAg
ICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsK
KworICAgIHJldHVybiB7IH07Cit9CisKK3N0YXRpYyBSZWY8QVBJOjpDb250ZW50RXh0ZW5zaW9u
PiBjcmVhdGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBDb250ZW50
RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKK3sKKyAg
ICBhdXRvIHNoYXJlZE1lbW9yeSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUoY29uc3Rf
Y2FzdDx1aW50OF90Kj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEuc2l6ZSgpLCBXZWJLaXQ6
OlNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAgIGNvbnN0IHNpemVfdCBo
ZWFkZXJBbmRTb3VyY2VTaXplID0gQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplICsgbWV0
YURhdGEuc291cmNlU2l6ZTsKKyAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEg
PSBXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoCisgICAgICAgIFdURk1v
dmUoc2hhcmVkTWVtb3J5KSwKKyAgICAgICAgZmlsZURhdGEsCisgICAgICAgIENvbmRpdGlvbnNB
cHBseU9ubHlUb0RvbWFpbk9mZnNldCwKKyAgICAgICAgaGVhZGVyQW5kU291cmNlU2l6ZSwKKyAg
ICAgICAgbWV0YURhdGEuYWN0aW9uc1NpemUsCisgICAgICAgIGhlYWRlckFuZFNvdXJjZVNpemUK
KyAgICAgICAgICAgICsgbWV0YURhdGEuYWN0aW9uc1NpemUsCisgICAgICAgIG1ldGFEYXRhLmZp
bHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwKKyAgICAgICAgaGVhZGVyQW5kU291
cmNlU2l6ZQorICAgICAgICAgICAgKyBtZXRhRGF0YS5hY3Rpb25zU2l6ZQorICAgICAgICAgICAg
KyBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUsCisgICAgICAg
IG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwKKyAgICAgICAgaGVh
ZGVyQW5kU291cmNlU2l6ZQorICAgICAgICAgICAgKyBtZXRhRGF0YS5hY3Rpb25zU2l6ZQorICAg
ICAgICAgICAgKyBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUK
KyAgICAgICAgICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXpl
LAorICAgICAgICBtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUKKyAgICAp
OworICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0gV2ViS2l0OjpXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGEpKTsKKyAgICByZXR1cm4gQVBJOjpDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoaWRlbnRp
ZmllciwgV1RGTW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb24pKTsKK30KKwordm9pZCBDb250
ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJp
bmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lv
bj4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fcmVhZFF1
ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBpZGVudGlmaWVy
ID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNv
bGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0cnVjdGVkUGF0aChzdG9y
ZVBhdGgsIGlkZW50aWZpZXIpOworICAgICAgICAKKyAgICAgICAgQ29udGVudEV4dGVuc2lvbk1l
dGFEYXRhIG1ldGFEYXRhOworICAgICAgICBEYXRhIGZpbGVEYXRhOworICAgICAgICBpZiAoIW9w
ZW5BbmRNYXBDb250ZW50RXh0ZW5zaW9uKHBhdGgsIG1ldGFEYXRhLCBmaWxlRGF0YSkpIHsKKyAg
ICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCBF
cnJvcjo6TG9va3VwRmFpbGVkKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobWV0YURhdGEudmVyc2lvbiAhPSBD
b250ZW50RXh0ZW5zaW9uU3RvcmU6OkN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24p
IHsKKyAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9
IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxs
cHRyLCBFcnJvcjo6VmVyc2lvbk1pc21hdGNoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBpZGVudGlm
aWVyID0gV1RGTW92ZShpZGVudGlmaWVyKSwgZmlsZURhdGEgPSBXVEZNb3ZlKGZpbGVEYXRhKSwg
bWV0YURhdGEgPSBXVEZNb3ZlKG1ldGFEYXRhKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY3Jl
YXRlRXh0ZW5zaW9uKGlkZW50aWZpZXIsIG1ldGFEYXRhLCBmaWxlRGF0YSksIHsgfSk7CisgICAg
ICAgIH0pOworICAgIH0pOworfQorCit2b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Z2V0QXZh
aWxhYmxlQ29udGVudEV4dGVuc2lvbklkZW50aWZpZXJzKEZ1bmN0aW9uPHZvaWQoV1RGOjpWZWN0
b3I8V1RGOjpTdHJpbmc+KT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9yZWFkUXVldWUt
PmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHN0b3JlUGF0aCA9IG1f
c3RvcmVQYXRoLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGZ1
bGxQYXRocyA9IFdlYkNvcmU6Omxpc3REaXJlY3Rvcnkoc3RvcmVQYXRoLCBjb25zdHJ1Y3RlZFBh
dGhGaWx0ZXIoKSk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGlkZW50aWZpZXJzOworICAgICAg
ICBpZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZ1bGxQYXRocy5zaXplKCkpOwor
ICAgICAgICBjb25zdCBhdXRvIHByZWZpeExlbmd0aCA9IGNvbnN0cnVjdGVkUGF0aFByZWZpeCgp
Lmxlbmd0aCgpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGggOiBmdWxsUGF0aHMpCisg
ICAgICAgICAgICBpZGVudGlmaWVycy51bmNoZWNrZWRBcHBlbmQoV2ViQ29yZTo6ZGVjb2RlRnJv
bUZpbGVuYW1lKHBhdGguc3Vic3RyaW5nKHBhdGgucmV2ZXJzZUZpbmQoJy8nKSArIDEgKyBwcmVm
aXhMZW5ndGgpKSk7CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgaWRlbnRpZmllcnMgPSBXVEZNb3ZlKGlkZW50aWZpZXJz
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoaWRl
bnRpZmllcnMpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ29udGVudEV4dGVu
c2lvblN0b3JlOjpjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRl
bnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6OkNv
bnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBBdG9taWNTdHJpbmc6OmluaXQoKTsKKyAgICBtX2NvbXBpbGVRdWV1ZS0+ZGlzcGF0Y2go
W3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIu
aXNvbGF0ZWRDb3B5KCksIGpzb24gPSBqc29uLmlzb2xhdGVkQ29weSgpLCBzdG9yZVBhdGggPSBt
X3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0
cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50aWZpZXIpOworCisgICAgICAgIENvbnRlbnRFeHRl
bnNpb25NZXRhRGF0YSBtZXRhRGF0YTsKKyAgICAgICAgRGF0YSBmaWxlRGF0YTsKKyAgICAgICAg
YXV0byBlcnJvciA9IGNvbXBpbGVkVG9GaWxlKFdURk1vdmUoanNvbiksIHBhdGgsIG1ldGFEYXRh
LCBmaWxlRGF0YSk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwg
ZXJyb3IgPSBXVEZNb3ZlKGVycm9yKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0geworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG51bGxw
dHIsIGVycm9yKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0g
V1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgaWRlbnRpZmllciA9IFdURk1vdmUoaWRlbnRpZmllciks
IGZpbGVEYXRhID0gV1RGTW92ZShmaWxlRGF0YSksIG1ldGFEYXRhID0gV1RGTW92ZShtZXRhRGF0
YSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKKyAg
ICAgICAgICAgIFJlZlB0cjxBUEk6OkNvbnRlbnRFeHRlbnNpb24+IGNvbnRlbnRFeHRlbnNpb24g
PSBjcmVhdGVFeHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURhdGEsIGZpbGVEYXRhKTsKKyAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRlbnRFeHRlbnNpb24sIHsgfSk7CisgICAgICAg
IH0pOworICAgIH0pOworfQorCit2b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6cmVtb3ZlQ29u
dGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9p
ZChzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX3JlbW92ZVF1
ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBpZGVudGlmaWVy
ID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNv
bGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0cnVjdGVkUGF0aChzdG9y
ZVBhdGgsIGlkZW50aWZpZXIpOworCisgICAgICAgIGlmICghV2ViQ29yZTo6ZGVsZXRlRmlsZShw
YXRoKSkgeworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRU
aGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KEVycm9yOjpSZW1vdmVGYWlsZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3Rl
Y3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cih7IH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBDb250ZW50RXh0ZW5zaW9u
U3RvcmU6OnN5bmNocm9ub3VzUmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKQoreworICAgIGZv
ciAoY29uc3QgYXV0byYgcGF0aCA6IFdlYkNvcmU6Omxpc3REaXJlY3RvcnkobV9zdG9yZVBhdGgs
ICIqIikpCisgICAgICAgIFdlYkNvcmU6OmRlbGV0ZUZpbGUocGF0aCk7Cit9CisKK3ZvaWQgQ29u
dGVudEV4dGVuc2lvblN0b3JlOjppbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb24oY29u
c3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgYXV0byBmaWxlID0gV2ViQ29yZTo6
b3BlbkZpbGUoY29uc3RydWN0ZWRQYXRoKG1fc3RvcmVQYXRoLCBpZGVudGlmaWVyKSwgV2ViQ29y
ZTo6T3BlbkZvcldyaXRlKTsKKyAgICBpZiAoZmlsZSA9PSBXZWJDb3JlOjppbnZhbGlkUGxhdGZv
cm1GaWxlSGFuZGxlKQorICAgICAgICByZXR1cm47CisgICAgQ29udGVudEV4dGVuc2lvbk1ldGFE
YXRhIGludmFsaWRIZWFkZXIgPSB7MCwgMCwgMCwgMCwgMCwgMH07CisgICAgYXV0byBieXRlc1dy
aXR0ZW4gPSBXZWJDb3JlOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPigmaW52YWxpZEhlYWRlciksIHNpemVvZihpbnZhbGlkSGVhZGVyKSk7CisgICAgQVNT
RVJUX1VOVVNFRChieXRlc1dyaXR0ZW4sIGJ5dGVzV3JpdHRlbiA9PSBzaXplb2YoaW52YWxpZEhl
YWRlcikpOworICAgIFdlYkNvcmU6OmNsb3NlRmlsZShmaWxlKTsKK30KKwordm9pZCBDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OmdldENvbnRlbnRFeHRlbnNpb25Tb3VyY2UoY29uc3QgV1RGOjpTdHJp
bmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoV1RGOjpTdHJpbmcpPiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBtX3JlYWRRdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIHN0b3Jl
UGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvIHBhdGgg
PSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsKKyAgICAgICAgCisgICAg
ICAgIGF1dG8gY29tcGxldGUgPSBbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhp
cyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFN0cmlu
ZyBzb3VyY2UpIG11dGFibGUgeworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc291cmNlID0gc291cmNlLmlzb2xhdGVk
Q29weSgpXSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc291cmNlKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgQ29udGVudEV4dGVu
c2lvbk1ldGFEYXRhIG1ldGFEYXRhOworICAgICAgICBEYXRhIGZpbGVEYXRhOworICAgICAgICBp
ZiAoIW9wZW5BbmRNYXBDb250ZW50RXh0ZW5zaW9uKHBhdGgsIG1ldGFEYXRhLCBmaWxlRGF0YSkp
IHsKKyAgICAgICAgICAgIGNvbXBsZXRlKHsgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobWV0YURhdGEudmVyc2lvbikgeworICAg
ICAgICBjYXNlIDk6CisgICAgICAgICAgICBpZiAoIW1ldGFEYXRhLnNvdXJjZVNpemUpIHsKKyAg
ICAgICAgICAgICAgICBjb21wbGV0ZSh7IH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2wgaXM4Qml0ID0gZmlsZURhdGEuZGF0YSgpW0Nv
bnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZV07CisgICAgICAgICAgICBzaXplX3Qgc3RhcnQg
PSBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUgKyBzaXplb2YoYm9vbCk7CisgICAgICAg
ICAgICBzaXplX3QgbGVuZ3RoID0gbWV0YURhdGEuc291cmNlU2l6ZSAtIHNpemVvZihib29sKTsK
KyAgICAgICAgICAgIGlmIChpczhCaXQpCisgICAgICAgICAgICAgICAgY29tcGxldGUoU3RyaW5n
KGZpbGVEYXRhLmRhdGEoKSArIHN0YXJ0LCBsZW5ndGgpKTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIEFTU0VSVCghKGxlbmd0aCAlIHNpemVvZihVQ2hhcikpKTsKKyAgICAg
ICAgICAgICAgICBjb21wbGV0ZShTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+
KGZpbGVEYXRhLmRhdGEoKSArIHN0YXJ0KSwgbGVuZ3RoIC8gc2l6ZW9mKFVDaGFyKSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8g
T2xkZXIgdmVyc2lvbnMgY2Fubm90IHJlY292ZXIgdGhlIG9yaWdpbmFsIEpTT04gc291cmNlIGZy
b20gZGlzay4KKyAgICAgICAgY29tcGxldGUoeyB9KTsKKyAgICB9KTsKK30KKworY29uc3Qgc3Rk
OjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpCit7
CisgICAgY2xhc3MgQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSA6IHB1YmxpYyBz
dGQ6OmVycm9yX2NhdGVnb3J5IHsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IG5v
ZXhjZXB0IGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAiY29udGVudCBleHRl
bnNpb24gc3RvcmUiOworICAgICAgICB9CisKKyAgICAgICAgc3RkOjpzdHJpbmcgbWVzc2FnZShp
bnQgZXJyb3JDb2RlKSBjb25zdCBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHN0YXRpY19jYXN0PENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+KGVycm9yQ29kZSkpIHsK
KyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6TG9va3VwRmFp
bGVkOgorICAgICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIGxv
b2t1cC4iOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpW
ZXJzaW9uTWlzbWF0Y2g6CisgICAgICAgICAgICAgICAgcmV0dXJuICJWZXJzaW9uIG9mIGZpbGUg
ZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiBvZiBpbnRlcnByZXRlci4iOworICAgICAgICAgICAgY2Fz
ZSBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOgorICAgICAgICAg
ICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIGNvbXBpbGUuIjsKKyAgICAg
ICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6UmVtb3ZlRmFpbGVkOgor
ICAgICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIHJlbW92ZS4i
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29udGVudEV4dGVu
c2lvblN0b3JlRXJyb3JDYXRlZ29yeT4gY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7Cisg
ICAgcmV0dXJuIGNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5OworfQorCit9IC8vIG5hbWVz
cGFjZSBBUEkKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxl
TGlzdFN0b3JlLmNwcAkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDE1ICsyNCwxNSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBUElD
b250ZW50RXh0ZW5zaW9uU3RvcmUuaCIKKyNpbmNsdWRlICJBUElDb250ZW50UnVsZUxpc3RTdG9y
ZS5oIgogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAotI2luY2x1ZGUgIkFQSUNv
bnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJBUElDb250ZW50UnVsZUxpc3QuaCIKICNpbmNs
dWRlICJOZXR3b3JrQ2FjaGVEYXRhLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlRmlsZVN5c3Rl
bS5oIgogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgotI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0Lmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oPgogI2luY2x1ZGUgPHN0cmluZz4KQEAg
LTQ1LDU5ICs0NSw3OCBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDo6TmV0d29ya0NhY2hlOwog
CiBuYW1lc3BhY2UgQVBJIHsKLQotQ29udGVudEV4dGVuc2lvblN0b3JlJiBDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OmRlZmF1bHRTdG9yZSgpCisgICAgCitDb250ZW50UnVsZUxpc3RTdG9yZSYgQ29u
dGVudFJ1bGVMaXN0U3RvcmU6OmxlZ2FjeURlZmF1bHRTdG9yZSgpCiB7Ci0gICAgc3RhdGljIENv
bnRlbnRFeHRlbnNpb25TdG9yZSogZGVmYXVsdFN0b3JlID0gYWRvcHRSZWYobmV3IENvbnRlbnRF
eHRlbnNpb25TdG9yZSkubGVha1JlZigpOworICAgIGNvbnN0IGJvb2wgbGVnYWN5RmlsZW5hbWUg
PSB0cnVlOworICAgIHN0YXRpYyBDb250ZW50UnVsZUxpc3RTdG9yZSogZGVmYXVsdFN0b3JlID0g
YWRvcHRSZWYobmV3IENvbnRlbnRSdWxlTGlzdFN0b3JlKGxlZ2FjeUZpbGVuYW1lKSkubGVha1Jl
ZigpOwogICAgIHJldHVybiAqZGVmYXVsdFN0b3JlOwogfQorICAgIAorQ29udGVudFJ1bGVMaXN0
U3RvcmUmIENvbnRlbnRSdWxlTGlzdFN0b3JlOjpub25MZWdhY3lEZGVmYXVsdFN0b3JlKCkKK3sK
KyAgICBjb25zdCBib29sIGxlZ2FjeUZpbGVuYW1lID0gZmFsc2U7CisgICAgc3RhdGljIENvbnRl
bnRSdWxlTGlzdFN0b3JlKiBkZWZhdWx0U3RvcmUgPSBhZG9wdFJlZihuZXcgQ29udGVudFJ1bGVM
aXN0U3RvcmUobGVnYWN5RmlsZW5hbWUpKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuICpkZWZhdWx0
U3RvcmU7Cit9CisgICAgCitDb250ZW50UnVsZUxpc3RTdG9yZSYgQ29udGVudFJ1bGVMaXN0U3Rv
cmU6OmRlZmF1bHRTdG9yZShib29sIGxlZ2FjeUZpbGVuYW1lKQoreworICAgIGlmIChsZWdhY3lG
aWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIGxlZ2FjeURlZmF1bHRTdG9yZSgpOworICAgIHJldHVy
biBub25MZWdhY3lEZGVmYXVsdFN0b3JlKCk7Cit9CiAKLVJlZjxDb250ZW50RXh0ZW5zaW9uU3Rv
cmU+IENvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3RvcmVXaXRoUGF0aChjb25zdCBXVEY6OlN0cmlu
ZyYgc3RvcmVQYXRoKQorUmVmPENvbnRlbnRSdWxlTGlzdFN0b3JlPiBDb250ZW50UnVsZUxpc3RT
dG9yZTo6c3RvcmVXaXRoUGF0aChjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoLCBib29sIGxl
Z2FjeUZpbGVuYW1lKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbnRlbnRFeHRlbnNp
b25TdG9yZShzdG9yZVBhdGgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb250ZW50UnVs
ZUxpc3RTdG9yZShzdG9yZVBhdGgsIGxlZ2FjeUZpbGVuYW1lKSk7CiB9CiAKLUNvbnRlbnRFeHRl
bnNpb25TdG9yZTo6Q29udGVudEV4dGVuc2lvblN0b3JlKCkKLSAgICA6IENvbnRlbnRFeHRlbnNp
b25TdG9yZShkZWZhdWx0U3RvcmVQYXRoKCkpCitDb250ZW50UnVsZUxpc3RTdG9yZTo6Q29udGVu
dFJ1bGVMaXN0U3RvcmUoYm9vbCBsZWdhY3lGaWxlbmFtZSkKKyAgICA6IENvbnRlbnRSdWxlTGlz
dFN0b3JlKGRlZmF1bHRTdG9yZVBhdGgobGVnYWN5RmlsZW5hbWUpLCBsZWdhY3lGaWxlbmFtZSkK
IHsKIH0KIAotQ29udGVudEV4dGVuc2lvblN0b3JlOjpDb250ZW50RXh0ZW5zaW9uU3RvcmUoY29u
c3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCkKK0NvbnRlbnRSdWxlTGlzdFN0b3JlOjpDb250ZW50
UnVsZUxpc3RTdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoLCBib29sIGxlZ2FjeUZp
bGVuYW1lKQogICAgIDogbV9zdG9yZVBhdGgoc3RvcmVQYXRoKQotICAgICwgbV9jb21waWxlUXVl
dWUoV29ya1F1ZXVlOjpjcmVhdGUoIkNvbnRlbnRFeHRlbnNpb25TdG9yZSBDb21waWxlIFF1ZXVl
IiwgV29ya1F1ZXVlOjpUeXBlOjpDb25jdXJyZW50KSkKLSAgICAsIG1fcmVhZFF1ZXVlKFdvcmtR
dWV1ZTo6Y3JlYXRlKCJDb250ZW50RXh0ZW5zaW9uU3RvcmUgUmVhZCBRdWV1ZSIpKQotICAgICwg
bV9yZW1vdmVRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiQ29udGVudEV4dGVuc2lvblN0b3JlIFJl
bW92ZSBRdWV1ZSIpKQorICAgICwgbV9jb21waWxlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIkNv
bnRlbnRSdWxlTGlzdFN0b3JlIENvbXBpbGUgUXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OkNvbmN1
cnJlbnQpKQorICAgICwgbV9yZWFkUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIkNvbnRlbnRSdWxl
TGlzdFN0b3JlIFJlYWQgUXVldWUiKSkKKyAgICAsIG1fcmVtb3ZlUXVldWUoV29ya1F1ZXVlOjpj
cmVhdGUoIkNvbnRlbnRSdWxlTGlzdFN0b3JlIFJlbW92ZSBRdWV1ZSIpKQorICAgICwgbV9sZWdh
Y3lGaWxlbmFtZShsZWdhY3lGaWxlbmFtZSkKIHsKICAgICBXZWJDb3JlOjptYWtlQWxsRGlyZWN0
b3JpZXMoc3RvcmVQYXRoKTsKIH0KIAotQ29udGVudEV4dGVuc2lvblN0b3JlOjp+Q29udGVudEV4
dGVuc2lvblN0b3JlKCkKK0NvbnRlbnRSdWxlTGlzdFN0b3JlOjp+Q29udGVudFJ1bGVMaXN0U3Rv
cmUoKQogewogfQogCi1zdGF0aWMgY29uc3QgU3RyaW5nJiBjb25zdHJ1Y3RlZFBhdGhQcmVmaXgo
KQorc3RhdGljIGNvbnN0IFN0cmluZyYgY29uc3RydWN0ZWRQYXRoUHJlZml4KGJvb2wgbGVnYWN5
RmlsZW5hbWUpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gcHJlZml4KCJD
b250ZW50RXh0ZW5zaW9uLSIpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHBy
ZWZpeCgiQ29udGVudFJ1bGVMaXN0LSIpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IGxlZ2FjeVByZWZpeCgiQ29udGVudEV4dGVuc2lvbi0iKTsKKyAgICBpZiAobGVnYWN5Rmls
ZW5hbWUpCisgICAgICAgIHJldHVybiBsZWdhY3lQcmVmaXg7CiAgICAgcmV0dXJuIHByZWZpeDsK
IH0KIAotc3RhdGljIGNvbnN0IFN0cmluZyBjb25zdHJ1Y3RlZFBhdGhGaWx0ZXIoKQorc3RhdGlj
IGNvbnN0IFN0cmluZyBjb25zdHJ1Y3RlZFBhdGhGaWx0ZXIoYm9vbCBsZWdhY3lGaWxlbmFtZSkK
IHsKLSAgICByZXR1cm4gbWFrZVN0cmluZyhjb25zdHJ1Y3RlZFBhdGhQcmVmaXgoKSwgJyonKTsK
KyAgICByZXR1cm4gbWFrZVN0cmluZyhjb25zdHJ1Y3RlZFBhdGhQcmVmaXgobGVnYWN5RmlsZW5h
bWUpLCAnKicpOwogfQogCi1zdGF0aWMgU3RyaW5nIGNvbnN0cnVjdGVkUGF0aChjb25zdCBTdHJp
bmcmIGJhc2UsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKK3N0YXRpYyBTdHJpbmcgY29uc3Ry
dWN0ZWRQYXRoKGNvbnN0IFN0cmluZyYgYmFzZSwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBi
b29sIGxlZ2FjeUZpbGVuYW1lKQogewotICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoYmFzZSwgbWFrZVN0cmluZyhjb25zdHJ1Y3RlZFBhdGhQcmVmaXgoKSwgV2Vi
Q29yZTo6ZW5jb2RlRm9yRmlsZU5hbWUoaWRlbnRpZmllcikpKTsKKyAgICByZXR1cm4gV2ViQ29y
ZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2UsIG1ha2VTdHJpbmcoY29uc3RydWN0ZWRQ
YXRoUHJlZml4KGxlZ2FjeUZpbGVuYW1lKSwgV2ViQ29yZTo6ZW5jb2RlRm9yRmlsZU5hbWUoaWRl
bnRpZmllcikpKTsKIH0KIAogLy8gVGhlIHNpemUgYW5kIG9mZnNldCBvZiB0aGUgZGVuc2VseSBw
YWNrZWQgYnl0ZXMgaW4gdGhlIGZpbGUsIG5vdCBzaXplb2YgYW5kIG9mZnNldG9mLCB3aGljaCB3
b3VsZAogLy8gcmVwcmVzZW50IHRoZSBzaXplIGFuZCBvZmZzZXQgb2YgdGhlIHN0cnVjdHVyZSBp
biBtZW1vcnksIHBvc3NpYmx5IHdpdGggY29tcGlsZXItYWRkZWQgcGFkZGluZy4KLWNvbnN0IHNp
emVfdCBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUgPSAyICogc2l6ZW9mKHVpbnQzMl90
KSArIDUgKiBzaXplb2YodWludDY0X3QpOworY29uc3Qgc2l6ZV90IENvbnRlbnRSdWxlTGlzdEZp
bGVIZWFkZXJTaXplID0gMiAqIHNpemVvZih1aW50MzJfdCkgKyA1ICogc2l6ZW9mKHVpbnQ2NF90
KTsKIGNvbnN0IHNpemVfdCBDb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQgPSBzaXpl
b2YodWludDMyX3QpICsgNSAqIHNpemVvZih1aW50NjRfdCk7CiAKLXN0cnVjdCBDb250ZW50RXh0
ZW5zaW9uTWV0YURhdGEgewotICAgIHVpbnQzMl90IHZlcnNpb24geyBDb250ZW50RXh0ZW5zaW9u
U3RvcmU6OkN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24gfTsKK3N0cnVjdCBDb250
ZW50UnVsZUxpc3RNZXRhRGF0YSB7CisgICAgdWludDMyX3QgdmVyc2lvbiB7IENvbnRlbnRSdWxl
TGlzdFN0b3JlOjpDdXJyZW50Q29udGVudFJ1bGVMaXN0RmlsZVZlcnNpb24gfTsKICAgICB1aW50
NjRfdCBzb3VyY2VTaXplIHsgMCB9OwogICAgIHVpbnQ2NF90IGFjdGlvbnNTaXplIHsgMCB9Owog
ICAgIHVpbnQ2NF90IGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSB7IDAgfTsK
QEAgLTEwNyw3ICsxMjYsNyBAQCBzdHJ1Y3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIHsKICAg
ICAKICAgICBzaXplX3QgZmlsZVNpemUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIENv
bnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZQorICAgICAgICByZXR1cm4gQ29udGVudFJ1bGVM
aXN0RmlsZUhlYWRlclNpemUKICAgICAgICAgICAgICsgc291cmNlU2l6ZQogICAgICAgICAgICAg
KyBhY3Rpb25zU2l6ZQogICAgICAgICAgICAgKyBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRl
Y29kZVNpemUKQEAgLTExNiw3ICsxMzUsNyBAQCBzdHJ1Y3QgQ29udGVudEV4dGVuc2lvbk1ldGFE
YXRhIHsKICAgICB9CiB9OwogCi1zdGF0aWMgRGF0YSBlbmNvZGVDb250ZW50RXh0ZW5zaW9uTWV0
YURhdGEoY29uc3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSkKK3N0YXRpYyBE
YXRhIGVuY29kZUNvbnRlbnRSdWxlTGlzdE1ldGFEYXRhKGNvbnN0IENvbnRlbnRSdWxlTGlzdE1l
dGFEYXRhJiBtZXRhRGF0YSkKIHsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29k
ZXI7CiAKQEAgLTEyOCwxMSArMTQ3LDExIEBAIHN0YXRpYyBEYXRhIGVuY29kZUNvbnRlbnRFeHRl
bnNpb25NZXRhRGEKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5
dGVjb2RlU2l6ZTsKICAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlU
b0RvbWFpbjsKIAotICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9PSBDb250ZW50RXh0
ZW5zaW9uRmlsZUhlYWRlclNpemUpOworICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9
PSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZSk7CiAgICAgcmV0dXJuIERhdGEoZW5jb2Rl
ci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOwogfQogCi1zdGF0aWMgYm9vbCBkZWNv
ZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEoQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRh
RGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCitzdGF0aWMgYm9vbCBkZWNvZGVDb250ZW50UnVs
ZUxpc3RNZXRhRGF0YShDb250ZW50UnVsZUxpc3RNZXRhRGF0YSYgbWV0YURhdGEsIGNvbnN0IERh
dGEmIGZpbGVEYXRhKQogewogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgIGZpbGVEYXRh
LmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKSB7CkBAIC0xNjIsMTMgKzE4MSwxMyBAQCBzdGF0aWMgYm9vbCBkZWNv
ZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLXN0YXRp
YyBib29sIG9wZW5BbmRNYXBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgcGF0aCwgQ29u
dGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSwgRGF0YSYgZmlsZURhdGEpCitzdGF0aWMg
Ym9vbCBvcGVuQW5kTWFwQ29udGVudFJ1bGVMaXN0KGNvbnN0IFN0cmluZyYgcGF0aCwgQ29udGVu
dFJ1bGVMaXN0TWV0YURhdGEmIG1ldGFEYXRhLCBEYXRhJiBmaWxlRGF0YSkKIHsKICAgICBmaWxl
RGF0YSA9IG1hcEZpbGUoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpLmRh
dGEoKSk7CiAgICAgaWYgKGZpbGVEYXRhLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoIWRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShtZXRhRGF0YSwgZmls
ZURhdGEpKQorICAgIGlmICghZGVjb2RlQ29udGVudFJ1bGVMaXN0TWV0YURhdGEobWV0YURhdGEs
IGZpbGVEYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBA
IC0xODgsMTMgKzIwNywxMyBAQCBzdGF0aWMgYm9vbCB3cml0ZURhdGFUb0ZpbGUoY29uc3QgRGF0
YSYgCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLXN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgY29t
cGlsZWRUb0ZpbGUoU3RyaW5nJiYganNvbiwgY29uc3QgU3RyaW5nJiBmaW5hbEZpbGVQYXRoLCBD
b250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBEYXRhJiBtYXBwZWREYXRhKQorc3Rh
dGljIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRvRmlsZShTdHJpbmcmJiBqc29uLCBjb25zdCBT
dHJpbmcmIGZpbmFsRmlsZVBhdGgsIENvbnRlbnRSdWxlTGlzdE1ldGFEYXRhJiBtZXRhRGF0YSwg
RGF0YSYgbWFwcGVkRGF0YSkKIHsKICAgICB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM7CiAKICAgICBjbGFzcyBDb21waWxhdGlvbkNsaWVudCBmaW5hbCA6IHB1Ymxp
YyBDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgQ29tcGlsYXRpb25DbGllbnQoV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVIYW5k
bGUsIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEpCisgICAgICAgIENvbXBpbGF0
aW9uQ2xpZW50KFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlSGFuZGxlLCBDb250ZW50
UnVsZUxpc3RNZXRhRGF0YSYgbWV0YURhdGEpCiAgICAgICAgICAgICA6IG1fZmlsZUhhbmRsZShm
aWxlSGFuZGxlKQogICAgICAgICAgICAgLCBtX21ldGFEYXRhKG1ldGFEYXRhKQogICAgICAgICB7
CkBAIC0yNjYsNyArMjg1LDcgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRvRmls
ZShTdAogICAgICAgICAgICAgbV9tZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNp
emUgPSBtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW47CiAgICAgICAgICAgICBtX21l
dGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbiA9IG1fY29uZGl0aW9uc0FwcGx5T25s
eVRvRG9tYWluOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBEYXRhIGhlYWRlciA9IGVuY29k
ZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShtX21ldGFEYXRhKTsKKyAgICAgICAgICAgIERhdGEg
aGVhZGVyID0gZW5jb2RlQ29udGVudFJ1bGVMaXN0TWV0YURhdGEobV9tZXRhRGF0YSk7CiAgICAg
ICAgICAgICBpZiAoIW1fZmlsZUVycm9yICYmIFdlYkNvcmU6OnNlZWtGaWxlKG1fZmlsZUhhbmRs
ZSwgMGxsLCBXZWJDb3JlOjpGaWxlU2Vla09yaWdpbjo6U2Vla0Zyb21CZWdpbm5pbmcpID09IC0x
KSB7CiAgICAgICAgICAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKG1fZmlsZUhhbmRsZSk7CiAg
ICAgICAgICAgICAgICAgbV9maWxlRXJyb3IgPSB0cnVlOwpAQCAtMjkwLDcgKzMwOSw3IEBAIHN0
YXRpYyBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZWRUb0ZpbGUoU3QKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIG1fZmlsZUhhbmRsZTsKLSAg
ICAgICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtX21ldGFEYXRhOworICAgICAgICBDb250
ZW50UnVsZUxpc3RNZXRhRGF0YSYgbV9tZXRhRGF0YTsKICAgICAgICAgc2l6ZV90IG1fZmlsdGVy
c1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVXcml0dGVuIHsgMCB9OwogICAgICAgICBzaXplX3Qg
bV9maWx0ZXJzV2l0aENvbmRpdGlvbkJ5dGVjb2RlV3JpdHRlbiB7IDAgfTsKICAgICAgICAgc2l6
ZV90IG1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbiB7IDAgfTsKQEAgLTMwMSwxNiAr
MzIwLDE2IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZWRUb0ZpbGUoU3QKICAgICB9
OwogCiAgICAgYXV0byB0ZW1wb3JhcnlGaWxlSGFuZGxlID0gV2ViQ29yZTo6aW52YWxpZFBsYXRm
b3JtRmlsZUhhbmRsZTsKLSAgICBTdHJpbmcgdGVtcG9yYXJ5RmlsZVBhdGggPSBXZWJDb3JlOjpv
cGVuVGVtcG9yYXJ5RmlsZSgiQ29udGVudEV4dGVuc2lvbiIsIHRlbXBvcmFyeUZpbGVIYW5kbGUp
OworICAgIFN0cmluZyB0ZW1wb3JhcnlGaWxlUGF0aCA9IFdlYkNvcmU6Om9wZW5UZW1wb3JhcnlG
aWxlKCJDb250ZW50UnVsZUxpc3QiLCB0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKICAgICBpZiAodGVt
cG9yYXJ5RmlsZUhhbmRsZSA9PSBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQot
ICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxl
ZDsKKyAgICAgICAgcmV0dXJuIENvbnRlbnRSdWxlTGlzdFN0b3JlOjpFcnJvcjo6Q29tcGlsZUZh
aWxlZDsKICAgICAKLSAgICBjaGFyIGludmFsaWRIZWFkZXJbQ29udGVudEV4dGVuc2lvbkZpbGVI
ZWFkZXJTaXplXTsKKyAgICBjaGFyIGludmFsaWRIZWFkZXJbQ29udGVudFJ1bGVMaXN0RmlsZUhl
YWRlclNpemVdOwogICAgIG1lbXNldChpbnZhbGlkSGVhZGVyLCAweEZGLCBzaXplb2YoaW52YWxp
ZEhlYWRlcikpOwogICAgIC8vIFRoaXMgaGVhZGVyIHdpbGwgYmUgcmV3cml0dGVuIGluIENvbXBp
bGF0aW9uQ2xpZW50OjpmaW5hbGl6ZS4KICAgICBpZiAoV2ViQ29yZTo6d3JpdGVUb0ZpbGUodGVt
cG9yYXJ5RmlsZUhhbmRsZSwgaW52YWxpZEhlYWRlciwgc2l6ZW9mKGludmFsaWRIZWFkZXIpKSA9
PSAtMSkgewogICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7
Ci0gICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFp
bGVkOworICAgICAgICByZXR1cm4gQ29udGVudFJ1bGVMaXN0U3RvcmU6OkVycm9yOjpDb21waWxl
RmFpbGVkOwogICAgIH0KIAogICAgIENvbXBpbGF0aW9uQ2xpZW50IGNvbXBpbGF0aW9uQ2xpZW50
KHRlbXBvcmFyeUZpbGVIYW5kbGUsIG1ldGFEYXRhKTsKQEAgLTMyMSwyNCArMzQwLDI0IEBAIHN0
YXRpYyBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZWRUb0ZpbGUoU3QKICAgICB9CiAgICAgaWYgKGNv
bXBpbGF0aW9uQ2xpZW50LmhhZEVycm9yV2hpbGVXcml0aW5nVG9GaWxlKCkpIHsKICAgICAgICAg
V2ViQ29yZTo6Y2xvc2VGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUpOwotICAgICAgICByZXR1cm4g
Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKyAgICAgICAgcmV0
dXJuIENvbnRlbnRSdWxlTGlzdFN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKICAgICB9CiAg
ICAgCiAgICAgbWFwcGVkRGF0YSA9IGFkb3B0QW5kTWFwRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxl
LCAwLCBtZXRhRGF0YS5maWxlU2l6ZSgpKTsKICAgICBpZiAobWFwcGVkRGF0YS5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWls
ZWQ7CisgICAgICAgIHJldHVybiBDb250ZW50UnVsZUxpc3RTdG9yZTo6RXJyb3I6OkNvbXBpbGVG
YWlsZWQ7CiAKICAgICBpZiAoIVdlYkNvcmU6Om1vdmVGaWxlKHRlbXBvcmFyeUZpbGVQYXRoLCBm
aW5hbEZpbGVQYXRoKSkKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJy
b3I6OkNvbXBpbGVGYWlsZWQ7CisgICAgICAgIHJldHVybiBDb250ZW50UnVsZUxpc3RTdG9yZTo6
RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CiAKICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgUmVm
PEFQSTo6Q29udGVudEV4dGVuc2lvbj4gY3JlYXRlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgY29uc3QgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSwgY29uc3Qg
RGF0YSYgZmlsZURhdGEpCitzdGF0aWMgUmVmPEFQSTo6Q29udGVudFJ1bGVMaXN0PiBjcmVhdGVF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBDb250ZW50UnVsZUxpc3RN
ZXRhRGF0YSYgbWV0YURhdGEsIGNvbnN0IERhdGEmIGZpbGVEYXRhKQogewogICAgIGF1dG8gc2hh
cmVkTWVtb3J5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZShjb25zdF9jYXN0PHVpbnQ4
X3QqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5zaXplKCksIFdlYktpdDo6U2hhcmVkTWVt
b3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0gICAgY29uc3Qgc2l6ZV90IGhlYWRlckFuZFNv
dXJjZVNpemUgPSBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUgKyBtZXRhRGF0YS5zb3Vy
Y2VTaXplOwotICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSA9IFdlYktpdDo6
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSgKKyAgICBjb25zdCBzaXplX3QgaGVhZGVy
QW5kU291cmNlU2l6ZSA9IENvbnRlbnRSdWxlTGlzdEZpbGVIZWFkZXJTaXplICsgbWV0YURhdGEu
c291cmNlU2l6ZTsKKyAgICBhdXRvIGNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YSA9IFdlYktp
dDo6V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhKAogICAgICAgICBXVEZNb3ZlKHNoYXJl
ZE1lbW9yeSksCiAgICAgICAgIGZpbGVEYXRhLAogICAgICAgICBDb25kaXRpb25zQXBwbHlPbmx5
VG9Eb21haW5PZmZzZXQsCkBAIC0zNTcsMjUgKzM3NiwyNSBAQCBzdGF0aWMgUmVmPEFQSTo6Q29u
dGVudEV4dGVuc2lvbj4gY3JlYXRlCiAgICAgICAgICAgICArIG1ldGFEYXRhLmZpbHRlcnNXaXRo
Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwKICAgICAgICAgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0
ZXJzQnl0ZWNvZGVTaXplCiAgICAgKTsKLSAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lv
biA9IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShj
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKSk7Ci0gICAgcmV0dXJuIEFQSTo6Q29udGVudEV4
dGVuc2lvbjo6Y3JlYXRlKGlkZW50aWZpZXIsIFdURk1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uKSk7CisgICAgYXV0byBjb21waWxlZENvbnRlbnRSdWxlTGlzdCA9IFdlYktpdDo6V2ViQ29t
cGlsZWRDb250ZW50UnVsZUxpc3Q6OmNyZWF0ZShXVEZNb3ZlKGNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0RGF0YSkpOworICAgIHJldHVybiBBUEk6OkNvbnRlbnRSdWxlTGlzdDo6Y3JlYXRlKGlkZW50
aWZpZXIsIFdURk1vdmUoY29tcGlsZWRDb250ZW50UnVsZUxpc3QpKTsKIH0KIAotdm9pZCBDb250
ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJp
bmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lv
bj4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBDb250ZW50UnVs
ZUxpc3RTdG9yZTo6bG9va3VwQ29udGVudFJ1bGVMaXN0KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVu
dGlmaWVyLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRSdWxlTGlzdD4sIHN0ZDo6
ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fcmVhZFF1ZXVlLT5kaXNw
YXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBpZGVudGlmaWVyID0gaWRlbnRp
Zmllci5pc29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5
KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7Ci0gICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlk
ZW50aWZpZXIpOworICAgIG1fcmVhZFF1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBpZGVudGlmaWVyID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwgc3Rv
cmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGxlZ2FjeUZpbGVuYW1lID0gbV9s
ZWdhY3lGaWxlbmFtZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBwYXRoID0gY29uc3RydWN0ZWRQYXRoKHN0
b3JlUGF0aCwgaWRlbnRpZmllciwgbGVnYWN5RmlsZW5hbWUpOwogICAgICAgICAKLSAgICAgICAg
Q29udGVudEV4dGVuc2lvbk1ldGFEYXRhIG1ldGFEYXRhOworICAgICAgICBDb250ZW50UnVsZUxp
c3RNZXRhRGF0YSBtZXRhRGF0YTsKICAgICAgICAgRGF0YSBmaWxlRGF0YTsKLSAgICAgICAgaWYg
KCFvcGVuQW5kTWFwQ29udGVudEV4dGVuc2lvbihwYXRoLCBtZXRhRGF0YSwgZmlsZURhdGEpKSB7
CisgICAgICAgIGlmICghb3BlbkFuZE1hcENvbnRlbnRSdWxlTGlzdChwYXRoLCBtZXRhRGF0YSwg
ZmlsZURhdGEpKSB7CiAgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3Rl
Y3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIobnVsbHB0ciwgRXJyb3I6Okxvb2t1cEZhaWxlZCk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1ldGFE
YXRhLnZlcnNpb24gIT0gQ29udGVudEV4dGVuc2lvblN0b3JlOjpDdXJyZW50Q29udGVudEV4dGVu
c2lvbkZpbGVWZXJzaW9uKSB7CisgICAgICAgIGlmIChtZXRhRGF0YS52ZXJzaW9uICE9IENvbnRl
bnRSdWxlTGlzdFN0b3JlOjpDdXJyZW50Q29udGVudFJ1bGVMaXN0RmlsZVZlcnNpb24pIHsKICAg
ICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCBF
cnJvcjo6VmVyc2lvbk1pc21hdGNoKTsKICAgICAgICAgICAgIH0pOwpAQCAtMzg4LDE0ICs0MDcs
MTQgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENvbnRlbgogICAgIH0pOwog
fQogCi12b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Z2V0QXZhaWxhYmxlQ29udGVudEV4dGVu
c2lvbklkZW50aWZpZXJzKEZ1bmN0aW9uPHZvaWQoV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+KT4g
Y29tcGxldGlvbkhhbmRsZXIpCit2b2lkIENvbnRlbnRSdWxlTGlzdFN0b3JlOjpnZXRBdmFpbGFi
bGVDb250ZW50UnVsZUxpc3RJZGVudGlmaWVycyhGdW5jdGlvbjx2b2lkKFdURjo6VmVjdG9yPFdU
Rjo6U3RyaW5nPik+IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fcmVhZFF1ZXVlLT5kaXNw
YXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzdG9yZVBhdGggPSBtX3N0b3Jl
UGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICBtX3JlYWRRdWV1ZS0+ZGlzcGF0Y2goW3Byb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0
ZWRDb3B5KCksIGxlZ2FjeUZpbGVuYW1lID0gbV9sZWdhY3lGaWxlbmFtZSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKIAotICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBmdWxsUGF0aHMgPSBXZWJDb3JlOjpsaXN0RGlyZWN0b3J5KHN0b3Jl
UGF0aCwgY29uc3RydWN0ZWRQYXRoRmlsdGVyKCkpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBm
dWxsUGF0aHMgPSBXZWJDb3JlOjpsaXN0RGlyZWN0b3J5KHN0b3JlUGF0aCwgY29uc3RydWN0ZWRQ
YXRoRmlsdGVyKGxlZ2FjeUZpbGVuYW1lKSk7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGlkZW50
aWZpZXJzOwogICAgICAgICBpZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZ1bGxQ
YXRocy5zaXplKCkpOwotICAgICAgICBjb25zdCBhdXRvIHByZWZpeExlbmd0aCA9IGNvbnN0cnVj
dGVkUGF0aFByZWZpeCgpLmxlbmd0aCgpOworICAgICAgICBjb25zdCBhdXRvIHByZWZpeExlbmd0
aCA9IGNvbnN0cnVjdGVkUGF0aFByZWZpeChsZWdhY3lGaWxlbmFtZSkubGVuZ3RoKCk7CiAgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6IGZ1bGxQYXRocykKICAgICAgICAgICAgIGlkZW50
aWZpZXJzLnVuY2hlY2tlZEFwcGVuZChXZWJDb3JlOjpkZWNvZGVGcm9tRmlsZW5hbWUocGF0aC5z
dWJzdHJpbmcocGF0aC5yZXZlcnNlRmluZCgnLycpICsgMSArIHByZWZpeExlbmd0aCkpKTsKIApA
QCAtNDA1LDEzICs0MjQsMTMgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmdldEF2YWls
YWJsZQogICAgIH0pOwogfQogCi12b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Y29tcGlsZUNv
bnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5n
JiYganNvbiwgRnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiwgc3Rk
OjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIENvbnRlbnRSdWxlTGlzdFN0
b3JlOjpjb21waWxlQ29udGVudFJ1bGVMaXN0KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVy
LCBXVEY6OlN0cmluZyYmIGpzb24sIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudFJ1
bGVMaXN0Piwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQXRv
bWljU3RyaW5nOjppbml0KCk7Ci0gICAgbV9jb21waWxlUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVk
Q29weSgpLCBqc29uID0ganNvbi5pc29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0gbV9zdG9yZVBh
dGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBh
dGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsKKyAgICBtX2NvbXBpbGVRdWV1ZS0+ZGlzcGF0Y2go
W3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIu
aXNvbGF0ZWRDb3B5KCksIGxlZ2FjeUZpbGVuYW1lID0gbV9sZWdhY3lGaWxlbmFtZSwganNvbiA9
IGpzb24uaXNvbGF0ZWRDb3B5KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29w
eSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBt
dXRhYmxlIHsKKyAgICAgICAgYXV0byBwYXRoID0gY29uc3RydWN0ZWRQYXRoKHN0b3JlUGF0aCwg
aWRlbnRpZmllciwgbGVnYWN5RmlsZW5hbWUpOwogCi0gICAgICAgIENvbnRlbnRFeHRlbnNpb25N
ZXRhRGF0YSBtZXRhRGF0YTsKKyAgICAgICAgQ29udGVudFJ1bGVMaXN0TWV0YURhdGEgbWV0YURh
dGE7CiAgICAgICAgIERhdGEgZmlsZURhdGE7CiAgICAgICAgIGF1dG8gZXJyb3IgPSBjb21waWxl
ZFRvRmlsZShXVEZNb3ZlKGpzb24pLCBwYXRoLCBtZXRhRGF0YSwgZmlsZURhdGEpOwogICAgICAg
ICBpZiAoZXJyb3IpIHsKQEAgLTQyMiwxNiArNDQxLDE2IEBAIHZvaWQgQ29udGVudEV4dGVuc2lv
blN0b3JlOjpjb21waWxlQ29udGUKICAgICAgICAgfQogCiAgICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGlkZW50
aWZpZXIgPSBXVEZNb3ZlKGlkZW50aWZpZXIpLCBmaWxlRGF0YSA9IFdURk1vdmUoZmlsZURhdGEp
LCBtZXRhRGF0YSA9IFdURk1vdmUobWV0YURhdGEpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAgICAgICBSZWZQdHI8QVBJOjpDb250ZW50
RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uID0gY3JlYXRlRXh0ZW5zaW9uKGlkZW50aWZpZXIs
IG1ldGFEYXRhLCBmaWxlRGF0YSk7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250
ZW50RXh0ZW5zaW9uLCB7IH0pOworICAgICAgICAgICAgUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVM
aXN0PiBjb250ZW50UnVsZUxpc3QgPSBjcmVhdGVFeHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURh
dGEsIGZpbGVEYXRhKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRlbnRSdWxl
TGlzdCwgeyB9KTsKICAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgQ29udGVudEV4dGVu
c2lvblN0b3JlOjpyZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVu
dGlmaWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVy
KQordm9pZCBDb250ZW50UnVsZUxpc3RTdG9yZTo6cmVtb3ZlQ29udGVudFJ1bGVMaXN0KGNvbnN0
IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fcmVtb3ZlUXVldWUtPmRpc3BhdGNoKFtwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xh
dGVkQ29weSgpLCBzdG9yZVBhdGggPSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgYXV0byBwYXRoID0gY29uc3RydWN0ZWRQYXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllcik7
CisgICAgbV9yZW1vdmVRdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIHN0b3JlUGF0aCA9
IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgpLCBsZWdhY3lGaWxlbmFtZSA9IG1fbGVnYWN5Rmls
ZW5hbWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7CisgICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0cnVjdGVkUGF0aChzdG9yZVBhdGgs
IGlkZW50aWZpZXIsIGxlZ2FjeUZpbGVuYW1lKTsKIAogICAgICAgICBpZiAoIVdlYkNvcmU6OmRl
bGV0ZUZpbGUocGF0aCkpIHsKICAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
cHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKQEAgLTQ0NiwyNyArNDY1LDI3IEBAIHZv
aWQgQ29udGVudEV4dGVuc2lvblN0b3JlOjpyZW1vdmVDb250ZW4KICAgICB9KTsKIH0KIAotdm9p
ZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN5bmNocm9ub3VzUmVtb3ZlQWxsQ29udGVudEV4dGVu
c2lvbnMoKQordm9pZCBDb250ZW50UnVsZUxpc3RTdG9yZTo6c3luY2hyb25vdXNSZW1vdmVBbGxD
b250ZW50UnVsZUxpc3RzKCkKIHsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGggOiBXZWJDb3Jl
OjpsaXN0RGlyZWN0b3J5KG1fc3RvcmVQYXRoLCAiKiIpKQogICAgICAgICBXZWJDb3JlOjpkZWxl
dGVGaWxlKHBhdGgpOwogfQogCi12b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6aW52YWxpZGF0
ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyKQor
dm9pZCBDb250ZW50UnVsZUxpc3RTdG9yZTo6aW52YWxpZGF0ZUNvbnRlbnRSdWxlTGlzdFZlcnNp
b24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIpCiB7Ci0gICAgYXV0byBmaWxlID0gV2Vi
Q29yZTo6b3BlbkZpbGUoY29uc3RydWN0ZWRQYXRoKG1fc3RvcmVQYXRoLCBpZGVudGlmaWVyKSwg
V2ViQ29yZTo6T3BlbkZvcldyaXRlKTsKKyAgICBhdXRvIGZpbGUgPSBXZWJDb3JlOjpvcGVuRmls
ZShjb25zdHJ1Y3RlZFBhdGgobV9zdG9yZVBhdGgsIGlkZW50aWZpZXIsIG1fbGVnYWN5RmlsZW5h
bWUpLCBXZWJDb3JlOjpPcGVuRm9yV3JpdGUpOwogICAgIGlmIChmaWxlID09IFdlYkNvcmU6Omlu
dmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCiAgICAgICAgIHJldHVybjsKLSAgICBDb250ZW50RXh0
ZW5zaW9uTWV0YURhdGEgaW52YWxpZEhlYWRlciA9IHswLCAwLCAwLCAwLCAwLCAwfTsKKyAgICBD
b250ZW50UnVsZUxpc3RNZXRhRGF0YSBpbnZhbGlkSGVhZGVyID0gezAsIDAsIDAsIDAsIDAsIDB9
OwogICAgIGF1dG8gYnl0ZXNXcml0dGVuID0gV2ViQ29yZTo6d3JpdGVUb0ZpbGUoZmlsZSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJmludmFsaWRIZWFkZXIpLCBzaXplb2YoaW52YWxp
ZEhlYWRlcikpOwogICAgIEFTU0VSVF9VTlVTRUQoYnl0ZXNXcml0dGVuLCBieXRlc1dyaXR0ZW4g
PT0gc2l6ZW9mKGludmFsaWRIZWFkZXIpKTsKICAgICBXZWJDb3JlOjpjbG9zZUZpbGUoZmlsZSk7
CiB9CiAKLXZvaWQgQ29udGVudEV4dGVuc2lvblN0b3JlOjpnZXRDb250ZW50RXh0ZW5zaW9uU291
cmNlKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKFdURjo6U3Ry
aW5nKT4gY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIENvbnRlbnRSdWxlTGlzdFN0b3JlOjpnZXRD
b250ZW50UnVsZUxpc3RTb3VyY2UoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0
aW9uPHZvaWQoV1RGOjpTdHJpbmcpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3JlYWRR
dWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmll
ciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlz
b2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewotICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3Rv
cmVQYXRoLCBpZGVudGlmaWVyKTsKKyAgICBtX3JlYWRRdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRD
b3B5KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgpLCBsZWdhY3lGaWxl
bmFtZSA9IG1fbGVnYWN5RmlsZW5hbWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0cnVj
dGVkUGF0aChzdG9yZVBhdGgsIGlkZW50aWZpZXIsIGxlZ2FjeUZpbGVuYW1lKTsKICAgICAgICAg
CiAgICAgICAgIGF1dG8gY29tcGxldGUgPSBbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVj
dGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KFN0cmluZyBzb3VyY2UpIG11dGFibGUgewogICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc291cmNlID0gc291cmNlLmlz
b2xhdGVkQ29weSgpXSB7CkBAIC00NzQsOSArNDkzLDkgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9u
U3RvcmU6OmdldENvbnRlbnRFeAogICAgICAgICAgICAgfSk7CiAgICAgICAgIH07CiAgICAgICAg
IAotICAgICAgICBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgbWV0YURhdGE7CisgICAgICAgIENv
bnRlbnRSdWxlTGlzdE1ldGFEYXRhIG1ldGFEYXRhOwogICAgICAgICBEYXRhIGZpbGVEYXRhOwot
ICAgICAgICBpZiAoIW9wZW5BbmRNYXBDb250ZW50RXh0ZW5zaW9uKHBhdGgsIG1ldGFEYXRhLCBm
aWxlRGF0YSkpIHsKKyAgICAgICAgaWYgKCFvcGVuQW5kTWFwQ29udGVudFJ1bGVMaXN0KHBhdGgs
IG1ldGFEYXRhLCBmaWxlRGF0YSkpIHsKICAgICAgICAgICAgIGNvbXBsZXRlKHsgfSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTQ4Nyw4ICs1MDYsOCBAQCB2b2lkIENvbnRl
bnRFeHRlbnNpb25TdG9yZTo6Z2V0Q29udGVudEV4CiAgICAgICAgICAgICAgICAgY29tcGxldGUo
eyB9KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBib29sIGlzOEJpdCA9IGZpbGVEYXRhLmRhdGEoKVtDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRl
clNpemVdOwotICAgICAgICAgICAgc2l6ZV90IHN0YXJ0ID0gQ29udGVudEV4dGVuc2lvbkZpbGVI
ZWFkZXJTaXplICsgc2l6ZW9mKGJvb2wpOworICAgICAgICAgICAgYm9vbCBpczhCaXQgPSBmaWxl
RGF0YS5kYXRhKClbQ29udGVudFJ1bGVMaXN0RmlsZUhlYWRlclNpemVdOworICAgICAgICAgICAg
c2l6ZV90IHN0YXJ0ID0gQ29udGVudFJ1bGVMaXN0RmlsZUhlYWRlclNpemUgKyBzaXplb2YoYm9v
bCk7CiAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0gbWV0YURhdGEuc291cmNlU2l6ZSAtIHNp
emVvZihib29sKTsKICAgICAgICAgICAgIGlmIChpczhCaXQpCiAgICAgICAgICAgICAgICAgY29t
cGxldGUoU3RyaW5nKGZpbGVEYXRhLmRhdGEoKSArIHN0YXJ0LCBsZW5ndGgpKTsKQEAgLTUwNCw5
ICs1MjMsOSBAQCB2b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Z2V0Q29udGVudEV4CiAgICAg
fSk7CiB9CiAKLWNvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkmIGNvbnRlbnRFeHRlbnNpb25TdG9y
ZUVycm9yQ2F0ZWdvcnkoKQorY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudFJ1bGVM
aXN0U3RvcmVFcnJvckNhdGVnb3J5KCkKIHsKLSAgICBjbGFzcyBDb250ZW50RXh0ZW5zaW9uU3Rv
cmVFcnJvckNhdGVnb3J5IDogcHVibGljIHN0ZDo6ZXJyb3JfY2F0ZWdvcnkgeworICAgIGNsYXNz
IENvbnRlbnRSdWxlTGlzdFN0b3JlRXJyb3JDYXRlZ29yeSA6IHB1YmxpYyBzdGQ6OmVycm9yX2Nh
dGVnb3J5IHsKICAgICAgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IG5vZXhjZXB0IGZpbmFs
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAiY29udGVudCBleHRlbnNpb24gc3RvcmUi
OwpAQCAtNTE0LDE0ICs1MzMsMTQgQEAgY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVu
dEV4dGVucwogCiAgICAgICAgIHN0ZDo6c3RyaW5nIG1lc3NhZ2UoaW50IGVycm9yQ29kZSkgY29u
c3QgZmluYWwKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPihlcnJvckNvZGUpKSB7Ci0gICAgICAgICAgICBjYXNl
IENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6Okxvb2t1cEZhaWxlZDoKKyAgICAgICAgICAg
IHN3aXRjaCAoc3RhdGljX2Nhc3Q8Q29udGVudFJ1bGVMaXN0U3RvcmU6OkVycm9yPihlcnJvckNv
ZGUpKSB7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRSdWxlTGlzdFN0b3JlOjpFcnJvcjo6TG9v
a3VwRmFpbGVkOgogICAgICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3IgZHVy
aW5nIGxvb2t1cC4iOwotICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVy
cm9yOjpWZXJzaW9uTWlzbWF0Y2g6CisgICAgICAgICAgICBjYXNlIENvbnRlbnRSdWxlTGlzdFN0
b3JlOjpFcnJvcjo6VmVyc2lvbk1pc21hdGNoOgogICAgICAgICAgICAgICAgIHJldHVybiAiVmVy
c2lvbiBvZiBmaWxlIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gb2YgaW50ZXJwcmV0ZXIuIjsKLSAg
ICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxl
ZDoKKyAgICAgICAgICAgIGNhc2UgQ29udGVudFJ1bGVMaXN0U3RvcmU6OkVycm9yOjpDb21waWxl
RmFpbGVkOgogICAgICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5n
IGNvbXBpbGUuIjsKLSAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJv
cjo6UmVtb3ZlRmFpbGVkOgorICAgICAgICAgICAgY2FzZSBDb250ZW50UnVsZUxpc3RTdG9yZTo6
RXJyb3I6OlJlbW92ZUZhaWxlZDoKICAgICAgICAgICAgICAgICByZXR1cm4gIlVuc3BlY2lmaWVk
IGVycm9yIGR1cmluZyByZW1vdmUuIjsKICAgICAgICAgICAgIH0KIApAQCAtNTI5LDggKzU0OCw4
IEBAIGNvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkmIGNvbnRlbnRFeHRlbnMKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29udGVudEV4dGVuc2lvblN0b3Jl
RXJyb3JDYXRlZ29yeT4gY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7Ci0gICAgcmV0dXJu
IGNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxDb250ZW50UnVsZUxpc3RTdG9yZUVycm9yQ2F0ZWdvcnk+IGNvbnRlbnRSdWxlTGlzdEVycm9y
Q2F0ZWdvcnk7CisgICAgcmV0dXJuIGNvbnRlbnRSdWxlTGlzdEVycm9yQ2F0ZWdvcnk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9B
UElDb250ZW50UnVsZUxpc3RTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaAkocmV2aXNpb24gMjE2NTM5KQko
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5oOjIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1
bGVMaXN0U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5j
bHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSA8c3lzdGVtX2Vycm9yPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFdvcmtRdWV1ZTsK
K30KKworbmFtZXNwYWNlIEFQSSB7CisKK2NsYXNzIENvbnRlbnRFeHRlbnNpb247CisKK2NsYXNz
IENvbnRlbnRFeHRlbnNpb25TdG9yZSBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6
VHlwZTo6Q29udGVudEV4dGVuc2lvblN0b3JlPiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBF
cnJvciB7CisgICAgICAgIExvb2t1cEZhaWxlZCA9IDEsCisgICAgICAgIFZlcnNpb25NaXNtYXRj
aCwKKyAgICAgICAgQ29tcGlsZUZhaWxlZCwKKyAgICAgICAgUmVtb3ZlRmFpbGVkCisgICAgfTsK
KyAgICAKKyAgICAvLyBUaGlzIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIGEgZnVu
Y3Rpb25hbCBjaGFuZ2UgaXMgbWFkZSB0byB0aGUgYnl0ZWNvZGUsIGZpbGUgZm9ybWF0LCBldGMu
CisgICAgLy8gdG8gcHJldmVudCBjcmFzaGluZyB3aGlsZSBsb2FkaW5nIG9sZCBkYXRhLgorICAg
IC8vIEFsc28gdXBkYXRlIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Z2V0Q29udGVudEV4dGVuc2lv
blNvdXJjZSB0byBiZSBhYmxlIHRvIGZpbmQgdGhlIG9yaWdpbmFsIEpTT04KKyAgICAvLyBzb3Vy
Y2UgZnJvbSBvbGQgdmVyc2lvbnMuCisgICAgY29uc3Qgc3RhdGljIHVpbnQzMl90IEN1cnJlbnRD
b250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24gPSA5OworCisgICAgc3RhdGljIENvbnRlbnRFeHRl
bnNpb25TdG9yZSYgZGVmYXVsdFN0b3JlKCk7CisgICAgc3RhdGljIFJlZjxDb250ZW50RXh0ZW5z
aW9uU3RvcmU+IHN0b3JlV2l0aFBhdGgoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7CisK
KyAgICBleHBsaWNpdCBDb250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKKyAgICBleHBsaWNpdCBDb250
ZW50RXh0ZW5zaW9uU3RvcmUoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7CisgICAgdmly
dHVhbCB+Q29udGVudEV4dGVuc2lvblN0b3JlKCk7CisKKyAgICB2b2lkIGNvbXBpbGVDb250ZW50
RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBXVEY6OlN0cmluZyYmIGpz
b24sIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJy
b3JfY29kZSk+KTsKKyAgICB2b2lkIGxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpT
dHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudEV4dGVu
c2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKKyAgICB2b2lkIHJlbW92ZUNvbnRlbnRFeHRlbnNp
b24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoc3RkOjplcnJv
cl9jb2RlKT4pOworICAgIHZvaWQgZ2V0QXZhaWxhYmxlQ29udGVudEV4dGVuc2lvbklkZW50aWZp
ZXJzKEZ1bmN0aW9uPHZvaWQoV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+KT4pOworCisgICAgLy8g
Rm9yIHRlc3Rpbmcgb25seS4KKyAgICB2b2lkIHN5bmNocm9ub3VzUmVtb3ZlQWxsQ29udGVudEV4
dGVuc2lvbnMoKTsKKyAgICB2b2lkIGludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbihj
b25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllcik7CisgICAgdm9pZCBnZXRDb250ZW50RXh0ZW5z
aW9uU291cmNlKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKFdU
Rjo6U3RyaW5nKT4pOworCitwcml2YXRlOgorICAgIFdURjo6U3RyaW5nIGRlZmF1bHRTdG9yZVBh
dGgoKTsKKworICAgIGNvbnN0IFdURjo6U3RyaW5nIG1fc3RvcmVQYXRoOworICAgIFJlZjxXVEY6
OldvcmtRdWV1ZT4gbV9jb21waWxlUXVldWU7CisgICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX3Jl
YWRRdWV1ZTsKKyAgICBSZWY8V1RGOjpXb3JrUXVldWU+IG1fcmVtb3ZlUXVldWU7Cit9OworCitj
b25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVn
b3J5KCk7CisKK2lubGluZSBzdGQ6OmVycm9yX2NvZGUgbWFrZV9lcnJvcl9jb2RlKENvbnRlbnRF
eHRlbnNpb25TdG9yZTo6RXJyb3IgZXJyb3IpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8
aW50PihlcnJvciksIGNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKSB9OworfQor
Cit9IC8vIG5hbWVzcGFjZSBBUEkKKworbmFtZXNwYWNlIHN0ZCB7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBpc19lcnJvcl9jb2RlX2VudW08QVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPiA6
IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworfQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1
bGVMaXN0U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsOSArMzcsOSBAQCBjbGFzcyBXb3JrUXVldWU7CiAKIG5hbWVzcGFjZSBBUEkg
ewogCi1jbGFzcyBDb250ZW50RXh0ZW5zaW9uOworY2xhc3MgQ29udGVudFJ1bGVMaXN0OwogCi1j
bGFzcyBDb250ZW50RXh0ZW5zaW9uU3RvcmUgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmpl
Y3Q6OlR5cGU6OkNvbnRlbnRFeHRlbnNpb25TdG9yZT4geworY2xhc3MgQ29udGVudFJ1bGVMaXN0
U3RvcmUgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OkNvbnRlbnRSdWxl
TGlzdFN0b3JlPiB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBFcnJvciB7CiAgICAgICAgIExv
b2t1cEZhaWxlZCA9IDEsCkBAIC01MCw0NyArNTAsNTAgQEAgcHVibGljOgogICAgIAogICAgIC8v
IFRoaXMgc2hvdWxkIGJlIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgYSBmdW5jdGlvbmFsIGNoYW5n
ZSBpcyBtYWRlIHRvIHRoZSBieXRlY29kZSwgZmlsZSBmb3JtYXQsIGV0Yy4KICAgICAvLyB0byBw
cmV2ZW50IGNyYXNoaW5nIHdoaWxlIGxvYWRpbmcgb2xkIGRhdGEuCi0gICAgLy8gQWxzbyB1cGRh
dGUgQ29udGVudEV4dGVuc2lvblN0b3JlOjpnZXRDb250ZW50RXh0ZW5zaW9uU291cmNlIHRvIGJl
IGFibGUgdG8gZmluZCB0aGUgb3JpZ2luYWwgSlNPTgorICAgIC8vIEFsc28gdXBkYXRlIENvbnRl
bnRSdWxlTGlzdFN0b3JlOjpnZXRDb250ZW50UnVsZUxpc3RTb3VyY2UgdG8gYmUgYWJsZSB0byBm
aW5kIHRoZSBvcmlnaW5hbCBKU09OCiAgICAgLy8gc291cmNlIGZyb20gb2xkIHZlcnNpb25zLgot
ICAgIGNvbnN0IHN0YXRpYyB1aW50MzJfdCBDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJz
aW9uID0gOTsKKyAgICBjb25zdCBzdGF0aWMgdWludDMyX3QgQ3VycmVudENvbnRlbnRSdWxlTGlz
dEZpbGVWZXJzaW9uID0gOTsKIAotICAgIHN0YXRpYyBDb250ZW50RXh0ZW5zaW9uU3RvcmUmIGRl
ZmF1bHRTdG9yZSgpOwotICAgIHN0YXRpYyBSZWY8Q29udGVudEV4dGVuc2lvblN0b3JlPiBzdG9y
ZVdpdGhQYXRoKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpOworICAgIHN0YXRpYyBDb250
ZW50UnVsZUxpc3RTdG9yZSYgZGVmYXVsdFN0b3JlKGJvb2wgbGVnYWN5RmlsZW5hbWUpOworICAg
IHN0YXRpYyBSZWY8Q29udGVudFJ1bGVMaXN0U3RvcmU+IHN0b3JlV2l0aFBhdGgoY29uc3QgV1RG
OjpTdHJpbmcmIHN0b3JlUGF0aCwgYm9vbCBsZWdhY3lGaWxlbmFtZSk7CiAKLSAgICBleHBsaWNp
dCBDb250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKLSAgICBleHBsaWNpdCBDb250ZW50RXh0ZW5zaW9u
U3RvcmUoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7Ci0gICAgdmlydHVhbCB+Q29udGVu
dEV4dGVuc2lvblN0b3JlKCk7Ci0KLSAgICB2b2lkIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGNv
bnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIEZ1bmN0aW9u
PHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsK
LSAgICB2b2lkIGxvb2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50
aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6
ZXJyb3JfY29kZSk+KTsKLSAgICB2b2lkIHJlbW92ZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RG
OjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoc3RkOjplcnJvcl9jb2RlKT4pOwot
ICAgIHZvaWQgZ2V0QXZhaWxhYmxlQ29udGVudEV4dGVuc2lvbklkZW50aWZpZXJzKEZ1bmN0aW9u
PHZvaWQoV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+KT4pOworICAgIGV4cGxpY2l0IENvbnRlbnRS
dWxlTGlzdFN0b3JlKGJvb2wgbGVnYWN5RmlsZW5hbWUpOworICAgIGV4cGxpY2l0IENvbnRlbnRS
dWxlTGlzdFN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgsIGJvb2wgbGVnYWN5Rmls
ZW5hbWUpOworICAgIHZpcnR1YWwgfkNvbnRlbnRSdWxlTGlzdFN0b3JlKCk7CisKKyAgICB2b2lk
IGNvbXBpbGVDb250ZW50UnVsZUxpc3QoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdU
Rjo6U3RyaW5nJiYganNvbiwgRnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxp
c3Q+LCBzdGQ6OmVycm9yX2NvZGUpPik7CisgICAgdm9pZCBsb29rdXBDb250ZW50UnVsZUxpc3Qo
Y29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6
Q29udGVudFJ1bGVMaXN0Piwgc3RkOjplcnJvcl9jb2RlKT4pOworICAgIHZvaWQgcmVtb3ZlQ29u
dGVudFJ1bGVMaXN0KGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lk
KHN0ZDo6ZXJyb3JfY29kZSk+KTsKKyAgICB2b2lkIGdldEF2YWlsYWJsZUNvbnRlbnRSdWxlTGlz
dElkZW50aWZpZXJzKEZ1bmN0aW9uPHZvaWQoV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+KT4pOwog
CiAgICAgLy8gRm9yIHRlc3Rpbmcgb25seS4KLSAgICB2b2lkIHN5bmNocm9ub3VzUmVtb3ZlQWxs
Q29udGVudEV4dGVuc2lvbnMoKTsKLSAgICB2b2lkIGludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9u
VmVyc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllcik7Ci0gICAgdm9pZCBnZXRDb250
ZW50RXh0ZW5zaW9uU291cmNlKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBGdW5jdGlv
bjx2b2lkKFdURjo6U3RyaW5nKT4pOworICAgIHZvaWQgc3luY2hyb25vdXNSZW1vdmVBbGxDb250
ZW50UnVsZUxpc3RzKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlQ29udGVudFJ1bGVMaXN0VmVyc2lv
bihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllcik7CisgICAgdm9pZCBnZXRDb250ZW50UnVs
ZUxpc3RTb3VyY2UoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQo
V1RGOjpTdHJpbmcpPik7CiAKIHByaXZhdGU6Ci0gICAgV1RGOjpTdHJpbmcgZGVmYXVsdFN0b3Jl
UGF0aCgpOwotCisgICAgV1RGOjpTdHJpbmcgZGVmYXVsdFN0b3JlUGF0aChib29sIGxlZ2FjeUZp
bGVuYW1lKTsKKyAgICBzdGF0aWMgQ29udGVudFJ1bGVMaXN0U3RvcmUmIGxlZ2FjeURlZmF1bHRT
dG9yZSgpOworICAgIHN0YXRpYyBDb250ZW50UnVsZUxpc3RTdG9yZSYgbm9uTGVnYWN5RGRlZmF1
bHRTdG9yZSgpOworICAgIAogICAgIGNvbnN0IFdURjo6U3RyaW5nIG1fc3RvcmVQYXRoOwogICAg
IFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9jb21waWxlUXVldWU7CiAgICAgUmVmPFdURjo6V29ya1F1
ZXVlPiBtX3JlYWRRdWV1ZTsKICAgICBSZWY8V1RGOjpXb3JrUXVldWU+IG1fcmVtb3ZlUXVldWU7
CisgICAgYm9vbCBtX2xlZ2FjeUZpbGVuYW1lIHsgZmFsc2UgfTsKIH07CiAKLWNvbnN0IHN0ZDo6
ZXJyb3JfY2F0ZWdvcnkmIGNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKTsKK2Nv
bnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkmIGNvbnRlbnRSdWxlTGlzdFN0b3JlRXJyb3JDYXRlZ29y
eSgpOwogCi1pbmxpbmUgc3RkOjplcnJvcl9jb2RlIG1ha2VfZXJyb3JfY29kZShDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OkVycm9yIGVycm9yKQoraW5saW5lIHN0ZDo6ZXJyb3JfY29kZSBtYWtlX2Vy
cm9yX2NvZGUoQ29udGVudFJ1bGVMaXN0U3RvcmU6OkVycm9yIGVycm9yKQogewotICAgIHJldHVy
biB7IHN0YXRpY19jYXN0PGludD4oZXJyb3IpLCBjb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNh
dGVnb3J5KCkgfTsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSwgY29udGVu
dFJ1bGVMaXN0U3RvcmVFcnJvckNhdGVnb3J5KCkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgQVBJ
CiAKIG5hbWVzcGFjZSBzdGQgewotdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZXJyb3JfY29kZV9lbnVt
PEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcj4gOiBwdWJsaWMgdHJ1ZV90eXBlIHsg
fTsKK3RlbXBsYXRlPD4gc3RydWN0IGlzX2Vycm9yX2NvZGVfZW51bTxBUEk6OkNvbnRlbnRSdWxl
TGlzdFN0b3JlOjpFcnJvcj4gOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tBUElDYXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUz
LDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CiAKIG5hbWVzcGFjZSBBUEkgewot
Y2xhc3MgQ29udGVudEV4dGVuc2lvbjsKLWNsYXNzIENvbnRlbnRFeHRlbnNpb25TdG9yZTsKK2Ns
YXNzIENvbnRlbnRSdWxlTGlzdDsKK2NsYXNzIENvbnRlbnRSdWxlTGlzdFN0b3JlOwogY2xhc3Mg
RXhwZXJpbWVudGFsRmVhdHVyZTsKIGNsYXNzIEZyYW1lSGFuZGxlOwogY2xhc3MgRnJhbWVJbmZv
OwpAQCAtMTYzLDggKzE2Myw4IEBAIFdLX0FERF9BUElfTUFQUElORyhXS1Jlc291cmNlTG9hZFN0
YXRpc3QKIFdLX0FERF9BUElfTUFQUElORyhXS1Nlc3Npb25TdGF0ZVJlZiwgQVBJOjpTZXNzaW9u
U3RhdGUpCiBXS19BRERfQVBJX01BUFBJTkcoV0tUZXh0Q2hlY2tlclJlZiwgV2ViVGV4dENoZWNr
ZXIpCiBXS19BRERfQVBJX01BUFBJTkcoV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYsIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5KQotV0tfQUREX0FQSV9NQVBQSU5HKFdLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZVJlZiwgQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmUpCi1XS19BRERf
QVBJX01BUFBJTkcoV0tVc2VyQ29udGVudEZpbHRlclJlZiwgQVBJOjpDb250ZW50RXh0ZW5zaW9u
KQorV0tfQUREX0FQSV9NQVBQSU5HKFdLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZiwgQVBJ
OjpDb250ZW50UnVsZUxpc3RTdG9yZSkKK1dLX0FERF9BUElfTUFQUElORyhXS1VzZXJDb250ZW50
RmlsdGVyUmVmLCBBUEk6OkNvbnRlbnRSdWxlTGlzdCkKIFdLX0FERF9BUElfTUFQUElORyhXS1Vz
ZXJNZWRpYVBlcm1pc3Npb25DaGVja1JlZiwgVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkp
CiBXS19BRERfQVBJX01BUFBJTkcoV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFJlZiwgVXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eSkKIFdLX0FERF9BUElfTUFQUElORyhXS1VzZXJT
Y3JpcHRSZWYsIEFQSTo6VXNlclNjcmlwdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2VHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLUGFnZUdyb3VwLmNwcAkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldLUGFnZUdy
b3VwLmgiCiAKLSNpbmNsdWRlICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiQVBJ
Q29udGVudFJ1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRXb3JsZC5oIgogI2lu
Y2x1ZGUgIkFQSVVzZXJTY3JpcHQuaCIKICNpbmNsdWRlICJBUElVc2VyU3R5bGVTaGVldC5oIgpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRDb250cm9s
bGVyUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYuY3BwCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYuaCIKIAotI2luY2x1ZGUgIkFQSUNv
bnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJBUElDb250ZW50UnVsZUxpc3QuaCIKICNpbmNs
dWRlICJBUElVc2VyU2NyaXB0LmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5jbHVkZSAi
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaCIKQEAgLTYyLDEzICs2MiwxMyBAQCB2b2lk
IFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVtb3ZlQWxsVXNlCiB2b2lkIFdLVXNlckNvbnRlbnRD
b250cm9sbGVyQWRkVXNlckNvbnRlbnRGaWx0ZXIoV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYg
dXNlckNvbnRlbnRDb250cm9sbGVyUmVmLCBXS1VzZXJDb250ZW50RmlsdGVyUmVmIHVzZXJDb250
ZW50RmlsdGVyUmVmKQogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgdG9J
bXBsKHVzZXJDb250ZW50Q29udHJvbGxlclJlZiktPmFkZENvbnRlbnRFeHRlbnNpb24oKnRvSW1w
bCh1c2VyQ29udGVudEZpbHRlclJlZikpOworICAgIHRvSW1wbCh1c2VyQ29udGVudENvbnRyb2xs
ZXJSZWYpLT5hZGRDb250ZW50UnVsZUxpc3QoKnRvSW1wbCh1c2VyQ29udGVudEZpbHRlclJlZikp
OwogI2VuZGlmCiB9CiAKIHZvaWQgV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZW1vdmVBbGxVc2Vy
Q29udGVudEZpbHRlcnMoV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYgdXNlckNvbnRlbnRDb250
cm9sbGVyUmVmKQogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgdG9JbXBs
KHVzZXJDb250ZW50Q29udHJvbGxlclJlZiktPnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7
CisgICAgdG9JbXBsKHVzZXJDb250ZW50Q29udHJvbGxlclJlZiktPnJlbW92ZUFsbENvbnRlbnRS
dWxlTGlzdHMoKTsKICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJl
Zi5jcHAJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlUmVmLmgiCiAKLSNpbmNsdWRlICJBUElDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuaCIKKyNpbmNsdWRlICJBUElDb250ZW50UnVsZUxpc3RTdG9yZS5oIgogI2luY2x1ZGUgIldL
QVBJQ2FzdC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwpAQCAtMzQsNyArMzQsNyBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogV0tUeXBlSUQgV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlR2V0VHlwZUlEKCkKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHJl
dHVybiB0b0FQSShBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6QVBJVHlwZSk7CisgICAgcmV0
dXJuIHRvQVBJKEFQSTo6Q29udGVudFJ1bGVMaXN0U3RvcmU6OkFQSVR5cGUpOwogI2Vsc2UKICAg
ICByZXR1cm4gMDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29jb2EubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlQ29jb2EubW0JKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgorI2luY2x1ZGUgIkFQSUNvbnRl
bnRSdWxlTGlzdFN0b3JlLmgiCiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCkBA
IC0zMiwxMCArMzIsMTAgQEAKIAogbmFtZXNwYWNlIEFQSSB7CiAKLVN0cmluZyBDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZVBhdGgoKQorU3RyaW5nIENvbnRlbnRSdWxlTGlzdFN0
b3JlOjpkZWZhdWx0U3RvcmVQYXRoKGJvb2wgbGVnYWN5RmlsZW5hbWUpCiB7CiAgICAgc3RhdGlj
IGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47Ci0gICAgc3RhdGljIE5TVVJMICpjb250ZW50RXh0
ZW5zaW9uU3RvcmVVUkw7CisgICAgc3RhdGljIE5TVVJMICpjb250ZW50UnVsZUxpc3RTdG9yZVVS
TDsKIAogICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKICAgICAgICAgTlNVUkwgKnVy
bCA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gVVJMRm9yRGlyZWN0b3J5Ok5TTGli
cmFyeURpcmVjdG9yeSBpbkRvbWFpbjpOU1VzZXJEb21haW5NYXNrIGFwcHJvcHJpYXRlRm9yVVJM
Om51bGxwdHIgY3JlYXRlOk5PIGVycm9yOm51bGxwdHJdOwpAQCAtNTAsMTQgKzUwLDE3IEBAIFN0
cmluZyBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG8KICAgICAgICAgICAgICAgICBi
dW5kbGVJZGVudGlmaWVyID0gW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dLnByb2Nlc3NOYW1l
OwogICAgICAgICAgICAgdXJsID0gW3VybCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6YnVu
ZGxlSWRlbnRpZmllciBpc0RpcmVjdG9yeTpZRVNdOwogICAgICAgICB9Ci0KLSAgICAgICAgY29u
dGVudEV4dGVuc2lvblN0b3JlVVJMID0gW1t1cmwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50
OkAiQ29udGVudEV4dGVuc2lvbnMiIGlzRGlyZWN0b3J5OllFU10gcmV0YWluXTsKKyAgICAgICAg
CisgICAgICAgIGlmIChsZWdhY3lGaWxlbmFtZSkKKyAgICAgICAgICAgIGNvbnRlbnRSdWxlTGlz
dFN0b3JlVVJMID0gW1t1cmwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ29udGVudEV4
dGVuc2lvbnMiIGlzRGlyZWN0b3J5OllFU10gcmV0YWluXTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY29udGVudFJ1bGVMaXN0U3RvcmVVUkwgPSBbW3VybCBVUkxCeUFwcGVuZGluZ1BhdGhD
b21wb25lbnQ6QCJDb250ZW50UnVsZUxpc3RzIiBpc0RpcmVjdG9yeTpZRVNdIHJldGFpbl07CiAg
ICAgfSk7CiAKLSAgICBpZiAoIVtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRl
RGlyZWN0b3J5QXRVUkw6Y29udGVudEV4dGVuc2lvblN0b3JlVVJMIHdpdGhJbnRlcm1lZGlhdGVE
aXJlY3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bnVsbHB0cl0pCi0gICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJUAiLCBjb250ZW50RXh0ZW5zaW9u
U3RvcmVVUkwpOworICAgIGlmICghW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjcmVh
dGVEaXJlY3RvcnlBdFVSTDpjb250ZW50UnVsZUxpc3RTdG9yZVVSTCB3aXRoSW50ZXJtZWRpYXRl
RGlyZWN0b3JpZXM6WUVTIGF0dHJpYnV0ZXM6bmlsIGVycm9yOm51bGxwdHJdKQorICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVAIiwgY29udGVudFJ1bGVMaXN0
U3RvcmVVUkwpOwogCi0gICAgcmV0dXJuIGNvbnRlbnRFeHRlbnNpb25TdG9yZVVSTC5hYnNvbHV0
ZVVSTC5wYXRoLmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbjsKKyAgICByZXR1cm4gY29udGVudFJ1
bGVMaXN0U3RvcmVVUkwuYWJzb2x1dGVVUkwucGF0aC5maWxlU3lzdGVtUmVwcmVzZW50YXRpb247
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvbi5oCShyZXZpc2lvbiAy
MTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4
dGVuc2lvbi5oCShub25leGlzdGVudCkKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KLQotI2lmIFdLX0FQSV9FTkFCTEVECi0KLVdL
X0NMQVNTX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKLUBp
bnRlcmZhY2UgV0tDb250ZW50RXh0ZW5zaW9uIDogTlNPYmplY3QKLQotLyohIEBhYnN0cmFjdCBB
IGNvcHkgb2YgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGNvbnRlbnQgZXh0ZW5zaW9uLiAqLwotQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqaWRlbnRpZmllcjsK
LQotQGVuZAotCi0jZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLm1t
CShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLQ29udGVudEV4dGVuc2lvbi5tbQkobm9uZXhpc3RlbnQpCkBAIC0xLDU2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldLQ29udGVudEV4dGVuc2lv
bkludGVybmFsLmgiCi0KLSNpZiBXS19BUElfRU5BQkxFRAotCi0jaW5jbHVkZSAiV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uLmgiCi0KLUBpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRFeHRlbnNp
b24KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgX2NvbnRlbnRFeHRlbnNpb24tPn5Db250ZW50
RXh0ZW5zaW9uKCk7Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLSNwcmFnbWEgbWFyayBX
S09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgotCi0tIChBUEk6Ok9iamVjdCYpX2FwaU9i
amVjdAotewotICAgIHJldHVybiAqX2NvbnRlbnRFeHRlbnNpb247Ci19Ci0KLS0gKE5TU3RyaW5n
ICopaWRlbnRpZmllcgotewotICAgIHJldHVybiBfY29udGVudEV4dGVuc2lvbi0+bmFtZSgpOwot
fQotCi1AZW5kCi0KLSNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0
ZW5zaW9uSW50ZXJuYWwuaAkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oCShub25leGlzdGVu
dCkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIldLQ29udGVudEV4dGVu
c2lvbi5oIgotCi0jaWYgV0tfQVBJX0VOQUJMRUQKLQotI2ltcG9ydCAiQVBJQ29udGVudEV4dGVu
c2lvbi5oIgotI2ltcG9ydCAiV0tPYmplY3QuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWlu
bGluZSBXS0NvbnRlbnRFeHRlbnNpb24gKndyYXBwZXIoQVBJOjpDb250ZW50RXh0ZW5zaW9uJiBj
b250ZW50RXh0ZW5zaW9uKQotewotICAgIEFTU0VSVChbY29udGVudEV4dGVuc2lvbi53cmFwcGVy
KCkgaXNLaW5kT2ZDbGFzczpbV0tDb250ZW50RXh0ZW5zaW9uIGNsYXNzXV0pOwotICAgIHJldHVy
biAoV0tDb250ZW50RXh0ZW5zaW9uICopY29udGVudEV4dGVuc2lvbi53cmFwcGVyKCk7Ci19Ci0K
LX0KLQotQGludGVyZmFjZSBXS0NvbnRlbnRFeHRlbnNpb24gKCkgPFdLT2JqZWN0PiB7Ci1AcGFj
a2FnZQotICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxBUEk6OkNvbnRlbnRFeHRlbnNpb24+IF9jb250
ZW50RXh0ZW5zaW9uOwotfQotQGVuZAotCi0jZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
Q29udGVudEV4dGVuc2lvblN0b3JlLmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0IDxXZWJLaXQvV0tG
b3VuZGF0aW9uLmg+Ci0KLSNpZiBXS19BUElfRU5BQkxFRAotCi1AY2xhc3MgV0tDb250ZW50RXh0
ZW5zaW9uOwotCi1XS19DTEFTU19BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpCi1AaW50ZXJmYWNlIFdLQ29udGVudEV4dGVuc2lvblN0b3JlIDogTlNPYmplY3QK
LQotKyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRTdG9yZTsKLSsgKGluc3RhbmNldHlwZSlzdG9yZVdp
dGhVUkw6KE5TVVJMICopdXJsOwotCi0tICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9u
OihOU1N0cmluZyAqKSBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoV0tDb250ZW50RXh0ZW5zaW9uICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRs
ZXI7Ci0tICh2b2lkKWxvb2tVcENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmlu
ZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVu
c2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOwotLSAodm9pZClyZW1vdmVDb250
ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOwotLSAodm9p
ZClnZXRBdmFpbGFibGVDb250ZW50RXh0ZW5zaW9uSWRlbnRpZmllcnM6KHZvaWQgKF4pKE5TQXJy
YXk8TlNTdHJpbmcgKj4qKSljb21wbGV0aW9uSGFuZGxlcjsKLQotQGVuZAotCi0jZW5kaWYgLy8g
V0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkocmV2aXNpb24g
MjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRF
eHRlbnNpb25TdG9yZS5tbQkobm9uZXhpc3RlbnQpCkBAIC0xLDE3OSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25JbnRl
cm5hbC5oIgotI2ltcG9ydCAiV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIgotCi0j
aWYgV0tfQVBJX0VOQUJMRUQKLQotI2ltcG9ydCAiQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgi
Ci0jaW1wb3J0ICJXS0Vycm9ySW50ZXJuYWwuaCIKLSNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgot
Ci1zdGF0aWMgV0tFcnJvckNvZGUgdG9XS0Vycm9yQ29kZShjb25zdCBzdGQ6OmVycm9yX2NvZGUm
IGVycm9yKQotewotICAgIEFTU0VSVChlcnJvci5jYXRlZ29yeSgpID09IEFQSTo6Y29udGVudEV4
dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpKTsKLSAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEFQ
STo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcj4oZXJyb3IudmFsdWUoKSkpIHsKLSAgICBj
YXNlIEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6TG9va3VwRmFpbGVkOgotICAg
ICAgICByZXR1cm4gV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxvb2tVcEZhaWxlZDsKLSAg
ICBjYXNlIEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6VmVyc2lvbk1pc21hdGNo
OgotICAgICAgICByZXR1cm4gV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25NaXNt
YXRjaDsKLSAgICBjYXNlIEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGls
ZUZhaWxlZDoKLSAgICAgICAgcmV0dXJuIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21w
aWxlRmFpbGVkOwotICAgIGNhc2UgQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpS
ZW1vdmVGYWlsZWQ6Ci0gICAgICAgIHJldHVybiBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3Jl
UmVtb3ZlRmFpbGVkOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gV0tFcnJvclVua25vd247Ci19Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRFeHRlbnNp
b25TdG9yZQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBfY29udGVudEV4dGVuc2lvblN0b3Jl
LT5+Q29udGVudEV4dGVuc2lvblN0b3JlKCk7Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0K
LSsgKGluc3RhbmNldHlwZSlkZWZhdWx0U3RvcmUKLXsKLSAgICByZXR1cm4gV2ViS2l0Ojp3cmFw
cGVyKEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUoKSk7Ci19Ci0KLSsg
KGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICopdXJsCi17Ci0gICAgUmVmPEFQSTo6
Q29udGVudEV4dGVuc2lvblN0b3JlPiBzdG9yZSA9IEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3Jl
OjpzdG9yZVdpdGhQYXRoKHVybC5hYnNvbHV0ZVVSTC5maWxlU3lzdGVtUmVwcmVzZW50YXRpb24p
OwotICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIoc3RvcmUubGVha1JlZigpKTsKLX0KLQotLSAo
dm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRl
bnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKillbmNvZGVkQ29udGVu
dEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50RXh0ZW5zaW9u
ICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBbc2VsZiBfY29tcGlsZUNv
bnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRl
bnNpb246ZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlv
bkhhbmRsZXIgcmVsZWFzZXNBcmd1bWVudDpOT107Ci19Ci0KLS0gKHZvaWQpX2NvbXBpbGVDb250
ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRD
b250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSlj
b21wbGV0aW9uSGFuZGxlciByZWxlYXNlc0FyZ3VtZW50OihCT09MKXJlbGVhc2VzQXJndW1lbnQK
LXsKLSAgICBTdHJpbmcganNvbihlbmNvZGVkQ29udGVudEV4dGVuc2lvbik7Ci0gICAgaWYgKHJl
bGVhc2VzQXJndW1lbnQpIHsKLSAgICAgICAgW2VuY29kZWRDb250ZW50RXh0ZW5zaW9uIHJlbGVh
c2VdOwotICAgICAgICBlbmNvZGVkQ29udGVudEV4dGVuc2lvbiA9IG5pbDsKLSAgICB9Ci0KLSAg
ICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5jb21waWxlQ29udGVudEV4dGVuc2lvbihpZGVudGlm
aWVyLCBXVEZNb3ZlKGpzb24pLCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29t
cGxldGlvbkhhbmRsZXIpXShSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0
ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0g
ICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gY29tcGlsYXRpb24gZmFpbGVkOiAlcyIs
IGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07Ci0KLSAgICAgICAgICAgIC8vIGVycm9yLnZhbHVl
KCkgY291bGQgaGF2ZSBhIHNwZWNpZmljIGNvbXBpbGVyIGVycm9yIHRoYXQgaXMgbm90IGVxdWFs
IHRvIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkLgotICAgICAgICAg
ICAgLy8gV2Ugd2FudCB0byB1c2UgZXJyb3IubWVzc2FnZSwgYnV0IGhlcmUgd2Ugd2FudCB0byBv
bmx5IHBhc3Mgb24gQ29tcGlsZUZhaWxlZCB3aXRoIHVzZXJJbmZvIGZyb20gdGhlIHN0ZDo6ZXJy
b3JfY29kZS4KLSAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihuaWwsIFtOU0Vy
cm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6V0tFcnJvckNvbnRlbnRFeHRl
bnNpb25TdG9yZUNvbXBpbGVGYWlsZWQgdXNlckluZm86dXNlckluZm9dKTsKLSAgICAgICAgfQot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJLaXQ6OndyYXBwZXIoKmNvbnRlbnRFeHRlbnNp
b24uZ2V0KCkpLCBuaWwpOwotICAgIH0pOwotfQotCi0tICh2b2lkKWxvb2tVcENvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25I
YW5kbGVyCi17Ci0gICAgX2NvbnRlbnRFeHRlbnNpb25TdG9yZS0+bG9va3VwQ29udGVudEV4dGVu
c2lvbihpZGVudGlmaWVyLCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxl
dGlvbkhhbmRsZXIpXShSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5z
aW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAg
ICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gbG9va3VwIGZhaWxlZDogJXMiLCBlcnJvci5t
ZXNzYWdlKCkuY19zdHIoKV19OwotICAgICAgICAgICAgYXV0byB3a0Vycm9yID0gdG9XS0Vycm9y
Q29kZShlcnJvcik7Ci0gICAgICAgICAgICBBU1NFUlQod2tFcnJvciA9PSBXS0Vycm9yQ29udGVu
dEV4dGVuc2lvblN0b3JlTG9va1VwRmFpbGVkIHx8IHdrRXJyb3IgPT0gV0tFcnJvckNvbnRlbnRF
eHRlbnNpb25TdG9yZVZlcnNpb25NaXNtYXRjaCk7Ci0gICAgICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBj
b2RlOndrRXJyb3IgdXNlckluZm86dXNlckluZm9dKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdlYktpdDo6d3JhcHBlcigqY29udGVudEV4dGVuc2lvbi5nZXQoKSks
IG5pbCk7Ci0gICAgfSk7Ci19Ci0KLS0gKHZvaWQpZ2V0QXZhaWxhYmxlQ29udGVudEV4dGVuc2lv
bklkZW50aWZpZXJzOih2b2lkICheKShOU0FycmF5PE5TU3RyaW5nICo+KikpY29tcGxldGlvbkhh
bmRsZXIKLXsKLSAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5nZXRBdmFpbGFibGVDb250ZW50
RXh0ZW5zaW9uSWRlbnRpZmllcnMoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNv
bXBsZXRpb25IYW5kbGVyKV0oVmVjdG9yPFN0cmluZz4gaWRlbnRpZmllcnMpIHsKLSAgICAgICAg
TlNNdXRhYmxlQXJyYXk8TlNTdHJpbmcgKj4gKm5zSWRlbnRpZmllcnMgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXlXaXRoQ2FwYWNpdHk6aWRlbnRpZmllcnMuc2l6ZSgpXTsKLSAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBpZGVudGlmaWVyIDogaWRlbnRpZmllcnMpCi0gICAgICAgICAgICBbbnNJZGVu
dGlmaWVycyBhZGRPYmplY3Q6aWRlbnRpZmllcl07Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KG5zSWRlbnRpZmllcnMpOwotICAgIH0pOwotfQotCi0tICh2b2lkKXJlbW92ZUNvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBfY29udGVu
dEV4dGVuc2lvblN0b3JlLT5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtjb21w
bGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKHN0ZDo6ZXJy
b3JfY29kZSBlcnJvcikgewotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGF1dG8g
dXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIkV4dGVuc2lvbiByZW1vdmFsIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19z
dHIoKV19OwotICAgICAgICAgICAgQVNTRVJUKHRvV0tFcnJvckNvZGUoZXJyb3IpID09IFdLRXJy
b3JDb250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQpOwotICAgICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWlu
IGNvZGU6V0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCB1c2VySW5mbzp1
c2VySW5mb10pOwotICAgICAgICB9Ci0KLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsK
LSAgICB9KTsKLX0KLQotI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0
aW9uCi0KLS0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0Ci17Ci0gICAgcmV0dXJuICpfY29udGVu
dEV4dGVuc2lvblN0b3JlOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRF
eHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQotCi0vLyBGb3IgdGVzdGluZyBvbmx5LgotCi0tICh2
b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucwotewotICAgIF9jb250ZW50RXh0ZW5zaW9u
U3RvcmUtPnN5bmNocm9ub3VzUmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKLX0KLQotLSAo
dm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjooTlNT
dHJpbmcgKilpZGVudGlmaWVyCi17Ci0gICAgX2NvbnRlbnRFeHRlbnNpb25TdG9yZS0+aW52YWxp
ZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uKGlkZW50aWZpZXIpOwotfQotCi0tICh2b2lkKV9n
ZXRDb250ZW50RXh0ZW5zaW9uU291cmNlRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlm
aWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1N0cmluZyopKWNvbXBsZXRpb25IYW5k
bGVyCi17Ci0gICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29w
eV0pOwotICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUtPmdldENvbnRlbnRFeHRlbnNpb25Tb3Vy
Y2UoaWRlbnRpZmllciwgW2hhbmRsZXJdKFN0cmluZyBzb3VyY2UpIHsKLSAgICAgICAgYXV0byBy
YXdIYW5kbGVyID0gKHZvaWQgKF4pKE5TU3RyaW5nICopKWhhbmRsZXIuZ2V0KCk7Ci0gICAgICAg
IGlmIChzb3VyY2UuaXNOdWxsKCkpCi0gICAgICAgICAgICByYXdIYW5kbGVyKG5pbCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJhd0hhbmRsZXIoc291cmNlKTsKLSAgICB9KTsKLX0KLQot
Ly8gTlNfUkVMRUFTRVNfQVJHVU1FTlQgdG8ga2VlcCBwZWFrIG1lbW9yeSB1c2FnZSBsb3cuCi0K
LS0gKHZvaWQpX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcg
KilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRD
b250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRl
bnNpb24gKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIFtzZWxmIF9jb21w
aWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVu
dEV4dGVuc2lvbjplbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21w
bGV0aW9uSGFuZGxlciByZWxlYXNlc0FyZ3VtZW50OllFU107Ci19Ci0KLUBlbmQKLQotI2VuZGlm
IC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlSW50
ZXJuYWwuaAkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKG5vbmV4aXN0ZW50KQpA
QCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmVQcml2YXRlLmgiCi0KLSNpZiBXS19BUElfRU5BQkxFRAotCi0jaW1wb3J0ICJBUElDb250
ZW50RXh0ZW5zaW9uU3RvcmUuaCIKLSNpbXBvcnQgIldLT2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1pbmxpbmUgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKndyYXBwZXIoQVBJOjpD
b250ZW50RXh0ZW5zaW9uU3RvcmUmIHN0b3JlKQotewotICAgIEFTU0VSVChbc3RvcmUud3JhcHBl
cigpIGlzS2luZE9mQ2xhc3M6W1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGNsYXNzXV0pOwotICAg
IHJldHVybiAoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKilzdG9yZS53cmFwcGVyKCk7Ci19Ci0K
LX0KLQotQGludGVyZmFjZSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAoKSA8V0tPYmplY3Q+IHsK
LUBwYWNrYWdlCi0gICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6Q29udGVudEV4dGVuc2lvblN0
b3JlPiBfY29udGVudEV4dGVuc2lvblN0b3JlOwotfQotQGVuZAotCi0jZW5kaWYgLy8gV0tfQVBJ
X0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaAkocmV2
aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW1wb3J0IDxXZWJLaXQvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUu
aD4KLQotI2lmIFdLX0FQSV9FTkFCTEVECi0KLUBpbnRlcmZhY2UgV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmUgKFdLUHJpdmF0ZSkKLQotLy8gRm9yIHRlc3Rpbmcgb25seS4KLS0gKHZvaWQpX3JlbW92
ZUFsbENvbnRlbnRFeHRlbnNpb25zOwotLSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNp
b25WZXJzaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyOwotLSAodm9pZClf
Z2V0Q29udGVudEV4dGVuc2lvblNvdXJjZUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRp
ZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNTdHJpbmcqKSljb21wbGV0aW9uSGFu
ZGxlcjsKLQotLy8gTlNfUkVMRUFTRVNfQVJHVU1FTlQgdG8ga2VlcCBwZWFrIG1lbW9yeSB1c2Fn
ZSBsb3cuCi0tICh2b2lkKV9jb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5T
U3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKikg
TlNfUkVMRUFTRVNfQVJHVU1FTlQgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRp
b25IYW5kbGVyOwotCi1AZW5kCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3QuaAkocmV2aXNpb24g
MjE2NTM5KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVu
dEV4dGVuc2lvbi5oOjIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tDb250ZW50UnVsZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJ
X0VOQUJMRUQKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKQorQGludGVyZmFjZSBXS0NvbnRlbnRFeHRlbnNpb24gOiBOU09iamVjdAorCisv
KiEgQGFic3RyYWN0IEEgY29weSBvZiB0aGUgaWRlbnRpZmllciBvZiB0aGUgY29udGVudCBleHRl
bnNpb24uICovCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5n
ICppZGVudGlmaWVyOworCitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50
UnVsZUxpc3QuaAkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsy
OCw3IEBACiAjaWYgV0tfQVBJX0VOQUJMRUQKIAogV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQotQGludGVyZmFjZSBXS0NvbnRlbnRFeHRlbnNp
b24gOiBOU09iamVjdAorQGludGVyZmFjZSBXS0NvbnRlbnRSdWxlTGlzdCA6IE5TT2JqZWN0CiAK
IC8qISBAYWJzdHJhY3QgQSBjb3B5IG9mIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBjb250ZW50IGV4
dGVuc2lvbi4gKi8KIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNTdHJp
bmcgKmlkZW50aWZpZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLQ29udGVudFJ1bGVMaXN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3QubW0JKHJldmlzaW9uIDIxNjUzOSkJKGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb24u
bW06MjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRl
bnRSdWxlTGlzdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5h
bC5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbi5oIgorCitAaW1wbGVtZW50YXRpb24gV0tDb250ZW50RXh0ZW5zaW9uCisKKy0g
KHZvaWQpZGVhbGxvYworeworICAgIF9jb250ZW50RXh0ZW5zaW9uLT5+Q29udGVudEV4dGVuc2lv
bigpOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCisjcHJhZ21hIG1hcmsgV0tPYmplY3Qg
cHJvdG9jb2wgaW1wbGVtZW50YXRpb24KKworLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKK3sK
KyAgICByZXR1cm4gKl9jb250ZW50RXh0ZW5zaW9uOworfQorCistIChOU1N0cmluZyAqKWlkZW50
aWZpZXIKK3sKKyAgICByZXR1cm4gX2NvbnRlbnRFeHRlbnNpb24tPm5hbWUoKTsKK30KKworQGVu
ZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3QubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdC5tbQkocmV2aXNp
b24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRl
bnRSdWxlTGlzdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsMTcgKzI0LDE3IEBACiAgKi8KIAog
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5o
IgorI2ltcG9ydCAiV0tDb250ZW50UnVsZUxpc3RJbnRlcm5hbC5oIgogCiAjaWYgV0tfQVBJX0VO
QUJMRUQKIAotI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1
ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmgiCiAKLUBpbXBsZW1lbnRhdGlvbiBXS0Nv
bnRlbnRFeHRlbnNpb24KK0BpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRSdWxlTGlzdAogCiAtICh2
b2lkKWRlYWxsb2MKIHsKLSAgICBfY29udGVudEV4dGVuc2lvbi0+fkNvbnRlbnRFeHRlbnNpb24o
KTsKKyAgICBfY29udGVudFJ1bGVMaXN0LT5+Q29udGVudFJ1bGVMaXN0KCk7CiAKICAgICBbc3Vw
ZXIgZGVhbGxvY107CiB9CkBAIC00MywxMiArNDMsMTIgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0g
KEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0CiB7Ci0gICAgcmV0dXJuICpfY29udGVudEV4dGVuc2lv
bjsKKyAgICByZXR1cm4gKl9jb250ZW50UnVsZUxpc3Q7CiB9CiAKIC0gKE5TU3RyaW5nICopaWRl
bnRpZmllcgogewotICAgIHJldHVybiBfY29udGVudEV4dGVuc2lvbi0+bmFtZSgpOworICAgIHJl
dHVybiBfY29udGVudFJ1bGVMaXN0LT5uYW1lKCk7CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RJbnRlcm5hbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50
UnVsZUxpc3RJbnRlcm5hbC5oCShyZXZpc2lvbiAyMTY1MzkpCShmcm9tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaDoyMTY1Mzkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0
SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiV0tDb250ZW50RXh0ZW5zaW9uLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisj
aW1wb3J0ICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCisjaW1wb3J0ICJXS09iamVjdC5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworaW5saW5lIFdLQ29udGVudEV4dGVuc2lvbiAqd3JhcHBlcihB
UEk6OkNvbnRlbnRFeHRlbnNpb24mIGNvbnRlbnRFeHRlbnNpb24pCit7CisgICAgQVNTRVJUKFtj
b250ZW50RXh0ZW5zaW9uLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltXS0NvbnRlbnRFeHRlbnNp
b24gY2xhc3NdXSk7CisgICAgcmV0dXJuIChXS0NvbnRlbnRFeHRlbnNpb24gKiljb250ZW50RXh0
ZW5zaW9uLndyYXBwZXIoKTsKK30KKworfQorCitAaW50ZXJmYWNlIFdLQ29udGVudEV4dGVuc2lv
biAoKSA8V0tPYmplY3Q+IHsKK0BwYWNrYWdlCisgICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6
Q29udGVudEV4dGVuc2lvbj4gX2NvbnRlbnRFeHRlbnNpb247Cit9CitAZW5kCisKKyNlbmRpZiAv
LyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS0NvbnRlbnRSdWxlTGlzdEludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdEludGVybmFsLmgJKHJldmlz
aW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250
ZW50UnVsZUxpc3RJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyNiArMjMsMjYgQEAK
ICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0ICJXS0Nv
bnRlbnRFeHRlbnNpb24uaCIKKyNpbXBvcnQgIldLQ29udGVudFJ1bGVMaXN0LmgiCiAKICNpZiBX
S19BUElfRU5BQkxFRAogCi0jaW1wb3J0ICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCisjaW1wb3J0
ICJBUElDb250ZW50UnVsZUxpc3QuaCIKICNpbXBvcnQgIldLT2JqZWN0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi1pbmxpbmUgV0tDb250ZW50RXh0ZW5zaW9uICp3cmFwcGVyKEFQSTo6Q29u
dGVudEV4dGVuc2lvbiYgY29udGVudEV4dGVuc2lvbikKK2lubGluZSBXS0NvbnRlbnRSdWxlTGlz
dCAqd3JhcHBlcihBUEk6OkNvbnRlbnRSdWxlTGlzdCYgY29udGVudFJ1bGVMaXN0KQogewotICAg
IEFTU0VSVChbY29udGVudEV4dGVuc2lvbi53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbV0tDb250
ZW50RXh0ZW5zaW9uIGNsYXNzXV0pOwotICAgIHJldHVybiAoV0tDb250ZW50RXh0ZW5zaW9uICop
Y29udGVudEV4dGVuc2lvbi53cmFwcGVyKCk7CisgICAgQVNTRVJUKFtjb250ZW50UnVsZUxpc3Qu
d3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W1dLQ29udGVudFJ1bGVMaXN0IGNsYXNzXV0pOworICAg
IHJldHVybiAoV0tDb250ZW50UnVsZUxpc3QgKiljb250ZW50UnVsZUxpc3Qud3JhcHBlcigpOwog
fQogCiB9CiAKLUBpbnRlcmZhY2UgV0tDb250ZW50RXh0ZW5zaW9uICgpIDxXS09iamVjdD4gewor
QGludGVyZmFjZSBXS0NvbnRlbnRSdWxlTGlzdCAoKSA8V0tPYmplY3Q+IHsKIEBwYWNrYWdlCi0g
ICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6Q29udGVudEV4dGVuc2lvbj4gX2NvbnRlbnRFeHRl
bnNpb247CisgICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6Q29udGVudFJ1bGVMaXN0PiBfY29u
dGVudFJ1bGVMaXN0OwogfQogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUuaAkocmV2
aXNpb24gMjE2NTM5KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
Q29udGVudEV4dGVuc2lvblN0b3JlLmg6MjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24u
aD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKK0BjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb247CisK
K1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkK
K0BpbnRlcmZhY2UgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgOiBOU09iamVjdAorCisrIChpbnN0
YW5jZXR5cGUpZGVmYXVsdFN0b3JlOworKyAoaW5zdGFuY2V0eXBlKXN0b3JlV2l0aFVSTDooTlNV
UkwgKil1cmw7CisKKy0gKHZvaWQpY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVy
OihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5n
ICopIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShX
S0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZv
aWQpbG9va1VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRp
ZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50RXh0ZW5zaW9uICosIE5T
RXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKXJlbW92ZUNvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKWdldEF2YWls
YWJsZUNvbnRlbnRFeHRlbnNpb25JZGVudGlmaWVyczoodm9pZCAoXikoTlNBcnJheTxOU1N0cmlu
ZyAqPiopKWNvbXBsZXRpb25IYW5kbGVyOworCitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5B
QkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRS
dWxlTGlzdFN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNywxOCArMjcsMTggQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVE
CiAKLUBjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb247CitAY2xhc3MgV0tDb250ZW50UnVsZUxpc3Q7
CiAKIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSkKLUBpbnRlcmZhY2UgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgOiBOU09iamVjdAorQGludGVy
ZmFjZSBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIDogTlNPYmplY3QKIAogKyAoaW5zdGFuY2V0eXBl
KWRlZmF1bHRTdG9yZTsKICsgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICopdXJs
OwogCi0tICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJp
bmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKSBlbmNv
ZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50
RXh0ZW5zaW9uICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7Ci0tICh2b2lkKWxvb2tV
cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICop
KWNvbXBsZXRpb25IYW5kbGVyOwotLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOwotLSAodm9pZClnZXRBdmFpbGFibGVDb250
ZW50RXh0ZW5zaW9uSWRlbnRpZmllcnM6KHZvaWQgKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4qKSlj
b21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50
aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0
cmluZyAqKSBlbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShXS0NvbnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAo
dm9pZClsb29rVXBDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50
aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudFJ1bGVMaXN0ICosIE5T
RXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKXJlbW92ZUNvbnRlbnRSdWxlTGlz
dEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpZ2V0QXZhaWxh
YmxlQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnM6KHZvaWQgKF4pKE5TQXJyYXk8TlNTdHJpbmcg
Kj4qKSljb21wbGV0aW9uSGFuZGxlcjsKIAogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0
b3JlLm1tCShyZXZpc2lvbiAyMTY1MzkpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW06MjE2NTM5KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKwor
I2ltcG9ydCAiQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisjaW1wb3J0ICJXS0Vycm9ySW50
ZXJuYWwuaCIKKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgorCitzdGF0aWMgV0tFcnJvckNvZGUg
dG9XS0Vycm9yQ29kZShjb25zdCBzdGQ6OmVycm9yX2NvZGUmIGVycm9yKQoreworICAgIEFTU0VS
VChlcnJvci5jYXRlZ29yeSgpID09IEFQSTo6Y29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRl
Z29yeSgpKTsKKyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEFQSTo6Q29udGVudEV4dGVuc2lvblN0
b3JlOjpFcnJvcj4oZXJyb3IudmFsdWUoKSkpIHsKKyAgICBjYXNlIEFQSTo6Q29udGVudEV4dGVu
c2lvblN0b3JlOjpFcnJvcjo6TG9va3VwRmFpbGVkOgorICAgICAgICByZXR1cm4gV0tFcnJvckNv
bnRlbnRFeHRlbnNpb25TdG9yZUxvb2tVcEZhaWxlZDsKKyAgICBjYXNlIEFQSTo6Q29udGVudEV4
dGVuc2lvblN0b3JlOjpFcnJvcjo6VmVyc2lvbk1pc21hdGNoOgorICAgICAgICByZXR1cm4gV0tF
cnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25NaXNtYXRjaDsKKyAgICBjYXNlIEFQSTo6
Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKKyAgICAgICAgcmV0
dXJuIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkOworICAgIGNhc2Ug
QVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpSZW1vdmVGYWlsZWQ6CisgICAgICAg
IHJldHVybiBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlUmVtb3ZlRmFpbGVkOworICAgIH0K
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV0tFcnJvclVua25vd247Cit9
CisKK0BpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZQorCistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5+Q29udGVudEV4dGVuc2lvblN0
b3JlKCk7CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKysgKGluc3RhbmNldHlwZSlkZWZh
dWx0U3RvcmUKK3sKKyAgICByZXR1cm4gV2ViS2l0Ojp3cmFwcGVyKEFQSTo6Q29udGVudEV4dGVu
c2lvblN0b3JlOjpkZWZhdWx0U3RvcmUoKSk7Cit9CisKKysgKGluc3RhbmNldHlwZSlzdG9yZVdp
dGhVUkw6KE5TVVJMICopdXJsCit7CisgICAgUmVmPEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3Jl
PiBzdG9yZSA9IEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKHVybC5h
YnNvbHV0ZVVSTC5maWxlU3lzdGVtUmVwcmVzZW50YXRpb24pOworICAgIHJldHVybiBXZWJLaXQ6
OndyYXBwZXIoc3RvcmUubGVha1JlZigpKTsKK30KKworLSAodm9pZCljb21waWxlQ29udGVudEV4
dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVu
dEV4dGVuc2lvbjooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50RXh0ZW5zaW9uICosIE5TRXJyb3IgKikpY29tcGxl
dGlvbkhhbmRsZXIKK3sKKyAgICBbc2VsZiBfY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVu
dGlmaWVyOmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246ZW5jb2RlZENvbnRlbnRF
eHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZXNBcmd1
bWVudDpOT107Cit9CisKKy0gKHZvaWQpX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRp
ZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0
cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlciByZWxl
YXNlc0FyZ3VtZW50OihCT09MKXJlbGVhc2VzQXJndW1lbnQKK3sKKyAgICBTdHJpbmcganNvbihl
bmNvZGVkQ29udGVudEV4dGVuc2lvbik7CisgICAgaWYgKHJlbGVhc2VzQXJndW1lbnQpIHsKKyAg
ICAgICAgW2VuY29kZWRDb250ZW50RXh0ZW5zaW9uIHJlbGVhc2VdOworICAgICAgICBlbmNvZGVk
Q29udGVudEV4dGVuc2lvbiA9IG5pbDsKKyAgICB9CisKKyAgICBfY29udGVudEV4dGVuc2lvblN0
b3JlLT5jb21waWxlQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBXVEZNb3ZlKGpzb24pLCBb
Y29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShSZWZQ
dHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2Nv
ZGUgZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBhdXRvIHVzZXJJ
bmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJFeHRlbnNpb24gY29tcGlsYXRpb24gZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0
cigpXX07CisKKyAgICAgICAgICAgIC8vIGVycm9yLnZhbHVlKCkgY291bGQgaGF2ZSBhIHNwZWNp
ZmljIGNvbXBpbGVyIGVycm9yIHRoYXQgaXMgbm90IGVxdWFsIHRvIFdLRXJyb3JDb250ZW50RXh0
ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkLgorICAgICAgICAgICAgLy8gV2Ugd2FudCB0byB1c2Ug
ZXJyb3IubWVzc2FnZSwgYnV0IGhlcmUgd2Ugd2FudCB0byBvbmx5IHBhc3Mgb24gQ29tcGlsZUZh
aWxlZCB3aXRoIHVzZXJJbmZvIGZyb20gdGhlIHN0ZDo6ZXJyb3JfY29kZS4KKyAgICAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpX
S0Vycm9yRG9tYWluIGNvZGU6V0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBpbGVGYWls
ZWQgdXNlckluZm86dXNlckluZm9dKTsKKyAgICAgICAgfQorICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihXZWJLaXQ6OndyYXBwZXIoKmNvbnRlbnRFeHRlbnNpb24uZ2V0KCkpLCBuaWwpOworICAg
IH0pOworfQorCistICh2b2lkKWxvb2tVcENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihO
U1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVu
dEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX2NvbnRl
bnRFeHRlbnNpb25TdG9yZS0+bG9va3VwQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBbY29t
cGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShSZWZQdHI8
QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUg
ZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBhdXRvIHVzZXJJbmZv
ID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJF
eHRlbnNpb24gbG9va3VwIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19Owor
ICAgICAgICAgICAgYXV0byB3a0Vycm9yID0gdG9XS0Vycm9yQ29kZShlcnJvcik7CisgICAgICAg
ICAgICBBU1NFUlQod2tFcnJvciA9PSBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlTG9va1Vw
RmFpbGVkIHx8IHdrRXJyb3IgPT0gV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25N
aXNtYXRjaCk7CisgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobmlsLCBbTlNF
cnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOndrRXJyb3IgdXNlckluZm86
dXNlckluZm9dKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYktp
dDo6d3JhcHBlcigqY29udGVudEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7CisgICAgfSk7Cit9CisK
Ky0gKHZvaWQpZ2V0QXZhaWxhYmxlQ29udGVudEV4dGVuc2lvbklkZW50aWZpZXJzOih2b2lkIChe
KShOU0FycmF5PE5TU3RyaW5nICo+KikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfY29udGVu
dEV4dGVuc2lvblN0b3JlLT5nZXRBdmFpbGFibGVDb250ZW50RXh0ZW5zaW9uSWRlbnRpZmllcnMo
W2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oVmVj
dG9yPFN0cmluZz4gaWRlbnRpZmllcnMpIHsKKyAgICAgICAgTlNNdXRhYmxlQXJyYXk8TlNTdHJp
bmcgKj4gKm5zSWRlbnRpZmllcnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6
aWRlbnRpZmllcnMuc2l6ZSgpXTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpZGVudGlmaWVy
IDogaWRlbnRpZmllcnMpCisgICAgICAgICAgICBbbnNJZGVudGlmaWVycyBhZGRPYmplY3Q6aWRl
bnRpZmllcl07CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5zSWRlbnRpZmllcnMpOworICAg
IH0pOworfQorCistICh2b2lkKXJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihO
U1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3Ig
KikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5yZW1v
dmVDb250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VC
bG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAg
ICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFu
Y2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lvbiByZW1v
dmFsIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OworICAgICAgICAgICAg
QVNTRVJUKHRvV0tFcnJvckNvZGUoZXJyb3IpID09IFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3Rv
cmVSZW1vdmVGYWlsZWQpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFtO
U0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6V0tFcnJvckNvbnRlbnRF
eHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCB1c2VySW5mbzp1c2VySW5mb10pOworICAgICAgICB9
CisKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKKyAgICB9KTsKK30KKworI3ByYWdt
YSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCisKKy0gKEFQSTo6T2JqZWN0
JilfYXBpT2JqZWN0Cit7CisgICAgcmV0dXJuICpfY29udGVudEV4dGVuc2lvblN0b3JlOworfQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2
YXRlKQorCisvLyBGb3IgdGVzdGluZyBvbmx5LgorCistICh2b2lkKV9yZW1vdmVBbGxDb250ZW50
RXh0ZW5zaW9ucworeworICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUtPnN5bmNocm9ub3VzUmVt
b3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKK30KKworLSAodm9pZClfaW52YWxpZGF0ZUNvbnRl
bnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7
CisgICAgX2NvbnRlbnRFeHRlbnNpb25TdG9yZS0+aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25W
ZXJzaW9uKGlkZW50aWZpZXIpOworfQorCistICh2b2lkKV9nZXRDb250ZW50RXh0ZW5zaW9uU291
cmNlRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKShOU1N0cmluZyopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0byBoYW5k
bGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOworICAgIF9jb250ZW50RXh0
ZW5zaW9uU3RvcmUtPmdldENvbnRlbnRFeHRlbnNpb25Tb3VyY2UoaWRlbnRpZmllciwgW2hhbmRs
ZXJdKFN0cmluZyBzb3VyY2UpIHsKKyAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4p
KE5TU3RyaW5nICopKWhhbmRsZXIuZ2V0KCk7CisgICAgICAgIGlmIChzb3VyY2UuaXNOdWxsKCkp
CisgICAgICAgICAgICByYXdIYW5kbGVyKG5pbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJhd0hhbmRsZXIoc291cmNlKTsKKyAgICB9KTsKK30KKworLy8gTlNfUkVMRUFTRVNfQVJHVU1F
TlQgdG8ga2VlcCBwZWFrIG1lbW9yeSB1c2FnZSBsb3cuCisKKy0gKHZvaWQpX2NvbXBpbGVDb250
ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRD
b250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSlj
b21wbGV0aW9uSGFuZGxlcgoreworICAgIFtzZWxmIF9jb21waWxlQ29udGVudEV4dGVuc2lvbkZv
cklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjplbmNvZGVkQ29u
dGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlciByZWxlYXNl
c0FyZ3VtZW50OllFU107Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0
U3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1tCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI0LDk0ICsyNCw5NiBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5o
IgotI2ltcG9ydCAiV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldLQ29u
dGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVudFJ1bGVMaXN0
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVudFJ1bGVMaXN0U3RvcmVJbnRlcm5hbC5oIgog
CiAjaWYgV0tfQVBJX0VOQUJMRUQKIAotI2ltcG9ydCAiQVBJQ29udGVudEV4dGVuc2lvblN0b3Jl
LmgiCisjaW1wb3J0ICJBUElDb250ZW50UnVsZUxpc3RTdG9yZS5oIgogI2ltcG9ydCAiV0tFcnJv
ckludGVybmFsLmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KIAogc3RhdGljIFdLRXJyb3JD
b2RlIHRvV0tFcnJvckNvZGUoY29uc3Qgc3RkOjplcnJvcl9jb2RlJiBlcnJvcikKIHsKLSAgICBB
U1NFUlQoZXJyb3IuY2F0ZWdvcnkoKSA9PSBBUEk6OmNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9y
Q2F0ZWdvcnkoKSk7Ci0gICAgc3dpdGNoIChzdGF0aWNfY2FzdDxBUEk6OkNvbnRlbnRFeHRlbnNp
b25TdG9yZTo6RXJyb3I+KGVycm9yLnZhbHVlKCkpKSB7Ci0gICAgY2FzZSBBUEk6OkNvbnRlbnRF
eHRlbnNpb25TdG9yZTo6RXJyb3I6Okxvb2t1cEZhaWxlZDoKLSAgICAgICAgcmV0dXJuIFdLRXJy
b3JDb250ZW50RXh0ZW5zaW9uU3RvcmVMb29rVXBGYWlsZWQ7Ci0gICAgY2FzZSBBUEk6OkNvbnRl
bnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OlZlcnNpb25NaXNtYXRjaDoKLSAgICAgICAgcmV0dXJu
IFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVWZXJzaW9uTWlzbWF0Y2g7Ci0gICAgY2FzZSBB
UEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ6Ci0gICAgICAg
IHJldHVybiBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZUZhaWxlZDsKLSAgICBj
YXNlIEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6UmVtb3ZlRmFpbGVkOgotICAg
ICAgICByZXR1cm4gV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZDsKKyAg
ICBBU1NFUlQoZXJyb3IuY2F0ZWdvcnkoKSA9PSBBUEk6OmNvbnRlbnRSdWxlTGlzdFN0b3JlRXJy
b3JDYXRlZ29yeSgpKTsKKyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEFQSTo6Q29udGVudFJ1bGVM
aXN0U3RvcmU6OkVycm9yPihlcnJvci52YWx1ZSgpKSkgeworICAgIGNhc2UgQVBJOjpDb250ZW50
UnVsZUxpc3RTdG9yZTo6RXJyb3I6Okxvb2t1cEZhaWxlZDoKKyAgICAgICAgcmV0dXJuIFdLRXJy
b3JDb250ZW50UnVsZUxpc3RTdG9yZUxvb2tVcEZhaWxlZDsKKyAgICBjYXNlIEFQSTo6Q29udGVu
dFJ1bGVMaXN0U3RvcmU6OkVycm9yOjpWZXJzaW9uTWlzbWF0Y2g6CisgICAgICAgIHJldHVybiBX
S0Vycm9yQ29udGVudFJ1bGVMaXN0U3RvcmVWZXJzaW9uTWlzbWF0Y2g7CisgICAgY2FzZSBBUEk6
OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKKyAgICAgICAgcmV0
dXJuIFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZUNvbXBpbGVGYWlsZWQ7CisgICAgY2FzZSBB
UEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpFcnJvcjo6UmVtb3ZlRmFpbGVkOgorICAgICAgICBy
ZXR1cm4gV0tFcnJvckNvbnRlbnRSdWxlTGlzdFN0b3JlUmVtb3ZlRmFpbGVkOwogICAgIH0KICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gV0tFcnJvclVua25vd247CiB9CiAK
LUBpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZQorQGltcGxlbWVudGF0aW9u
IFdLQ29udGVudFJ1bGVMaXN0U3RvcmUKIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgX2NvbnRl
bnRFeHRlbnNpb25TdG9yZS0+fkNvbnRlbnRFeHRlbnNpb25TdG9yZSgpOworICAgIF9jb250ZW50
UnVsZUxpc3RTdG9yZS0+fkNvbnRlbnRSdWxlTGlzdFN0b3JlKCk7CiAKICAgICBbc3VwZXIgZGVh
bGxvY107CiB9CiAKICsgKGluc3RhbmNldHlwZSlkZWZhdWx0U3RvcmUKIHsKLSAgICByZXR1cm4g
V2ViS2l0Ojp3cmFwcGVyKEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUo
KSk7CisgICAgY29uc3QgYm9vbCBsZWdhY3lGaWxlbmFtZSA9IGZhbHNlOworICAgIHJldHVybiBX
ZWJLaXQ6OndyYXBwZXIoQVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZTo6ZGVmYXVsdFN0b3JlKGxl
Z2FjeUZpbGVuYW1lKSk7CiB9CiAKICsgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJM
ICopdXJsCiB7Ci0gICAgUmVmPEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlPiBzdG9yZSA9IEFQ
STo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKHVybC5hYnNvbHV0ZVVSTC5m
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24pOworICAgIGNvbnN0IGJvb2wgbGVnYWN5RmlsZW5hbWUg
PSBmYWxzZTsKKyAgICBSZWY8QVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZT4gc3RvcmUgPSBBUEk6
OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpzdG9yZVdpdGhQYXRoKHVybC5hYnNvbHV0ZVVSTC5maWxl
U3lzdGVtUmVwcmVzZW50YXRpb24sIGxlZ2FjeUZpbGVuYW1lKTsKICAgICByZXR1cm4gV2ViS2l0
Ojp3cmFwcGVyKHN0b3JlLmxlYWtSZWYoKSk7CiB9CiAKLS0gKHZvaWQpY29tcGlsZUNvbnRlbnRF
eHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRl
bnRFeHRlbnNpb246KE5TU3RyaW5nICopZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBs
ZXRpb25IYW5kbGVyCistICh2b2lkKWNvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVy
OihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDooTlNTdHJpbmcg
KillbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0Nv
bnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgW3Nl
bGYgX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGVuY29k
ZWRDb250ZW50RXh0ZW5zaW9uOmVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5k
bGVyOmNvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2VzQXJndW1lbnQ6Tk9dOworICAgIFtzZWxmIF9j
b21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGVuY29kZWRDb250
ZW50UnVsZUxpc3Q6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjpjb21w
bGV0aW9uSGFuZGxlciByZWxlYXNlc0FyZ3VtZW50Ok5PXTsKIH0KIAotLSAodm9pZClfY29tcGls
ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5j
b2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICopZW5jb2RlZENvbnRlbnRFeHRlbnNpb24g
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9y
ICopKWNvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2VzQXJndW1lbnQ6KEJPT0wpcmVsZWFzZXNBcmd1
bWVudAorLSAodm9pZClfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3Ry
aW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKWVuY29k
ZWRDb250ZW50UnVsZUxpc3QgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudFJ1
bGVMaXN0ICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZXNBcmd1bWVudDoo
Qk9PTClyZWxlYXNlc0FyZ3VtZW50CiB7Ci0gICAgU3RyaW5nIGpzb24oZW5jb2RlZENvbnRlbnRF
eHRlbnNpb24pOworICAgIFN0cmluZyBqc29uKGVuY29kZWRDb250ZW50UnVsZUxpc3QpOwogICAg
IGlmIChyZWxlYXNlc0FyZ3VtZW50KSB7Ci0gICAgICAgIFtlbmNvZGVkQ29udGVudEV4dGVuc2lv
biByZWxlYXNlXTsKLSAgICAgICAgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gPSBuaWw7CisgICAg
ICAgIFtlbmNvZGVkQ29udGVudFJ1bGVMaXN0IHJlbGVhc2VdOworICAgICAgICBlbmNvZGVkQ29u
dGVudFJ1bGVMaXN0ID0gbmlsOwogICAgIH0KIAotICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUt
PmNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFdURk1vdmUoanNvbiksIFtjb21w
bGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKFJlZlB0cjxB
UEk6OkNvbnRlbnRFeHRlbnNpb24+IGNvbnRlbnRFeHRlbnNpb24sIHN0ZDo6ZXJyb3JfY29kZSBl
cnJvcikgeworICAgIF9jb250ZW50UnVsZUxpc3RTdG9yZS0+Y29tcGlsZUNvbnRlbnRSdWxlTGlz
dChpZGVudGlmaWVyLCBXVEZNb3ZlKGpzb24pLCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+IGNv
bnRlbnRSdWxlTGlzdCwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CiAgICAgICAgIGlmIChlcnJv
cikgewotICAgICAgICAgICAgYXV0byB1c2VySW5mbyA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6
IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRXh0ZW5zaW9uIGNvbXBpbGF0aW9uIGZhaWxl
ZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OworICAgICAgICAgICAgYXV0byB1c2Vy
SW5mbyA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiUnVsZSBsaXN0IGNvbXBpbGF0aW9uIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19z
dHIoKV19OwogCi0gICAgICAgICAgICAvLyBlcnJvci52YWx1ZSgpIGNvdWxkIGhhdmUgYSBzcGVj
aWZpYyBjb21waWxlciBlcnJvciB0aGF0IGlzIG5vdCBlcXVhbCB0byBXS0Vycm9yQ29udGVudEV4
dGVuc2lvblN0b3JlQ29tcGlsZUZhaWxlZC4KKyAgICAgICAgICAgIC8vIGVycm9yLnZhbHVlKCkg
Y291bGQgaGF2ZSBhIHNwZWNpZmljIGNvbXBpbGVyIGVycm9yIHRoYXQgaXMgbm90IGVxdWFsIHRv
IFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZUNvbXBpbGVGYWlsZWQuCiAgICAgICAgICAgICAv
LyBXZSB3YW50IHRvIHVzZSBlcnJvci5tZXNzYWdlLCBidXQgaGVyZSB3ZSB3YW50IHRvIG9ubHkg
cGFzcyBvbiBDb21waWxlRmFpbGVkIHdpdGggdXNlckluZm8gZnJvbSB0aGUgc3RkOjplcnJvcl9j
b2RlLgotICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG5pbCwgW05TRXJyb3Ig
ZXJyb3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTpXS0Vycm9yQ29udGVudEV4dGVuc2lv
blN0b3JlQ29tcGlsZUZhaWxlZCB1c2VySW5mbzp1c2VySW5mb10pOworICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldLRXJy
b3JEb21haW4gY29kZTpXS0Vycm9yQ29udGVudFJ1bGVMaXN0U3RvcmVDb21waWxlRmFpbGVkIHVz
ZXJJbmZvOnVzZXJJbmZvXSk7CiAgICAgICAgIH0KLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50UnVsZUxpc3QuZ2V0KCkp
LCBuaWwpOwogICAgIH0pOwogfQogCi0tICh2b2lkKWxvb2tVcENvbnRlbnRFeHRlbnNpb25Gb3JJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCist
ICh2b2lkKWxvb2tVcENvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRl
bnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50UnVsZUxpc3QgKiwg
TlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIF9jb250ZW50RXh0ZW5zaW9uU3Rv
cmUtPmxvb2t1cENvbnRlbnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2NvbXBsZXRpb25IYW5kbGVy
ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oUmVmUHRyPEFQSTo6Q29udGVudEV4
dGVuc2lvbj4gY29udGVudEV4dGVuc2lvbiwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CisgICAg
X2NvbnRlbnRSdWxlTGlzdFN0b3JlLT5sb29rdXBDb250ZW50UnVsZUxpc3QoaWRlbnRpZmllciwg
W2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oUmVm
UHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0PiBjb250ZW50UnVsZUxpc3QsIHN0ZDo6ZXJyb3JfY29k
ZSBlcnJvcikgewogICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGF1dG8gdXNlcklu
Zm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IkV4dGVuc2lvbiBsb29rdXAgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07
CisgICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJSdWxlIGxpc3QgbG9va3VwIGZhaWxlZDogJXMiLCBl
cnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwogICAgICAgICAgICAgYXV0byB3a0Vycm9yID0gdG9X
S0Vycm9yQ29kZShlcnJvcik7Ci0gICAgICAgICAgICBBU1NFUlQod2tFcnJvciA9PSBXS0Vycm9y
Q29udGVudEV4dGVuc2lvblN0b3JlTG9va1VwRmFpbGVkIHx8IHdrRXJyb3IgPT0gV0tFcnJvckNv
bnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25NaXNtYXRjaCk7CisgICAgICAgICAgICBBU1NFUlQo
d2tFcnJvciA9PSBXS0Vycm9yQ29udGVudFJ1bGVMaXN0U3RvcmVMb29rVXBGYWlsZWQgfHwgd2tF
cnJvciA9PSBXS0Vycm9yQ29udGVudFJ1bGVMaXN0U3RvcmVWZXJzaW9uTWlzbWF0Y2gpOwogICAg
ICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRo
RG9tYWluOldLRXJyb3JEb21haW4gY29kZTp3a0Vycm9yIHVzZXJJbmZvOnVzZXJJbmZvXSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJLaXQ6OndyYXBwZXIoKmNv
bnRlbnRFeHRlbnNpb24uZ2V0KCkpLCBuaWwpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
ZWJLaXQ6OndyYXBwZXIoKmNvbnRlbnRSdWxlTGlzdC5nZXQoKSksIG5pbCk7CiAgICAgfSk7CiB9
CiAKLS0gKHZvaWQpZ2V0QXZhaWxhYmxlQ29udGVudEV4dGVuc2lvbklkZW50aWZpZXJzOih2b2lk
ICheKShOU0FycmF5PE5TU3RyaW5nICo+KikpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpZ2V0
QXZhaWxhYmxlQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnM6KHZvaWQgKF4pKE5TQXJyYXk8TlNT
dHJpbmcgKj4qKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIF9jb250ZW50RXh0ZW5zaW9uU3Rv
cmUtPmdldEF2YWlsYWJsZUNvbnRlbnRFeHRlbnNpb25JZGVudGlmaWVycyhbY29tcGxldGlvbkhh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShWZWN0b3I8U3RyaW5nPiBp
ZGVudGlmaWVycykgeworICAgIF9jb250ZW50UnVsZUxpc3RTdG9yZS0+Z2V0QXZhaWxhYmxlQ29u
dGVudFJ1bGVMaXN0SWRlbnRpZmllcnMoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRy
KGNvbXBsZXRpb25IYW5kbGVyKV0oVmVjdG9yPFN0cmluZz4gaWRlbnRpZmllcnMpIHsKICAgICAg
ICAgTlNNdXRhYmxlQXJyYXk8TlNTdHJpbmcgKj4gKm5zSWRlbnRpZmllcnMgPSBbTlNNdXRhYmxl
QXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6aWRlbnRpZmllcnMuc2l6ZSgpXTsKICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBpZGVudGlmaWVyIDogaWRlbnRpZmllcnMpCiAgICAgICAgICAgICBbbnNJ
ZGVudGlmaWVycyBhZGRPYmplY3Q6aWRlbnRpZmllcl07CkBAIC0xMTksMTMgKzEyMSwxMyBAQCAt
ICh2b2lkKWdldEF2YWlsYWJsZUNvbnRlbnRFeHRlbnNpb25JZGVuCiAgICAgfSk7CiB9CiAKLS0g
KHZvaWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRl
bnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAqKSljb21wbGV0aW9u
SGFuZGxlcgorLSAodm9pZClyZW1vdmVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0
cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikp
Y29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5yZW1vdmVD
b250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9j
a1B0cihjb21wbGV0aW9uSGFuZGxlcildKHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAgIF9j
b250ZW50UnVsZUxpc3RTdG9yZS0+cmVtb3ZlQ29udGVudFJ1bGVMaXN0KGlkZW50aWZpZXIsIFtj
b21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKHN0ZDo6
ZXJyb3JfY29kZSBlcnJvcikgewogICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGF1
dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIkV4dGVuc2lvbiByZW1vdmFsIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCku
Y19zdHIoKV19OwotICAgICAgICAgICAgQVNTRVJUKHRvV0tFcnJvckNvZGUoZXJyb3IpID09IFdL
RXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQpOwotICAgICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9t
YWluIGNvZGU6V0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCB1c2VySW5m
bzp1c2VySW5mb10pOworICAgICAgICAgICAgYXV0byB1c2VySW5mbyA9IEB7TlNIZWxwQW5jaG9y
RXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiUnVsZSBsaXN0IHJlbW92YWwg
ZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07CisgICAgICAgICAgICBBU1NF
UlQodG9XS0Vycm9yQ29kZShlcnJvcikgPT0gV0tFcnJvckNvbnRlbnRSdWxlTGlzdFN0b3JlUmVt
b3ZlRmFpbGVkKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihbTlNFcnJv
ciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOldLRXJyb3JDb250ZW50UnVsZUxp
c3RTdG9yZVJlbW92ZUZhaWxlZCB1c2VySW5mbzp1c2VySW5mb10pOwogICAgICAgICB9CiAKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKQEAgLTEzNiwyOSArMTM4LDI5IEBAIC0gKHZv
aWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWYKIAogLSAoQVBJOjpPYmplY3QmKV9h
cGlPYmplY3QKIHsKLSAgICByZXR1cm4gKl9jb250ZW50RXh0ZW5zaW9uU3RvcmU7CisgICAgcmV0
dXJuICpfY29udGVudFJ1bGVMaXN0U3RvcmU7CiB9CiAKIEBlbmQKIAotQGltcGxlbWVudGF0aW9u
IFdLQ29udGVudEV4dGVuc2lvblN0b3JlIChXS1ByaXZhdGUpCitAaW1wbGVtZW50YXRpb24gV0tD
b250ZW50UnVsZUxpc3RTdG9yZSAoV0tQcml2YXRlKQogCiAvLyBGb3IgdGVzdGluZyBvbmx5Lgog
Ci0tICh2b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucworLSAodm9pZClfcmVtb3ZlQWxs
Q29udGVudFJ1bGVMaXN0cwogewotICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUtPnN5bmNocm9u
b3VzUmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKKyAgICBfY29udGVudFJ1bGVMaXN0U3Rv
cmUtPnN5bmNocm9ub3VzUmVtb3ZlQWxsQ29udGVudFJ1bGVMaXN0cygpOwogfQogCi0tICh2b2lk
KV9pbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmlu
ZyAqKWlkZW50aWZpZXIKKy0gKHZvaWQpX2ludmFsaWRhdGVDb250ZW50UnVsZUxpc3RWZXJzaW9u
Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCiB7Ci0gICAgX2NvbnRlbnRFeHRl
bnNpb25TdG9yZS0+aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uKGlkZW50aWZpZXIp
OworICAgIF9jb250ZW50UnVsZUxpc3RTdG9yZS0+aW52YWxpZGF0ZUNvbnRlbnRSdWxlTGlzdFZl
cnNpb24oaWRlbnRpZmllcik7CiB9CiAKLS0gKHZvaWQpX2dldENvbnRlbnRFeHRlbnNpb25Tb3Vy
Y2VGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKE5TU3RyaW5nKikpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpX2dldENvbnRl
bnRSdWxlTGlzdFNvdXJjZUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNTdHJpbmcqKSljb21wbGV0aW9uSGFuZGxlcgogewog
ICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKLSAg
ICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5nZXRDb250ZW50RXh0ZW5zaW9uU291cmNlKGlkZW50
aWZpZXIsIFtoYW5kbGVyXShTdHJpbmcgc291cmNlKSB7CisgICAgX2NvbnRlbnRSdWxlTGlzdFN0
b3JlLT5nZXRDb250ZW50UnVsZUxpc3RTb3VyY2UoaWRlbnRpZmllciwgW2hhbmRsZXJdKFN0cmlu
ZyBzb3VyY2UpIHsKICAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKE5TU3RyaW5n
ICopKWhhbmRsZXIuZ2V0KCk7CiAgICAgICAgIGlmIChzb3VyY2UuaXNOdWxsKCkpCiAgICAgICAg
ICAgICByYXdIYW5kbGVyKG5pbCk7CkBAIC0xNjksOSArMTcxLDIyIEBAIC0gKHZvaWQpX2dldENv
bnRlbnRFeHRlbnNpb25Tb3VyY2VGb3JJZGUKIAogLy8gTlNfUkVMRUFTRVNfQVJHVU1FTlQgdG8g
a2VlcCBwZWFrIG1lbW9yeSB1c2FnZSBsb3cuCiAKLS0gKHZvaWQpX2NvbXBpbGVDb250ZW50RXh0
ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50
RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSljb21wbGV0
aW9uSGFuZGxlcgorLSAodm9pZClfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6
KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAq
KWVuY29kZWRDb250ZW50UnVsZUxpc3QgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29u
dGVudFJ1bGVMaXN0ICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBbc2Vs
ZiBfY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2Rl
ZENvbnRlbnRFeHRlbnNpb246ZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRs
ZXI6Y29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZXNBcmd1bWVudDpZRVNdOworICAgIFtzZWxmIF9j
b21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGVuY29kZWRDb250
ZW50UnVsZUxpc3Q6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjpjb21w
bGV0aW9uSGFuZGxlciByZWxlYXNlc0FyZ3VtZW50OllFU107Cit9CisKKysgKGluc3RhbmNldHlw
ZSlkZWZhdWx0U3RvcmVXaXRoTGVnYWN5RmlsZW5hbWUKK3sKKyAgICBjb25zdCBib29sIGxlZ2Fj
eUZpbGVuYW1lID0gdHJ1ZTsKKyAgICByZXR1cm4gV2ViS2l0Ojp3cmFwcGVyKEFQSTo6Q29udGVu
dFJ1bGVMaXN0U3RvcmU6OmRlZmF1bHRTdG9yZShsZWdhY3lGaWxlbmFtZSkpOworfQorCisrIChp
bnN0YW5jZXR5cGUpc3RvcmVXaXRoVVJMQW5kTGVnYWN5RmlsZW5hbWU6KE5TVVJMICopdXJsCit7
CisgICAgY29uc3QgYm9vbCBsZWdhY3lGaWxlbmFtZSA9IHRydWU7CisgICAgUmVmPEFQSTo6Q29u
dGVudFJ1bGVMaXN0U3RvcmU+IHN0b3JlID0gQVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZTo6c3Rv
cmVXaXRoUGF0aCh1cmwuYWJzb2x1dGVVUkwuZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uLCBsZWdh
Y3lGaWxlbmFtZSk7CisgICAgcmV0dXJuIFdlYktpdDo6d3JhcHBlcihzdG9yZS5sZWFrUmVmKCkp
OwogfQogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
Q29udGVudFJ1bGVMaXN0U3RvcmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZUludGVybmFsLmgJ
KHJldmlzaW9uIDIxNjUzOSkJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmg6MjE2NTM5KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlSW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAor
CisjaW1wb3J0ICJBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCIKKyNpbXBvcnQgIldLT2JqZWN0
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitpbmxpbmUgV0tDb250ZW50RXh0ZW5zaW9uU3Rv
cmUgKndyYXBwZXIoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmUmIHN0b3JlKQoreworICAgIEFT
U0VSVChbc3RvcmUud3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W1dLQ29udGVudEV4dGVuc2lvblN0
b3JlIGNsYXNzXV0pOworICAgIHJldHVybiAoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKilzdG9y
ZS53cmFwcGVyKCk7Cit9CisKK30KKworQGludGVyZmFjZSBXS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZSAoKSA8V0tPYmplY3Q+IHsKK0BwYWNrYWdlCisgICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6
Q29udGVudEV4dGVuc2lvblN0b3JlPiBfY29udGVudEV4dGVuc2lvblN0b3JlOworfQorQGVuZAor
CisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZUludGVybmFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0
b3JlSW50ZXJuYWwuaAkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlSW50ZXJuYWwuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsMjYgKzIzLDI2IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2ltcG9ydCAiV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgiCisj
aW1wb3J0ICJXS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oIgogCiAjaWYgV0tfQVBJX0VO
QUJMRUQKIAotI2ltcG9ydCAiQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisjaW1wb3J0ICJB
UElDb250ZW50UnVsZUxpc3RTdG9yZS5oIgogI2ltcG9ydCAiV0tPYmplY3QuaCIKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLWlubGluZSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAqd3JhcHBlcihB
UEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZSYgc3RvcmUpCitpbmxpbmUgV0tDb250ZW50UnVsZUxp
c3RTdG9yZSAqd3JhcHBlcihBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlJiBzdG9yZSkKIHsKLSAg
ICBBU1NFUlQoW3N0b3JlLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltXS0NvbnRlbnRFeHRlbnNp
b25TdG9yZSBjbGFzc11dKTsKLSAgICByZXR1cm4gKFdLQ29udGVudEV4dGVuc2lvblN0b3JlICop
c3RvcmUud3JhcHBlcigpOworICAgIEFTU0VSVChbc3RvcmUud3JhcHBlcigpIGlzS2luZE9mQ2xh
c3M6W1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgY2xhc3NdXSk7CisgICAgcmV0dXJuIChXS0NvbnRl
bnRSdWxlTGlzdFN0b3JlICopc3RvcmUud3JhcHBlcigpOwogfQogCiB9CiAKLUBpbnRlcmZhY2Ug
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKCkgPFdLT2JqZWN0PiB7CitAaW50ZXJmYWNlIFdLQ29u
dGVudFJ1bGVMaXN0U3RvcmUgKCkgPFdLT2JqZWN0PiB7CiBAcGFja2FnZQotICAgIEFQSTo6T2Jq
ZWN0U3RvcmFnZTxBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZT4gX2NvbnRlbnRFeHRlbnNpb25T
dG9yZTsKKyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZT4g
X2NvbnRlbnRSdWxlTGlzdFN0b3JlOwogfQogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxl
TGlzdFN0b3JlUHJpdmF0ZS5oCShyZXZpc2lvbiAyMTY1MzkpCShmcm9tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmg6MjE2
NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxl
TGlzdFN0b3JlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0IDxXZWJLaXQvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaD4KKworI2lm
IFdLX0FQSV9FTkFCTEVECisKK0BpbnRlcmZhY2UgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdL
UHJpdmF0ZSkKKworLy8gRm9yIHRlc3Rpbmcgb25seS4KKy0gKHZvaWQpX3JlbW92ZUFsbENvbnRl
bnRFeHRlbnNpb25zOworLSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9u
Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyOworLSAodm9pZClfZ2V0Q29udGVu
dEV4dGVuc2lvblNvdXJjZUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNTdHJpbmcqKSljb21wbGV0aW9uSGFuZGxlcjsKKwor
Ly8gTlNfUkVMRUFTRVNfQVJHVU1FTlQgdG8ga2VlcCBwZWFrIG1lbW9yeSB1c2FnZSBsb3cuCist
ICh2b2lkKV9jb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICop
aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKikgTlNfUkVMRUFT
RVNfQVJHVU1FTlQgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVy
OworCitAZW5kCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZVByaXZh
dGUuaAkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MywxOSArMjMsMjUgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaW1wb3J0IDxXZWJLaXQvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaD4KKyNpbXBvcnQgPFdl
YktpdC9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLmg+CiAKICNpZiBXS19BUElfRU5BQkxFRAogCi1A
aW50ZXJmYWNlIFdLQ29udGVudEV4dGVuc2lvblN0b3JlIChXS1ByaXZhdGUpCitAaW50ZXJmYWNl
IFdLQ29udGVudFJ1bGVMaXN0U3RvcmUgKFdLUHJpdmF0ZSkKIAogLy8gRm9yIHRlc3Rpbmcgb25s
eS4KLS0gKHZvaWQpX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zOwotLSAodm9pZClfaW52YWxp
ZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVu
dGlmaWVyOwotLSAodm9pZClfZ2V0Q29udGVudEV4dGVuc2lvblNvdXJjZUZvcklkZW50aWZpZXI6
KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNTdHJp
bmcqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpX3JlbW92ZUFsbENvbnRlbnRSdWxlTGlz
dHM7CistICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudFJ1bGVMaXN0VmVyc2lvbkZvcklkZW50aWZp
ZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcjsKKy0gKHZvaWQpX2dldENvbnRlbnRSdWxlTGlzdFNv
dXJjZUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoTlNTdHJpbmcqKSljb21wbGV0aW9uSGFuZGxlcjsKIAogLy8gTlNfUkVMRUFT
RVNfQVJHVU1FTlQgdG8ga2VlcCBwZWFrIG1lbW9yeSB1c2FnZSBsb3cuCi0tICh2b2lkKV9jb21w
aWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBl
bmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKikgTlNfUkVMRUFTRVNfQVJHVU1FTlQg
ZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29u
dGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClf
Y29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmll
ciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKSBOU19SRUxFQVNFU19BUkdVTUVO
VCBlbmNvZGVkQ29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0Nv
bnRlbnRSdWxlTGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworCisvLyBUbyBt
YWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZQor
Ly8gRklYTUU6IEFkZCBzb21ldGhpbmcgdG8gZXhpc3RpbmcgY2xpZW50cyBvZiBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlIHRvIG1pZ3JhdGUgZmlsZXMgZnJvbSBsZWdhY3kgZmlsZW5hbWVz
LAorLy8gYWRvcHQgV0tDb250ZW50UnVsZUxpc3RTdG9yZSwgYW5kIHJlbW92ZSBfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlLgorKyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRTdG9yZVdpdGhMZWdh
Y3lGaWxlbmFtZTsKKysgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkxBbmRMZWdhY3lGaWxlbmFt
ZTooTlNVUkwgKil1cmw7CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS0Vycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS0Vycm9yLmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwx
MCArNDEsMTAgQEAgV0tfRVhURVJOIE5TU3RyaW5nICogY29uc3QgV0tFcnJvckRvbWFpbgogIEBj
b25zdGFudCBXS0Vycm9yV2ViVmlld0ludmFsaWRhdGVkICAgICAgICAgICAgICAgICAgIEluZGlj
YXRlcyB0aGF0IHRoZSBXS1dlYlZpZXcgd2FzIGludmFsaWRhdGVkLgogIEBjb25zdGFudCBXS0Vy
cm9ySmF2YVNjcmlwdEV4Y2VwdGlvbk9jY3VycmVkICAgICAgICAgIEluZGljYXRlcyB0aGF0IGEg
SmF2YVNjcmlwdCBleGNlcHRpb24gb2NjdXJyZWQuCiAgQGNvbnN0YW50IFdLRXJyb3JKYXZhU2Ny
aXB0UmVzdWx0VHlwZUlzVW5zdXBwb3J0ZWQgICAgSW5kaWNhdGVzIHRoYXQgdGhlIHJlc3VsdCBv
ZiBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb3VsZCBub3QgYmUgcmV0dXJuZWQuCi0gQGNvbnN0YW50
IFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkICAgSW5kaWNhdGVzIHRo
YXQgY29tcGlsaW5nIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQuCi0gQGNvbnN0YW50
IFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVMb29rVXBGYWlsZWQgICAgSW5kaWNhdGVzIHRo
YXQgbG9va2luZyB1cCBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkLgotIEBjb25zdGFu
dCBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlUmVtb3ZlRmFpbGVkICAgIEluZGljYXRlcyB0
aGF0IHJlbW92aW5nIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQuCi0gQGNvbnN0YW50
IFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVWZXJzaW9uTWlzbWF0Y2ggSW5kaWNhdGVzIHRo
YXQgdGhlIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gdmVyc2lvbiBkaWQgbm90IG1hdGNoIHRoZSBs
YXRlc3QuCisgQGNvbnN0YW50IFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZUNvbXBpbGVGYWls
ZWQgICAgSW5kaWNhdGVzIHRoYXQgY29tcGlsaW5nIGEgV0tVc2VyQ29udGVudFJ1bGVMaXN0IGZh
aWxlZC4KKyBAY29uc3RhbnQgV0tFcnJvckNvbnRlbnRSdWxlTGlzdFN0b3JlTG9va1VwRmFpbGVk
ICAgICBJbmRpY2F0ZXMgdGhhdCBsb29raW5nIHVwIGEgV0tVc2VyQ29udGVudFJ1bGVMaXN0IGZh
aWxlZC4KKyBAY29uc3RhbnQgV0tFcnJvckNvbnRlbnRSdWxlTGlzdFN0b3JlUmVtb3ZlRmFpbGVk
ICAgICBJbmRpY2F0ZXMgdGhhdCByZW1vdmluZyBhIFdLVXNlckNvbnRlbnRSdWxlTGlzdCBmYWls
ZWQuCisgQGNvbnN0YW50IFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZVZlcnNpb25NaXNtYXRj
aCAgSW5kaWNhdGVzIHRoYXQgdGhlIFdLVXNlckNvbnRlbnRSdWxlTGlzdCB2ZXJzaW9uIGRpZCBu
b3QgbWF0Y2ggdGhlIGxhdGVzdC4KICAqLwogdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgV0tF
cnJvckNvZGUpIHsKICAgICBXS0Vycm9yVW5rbm93biA9IDEsCkBAIC01MiwxMCArNTIsMTAgQEAg
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgV0tFcnJvckNvZGUpIAogICAgIFdLRXJyb3JXZWJW
aWV3SW52YWxpZGF0ZWQsCiAgICAgV0tFcnJvckphdmFTY3JpcHRFeGNlcHRpb25PY2N1cnJlZCwK
ICAgICBXS0Vycm9ySmF2YVNjcmlwdFJlc3VsdFR5cGVJc1Vuc3VwcG9ydGVkIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3N4KDEwLjExKSwgaW9zKDkuMCkpLAotICAgIFdLRXJyb3JDb250ZW50RXh0ZW5z
aW9uU3RvcmVDb21waWxlRmFpbGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpLAotICAgIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVMb29r
VXBGYWlsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSksCi0gICAgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCBXS19B
UElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKSwKLSAgICBX
S0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlVmVyc2lvbk1pc21hdGNoIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpLAorICAgIFdLRXJyb3JDb250
ZW50UnVsZUxpc3RTdG9yZUNvbXBpbGVGYWlsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSksCisgICAgV0tFcnJvckNvbnRlbnRSdWxlTGlzdFN0
b3JlTG9va1VwRmFpbGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpLAorICAgIFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZVJlbW92ZUZhaWxl
ZCBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKSwK
KyAgICBXS0Vycm9yQ29udGVudFJ1bGVMaXN0U3RvcmVWZXJzaW9uTWlzbWF0Y2ggV0tfQVBJX0FW
QUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSksCiB9IFdLX0FQSV9B
VkFJTEFCTEUobWFjb3N4KDEwLjEwKSwgaW9zKDguMCkpOwogCiBOU19BU1NVTUVfTk9OTlVMTF9F
TkQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3Iu
bW0JKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tFcnJvci5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgsMTcgKzU4LDE3IEBAIE5TU3RyaW5n
ICpsb2NhbGl6ZWREZXNjcmlwdGlvbkZvckVycm9yQ28KICAgICBjYXNlIFdLRXJyb3JKYXZhU2Ny
aXB0UmVzdWx0VHlwZUlzVW5zdXBwb3J0ZWQ6CiAgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5H
KCJKYXZhU2NyaXB0IGV4ZWN1dGlvbiByZXR1cm5lZCBhIHJlc3VsdCBvZiBhbiB1bnN1cHBvcnRl
ZCB0eXBlIiwgIldLRXJyb3JKYXZhU2NyaXB0UmVzdWx0VHlwZUlzVW5zdXBwb3J0ZWQgZGVzY3Jp
cHRpb24iKTsKIAotICAgIGNhc2UgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxvb2tVcEZh
aWxlZDoKLSAgICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkcoIkxvb2tpbmcgdXAgYSBXS1VzZXJD
b250ZW50RXh0ZW5zaW9uIGZhaWxlZCIsICJXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlTG9v
a3VwRmFpbGVkIGRlc2NyaXB0aW9uIik7CisgICAgY2FzZSBXS0Vycm9yQ29udGVudFJ1bGVMaXN0
U3RvcmVMb29rVXBGYWlsZWQ6CisgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJMb29raW5n
IHVwIGEgV0tDb250ZW50UnVsZUxpc3QgZmFpbGVkIiwgIldLRXJyb3JDb250ZW50UnVsZUxpc3RT
dG9yZUxvb2t1cEZhaWxlZCBkZXNjcmlwdGlvbiIpOwogCi0gICAgY2FzZSBXS0Vycm9yQ29udGVu
dEV4dGVuc2lvblN0b3JlVmVyc2lvbk1pc21hdGNoOgotICAgICAgICByZXR1cm4gV0VCX1VJX1NU
UklORygiTG9va2luZyB1cCBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZm91bmQgYSBiaW5hcnkg
dGhhdCBpcyBpbmNvbXBhdGlibGUiLCAiV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNp
b25NaXNtYXRjaCBkZXNjcmlwdGlvbiIpOworICAgIGNhc2UgV0tFcnJvckNvbnRlbnRSdWxlTGlz
dFN0b3JlVmVyc2lvbk1pc21hdGNoOgorICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklORygiTG9v
a2luZyB1cCBhIFdLQ29udGVudFJ1bGVMaXN0IGZvdW5kIGEgYmluYXJ5IHRoYXQgaXMgaW5jb21w
YXRpYmxlIiwgIldLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZVZlcnNpb25NaXNtYXRjaCBkZXNj
cmlwdGlvbiIpOwogCi0gICAgY2FzZSBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlQ29tcGls
ZUZhaWxlZDoKLSAgICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkcoIkNvbXBpbGluZyBhIFdLVXNl
ckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkIiwgIldLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVD
b21waWxlRmFpbGVkIGRlc2NyaXB0aW9uIik7CisgICAgY2FzZSBXS0Vycm9yQ29udGVudFJ1bGVM
aXN0U3RvcmVDb21waWxlRmFpbGVkOgorICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklORygiQ29t
cGlsaW5nIGEgV0tDb250ZW50UnVsZUxpc3QgZmFpbGVkIiwgIldLRXJyb3JDb250ZW50UnVsZUxp
c3RTdG9yZUNvbXBpbGVGYWlsZWQgZGVzY3JpcHRpb24iKTsKIAotICAgIGNhc2UgV0tFcnJvckNv
bnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZDoKLSAgICAgICAgcmV0dXJuIFdFQl9VSV9T
VFJJTkcoIlJlbW92aW5nIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQiLCAiV0tFcnJv
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCBkZXNjcmlwdGlvbiIpOworICAgIGNh
c2UgV0tFcnJvckNvbnRlbnRSdWxlTGlzdFN0b3JlUmVtb3ZlRmFpbGVkOgorICAgICAgICByZXR1
cm4gV0VCX1VJX1NUUklORygiUmVtb3ZpbmcgYSBXS0NvbnRlbnRSdWxlTGlzdCBmYWlsZWQiLCAi
V0tFcnJvckNvbnRlbnRSdWxlTGlzdFN0b3JlUmVtb3ZlRmFpbGVkIGRlc2NyaXB0aW9uIik7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNl
ckNvbnRlbnRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMTY1Mzkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250
cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogTlNfQVNTVU1FX05P
Tk5VTExfQkVHSU4KIAotQGNsYXNzIFdLQ29udGVudEV4dGVuc2lvbjsKK0BjbGFzcyBXS0NvbnRl
bnRSdWxlTGlzdDsKIEBjbGFzcyBXS1VzZXJTY3JpcHQ7CiBAcHJvdG9jb2wgV0tTY3JpcHRNZXNz
YWdlSGFuZGxlcjsKIApAQCAtNzEsMTkgKzcxLDE5IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNv
c3goMTAuMTApLCBpb3MoOC4KICAqLwogLSAodm9pZClyZW1vdmVTY3JpcHRNZXNzYWdlSGFuZGxl
ckZvck5hbWU6KE5TU3RyaW5nICopbmFtZTsKIAotLyohIEBhYnN0cmFjdCBBZGRzIGEgdXNlciBj
b250ZW50IGV4dGVuc2lvbi4KLSBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdXNlciBjb250
ZW50IGV4dGVuc2lvbiB0byBhZGQuCisvKiEgQGFic3RyYWN0IEFkZHMgYSBjb250ZW50IHJ1bGUg
bGlzdC4KKyBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY29udGVudCBydWxlIGxpc3QgdG8g
YWRkLgogICovCi0tICh2b2lkKWFkZENvbnRlbnRFeHRlbnNpb246KFdLQ29udGVudEV4dGVuc2lv
biAqKWNvbnRlbnRFeHRlbnNpb24gV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKWFkZENvbnRlbnRSdWxlTGlzdDooV0tDb250ZW50
UnVsZUxpc3QgKiljb250ZW50UnVsZUxpc3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKLS8qISBAYWJzdHJhY3QgUmVtb3ZlcyBhIHVzZXIg
Y29udGVudCBleHRlbnNpb24uCi0gQHBhcmFtIG5hbWUgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHVz
ZXIgY29udGVudCBleHRlbnNpb24gdG8gcmVtb3ZlLgorLyohIEBhYnN0cmFjdCBSZW1vdmVzIGEg
Y29udGVudCBydWxlIGxpc3QuCisgQHBhcmFtIG5hbWUgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGNv
bnRlbnQgcnVsZSBsaXN0IHRvIHJlbW92ZS4KICAqLwotLSAodm9pZClyZW1vdmVDb250ZW50RXh0
ZW5zaW9uOihXS0NvbnRlbnRFeHRlbnNpb24gKiljb250ZW50RXh0ZW5zaW9uIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClyZW1v
dmVDb250ZW50UnVsZUxpc3Q6KFdLQ29udGVudFJ1bGVMaXN0ICopY29udGVudFJ1bGVMaXN0IFdL
X0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCi0v
KiEgQGFic3RyYWN0IFJlbW92ZXMgYWxsIGFzc29jaWF0ZWQgdXNlciBjb250ZW50IGV4dGVuc2lv
bnMuCisvKiEgQGFic3RyYWN0IFJlbW92ZXMgYWxsIGFzc29jaWF0ZWQgY29udGVudCBydWxlIGxp
c3RzLgogICovCi0tICh2b2lkKXJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClyZW1v
dmVBbGxDb250ZW50UnVsZUxpc3RzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxl
ci5tbQkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNyBAQAogCiAjaW1wb3J0ICJBUElTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbXBvcnQg
IkFQSVVzZXJDb250ZW50V29ybGQuaCIKLSNpbXBvcnQgIldLQ29udGVudEV4dGVuc2lvbkludGVy
bmFsLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRSdWxlTGlzdEludGVybmFsLmgiCiAjaW1wb3J0ICJX
S0ZyYW1lSW5mb0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS05TQXJyYXkuaCIKICNpbXBvcnQgIldL
U2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKQEAgLTkyLDI0ICs5MiwyNCBAQCAtICh2b2lkKXJlbW92
ZUFsbFVzZXJTY3JpcHRzCiAgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVB
bGxVc2VyU2NyaXB0cygpOwogfQogCi0tICh2b2lkKWFkZENvbnRlbnRFeHRlbnNpb246KFdLQ29u
dGVudEV4dGVuc2lvbiAqKWNvbnRlbnRFeHRlbnNpb24KKy0gKHZvaWQpYWRkQ29udGVudFJ1bGVM
aXN0OihXS0NvbnRlbnRSdWxlTGlzdCAqKWNvbnRlbnRSdWxlTGlzdAogewogI2lmIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCi0gICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5hZGRD
b250ZW50RXh0ZW5zaW9uKCpjb250ZW50RXh0ZW5zaW9uLT5fY29udGVudEV4dGVuc2lvbik7Cisg
ICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5hZGRDb250ZW50UnVsZUxpc3QoKmNvbnRl
bnRSdWxlTGlzdC0+X2NvbnRlbnRSdWxlTGlzdCk7CiAjZW5kaWYKIH0KIAotLSAodm9pZClyZW1v
dmVDb250ZW50RXh0ZW5zaW9uOihXS0NvbnRlbnRFeHRlbnNpb24gKiljb250ZW50RXh0ZW5zaW9u
CistICh2b2lkKXJlbW92ZUNvbnRlbnRSdWxlTGlzdDooV0tDb250ZW50UnVsZUxpc3QgKiljb250
ZW50UnVsZUxpc3QKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIF91c2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlQ29udGVudEV4dGVuc2lvbihjb250ZW50RXh0
ZW5zaW9uLT5fY29udGVudEV4dGVuc2lvbi0+bmFtZSgpKTsKKyAgICBfdXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHktPnJlbW92ZUNvbnRlbnRSdWxlTGlzdChjb250ZW50UnVsZUxpc3QtPl9jb250
ZW50UnVsZUxpc3QtPm5hbWUoKSk7CiAjZW5kaWYKIH0KIAotLSAodm9pZClyZW1vdmVBbGxDb250
ZW50RXh0ZW5zaW9ucworLSAodm9pZClyZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzCiB7CiAjaWYg
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHktPnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7CisgICAgX3VzZXJDb250ZW50Q29udHJv
bGxlclByb3h5LT5yZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzKCk7CiAjZW5kaWYKIH0KIApAQCAt
MTc1LDIxICsxNzUsMjEgQEAgLSAodm9pZClfcmVtb3ZlQWxsVXNlclNjcmlwdHNBc3NvY2lhdGVk
VwogLSAodm9pZClfYWRkVXNlckNvbnRlbnRGaWx0ZXI6KF9XS1VzZXJDb250ZW50RmlsdGVyICop
dXNlckNvbnRlbnRGaWx0ZXIKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAg
IF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+YWRkQ29udGVudEV4dGVuc2lvbigqdXNlckNv
bnRlbnRGaWx0ZXItPl9jb250ZW50RXh0ZW5zaW9uLT5fY29udGVudEV4dGVuc2lvbik7CisgICAg
X3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5hZGRDb250ZW50UnVsZUxpc3QoKnVzZXJDb250
ZW50RmlsdGVyLT5fY29udGVudFJ1bGVMaXN0LT5fY29udGVudFJ1bGVMaXN0KTsKICNlbmRpZgog
fQogCiAtICh2b2lkKV9yZW1vdmVVc2VyQ29udGVudEZpbHRlcjooTlNTdHJpbmcgKil1c2VyQ29u
dGVudEZpbHRlck5hbWUKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIF91
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlQ29udGVudEV4dGVuc2lvbih1c2VyQ29u
dGVudEZpbHRlck5hbWUpOworICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3Zl
Q29udGVudFJ1bGVMaXN0KHVzZXJDb250ZW50RmlsdGVyTmFtZSk7CiAjZW5kaWYKIH0KIAogLSAo
dm9pZClfcmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzCiB7CiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKLSAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZUFsbENv
bnRlbnRFeHRlbnNpb25zKCk7CisgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5yZW1v
dmVBbGxDb250ZW50UnVsZUxpc3RzKCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5tbQkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNpZiBXS19BUElfRU5BQkxFRAogCi0j
aW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgiCi0jaW1wb3J0ICJXS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCIKKyNpbXBvcnQgIldLQ29udGVudFJ1bGVMaXN0
U3RvcmVJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tDb250ZW50UnVsZUxpc3RTdG9yZVByaXZhdGUu
aCIKICNpbXBvcnQgIldLRXJyb3JJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZVByaXZhdGUuaCIKICNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVySW50
ZXJuYWwuaCIKQEAgLTM4LDIwICszOCwyMCBAQAogCiBOU1N0cmluZyAqIGNvbnN0IF9XS1VzZXJD
b250ZW50RXh0ZW5zaW9uc0RvbWFpbiA9IEAiV0tFcnJvckRvbWFpbiI7CiAKLXN0YXRpYyBOU0Vy
cm9yICp0b1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvcihjb25zdCBOU0Vycm9yICplcnJv
cikKK3N0YXRpYyBOU0Vycm9yICp0b1VzZXJDb250ZW50UnVsZUxpc3RTdG9yZUVycm9yKGNvbnN0
IE5TRXJyb3IgKmVycm9yKQogewogICAgIGlmICghZXJyb3IpCiAgICAgICAgIHJldHVybiBuaWw7
CiAKICAgICBBU1NFUlQoZXJyb3IuZG9tYWluID09IFdLRXJyb3JEb21haW4pOwogICAgIHN3aXRj
aCAoZXJyb3IuY29kZSkgewotICAgIGNhc2UgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxv
b2tVcEZhaWxlZDoKKyAgICBjYXNlIFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZUxvb2tVcEZh
aWxlZDoKICAgICAgICAgcmV0dXJuIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29u
dGVudEV4dGVuc2lvbnNEb21haW4gY29kZTpfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJy
b3JMb29rdXBGYWlsZWQgdXNlckluZm86ZXJyb3IudXNlckluZm9dOwotICAgIGNhc2UgV0tFcnJv
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25NaXNtYXRjaDoKKyAgICBjYXNlIFdLRXJyb3JD
b250ZW50UnVsZUxpc3RTdG9yZVZlcnNpb25NaXNtYXRjaDoKICAgICAgICAgcmV0dXJuIFtOU0Vy
cm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gY29kZTpf
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2ggdXNlckluZm86
ZXJyb3IudXNlckluZm9dOwotICAgIGNhc2UgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUNv
bXBpbGVGYWlsZWQ6CisgICAgY2FzZSBXS0Vycm9yQ29udGVudFJ1bGVMaXN0U3RvcmVDb21waWxl
RmFpbGVkOgogICAgICAgICByZXR1cm4gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOl9XS1VzZXJD
b250ZW50RXh0ZW5zaW9uc0RvbWFpbiBjb2RlOl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVF
cnJvckNvbXBpbGVGYWlsZWQgdXNlckluZm86ZXJyb3IudXNlckluZm9dOwotICAgIGNhc2UgV0tF
cnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZDoKKyAgICBjYXNlIFdLRXJyb3JD
b250ZW50UnVsZUxpc3RTdG9yZVJlbW92ZUZhaWxlZDoKICAgICAgICAgcmV0dXJuIFtOU0Vycm9y
IGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gY29kZTpfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQgdXNlckluZm86ZXJyb3Iu
dXNlckluZm9dOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC02MiwzNCArNjIsMzQgQEAgc3RhdGljIE5TRXJyb3IgKnRvVXNlckNvbnRlbnRF
eHRlbnNpb25TdAogCiArIChpbnN0YW5jZXR5cGUpZGVmYXVsdFN0b3JlCiB7Ci0gICAgcmV0dXJu
IFtbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgYWxsb2NdIF9pbml0V2l0aFdLQ29udGVu
dEV4dGVuc2lvblN0b3JlOltXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdXSBh
dXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUg
YWxsb2NdIF9pbml0V2l0aFdLQ29udGVudFJ1bGVMaXN0U3RvcmU6W1dLQ29udGVudFJ1bGVMaXN0
U3RvcmUgZGVmYXVsdFN0b3JlV2l0aExlZ2FjeUZpbGVuYW1lXV0gYXV0b3JlbGVhc2VdOwogfQog
CiArIChpbnN0YW5jZXR5cGUpc3RvcmVXaXRoVVJMOihOU1VSTCAqKXVybAogewotICAgIHJldHVy
biBbW1tfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGFsbG9jXSBfaW5pdFdpdGhXS0NvbnRl
bnRFeHRlbnNpb25TdG9yZTpbV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgc3RvcmVXaXRoVVJMOnVy
bF1dIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gW1tbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSBhbGxvY10gX2luaXRXaXRoV0tDb250ZW50UnVsZUxpc3RTdG9yZTpbV0tDb250ZW50UnVs
ZUxpc3RTdG9yZSBzdG9yZVdpdGhVUkxBbmRMZWdhY3lGaWxlbmFtZTp1cmxdXSBhdXRvcmVsZWFz
ZV07CiB9CiAKLS0gKHZvaWQpY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihO
U1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICop
ZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS1Vz
ZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQp
Y29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZp
ZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICopZW5jb2RlZENvbnRlbnRSdWxl
TGlzdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwg
TlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIFtfY29udGVudEV4dGVuc2lvblN0
b3JlIF9jb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNv
ZGVkQ29udGVudEV4dGVuc2lvbjplbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFu
ZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqY29udGVudEV4dGVuc2lvbiwgTlNFcnJvciAqZXJy
b3IpIHsKLSAgICAgICAgX1dLVXNlckNvbnRlbnRGaWx0ZXIgKmNvbnRlbnRGaWx0ZXIgPSBjb250
ZW50RXh0ZW5zaW9uID8gW1tbX1dLVXNlckNvbnRlbnRGaWx0ZXIgYWxsb2NdIF9pbml0V2l0aFdL
Q29udGVudEV4dGVuc2lvbjpjb250ZW50RXh0ZW5zaW9uXSBhdXRvcmVsZWFzZV0gOiBuaWw7Ci0g
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRlbnRGaWx0ZXIsIHRvVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUVycm9yKGVycm9yKSk7CisgICAgW19jb250ZW50UnVsZUxpc3RTdG9yZSBfY29t
cGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVu
dFJ1bGVMaXN0OmVuY29kZWRDb250ZW50UnVsZUxpc3QgY29tcGxldGlvbkhhbmRsZXI6XihXS0Nv
bnRlbnRSdWxlTGlzdCAqY29udGVudFJ1bGVMaXN0LCBOU0Vycm9yICplcnJvcikgeworICAgICAg
ICBfV0tVc2VyQ29udGVudEZpbHRlciAqY29udGVudEZpbHRlciA9IGNvbnRlbnRSdWxlTGlzdCA/
IFtbW19XS1VzZXJDb250ZW50RmlsdGVyIGFsbG9jXSBfaW5pdFdpdGhXS0NvbnRlbnRSdWxlTGlz
dDpjb250ZW50UnVsZUxpc3RdIGF1dG9yZWxlYXNlXSA6IG5pbDsKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoY29udGVudEZpbHRlciwgdG9Vc2VyQ29udGVudFJ1bGVMaXN0U3RvcmVFcnJvcihl
cnJvcikpOwogICAgIH1dOwogfQogCiAtICh2b2lkKWxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKF9XS1VzZXJDb250ZW50RmlsdGVyICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIK
IHsKLSAgICBbX2NvbnRlbnRFeHRlbnNpb25TdG9yZSBsb29rVXBDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjppZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5z
aW9uICpjb250ZW50RXh0ZW5zaW9uLCBOU0Vycm9yICplcnJvcikgewotICAgICAgICBfV0tVc2Vy
Q29udGVudEZpbHRlciAqY29udGVudEZpbHRlciA9IGNvbnRlbnRFeHRlbnNpb24gPyBbW1tfV0tV
c2VyQ29udGVudEZpbHRlciBhbGxvY10gX2luaXRXaXRoV0tDb250ZW50RXh0ZW5zaW9uOmNvbnRl
bnRFeHRlbnNpb25dIGF1dG9yZWxlYXNlXSA6IG5pbDsKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoY29udGVudEZpbHRlciwgdG9Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3IoZXJyb3Ip
KTsKKyAgICBbX2NvbnRlbnRSdWxlTGlzdFN0b3JlIGxvb2tVcENvbnRlbnRSdWxlTGlzdEZvcklk
ZW50aWZpZXI6aWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0
ICpjb250ZW50UnVsZUxpc3QsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIF9XS1VzZXJDb250
ZW50RmlsdGVyICpjb250ZW50RmlsdGVyID0gY29udGVudFJ1bGVMaXN0ID8gW1tbX1dLVXNlckNv
bnRlbnRGaWx0ZXIgYWxsb2NdIF9pbml0V2l0aFdLQ29udGVudFJ1bGVMaXN0OmNvbnRlbnRSdWxl
TGlzdF0gYXV0b3JlbGVhc2VdIDogbmlsOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250
ZW50RmlsdGVyLCB0b1VzZXJDb250ZW50UnVsZUxpc3RTdG9yZUVycm9yKGVycm9yKSk7CiAgICAg
fV07CiB9CiAKIC0gKHZvaWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5T
U3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAq
KSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIFtfY29udGVudEV4dGVuc2lvblN0b3JlIHJlbW92
ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRs
ZXI6XihOU0Vycm9yICplcnJvcikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0b1VzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvcihlcnJvcikpOworICAgIFtfY29udGVudFJ1bGVMaXN0
U3RvcmUgcmVtb3ZlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGNvbXBs
ZXRpb25IYW5kbGVyOl4oTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIodG9Vc2VyQ29udGVudFJ1bGVMaXN0U3RvcmVFcnJvcihlcnJvcikpOwogICAgIH1dOwogfQog
CkBAIC05Nyw3ICs5Nyw3IEBAIC0gKHZvaWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50
aWYKIAogLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIHsKLSAgICByZXR1cm4gW19jb250ZW50
RXh0ZW5zaW9uU3RvcmUgX2FwaU9iamVjdF07CisgICAgcmV0dXJuIFtfY29udGVudFJ1bGVMaXN0
U3RvcmUgX2FwaU9iamVjdF07CiB9CiAKIEBlbmQKQEAgLTEwOCwyMSArMTA4LDIxIEBAIC0gKEFQ
STo6T2JqZWN0JilfYXBpT2JqZWN0CiAKIC0gKHZvaWQpX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNp
b25zCiB7Ci0gICAgW19jb250ZW50RXh0ZW5zaW9uU3RvcmUgX3JlbW92ZUFsbENvbnRlbnRFeHRl
bnNpb25zXTsKKyAgICBbX2NvbnRlbnRSdWxlTGlzdFN0b3JlIF9yZW1vdmVBbGxDb250ZW50UnVs
ZUxpc3RzXTsKIH0KIAogLSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9u
Rm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCiB7Ci0gICAgW19jb250ZW50RXh0
ZW5zaW9uU3RvcmUgX2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbkZvcklkZW50aWZp
ZXI6aWRlbnRpZmllcl07CisgICAgW19jb250ZW50UnVsZUxpc3RTdG9yZSBfaW52YWxpZGF0ZUNv
bnRlbnRSdWxlTGlzdFZlcnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXJdOwogfQogCi0tIChp
ZClfaW5pdFdpdGhXS0NvbnRlbnRFeHRlbnNpb25TdG9yZTooV0tDb250ZW50RXh0ZW5zaW9uU3Rv
cmUqKWNvbnRlbnRFeHRlbnNpb25TdG9yZQorLSAoaWQpX2luaXRXaXRoV0tDb250ZW50UnVsZUxp
c3RTdG9yZTooV0tDb250ZW50UnVsZUxpc3RTdG9yZSopY29udGVudFJ1bGVMaXN0U3RvcmUKIHsK
ICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICAKLSAgICBfY29udGVudEV4dGVuc2lvblN0b3JlID0gY29udGVudEV4dGVuc2lv
blN0b3JlOworICAgIF9jb250ZW50UnVsZUxpc3RTdG9yZSA9IGNvbnRlbnRSdWxlTGlzdFN0b3Jl
OwogICAgIAogICAgIHJldHVybiBzZWxmOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJ
bnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNCArMjcsMTQgQEAKIAogI2lmIFdLX0FQ
SV9FTkFCTEVECiAKLSNpbXBvcnQgIkFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgorI2ltcG9y
dCAiQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaCIKICNpbXBvcnQgIldLT2JqZWN0LmgiCiAKLUBj
bGFzcyBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZTsKK0BjbGFzcyBXS0NvbnRlbnRSdWxlTGlzdFN0
b3JlOwogCiBAaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKCkgPFdLT2Jq
ZWN0PiB7CiBAcGFja2FnZQotICAgIFJldGFpblB0cjxXS0NvbnRlbnRFeHRlbnNpb25TdG9yZT4g
X2NvbnRlbnRFeHRlbnNpb25TdG9yZTsKKyAgICBSZXRhaW5QdHI8V0tDb250ZW50UnVsZUxpc3RT
dG9yZT4gX2NvbnRlbnRSdWxlTGlzdFN0b3JlOwogfQogQGVuZAogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oCShyZXZpc2lvbiAyMTY1MzkpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lm
IFdLX0FQSV9FTkFCTEVECiAKLUBjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZTsKK0BjbGFz
cyBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlOwogCiBAaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKIApAQCAtMzUsNyArMzUsNyBAQAogLSAodm9pZClfcmVt
b3ZlQWxsQ29udGVudEV4dGVuc2lvbnM7CiAtICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudEV4dGVu
c2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXI7CiAKLS0gKGlk
KV9pbml0V2l0aFdLQ29udGVudEV4dGVuc2lvblN0b3JlOihXS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZSopY29udGVudEV4dGVuc2lvblN0b3JlOworLSAoaWQpX2luaXRXaXRoV0tDb250ZW50UnVsZUxp
c3RTdG9yZTooV0tDb250ZW50UnVsZUxpc3RTdG9yZSopY29udGVudFJ1bGVMaXN0U3RvcmU7CiAK
IEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
Q29udGVudEZpbHRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1tCShyZXZpc2lvbiAyMTY1MzkpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBXS19BUElfRU5BQkxFRAog
Ci0jaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiV2Vi
Q29tcGlsZWRDb250ZW50UnVsZUxpc3QuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRl
bnNpb25Db21waWxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkVycm9y
Lmg+CiAjaW5jbHVkZSA8c3RyaW5nPgpAQCAtMzksMjAgKzM5LDIwIEBACiAKIC0gKEFQSTo6T2Jq
ZWN0JilfYXBpT2JqZWN0CiB7Ci0gICAgcmV0dXJuIFtfY29udGVudEV4dGVuc2lvbiBfYXBpT2Jq
ZWN0XTsKKyAgICByZXR1cm4gW19jb250ZW50UnVsZUxpc3QgX2FwaU9iamVjdF07CiB9CiAKIEBl
bmQKIAogQGltcGxlbWVudGF0aW9uIF9XS1VzZXJDb250ZW50RmlsdGVyIChXS1ByaXZhdGUpCiAK
LS0gKGlkKV9pbml0V2l0aFdLQ29udGVudEV4dGVuc2lvbjooV0tDb250ZW50RXh0ZW5zaW9uKilj
b250ZW50RXh0ZW5zaW9uCistIChpZClfaW5pdFdpdGhXS0NvbnRlbnRSdWxlTGlzdDooV0tDb250
ZW50UnVsZUxpc3QqKWNvbnRlbnRSdWxlTGlzdAogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CiAgICAgaWYgKCFzZWxmKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIF9jb250ZW50
RXh0ZW5zaW9uID0gY29udGVudEV4dGVuc2lvbjsKKyAgICBfY29udGVudFJ1bGVMaXN0ID0gY29u
dGVudFJ1bGVMaXN0OwogICAgIAogICAgIHJldHVybiBzZWxmOwogfQpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
Q29udGVudEZpbHRlckludGVybmFsLmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNywxNCArMjcsMTQgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAK
LSNpbXBvcnQgIkFQSUNvbnRlbnRFeHRlbnNpb24uaCIKKyNpbXBvcnQgIkFQSUNvbnRlbnRSdWxl
TGlzdC5oIgogI2ltcG9ydCAiV0tPYmplY3QuaCIKIAotQGNsYXNzIFdLQ29udGVudEV4dGVuc2lv
bjsKK0BjbGFzcyBXS0NvbnRlbnRSdWxlTGlzdDsKIAogQGludGVyZmFjZSBfV0tVc2VyQ29udGVu
dEZpbHRlciAoKSA8V0tPYmplY3Q+IHsKIEBwYWNrYWdlCi0gICAgUmV0YWluUHRyPFdLQ29udGVu
dEV4dGVuc2lvbj4gX2NvbnRlbnRFeHRlbnNpb247CisgICAgUmV0YWluUHRyPFdLQ29udGVudFJ1
bGVMaXN0PiBfY29udGVudFJ1bGVMaXN0OwogfQogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRl
bnRGaWx0ZXJQcml2YXRlLmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDExICsyNywxMSBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAotQGNsYXNz
IFdLVXNlckNvbnRlbnRFeHRlbnNpb247CitAY2xhc3MgV0tVc2VyQ29udGVudFJ1bGVMaXN0Owog
CiBAaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RmlsdGVyIChXS1ByaXZhdGUpCiAKLS0gKGlkKV9p
bml0V2l0aFdLQ29udGVudEV4dGVuc2lvbjooV0tDb250ZW50RXh0ZW5zaW9uKiljb250ZW50RXh0
ZW5zaW9uOworLSAoaWQpX2luaXRXaXRoV0tDb250ZW50UnVsZUxpc3Q6KFdLQ29udGVudFJ1bGVM
aXN0Kiljb250ZW50UnVsZUxpc3Q7CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHkuY3BwCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
Ci0jaW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgotI2luY2x1ZGUgIldlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgIkFQSUNvbnRlbnRSdWxlTGlzdC5oIgorI2lu
Y2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmgiCiAjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYktpdCB7CkBAIC05Miw5ICs5Miw5IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHk6OmFkZFAKICAgICAgICAgcGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcnMuYXBwZW5kKHsg
aGFuZGxlci0+aWRlbnRpZmllcigpLCBoYW5kbGVyLT51c2VyQ29udGVudFdvcmxkKCkuaWRlbnRp
ZmllcigpLCBoYW5kbGVyLT5uYW1lKCkgfSk7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQotICAgIEFTU0VSVChwYXJhbWV0ZXJzLmNvbnRlbnRFeHRlbnNpb25zLmlzRW1wdHkoKSk7
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjb250ZW50RXh0ZW5zaW9uIDogbV9jb250ZW50RXh0ZW5z
aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgcGFyYW1ldGVycy5jb250ZW50RXh0ZW5zaW9ucy5hcHBl
bmQoc3RkOjptYWtlX3BhaXIoY29udGVudEV4dGVuc2lvbi0+bmFtZSgpLCBjb250ZW50RXh0ZW5z
aW9uLT5jb21waWxlZEV4dGVuc2lvbigpLmRhdGEoKSkpOworICAgIEFTU0VSVChwYXJhbWV0ZXJz
LmNvbnRlbnRSdWxlTGlzdHMuaXNFbXB0eSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRl
bnRSdWxlTGlzdCA6IG1fY29udGVudFJ1bGVMaXN0cy52YWx1ZXMoKSkKKyAgICAgICAgcGFyYW1l
dGVycy5jb250ZW50UnVsZUxpc3RzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250ZW50UnVsZUxp
c3QtPm5hbWUoKSwgY29udGVudFJ1bGVMaXN0LT5jb21waWxlZFJ1bGVMaXN0KCkuZGF0YSgpKSk7
CiAjZW5kaWYKIH0KIApAQCAtMzMyLDMwICszMzIsMzAgQEAgdm9pZCBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eTo6ZGlkUAogfQogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
LXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZENvbnRlbnRFeHRlbnNpb24o
QVBJOjpDb250ZW50RXh0ZW5zaW9uJiBjb250ZW50RXh0ZW5zaW9uKQordm9pZCBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eTo6YWRkQ29udGVudFJ1bGVMaXN0KEFQSTo6Q29udGVudFJ1bGVM
aXN0JiBjb250ZW50UnVsZUxpc3QpCiB7Ci0gICAgbV9jb250ZW50RXh0ZW5zaW9ucy5zZXQoY29u
dGVudEV4dGVuc2lvbi5uYW1lKCksICZjb250ZW50RXh0ZW5zaW9uKTsKKyAgICBtX2NvbnRlbnRS
dWxlTGlzdHMuc2V0KGNvbnRlbnRSdWxlTGlzdC5uYW1lKCksICZjb250ZW50UnVsZUxpc3QpOwog
Ci0gICAgYXV0byBwYWlyID0gc3RkOjptYWtlX3BhaXIoY29udGVudEV4dGVuc2lvbi5uYW1lKCks
IGNvbnRlbnRFeHRlbnNpb24uY29tcGlsZWRFeHRlbnNpb24oKS5kYXRhKCkpOworICAgIGF1dG8g
cGFpciA9IHN0ZDo6bWFrZV9wYWlyKGNvbnRlbnRSdWxlTGlzdC5uYW1lKCksIGNvbnRlbnRSdWxl
TGlzdC5jb21waWxlZFJ1bGVMaXN0KCkuZGF0YSgpKTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1By
b3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkQ29udGVudEV4dGVuc2lvbnMoeyBwYWly
IH0pLCBtX2lkZW50aWZpZXIpOworICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OkFkZENvbnRlbnRSdWxlTGlzdHMoeyBwYWlyIH0pLCBtX2lk
ZW50aWZpZXIpOwogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1v
dmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHk6OnJlbW92ZUNvbnRlbnRSdWxlTGlzdChjb25zdCBTdHJpbmcmIG5h
bWUpCiB7Ci0gICAgbV9jb250ZW50RXh0ZW5zaW9ucy5yZW1vdmUobmFtZSk7CisgICAgbV9jb250
ZW50UnVsZUxpc3RzLnJlbW92ZShuYW1lKTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBw
cm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlQ29udGVudEV4dGVuc2lvbihuYW1lKSwgbV9p
ZGVudGlmaWVyKTsKKyAgICAgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjpSZW1vdmVDb250ZW50UnVsZUxpc3QobmFtZSksIG1faWRlbnRpZmllcik7
CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZUFsbENvbnRl
bnRFeHRlbnNpb25zKCkKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92
ZUFsbENvbnRlbnRSdWxlTGlzdHMoKQogewotICAgIG1fY29udGVudEV4dGVuc2lvbnMuY2xlYXIo
KTsKKyAgICBtX2NvbnRlbnRSdWxlTGlzdHMuY2xlYXIoKTsKIAogICAgIGZvciAoV2ViUHJvY2Vz
c1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVtb3ZlQWxsQ29udGVudEV4dGVuc2lv
bnMoKSwgbV9pZGVudGlmaWVyKTsKKyAgICAgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzKCksIG1faWRl
bnRpZmllcik7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Vz
ZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5LmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXJyYXk7Ci1j
bGFzcyBDb250ZW50RXh0ZW5zaW9uOworY2xhc3MgQ29udGVudFJ1bGVMaXN0OwogY2xhc3MgVXNl
ckNvbnRlbnRXb3JsZDsKIGNsYXNzIFVzZXJTY3JpcHQ7CiBjbGFzcyBVc2VyU3R5bGVTaGVldDsK
QEAgLTkyLDkgKzkyLDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQWxsVXNlck1lc3NhZ2VI
YW5kbGVycyhBUEk6OlVzZXJDb250ZW50V29ybGQmKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCi0gICAgdm9pZCBhZGRDb250ZW50RXh0ZW5zaW9uKEFQSTo6Q29udGVudEV4dGVu
c2lvbiYpOwotICAgIHZvaWQgcmVtb3ZlQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmKTsK
LSAgICB2b2lkIHJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7CisgICAgdm9pZCBhZGRDb250
ZW50UnVsZUxpc3QoQVBJOjpDb250ZW50UnVsZUxpc3QmKTsKKyAgICB2b2lkIHJlbW92ZUNvbnRl
bnRSdWxlTGlzdChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHJlbW92ZUFsbENvbnRlbnRSdWxl
TGlzdHMoKTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMTE2LDcgKzExNiw3IEBAIHByaXZhdGU6
CiAgICAgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPEFQSTo6VXNlckNvbnRlbnRXb3JsZD4+IG1fdXNl
ckNvbnRlbnRXb3JsZHM7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIEhh
c2hNYXA8U3RyaW5nLCBSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPj4gbV9jb250ZW50RXh0
ZW5zaW9uczsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0
Pj4gbV9jb250ZW50UnVsZUxpc3RzOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTY1
MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTExNjgsMTQgKzExNjgsMTQgQEAKIAkJNUNCMjM3OTIxREYwRTJF
RTAwMTE3QUEzIC8qIEFQSVdlYnNpdGVQb2xpY2llcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCMjM3OEYxREYwRTFCODAwMTE3QUEzIC8qIEFQSVdl
YnNpdGVQb2xpY2llcy5oICovOyB9OwogCQk1Q0JDOUI4RDFDNjUyNzlDMDBBOEZEQ0YgLyogTmV0
d29ya0RhdGFUYXNrQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Q0JDOUI4QjFDNjUyNTczMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29j
b2EubW0gKi87IH07CiAJCTVDQkM5QjhFMUM2NTJDQTAwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRh
c2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQkM5
Qjg5MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCAqLzsgfTsKLQkJNUNEMjg2
NTExRTcyMzU5OTAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0QyODY0RDFFNzIyRjQ0MDA5
NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTVDRDI4NjUyMUU3MjM1QTYwMDk0RkRDOCAvKiBX
S0NvbnRlbnRFeHRlbnNpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Q0QyODY0QjFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9u
Lm1tICovOyB9OworCQk1Q0QyODY1MTFFNzIzNTk5MDA5NEZEQzggLyogV0tDb250ZW50UnVsZUxp
c3RTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUNEMjg2NEQxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0U3RvcmUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTVDRDI4NjUyMUU3
MjM1QTYwMDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdC5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRDI4NjRCMUU3MjJGNDQwMDk0RkRDOCAvKiBX
S0NvbnRlbnRSdWxlTGlzdC5tbSAqLzsgfTsKIAkJNUNEMjg2NTMxRTcyMzVBQTAwOTRGREM4IC8q
IF9XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUNEMjg2NDkxRTcyMkY0NDAwOTRGREM4IC8qIF9XS1VzZXJD
b250ZW50RmlsdGVyUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTVDRDI4NjU0MUU3MjM1QjEwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRl
bnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
RDI4NjRBMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTVDRDI4NjU1MUU3MjM1Qjgw
MDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNEMjg2NEMxRTcyMkY0NDAwOTRGREM4IC8q
IFdLQ29udGVudEV4dGVuc2lvbkludGVybmFsLmggKi87IH07Ci0JCTVDRDI4NjU2MUU3MjM1QzYw
MDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRDI4NjRFMUU3MjJGNDQwMDk0RkRDOCAvKiBX
S0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLzsgfTsKLQkJNUNEMjg2NTcxRTcyMzVDOTAwOTRG
REM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRDI4NjRGMUU3MjJGNDQwMDk0RkRDOCAv
KiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmggKi87IH07Ci0JCTVDRDI4NjU4MUU3
MjM1RDEwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRDI4NjUwMUU3MjJGNDQw
MDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1Q0QyODY1NDFFNzIzNUIxMDA5
NEZEQzggLyogV0tDb250ZW50UnVsZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVDRDI4NjRBMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRS
dWxlTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsK
KwkJNUNEMjg2NTUxRTcyMzVCODAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0SW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRDI4NjRD
MUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdEludGVybmFsLmggKi87IH07CisJ
CTVDRDI4NjU2MUU3MjM1QzYwMDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNEMjg2NEUxRTcy
MkY0NDAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0U3RvcmUubW0gKi87IH07CisJCTVDRDI4
NjU3MUU3MjM1QzkwMDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlSW50ZXJuYWwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRDI4NjRGMUU3
MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlSW50ZXJuYWwuaCAqLzsgfTsK
KwkJNUNEMjg2NTgxRTcyMzVEMTAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0Qy
ODY1MDFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50UnVsZUxpc3RTdG9yZVByaXZhdGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1Q0U4NUIy
MDFDODhFNjRCMDA3MEJGQ0UgLyogUGluZ0xvYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTg1QjFGMUM4OEU2NDMwMDcwQkZDRSAvKiBQaW5nTG9h
ZC5oICovOyB9OwogCQk1Q0ZFQ0IwNDFFMUVEMUNDMDBGODg1MDQgLyogTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVDRkVDQjAzMUUxRUQxQzgwMEY4ODUwNCAvKiBMZWdhY3lDdXN0b21Qcm90b2NvbE1h
bmFnZXIuY3BwICovOyB9OwogCQk2MzYzNTNBNTFFOTg1OERGMDAwOUY4QUYgLyogX1dLR2VvbG9j
YXRpb25Db3JlTG9jYXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjNGQUJFMTkxRTk3MEQ2NTAwMzAxMUQ1IC8qIF9XS0dlb2xvY2F0
aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTIzMiw4ICsxMjMyLDggQEAKIAkJN0MzNjFENzgxOTI4MDNC
RDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzYx
RDc2MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTdDMzYxRDc5MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzM2MUQ3NzE5MjgwM0JEMDAzNkE1OUQgLyogV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQk3QzM4NzQzNDE3
MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzM4NzQzMzE3MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJh
bm5lci5jcHAgKi87IH07Ci0JCTdDM0EwNkE3MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50
RXh0ZW5zaW9uU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0MzQTA2QTUxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25T
dG9yZS5jcHAgKi87IH07Ci0JCTdDM0EwNkE4MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50
RXh0ZW5zaW9uU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDM0EwNkE2MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuaCAqLzsgfTsKKwkJN0MzQTA2QTcxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRSdWxl
TGlzdFN0b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDM0EwNkE1MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50UnVsZUxpc3RTdG9yZS5j
cHAgKi87IH07CisJCTdDM0EwNkE4MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50UnVsZUxp
c3RTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0MzQTA2QTYxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmggKi87
IH07CiAJCTdDM0Y4QzkwMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNGOEM4RTE3
M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uY3BwICovOyB9OwogCQk3QzNGOEM5
MTE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0Y4QzhGMTczQUY1MkQwMDdCN0YzOSAv
KiBQbHVnaW5JbmZvcm1hdGlvbi5oICovOyB9OwogCQk3QzQ2OTRDOTFBNEI0RUExMDBBRDU4NDUg
LyogV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDY5NEM3MUE0QjRFQTAwMEFENTg0NSAv
KiBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwpAQCAtMTI0MSwx
MCArMTI0MSwxMCBAQAogCQk3QzQ2OTRDQzFBNEI1MTBBMDBBRDU4NDUgLyogV2ViUGFzdGVib2Fy
ZFByb3h5Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QzQ2OTRDQjFBNEI1MTBBMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5Q29jb2Eu
bW0gKi87IH07CiAJCTdDNDY5NEQwMUE1MUUzNjgwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJv
eHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0
Njk0Q0QxQTUxRTM2ODAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eS5jcHAgKi87IH07CiAJ
CTdDNDY5NEQxMUE1MUUzNjgwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDY5NENFMUE1MUUzNjgw
MEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuaCAqLzsgfTsKLQkJN0M0QUJFRDAxQUE4RTlG
MDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRBQkVDRTFBQThFOUYwMDA4OEFB
MzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcCAqLzsgfTsKLQkJN0M0QUJFRDEx
QUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0QUJFQ0YxQUE4RTlGMDAw
ODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oICovOyB9OwotCQk3QzRBQkVE
NDFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRBQkVEMjFB
QThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHAgKi87
IH07Ci0JCTdDNEFCRUQ1MUFBOEZDQjgwMDg4QUEzNyAvKiBXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzRBQkVEMzFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YS5oICovOyB9OworCQk3QzRBQkVEMDFBQThFOUYwMDA4OEFBMzcgLyogV2ViQ29tcGlsZWRD
b250ZW50UnVsZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0M0QUJFQ0UxQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudFJ1
bGVMaXN0LmNwcCAqLzsgfTsKKwkJN0M0QUJFRDExQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBp
bGVkQ29udGVudFJ1bGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QzRBQkVDRjFBQThFOUYwMDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50
UnVsZUxpc3QuaCAqLzsgfTsKKwkJN0M0QUJFRDQxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNvbXBp
bGVkQ29udGVudFJ1bGVMaXN0RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzRBQkVEMjFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRD
b250ZW50UnVsZUxpc3REYXRhLmNwcCAqLzsgfTsKKwkJN0M0QUJFRDUxQUE4RkNCODAwODhBQTM3
IC8qIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0QUJFRDMxQUE4RkNCODAwODhBQTM3IC8qIFdl
YkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5oICovOyB9OwogCQk3QzZEMzdGQzE3MkY1NTVG
MDA5RDI4NDcgLyogUGFnZUJhbm5lck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDNkQzN0ZBMTcyRjU1NUYwMDlEMjg0NyAvKiBQYWdlQmFubmVy
TWFjLm1tICovOyB9OwogCQk3QzZFNzBGQjE4QjJEQzdBMDBGMjRFMkUgLyogV2ViUHJvY2Vzc0Nv
Y29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M2
RTcwRjkxOEIyRDRBMDAwRjI0RTJFIC8qIFdlYlByb2Nlc3NDb2NvYS5tbSAqLzsgfTsKIAkJN0M4
NUZEN0MxOTM0MTVBODAwMDE3N0M0IC8qIFdlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODVGRDdCMTkzNDE1
QTgwMDAxNzdDNCAvKiBXZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmggKi87IH07CkBAIC0xMjY2
LDggKzEyNjYsOCBAQAogCQk3Qzg5RDJBMzFBNjc4ODc1MDAzQTVGREUgLyogV0tVc2VyU2NyaXB0
UmVmLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
ODlEMkExMUE2Nzg4NzUwMDNBNUZERSAvKiBXS1VzZXJTY3JpcHRSZWYuY3BwICovOyB9OwogCQk3
Qzg5RDJBNDFBNjc4ODc1MDAzQTVGREUgLyogV0tVc2VyU2NyaXB0UmVmLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJBMjFBNjc4ODc1MDAzQTVG
REUgLyogV0tVc2VyU2NyaXB0UmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJN0M4OUQyQTYxQTY3ODlFQTAwM0E1RkRFIC8qIEFQSVVzZXJTY3Jp
cHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4
OUQyQTUxQTY3ODlFQTAwM0E1RkRFIC8qIEFQSVVzZXJTY3JpcHQuY3BwICovOyB9OwotCQk3Qzg5
RDJCMzFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCMTFBNkIwNjhDMDAz
QTVGREUgLyogQVBJQ29udGVudEV4dGVuc2lvbi5jcHAgKi87IH07Ci0JCTdDODlEMkI0MUE2QjA2
OEMwMDNBNUZERSAvKiBBUElDb250ZW50RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCMjFBNkIwNjhDMDAzQTVGREUgLyogQVBJ
Q29udGVudEV4dGVuc2lvbi5oICovOyB9OworCQk3Qzg5RDJCMzFBNkIwNjhDMDAzQTVGREUgLyog
QVBJQ29udGVudFJ1bGVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDODlEMkIxMUE2QjA2OEMwMDNBNUZERSAvKiBBUElDb250ZW50UnVsZUxp
c3QuY3BwICovOyB9OworCQk3Qzg5RDJCNDFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudFJ1
bGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Qzg5RDJCMjFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudFJ1bGVMaXN0LmggKi87IH07CiAJ
CTdDODlEMkI2MUE2QjBERDkwMDNBNUZERSAvKiBXS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlE
MkI1MUE2QjBERDkwMDNBNUZERSAvKiBXS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Qzg5RDJC
OTFBNkIwRjJDMDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXIubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCNzFBNkIwRjJDMDAzQTVG
REUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXIubW0gKi87IH07CiAJCTdDODlEMkJBMUE2QjBGMkMw
MDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyQjgxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1Vz
ZXJDb250ZW50RmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTM0NDMsMTMgKzM0NDMsMTMgQEAKIAkJNUNCQzlCODkxQzY1MjRBNTAwQThG
RENGIC8qIE5ldHdvcmtEYXRhVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBOZXR3b3JrRGF0YVRhc2suaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFz
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0JDOUI4QjFDNjUyNTczMDBBOEZE
Q0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tDb2NvYS5tbTsgcGF0aCA9IE5ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1Q0QyODY0OTFFNzIyRjQ0MDA5NEZEQzggLyogX1dLVXNlckNvbnRlbnRGaWx0ZXJQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1VzZXJDb250ZW50
RmlsdGVyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1Q0QyODY0QTFF
NzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudEV4dGVuc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1Q0QyODY0QjFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9u
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tDb250ZW50RXh0
ZW5zaW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1Q0QyODY0QzFFNzIyRjQ0
MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUNEMjg2NEQxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVu
dEV4dGVuc2lvblN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29u
dGVudEV4dGVuc2lvblN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDRDI4
NjRFMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLQ29udGVudEV4dGVuc2lvblN0b3Jl
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1Q0QyODY0RjFFNzIyRjQ0MDA5NEZE
QzggLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDRDI4NjUwMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDRDI4NjRBMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRlbnRSdWxlTGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0QyODY0QjFFNzIyRjQ0MDA5NEZEQzgg
LyogV0tDb250ZW50UnVsZUxpc3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXS0NvbnRlbnRSdWxlTGlzdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNUNEMjg2NEMxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0SW50ZXJuYWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZW50UnVsZUxpc3RJbnRl
cm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0QyODY0RDFFNzIyRjQ0MDA5
NEZEQzggLyogV0tDb250ZW50UnVsZUxpc3RTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVDRDI4NjRFMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdFN0
b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tDb250ZW50
UnVsZUxpc3RTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNEMjg2NEYx
RTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0U3RvcmVJbnRlcm5hbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlSW50ZXJu
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNEMjg2NTAxRTcyMkY0NDAwOTRG
REM4IC8qIFdLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDRTg1QjFGMUM4OEU2NDMwMDcwQkZDRSAvKiBQaW5nTG9h
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQaW5nTG9hZC5oOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUNGRUNCMDMxRTFFRDFDODAwRjg4NTA0IC8qIExlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMZWdhY3lDdXN0b21Qcm90
b2NvbE1hbmFnZXIuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0xl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVENDQyQTU1MTZENTg1NjcwMEFDMzMzMSAvKiBQbHVnaW5TZXJ2aWNlLmVudGl0bGVtZW50
cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
eG1sOyBwYXRoID0gUGx1Z2luU2VydmljZS5lbnRpdGxlbWVudHM7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0zNTE3LDggKzM1MTcsOCBAQAogCQk3QzM2MUQ3NjE5MjgwM0JEMDAzNkE1
OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzM2MUQ3NzE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDMzg3NDMzMTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VCYW5uZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk3QzNBMDZBNTFBQUI5MDNFMDA5RDc0QkEgLyogQVBJQ29udGVudEV4
dGVuc2lvblN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQ
SUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTdDM0EwNkE2MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJQ29udGVudEV4dGVuc2lvblN0b3Jl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDM0EwNkE1MUFBQjkwM0UwMDlENzRC
QSAvKiBBUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTdDM0EwNkE2MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50UnVs
ZUxpc3RTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElDb250ZW50
UnVsZUxpc3RTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzNGOEM4RTE3
M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUGx1Z2luSW5mb3JtYXRpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QzNGOEM4RjE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3Jt
YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luSW5mb3JtYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0Njk0QzcxQTRCNEVBMDAwQUQ1
ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYXN0ZWJvYXJkUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzUyNywxMCArMzUyNywxMCBA
QAogCQk3QzQ2OTRDRDFBNTFFMzY4MDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhc3RlYm9hcmRQcm94eS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNDY5NENFMUE1MUUzNjgwMEFENTg0
NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViUGFzdGVib2FyZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
NDY5NENGMUE1MUUzNjgwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QzRBQkVDRTFBQThFOUYwMDA4OEFBMzcgLyog
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTdDNEFCRUNGMUFBOEU5RjAwMDg4QUEzNyAvKiBXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTdDNEFCRUQyMUFBOEZDQjgwMDg4QUEzNyAvKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3
QzRBQkVEMzFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb21waWxlZENvbnRlbnRF
eHRlbnNpb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNEFCRUNFMUFB
OEU5RjAwMDg4QUEzNyAvKiBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNEFCRUNGMUFBOEU5RjAwMDg4QUEz
NyAvKiBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3QzRBQkVEMjFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250
ZW50UnVsZUxpc3REYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDNEFCRUQzMUFBOEZDQjgwMDg4QUEzNyAvKiBXZWJDb21waWxlZENvbnRlbnRS
dWxlTGlzdERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29tcGls
ZWRDb250ZW50UnVsZUxpc3REYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
NEVEMzI2MUEzMTE5RDkwMDc5QkQ0OSAvKiBJbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRp
b25IYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0
ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0M0RUQzMjcxQTMxMTlEOTAwNzlCRDQ5IC8qIEluamVjdGVkQnVuZGxlQ1NT
U3R5bGVEZWNsYXJhdGlvbkhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25IYW5kbGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0M2RDM3RkExNzJGNTU1RjAwOUQyODQ3IC8qIFBhZ2VCYW5uZXJN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQYWdlQmFubmVy
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU1NCw4ICszNTU0LDggQEAK
IAkJN0M4OUQyQTExQTY3ODg3NTAwM0E1RkRFIC8qIFdLVXNlclNjcmlwdFJlZi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1VzZXJTY3JpcHRSZWYuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg5RDJBMjFBNjc4ODc1MDAzQTVGREUgLyogV0tV
c2VyU2NyaXB0UmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVXNlclNj
cmlwdFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg5RDJBNTFBNjc4OUVB
MDAzQTVGREUgLyogQVBJVXNlclNjcmlwdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBUElVc2VyU2NyaXB0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJN0M4OUQyQjExQTZCMDY4QzAwM0E1RkRFIC8qIEFQSUNvbnRlbnRFeHRlbnNpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJQ29udGVudEV4dGVuc2lvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDODlEMkIyMUE2QjA2OEMwMDNBNUZE
RSAvKiBBUElDb250ZW50RXh0ZW5zaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFQSUNvbnRlbnRFeHRlbnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
N0M4OUQyQjExQTZCMDY4QzAwM0E1RkRFIC8qIEFQSUNvbnRlbnRSdWxlTGlzdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElDb250ZW50UnVsZUxpc3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Qzg5RDJCMjFBNkIwNjhDMDAzQTVGREUgLyog
QVBJQ29udGVudFJ1bGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQ
SUNvbnRlbnRSdWxlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg5RDJC
NTFBNkIwREQ5MDAzQTVGREUgLyogV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLVXNlckNvbnRlbnRDb250cm9sbGVyUHJp
dmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg5RDJCNzFBNkIwRjJDMDAz
QTVGREUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBfV0tVc2VyQ29udGVudEZpbHRlci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0M4OUQyQjgxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50
RmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1VzZXJDb250ZW50
RmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTY2LDEwICs0OTY2LDEw
IEBACiAJCQkJNTE4RDJDQUIxMkQ1MTUzQjAwM0JCOTNCIC8qIFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW0uY3BwICovLAogCQkJCTUxOEQyQ0FDMTJENTE1M0IwMDNCQjkzQiAvKiBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtLmggKi8sCiAJCQkJQkNGNTA3MjYxMjQzMjlBQTAwNTk1NUFFIC8qIFdlYkNlcnRp
ZmljYXRlSW5mby5oICovLAotCQkJCTdDNEFCRUNFMUFBOEU5RjAwMDg4QUEzNyAvKiBXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb24uY3BwICovLAotCQkJCTdDNEFCRUNGMUFBOEU5RjAwMDg4QUEz
NyAvKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCAqLywKLQkJCQk3QzRBQkVEMjFBQThG
Q0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHAgKi8sCi0J
CQkJN0M0QUJFRDMxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGEuaCAqLywKKwkJCQk3QzRBQkVDRTFBQThFOUYwMDA4OEFBMzcgLyogV2ViQ29tcGlsZWRD
b250ZW50UnVsZUxpc3QuY3BwICovLAorCQkJCTdDNEFCRUNGMUFBOEU5RjAwMDg4QUEzNyAvKiBX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5oICovLAorCQkJCTdDNEFCRUQyMUFBOEZDQjgwMDg4
QUEzNyAvKiBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuY3BwICovLAorCQkJCTdDNEFC
RUQzMUFBOEZDQjgwMDg4QUEzNyAvKiBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuaCAq
LywKIAkJCQlCQzRBNjI4QjE0NzMxMkJFMDA2QzY4MUEgLyogV2ViQ29ubmVjdGlvbi5jcHAgKi8s
CiAJCQkJQkM0QTYyOEMxNDczMTJCRTAwNkM2ODFBIC8qIFdlYkNvbm5lY3Rpb24uaCAqLywKIAkJ
CQkxQTFGRUMxOTE2MjdCM0VGMDA3MDBGNkQgLyogV2ViQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiAq
LywKQEAgLTU2MjYsMTMgKzU2MjYsMTMgQEAKIAkJCQkzN0M0QzA4ODE4MTQ5RjIzMDAzNjg4Qjkg
LyogV0tCYWNrRm9yd2FyZExpc3RJdGVtSW50ZXJuYWwuaCAqLywKIAkJCQkyREZGN0I2RTFEQTRD
RkFGMDA4MTQ2MTQgLyogV0tCYWNrRm9yd2FyZExpc3RJdGVtUHJpdmF0ZS5oICovLAogCQkJCTFB
OUYyODEwMTk1OEY0NzgwMDhDQUM3MiAvKiBXS0JhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCAqLywK
LQkJCQk1Q0QyODY0QTFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uLmggKi8s
Ci0JCQkJNUNEMjg2NEIxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvbi5tbSAq
LywKLQkJCQk1Q0QyODY0QzFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uSW50
ZXJuYWwuaCAqLywKLQkJCQk1Q0QyODY0RDFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmUuaCAqLywKLQkJCQk1Q0QyODY0RTFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmUubW0gKi8sCi0JCQkJNUNEMjg2NEYxRTcyMkY0NDAwOTRGREM4IC8q
IFdLQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCAqLywKLQkJCQk1Q0QyODY1MDFFNzIy
RjQ0MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmggKi8sCisJCQkJ
NUNEMjg2NEExRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0LmggKi8sCisJCQkJ
NUNEMjg2NEIxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0Lm1tICovLAorCQkJ
CTVDRDI4NjRDMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdEludGVybmFsLmgg
Ki8sCisJCQkJNUNEMjg2NEQxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0U3Rv
cmUuaCAqLywKKwkJCQk1Q0QyODY0RTFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50UnVsZUxp
c3RTdG9yZS5tbSAqLywKKwkJCQk1Q0QyODY0RjFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50
UnVsZUxpc3RTdG9yZUludGVybmFsLmggKi8sCisJCQkJNUNEMjg2NTAxRTcyMkY0NDAwOTRGREM4
IC8qIFdLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmggKi8sCiAJCQkJMUFGNDU5MkQxOTQ2
NEIyMDAwRjlENEEyIC8qIFdLRXJyb3IuaCAqLywKIAkJCQkxQUY0NTkyQzE5NDY0QjIwMDBGOUQ0
QTIgLyogV0tFcnJvci5tbSAqLywKIAkJCQkxQTJEMjUyQTE5NDY4OEZEMDA0NTM3QjAgLyogV0tF
cnJvckludGVybmFsLmggKi8sCkBAIC02ODUwLDEwICs2ODUwLDEwIEBACiAJCQkJQkMxMTFCNDcx
MTJGNjE2OTAwMzM3QkFCIC8qIG1hYyAqLywKIAkJCQk5OUM4MUQ1QjFDMjBFODE3MDA1QzRDODIg
LyogQVBJQXV0b21hdGlvbkNsaWVudC5oICovLAogCQkJCTk5MEQyOEIzMUM2NTI2RDQwMDk4Njk3
NyAvKiBBUElBdXRvbWF0aW9uU2Vzc2lvbkNsaWVudC5oICovLAotCQkJCTdDODlEMkIxMUE2QjA2
OEMwMDNBNUZERSAvKiBBUElDb250ZW50RXh0ZW5zaW9uLmNwcCAqLywKLQkJCQk3Qzg5RDJCMjFB
NkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudEV4dGVuc2lvbi5oICovLAotCQkJCTdDM0EwNkE1
MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwICovLAotCQkJ
CTdDM0EwNkE2MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAq
LywKKwkJCQk3Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudFJ1bGVMaXN0LmNw
cCAqLywKKwkJCQk3Qzg5RDJCMjFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudFJ1bGVMaXN0
LmggKi8sCisJCQkJN0MzQTA2QTUxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRSdWxlTGlz
dFN0b3JlLmNwcCAqLywKKwkJCQk3QzNBMDZBNjFBQUI5MDNFMDA5RDc0QkEgLyogQVBJQ29udGVu
dFJ1bGVMaXN0U3RvcmUuaCAqLywKIAkJCQkwNzZFODg0RDFBMTNDQURGMDA1RTkwRkMgLyogQVBJ
Q29udGV4dE1lbnVDbGllbnQuaCAqLywKIAkJCQk3QTgyMUY0RjFFMkY3QTVDMDA2MDQ1NzcgLyog
QVBJQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmggKi8sCiAJCQkJODM4OTFCNjIxQTY4QjM0
MjAwMzBGMzg2IC8qIEFQSURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8sCkBAIC04MTg4LDgg
KzgxODgsOCBAQAogCQkJCTk5QzgxRDVEMUMyMUYzOEIwMDVDNEM4MiAvKiBBUElBdXRvbWF0aW9u
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTBEMjhDMDFDNjU1M0YxMDA5ODY5NzcgLyog
QVBJQXV0b21hdGlvblNlc3Npb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBM0REMjA2
MTI1RTVBMkYwMDQ1MTVFNiAvKiBBUElDbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDODlE
MkI0MUE2QjA2OEMwMDNBNUZERSAvKiBBUElDb250ZW50RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQk3QzNBMDZBODFBQUI5MDNFMDA5RDc0QkEgLyogQVBJQ29udGVudEV4dGVuc2lvblN0
b3JlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Qzg5RDJCNDFBNkIwNjhDMDAzQTVGREUgLyogQVBJ
Q29udGVudFJ1bGVMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzNBMDZBODFBQUI5MDNFMDA5
RDc0QkEgLyogQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3
NkU4ODRFMUExM0NBREYwMDVFOTBGQyAvKiBBUElDb250ZXh0TWVudUNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJN0E4MjFGNTAxRTJGN0E3NTAwNjA0NTc3IC8qIEFQSUN1c3RvbVByb3RvY29s
TWFuYWdlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1NzhCODMxMjA5RUNFRjAwQTM3
QzRBIC8qIEFQSURhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtODYxMCw4ICs4NjEwLDggQEAKIAkJ
CQkzRjg3QjlCRTE1ODk0MDE5MDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzRjg3QjlDMDE1ODk0MEQ4MDA5MEZGNjIgLyogV2ViQ29sb3JQaWNrZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTcyOEU4NkYxMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBp
Y2tlck1hYy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0M0QUJFRDExQUE4RTlGMDAwODhBQTM3IC8q
IFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0M0QUJF
RDUxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuaCBp
biBIZWFkZXJzICovLAorCQkJCTdDNEFCRUQxMUFBOEU5RjAwMDg4QUEzNyAvKiBXZWJDb21waWxl
ZENvbnRlbnRSdWxlTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0M0QUJFRDUxQUE4RkNCODAw
ODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM0QTYyOTAxNDczMTJCRTAwNkM2ODFBIC8qIFdlYkNvbm5lY3Rpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDNEE2MjkyMTQ3MzEyQkUwMDZDNjgxQSAvKiBXZWJDb25uZWN0aW9uQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTFGRUMxRDE2MjdCNDU3MDA3MDBGNkQgLyogV2Vi
Q29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTg4NTYsMTEgKzg4NTYsMTEg
QEAKIAkJCQlCQ0EyODRENzE0OTJGMkM3MDAxRjkwNDIgLyogV0tDb25uZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzVDNzVDODE0OTU0REE2MDBCQzQ3NzUgLyogV0tDb25uZWN0aW9uSW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNEE2Mjk3MTQ3MzEzQTAwMDZDNjgxQSAvKiBX
S0Nvbm5lY3Rpb25SZWYuaCBpbiBIZWFkZXJzICovLAotCQkJCTVDRDI4NjU0MUU3MjM1QjEwMDk0
RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTVDRDI4NjU1
MUU3MjM1QjgwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNUNEMjg2NTExRTcyMzU5OTAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lv
blN0b3JlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1Q0QyODY1NzFFNzIzNUM5MDA5NEZEQzggLyog
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUNE
Mjg2NTgxRTcyMzVEMTAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNUNEMjg2NTQxRTcyMzVCMTAwOTRGREM4IC8qIFdLQ29udGVu
dFJ1bGVMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0QyODY1NTFFNzIzNUI4MDA5NEZEQzgg
LyogV0tDb250ZW50UnVsZUxpc3RJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNEMjg2
NTExRTcyMzU5OTAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0U3RvcmUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTVDRDI4NjU3MUU3MjM1QzkwMDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdFN0
b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDRDI4NjU4MUU3MjM1RDEwMDk0RkRD
OCAvKiBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZDQjRFNEMxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXcuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQ0I0RTZDMThCQkYyNkEwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjlFMjRCMTEyMEUxNUMwMEExMzdFMCAvKiBXS0Nv
bnRleHQuaCBpbiBIZWFkZXJzICovLApAQCAtOTc1Miw4ICs5NzUyLDggQEAKIAkJCQlBMTgyRDVC
NDFCRTZCRDI1MDA4N0E3Q0MgLyogQWNjZXNzaWJpbGl0eUlPUy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUE3RDc5MkQ2MTc2N0NCNkUwMDg4MUNCRSAvKiBBY3Rpdml0eUFzc2VydGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzY0Njk2RjExREJFNjAzMDA2NDU1QjAgLyogQVBJQXJyYXkuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJN0M4OUQyQjMxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSUNvbnRl
bnRFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJN0MzQTA2QTcxQUFCOTAzRTAwOUQ3
NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3
Qzg5RDJCMzFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudFJ1bGVMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTdDM0EwNkE3MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50UnVsZUxp
c3RTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUFCMDM3QzE4NUY5OUQ4MDBFREY1MDEg
LyogQVBJRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTFFRjE5OTFBMUQ1QjQyMDAyMzIw
MEEgLyogQVBJRGF0YUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxQkEzM0QxQTRBMEU2
MDAwNDNFMjQ5IC8qIEFQSURpY3Rpb25hcnkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDE4Myw4
ICsxMDE4Myw4IEBACiAJCQkJM0Y4N0I5QkQxNTg5NDAxMjAwOTBGRjYyIC8qIFdlYkNvbG9yQ2hv
b3Nlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMDM2OTc4ODE1RjRCRjA1MDBDM0E4MEUgLyog
V2ViQ29sb3JQaWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzI4RTg2RjIxNzk1MTg4QzAw
ODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJN0M0QUJF
RDAxQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQk3QzRBQkVENDFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzRBQkVEMDFBQThF
OUYwMDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJN0M0QUJFRDQxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudFJ1
bGVMaXN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzRBNjI4RjE0NzMxMkJFMDA2QzY4
MUEgLyogV2ViQ29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzRBNjI5MTE0NzMx
MkJFMDA2QzY4MUEgLyogV2ViQ29ubmVjdGlvbkNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQTFGRUMxQzE2MjdCNDU3MDA3MDBGNkQgLyogV2ViQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDUyLDggKzEwNDUyLDggQEAKIAkJCQlCQzQwNzYy
ODEyNEZGMDQwMDA2OEYyMEEgLyogV0tDZXJ0aWZpY2F0ZUluZm9NYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQlCQ0EyODRENjE0OTJGMkM3MDAxRjkwNDIgLyogV0tDb25uZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM0QTYyOTYxNDczMTNBMDAwNkM2ODFBIC8qIFdLQ29ubmVjdGlvblJl
Zi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1Q0QyODY1MjFFNzIzNUE2MDA5NEZEQzggLyogV0tD
b250ZW50RXh0ZW5zaW9uLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNUNEMjg2NTYxRTcyMzVDNjAw
OTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
NUNEMjg2NTIxRTcyMzVBNjAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0Lm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJNUNEMjg2NTYxRTcyMzVDNjAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0
U3RvcmUubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRkNCNEU0RDE4QkJFMDQ0MDAwRkNGQzkgLyog
V0tDb250ZW50Vmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0I0RTZEMThCQkYyNkEwMDBG
Q0ZDOSAvKiBXS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQlC
Q0I5RTI0QzExMjBFMTVDMDBBMTM3RTAgLyogV0tDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
VXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjE2NTM5
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVk
ZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkZyYW1lSW5mb0RhdGEuaCIKICNpbmNsdWRl
ICJJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkLmgiCi0jaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuaCIK
ICNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzLmgiCkBAIC0zMzksMjIgKzMzOSwyMiBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkQ29udGVudEV4dGVuc2lvbnMo
Y29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGE+PiYgY29udGVudEV4dGVuc2lvbnMpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6YWRkQ29udGVudFJ1bGVMaXN0cyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2Vi
Q29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4mIGNvbnRlbnRSdWxlTGlzdHMpCiB7Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiBjb250ZW50RXh0ZW5zaW9uIDogY29udGVudEV4dGVuc2lvbnMpIHsK
LSAgICAgICAgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBjb250ZW50RXh0ZW5zaW9u
RGF0YSA9IGNvbnRlbnRFeHRlbnNpb24uc2Vjb25kOwotICAgICAgICBSZWZQdHI8V2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uPiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEZNb3ZlKGNvbnRlbnRFeHRlbnNpb25EYXRhKSk7
CisgICAgZm9yIChjb25zdCBhdXRvJiBjb250ZW50UnVsZUxpc3QgOiBjb250ZW50UnVsZUxpc3Rz
KSB7CisgICAgICAgIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YSBjb250ZW50UnVsZUxp
c3REYXRhID0gY29udGVudFJ1bGVMaXN0LnNlY29uZDsKKyAgICAgICAgUmVmUHRyPFdlYkNvbXBp
bGVkQ29udGVudFJ1bGVMaXN0PiBjb21waWxlZENvbnRlbnRSdWxlTGlzdCA9IFdlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0OjpjcmVhdGUoV1RGTW92ZShjb250ZW50UnVsZUxpc3REYXRhKSk7CiAK
LSAgICAgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKGNv
bnRlbnRFeHRlbnNpb24uZmlyc3QsIFdURk1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKSk7
CisgICAgICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbihj
b250ZW50UnVsZUxpc3QuZmlyc3QsIFdURk1vdmUoY29tcGlsZWRDb250ZW50UnVsZUxpc3QpKTsK
ICAgICB9CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVDb250ZW50
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVDb250ZW50UnVsZUxpc3QoY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIG1f
Y29udGVudEV4dGVuc2lvbkJhY2tlbmQucmVtb3ZlQ29udGVudEV4dGVuc2lvbihuYW1lKTsKIH0K
IAotdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbENvbnRlbnRFeHRlbnNp
b25zKCkKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxDb250ZW50UnVs
ZUxpc3RzKCkKIHsKICAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLnJlbW92ZUFsbENvbnRl
bnRFeHRlbnNpb25zKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJD
b250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmgJ
KHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRl
bnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAgY2xhc3MgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOwogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ7Ci1jbGFzcyBXZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb25EYXRhOworY2xhc3MgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRh
OwogY2xhc3MgV2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclByb3h5OwogCiBjbGFzcyBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6VXNlckNvbnRl
bnRQcm92aWRlciwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CkBAIC02Nyw3ICs2Nyw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8V2Vi
VXNlclN0eWxlU2hlZXREYXRhPiYpOwogICAgIHZvaWQgYWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5k
bGVycyhjb25zdCBWZWN0b3I8V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRhPiYpOwogI2lmIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgdm9pZCBhZGRDb250ZW50RXh0ZW5zaW9ucyhj
b25zdCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YT4+Jik7CisgICAgdm9pZCBhZGRDb250ZW50UnVsZUxpc3RzKGNvbnN0IFZlY3RvcjxzdGQ6
OnBhaXI8U3RyaW5nLCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGE+PiYpOwogI2VuZGlm
CiAKIHByaXZhdGU6CkBAIC05OCw4ICs5OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVB
bGxVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mKTsKIAog
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgdm9pZCByZW1vdmVDb250ZW50RXh0
ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCByZW1vdmVBbGxDb250ZW50RXh0
ZW5zaW9ucygpOworICAgIHZvaWQgcmVtb3ZlQ29udGVudFJ1bGVMaXN0KGNvbnN0IFN0cmluZyYg
bmFtZSk7CisgICAgdm9pZCByZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzKCk7CiAjZW5kaWYKIAog
ICAgIHZvaWQgYWRkVXNlclNjcmlwdEludGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQm
LCB1aW50NjRfdCB1c2VyU2NyaXB0SWRlbnRpZmllciwgV2ViQ29yZTo6VXNlclNjcmlwdCYmKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmlu
CShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250
ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpA
QCAtNDAsOCArNDAsOCBAQCBtZXNzYWdlcyAtPiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIgewog
ICAgIFJlbW92ZUFsbFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcnMoVmVjdG9yPHVpbnQ2NF90PiB3
b3JsZElkZW50aWZpZXJzKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAg
QWRkQ29udGVudEV4dGVuc2lvbnMoVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYktpdDo6V2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YT4+IGNvbnRlbnRGaWx0ZXJzKTsKLSAgICBSZW1v
dmVDb250ZW50RXh0ZW5zaW9uKFN0cmluZyBuYW1lKTsKLSAgICBSZW1vdmVBbGxDb250ZW50RXh0
ZW5zaW9ucygpOworICAgIEFkZENvbnRlbnRSdWxlTGlzdHMoVmVjdG9yPHN0ZDo6cGFpcjxTdHJp
bmcsIFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhPj4gY29udGVudEZpbHRl
cnMpOworICAgIFJlbW92ZUNvbnRlbnRSdWxlTGlzdChTdHJpbmcgbmFtZSk7CisgICAgUmVtb3Zl
QWxsQ29udGVudFJ1bGVMaXN0cygpOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMTY1MzkpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3NCw3ICs1NzQsNyBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwg
V2ViUGFnCiAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXItPmFkZFVzZXJTdHlsZVNoZWV0cyhw
YXJhbWV0ZXJzLnVzZXJTdHlsZVNoZWV0cyk7CiAgICAgbV91c2VyQ29udGVudENvbnRyb2xsZXIt
PmFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcnMocGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcnMp
OwogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgbV91c2VyQ29udGVudENvbnRy
b2xsZXItPmFkZENvbnRlbnRFeHRlbnNpb25zKHBhcmFtZXRlcnMuY29udGVudEV4dGVuc2lvbnMp
OworICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5hZGRDb250ZW50UnVsZUxpc3RzKHBhcmFt
ZXRlcnMuY29udGVudFJ1bGVMaXN0cyk7CiAjZW5kaWYKIH0KIApJbmRleDogVG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjE2Nzk2KQorKysg
VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTctMDUt
MTIgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBSZW5hbWUgV0tDb250ZW50RXh0ZW5zaW9uIHRvIFdLQ29udGVudFJ1bGVMaXN0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIwNTMKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzMyMTQxMDA1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmUubW06CisgICAgICAgIChXS0NvbnRlbnRSdWxlTGlzdFN0b3Jl
VGVzdDo6U2V0VXApOgorICAgICAgICAoVEVTVF9GKToKKyAgICAgICAgKC1bQ29udGVudFJ1bGVM
aXN0RGVsZWdhdGUgd2ViVmlldzpydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmlu
aXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgIChXS0NvbnRlbnRF
eHRlbnNpb25TdG9yZVRlc3Q6OlNldFVwKTogRGVsZXRlZC4KKyAgICAgICAgKC1bQ29udGVudEV4
dGVuc2lvbkRlbGVnYXRlIHdlYlZpZXc6cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2Fn
ZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOl0pOiBEZWxldGVkLgorCiAyMDE3
LTA1LTEyICBIeXVuZ3dvb2sgTGVlICA8aHl1bmd3b29rLmxlZUBuYXZlcmNvcnAuY29tPgogCiAg
ICAgICAgIFtHVEtdIEZpeCBjb21waWxlIHdhcm5pbmdzIGluIFBsYXRmb3JtSW1hZ2VDYWlyby5j
cHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLQ29udGVu
dEV4dGVuc2lvblN0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0MkNvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCShyZXZpc2lvbiAyMTY1
MzkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS0NvbnRlbnRF
eHRlbnNpb25TdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsMjQgKzMwLDI0IEBACiAKICNp
bXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0LmgiCi0jaW1wb3J0IDxX
ZWJLaXQvV0tDb250ZW50RXh0ZW5zaW9uLmg+Ci0jaW1wb3J0IDxXZWJLaXQvV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tDb250ZW50UnVsZUxpc3Qu
aD4KKyNpbXBvcnQgPFdlYktpdC9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogCi1jbGFzcyBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRl
c3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitjbGFzcyBXS0NvbnRlbnRSdWxlTGlzdFN0b3Jl
VGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
U2V0VXAoKQogICAgIHsKLSAgICAgICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0
U3RvcmVdIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc107CisgICAgICAgIFtbV0tDb250ZW50
UnVsZUxpc3RTdG9yZSBkZWZhdWx0U3RvcmVdIF9yZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzXTsK
ICAgICB9CiB9OwogCiBzdGF0aWMgTlNTdHJpbmcgKmJhc2ljRmlsdGVyID0gQCJbe1wiYWN0aW9u
XCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLip3
ZWJraXQub3JnXCJ9fV0iOwogCi1URVNUX0YoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBD
b21waWxlKQorVEVTVF9GKFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0LCBDb21waWxlKQogewog
ICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7Ci0gICAgW1tXS0NvbnRlbnRF
eHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRl
bnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmls
dGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9uICpmaWx0ZXIsIE5TRXJy
b3IgKmVycm9yKSB7CisgICAgW1tXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIGRlZmF1bHRTdG9yZV0g
Y29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6QCJUZXN0UnVsZUxpc3QiIGVuY29k
ZWRDb250ZW50UnVsZUxpc3Q6YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRl
bnRSdWxlTGlzdCAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgewogICAgIAogICAgICAgICBFWFBF
Q1RfTk9UX05VTEwoZmlsdGVyKTsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwpAQCAtNjQs
MjYgKzY0LDI2IEBAIHN0YXRpYyB2b2lkIGNoZWNrRG9tYWluKE5TRXJyb3IgKmVycm9yKQogICAg
IEVYUEVDVF9TVFJFUShbW2Vycm9yIGRvbWFpbl0gVVRGOFN0cmluZ10sIFtXS0Vycm9yRG9tYWlu
IFVURjhTdHJpbmddKTsKIH0KIAotVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwg
SW52YWxpZEV4dGVuc2lvbikKK1RFU1RfRihXS0NvbnRlbnRSdWxlTGlzdFN0b3JlVGVzdCwgSW52
YWxpZFJ1bGVMaXN0KQogewogICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7
Ci0gICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250
ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50
RXh0ZW5zaW9uOmludmFsaWRGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRFeHRl
bnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0
U3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjpA
IlRlc3RSdWxlTGlzdCIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDppbnZhbGlkRmlsdGVyIGNvbXBs
ZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxpc3QgKmZpbHRlciwgTlNFcnJvciAqZXJyb3Ip
IHsKICAgICAKICAgICAgICAgRVhQRUNUX05VTEwoZmlsdGVyKTsKICAgICAgICAgRVhQRUNUX05P
VF9OVUxMKGVycm9yKTsKICAgICAgICAgY2hlY2tEb21haW4oZXJyb3IpOwotICAgICAgICBFWFBF
Q1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBpbGVGYWls
ZWQpOwotICAgICAgICBFWFBFQ1RfU1RSRVEoIkV4dGVuc2lvbiBjb21waWxhdGlvbiBmYWlsZWQ6
IEZhaWxlZCB0byBwYXJzZSB0aGUgSlNPTiBTdHJpbmcuIiwgW1tlcnJvciBoZWxwQW5jaG9yXSBV
VEY4U3RyaW5nXSk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yQ29udGVu
dFJ1bGVMaXN0U3RvcmVDb21waWxlRmFpbGVkKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJSdWxl
IGxpc3QgY29tcGlsYXRpb24gZmFpbGVkOiBGYWlsZWQgdG8gcGFyc2UgdGhlIEpTT04gU3RyaW5n
LiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOwogCiAgICAgICAgIGRvbmVDb21w
aWxpbmcgPSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZUNvbXBpbGluZyk7CiB9CiAKLVRFU1RfRihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIExv
b2t1cCkKK1RFU1RfRihXS0NvbnRlbnRSdWxlTGlzdFN0b3JlVGVzdCwgTG9va3VwKQogewogICAg
IF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7Ci0gICAgW1tXS0NvbnRlbnRFeHRl
bnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRp
ZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVy
IGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9uICpmaWx0ZXIsIE5TRXJyb3Ig
KmVycm9yKSB7CisgICAgW1tXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIGRlZmF1bHRTdG9yZV0gY29t
cGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6QCJUZXN0UnVsZUxpc3QiIGVuY29kZWRD
b250ZW50UnVsZUxpc3Q6YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRS
dWxlTGlzdCAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgewogICAgIAogICAgICAgICBFWFBFQ1Rf
Tk9UX05VTEwoZmlsdGVyKTsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwpAQCAtOTMsOSAr
OTMsOSBAQCBURVNUX0YoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBMb29rCiAgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKIAogICAgIF9fYmxvY2sgYm9v
bCBkb25lTG9va2luZ1VwID0gZmFsc2U7Ci0gICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBk
ZWZhdWx0U3RvcmVdIGxvb2tVcENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4
dGVuc2lvbiIgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRFeHRlbnNpb24gKmZpbHRlciwg
TlNFcnJvciAqZXJyb3IpIHsKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0
b3JlXSBsb29rVXBDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOkAiVGVzdFJ1bGVMaXN0IiBj
b21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0ICpmaWx0ZXIsIE5TRXJyb3IgKmVy
cm9yKSB7CiAKLSAgICAgICAgRVhQRUNUX1NUUkVRKGZpbHRlci5pZGVudGlmaWVyLlVURjhTdHJp
bmcsICJUZXN0RXh0ZW5zaW9uIik7CisgICAgICAgIEVYUEVDVF9TVFJFUShmaWx0ZXIuaWRlbnRp
Zmllci5VVEY4U3RyaW5nLCAiVGVzdFJ1bGVMaXN0Iik7CiAgICAgICAgIEVYUEVDVF9OT1RfTlVM
TChmaWx0ZXIpOwogICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CiAKQEAgLTEwNCwxNyArMTA0
LDE3IEBAIFRFU1RfRihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIExvb2sKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVMb29raW5nVXApOwogfQogCi1URVNUX0YoV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBFbmNvZGVkSWRlbnRpZmllcikKK1RFU1RfRihXS0NvbnRl
bnRSdWxlTGlzdFN0b3JlVGVzdCwgRW5jb2RlZElkZW50aWZpZXIpCiB7CiAgICAgLy8gRklYTUU6
IFUrMDBDNCBjYXVzZXMgcHJvYmxlbXMgaGVyZS4gVXNpbmcgdGhlIG91dHB1dCBvZiBlbmNvZGVG
b3JGaWxlTmFtZSB3aXRoCiAgICAgLy8gdGhlIGZpbGVzeXN0ZW0gY2hhbmdlcyBpdCB0byBVKzAw
NDEgZm9sbG93ZWQgYnkgVSswMzA4CiAgICAgTlNTdHJpbmcgKmlkZW50aWZpZXIgPSBAIjo7JTI1
JSsyNdCY8J+YjSI7CiAgICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKLSAgICBbW1dLQ29u
dGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25G
b3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0
ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJv
ciAqZXJyb3IpIHsKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0b3JlXSBj
b21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGVuY29kZWRDb250
ZW50UnVsZUxpc3Q6YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRSdWxl
TGlzdCAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgewogCiAgICAgICAgIEVYUEVDVF9TVFJFUShm
aWx0ZXIuaWRlbnRpZmllci5VVEY4U3RyaW5nLCBpZGVudGlmaWVyLlVURjhTdHJpbmcpOwogCi0g
ICAgICAgIFtbV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBnZXRBdmFpbGFi
bGVDb250ZW50RXh0ZW5zaW9uSWRlbnRpZmllcnM6XihOU0FycmF5PE5TU3RyaW5nICo+ICppZGVu
dGlmaWVycykgeworICAgICAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0b3Jl
XSBnZXRBdmFpbGFibGVDb250ZW50UnVsZUxpc3RJZGVudGlmaWVyczpeKE5TQXJyYXk8TlNTdHJp
bmcgKj4gKmlkZW50aWZpZXJzKSB7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoaWRlbnRpZmllcnMu
Y291bnQsIDF1KTsKICAgICAgICAgICAgIEVYUEVDVF9FUShpZGVudGlmaWVyc1swXS5sZW5ndGgs
IGlkZW50aWZpZXIubGVuZ3RoKTsKICAgICAgICAgICAgIEVYUEVDVF9TVFJFUShpZGVudGlmaWVy
c1swXS5VVEY4U3RyaW5nLCBpZGVudGlmaWVyLlVURjhTdHJpbmcpOwpAQCAtMTI1LDI2ICsxMjUs
MjYgQEAgVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgRW5jbwogICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiB9CiAKLVRFU1RfRihXS0NvbnRlbnRFeHRlbnNp
b25TdG9yZVRlc3QsIE5vbkV4aXN0aW5nSWRlbnRpZmllckxvb2t1cCkKK1RFU1RfRihXS0NvbnRl
bnRSdWxlTGlzdFN0b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVudGlmaWVyTG9va3VwKQogewogICAg
IF9fYmxvY2sgYm9vbCBkb25lTG9va2luZ1VwID0gZmFsc2U7Ci0gICAgW1tXS0NvbnRlbnRFeHRl
bnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2tVcENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlm
aWVyOkAiRG9lc05vdEV4aXN0IiBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVuc2lv
biAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIFtbV0tDb250ZW50UnVsZUxpc3RTdG9y
ZSBkZWZhdWx0U3RvcmVdIGxvb2tVcENvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6QCJEb2Vz
Tm90RXhpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxpc3QgKmZpbHRlciwg
TlNFcnJvciAqZXJyb3IpIHsKICAgICAKICAgICAgICAgRVhQRUNUX05VTEwoZmlsdGVyKTsKICAg
ICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKICAgICAgICAgY2hlY2tEb21haW4oZXJyb3Ip
OwotICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25T
dG9yZUxvb2tVcEZhaWxlZCk7Ci0gICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIGxvb2t1
cCBmYWlsZWQ6IFVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyBsb29rdXAuIiwgW1tlcnJvciBoZWxw
QW5jaG9yXSBVVEY4U3RyaW5nXSk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vy
cm9yQ29udGVudFJ1bGVMaXN0U3RvcmVMb29rVXBGYWlsZWQpOworICAgICAgICBFWFBFQ1RfU1RS
RVEoIlJ1bGUgbGlzdCBsb29rdXAgZmFpbGVkOiBVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgbG9v
a3VwLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOwogICAgICAgICAKICAgICAg
ICAgZG9uZUxvb2tpbmdVcCA9IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lTG9va2luZ1VwKTsKIH0KIAotVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0
b3JlVGVzdCwgVmVyc2lvbk1pc21hdGNoKQorVEVTVF9GKFdLQ29udGVudFJ1bGVMaXN0U3RvcmVU
ZXN0LCBWZXJzaW9uTWlzbWF0Y2gpCiB7CiAgICAgX19ibG9jayBib29sIGRvbmVDb21waWxpbmcg
PSBmYWxzZTsKLSAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29t
cGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5jb2Rl
ZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRl
bnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpCisgICAgW1tXS0NvbnRlbnRSdWxl
TGlzdFN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZp
ZXI6QCJUZXN0UnVsZUxpc3QiIGVuY29kZWRDb250ZW50UnVsZUxpc3Q6YmFzaWNGaWx0ZXIgY29t
cGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRSdWxlTGlzdCAqZmlsdGVyLCBOU0Vycm9yICplcnJv
cikKICAgICB7CiAgICAgICAgIAogICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKQEAg
LTE1NCwzNCArMTU0LDM0IEBAIFRFU1RfRihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIFZl
cnMKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcp
OwogCi0gICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIF9pbnZhbGlk
YXRlQ29udGVudEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiJd
OworICAgIFtbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBkZWZhdWx0U3RvcmVdIF9pbnZhbGlkYXRl
Q29udGVudFJ1bGVMaXN0VmVyc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0UnVsZUxpc3QiXTsKICAg
ICAKICAgICBfX2Jsb2NrIGJvb2wgZG9uZUxvb2tpbmdVcCA9IGZhbHNlOwotICAgIFtbV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBsb29rVXBDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50
RXh0ZW5zaW9uICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKQorICAgIFtbV0tDb250ZW50UnVsZUxp
c3RTdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2tVcENvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6
QCJUZXN0UnVsZUxpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxpc3QgKmZp
bHRlciwgTlNFcnJvciAqZXJyb3IpCiAgICAgewogICAgICAgICAKICAgICAgICAgRVhQRUNUX05V
TEwoZmlsdGVyKTsKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKICAgICAgICAgY2hl
Y2tEb21haW4oZXJyb3IpOwotICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvckNv
bnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25NaXNtYXRjaCk7Ci0gICAgICAgIEVYUEVDVF9TVFJF
USgiRXh0ZW5zaW9uIGxvb2t1cCBmYWlsZWQ6IFZlcnNpb24gb2YgZmlsZSBkb2VzIG5vdCBtYXRj
aCB2ZXJzaW9uIG9mIGludGVycHJldGVyLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmlu
Z10pOworICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvckNvbnRlbnRSdWxlTGlz
dFN0b3JlVmVyc2lvbk1pc21hdGNoKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJSdWxlIGxpc3Qg
bG9va3VwIGZhaWxlZDogVmVyc2lvbiBvZiBmaWxlIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gb2Yg
aW50ZXJwcmV0ZXIuIiwgW1tlcnJvciBoZWxwQW5jaG9yXSBVVEY4U3RyaW5nXSk7CiAgICAgICAg
IAogICAgICAgICBkb25lTG9va2luZ1VwID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmVMb29raW5nVXApOwogCiAgICAgX19ibG9jayBib29sIGRvbmVH
ZXR0aW5nU291cmNlID0gZmFsc2U7Ci0gICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZh
dWx0U3RvcmVdIF9nZXRDb250ZW50RXh0ZW5zaW9uU291cmNlRm9ySWRlbnRpZmllcjpAIlRlc3RF
eHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNTdHJpbmcqIHNvdXJjZSkgeworICAgIFtb
V0tDb250ZW50UnVsZUxpc3RTdG9yZSBkZWZhdWx0U3RvcmVdIF9nZXRDb250ZW50UnVsZUxpc3RT
b3VyY2VGb3JJZGVudGlmaWVyOkAiVGVzdFJ1bGVMaXN0IiBjb21wbGV0aW9uSGFuZGxlcjpeKE5T
U3RyaW5nKiBzb3VyY2UpIHsKICAgICAgICAgRVhQRUNUX05VTEwoc291cmNlKTsKICAgICAgICAg
ZG9uZUdldHRpbmdTb3VyY2UgPSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZG9uZUdldHRpbmdTb3VyY2UpOwogfQogCi1URVNUX0YoV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmVUZXN0LCBSZW1vdmFsKQorVEVTVF9GKFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0
LCBSZW1vdmFsKQogewogICAgIF9fYmxvY2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7Ci0g
ICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50
RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0
ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9u
ICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW1tXS0NvbnRlbnRSdWxlTGlzdFN0b3Jl
IGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6QCJUZXN0
UnVsZUxpc3QiIGVuY29kZWRDb250ZW50UnVsZUxpc3Q6YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhh
bmRsZXI6XihXS0NvbnRlbnRSdWxlTGlzdCAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgewogICAg
IAogICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKICAgICAgICAgRVhQRUNUX05VTEwo
ZXJyb3IpOwpAQCAtMTkxLDcgKzE5MSw3IEBAIFRFU1RfRihXS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZVRlc3QsIFJlbW8KICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcp
OwogCiAgICAgX19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNlOwotICAgIFtbV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjpAIlRlc3RFeHRlbnNpb24iIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNFcnJvciAq
ZXJyb3IpIHsKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0b3JlXSByZW1v
dmVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOkAiVGVzdFJ1bGVMaXN0IiBjb21wbGV0aW9u
SGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsK
IAogICAgICAgICBkb25lUmVtb3ZpbmcgPSB0cnVlOwpAQCAtMTk5LDI5ICsxOTksMjkgQEAgVEVT
VF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgUmVtbwogICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZVJlbW92aW5nKTsKIH0KIAotVEVTVF9GKFdLQ29udGVudEV4dGVuc2lv
blN0b3JlVGVzdCwgTm9uRXhpc3RpbmdJZGVudGlmaWVyUmVtb3ZlKQorVEVTVF9GKFdLQ29udGVu
dFJ1bGVMaXN0U3RvcmVUZXN0LCBOb25FeGlzdGluZ0lkZW50aWZpZXJSZW1vdmUpCiB7CiAgICAg
X19ibG9jayBib29sIGRvbmVSZW1vdmluZyA9IGZhbHNlOwotICAgIFtbV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmUgZGVmYXVsdFN0b3JlXSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmll
cjpAIkRvZXNOb3RFeGlzdCIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgewor
ICAgIFtbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNvbnRlbnRS
dWxlTGlzdEZvcklkZW50aWZpZXI6QCJEb2VzTm90RXhpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4o
TlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKICAgICAg
ICAgY2hlY2tEb21haW4oZXJyb3IpOwotICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgV0tF
cnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCk7Ci0gICAgICAgIEVYUEVDVF9T
VFJFUSgiRXh0ZW5zaW9uIHJlbW92YWwgZmFpbGVkOiBVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcg
cmVtb3ZlLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOworICAgICAgICBFWFBF
Q1RfRVEoZXJyb3IuY29kZSwgV0tFcnJvckNvbnRlbnRSdWxlTGlzdFN0b3JlUmVtb3ZlRmFpbGVk
KTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJSdWxlIGxpc3QgcmVtb3ZhbCBmYWlsZWQ6IFVuc3Bl
Y2lmaWVkIGVycm9yIGR1cmluZyByZW1vdmUuIiwgW1tlcnJvciBoZWxwQW5jaG9yXSBVVEY4U3Ry
aW5nXSk7CiAKICAgICAgICAgZG9uZVJlbW92aW5nID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVSZW1vdmluZyk7CiB9CiAKLVRFU1RfRihXS0NvbnRl
bnRFeHRlbnNpb25TdG9yZVRlc3QsIE5vbkRlZmF1bHRTdG9yZSkKK1RFU1RfRihXS0NvbnRlbnRS
dWxlTGlzdFN0b3JlVGVzdCwgTm9uRGVmYXVsdFN0b3JlKQogewotICAgIE5TVVJMICp0ZW1wRGly
ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDb250ZW50RXh0ZW5zaW9uVGVzdCJdIGlzRGlyZWN0
b3J5OllFU107Ci0gICAgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKnN0b3JlID0gW1dLQ29udGVu
dEV4dGVuc2lvblN0b3JlIHN0b3JlV2l0aFVSTDp0ZW1wRGlyXTsKLSAgICBOU1N0cmluZyAqaWRl
bnRpZmllciA9IEAiVGVzdEV4dGVuc2lvbiI7Ci0gICAgTlNTdHJpbmcgKmZpbGVOYW1lID0gQCJD
b250ZW50RXh0ZW5zaW9uLVRlc3RFeHRlbnNpb24iOworICAgIE5TVVJMICp0ZW1wRGlyID0gW05T
VVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVu
ZGluZ1BhdGhDb21wb25lbnQ6QCJDb250ZW50UnVsZUxpc3RUZXN0Il0gaXNEaXJlY3Rvcnk6WUVT
XTsKKyAgICBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlICpzdG9yZSA9IFtXS0NvbnRlbnRSdWxlTGlz
dFN0b3JlIHN0b3JlV2l0aFVSTDp0ZW1wRGlyXTsKKyAgICBOU1N0cmluZyAqaWRlbnRpZmllciA9
IEAiVGVzdFJ1bGVMaXN0IjsKKyAgICBOU1N0cmluZyAqZmlsZU5hbWUgPSBAIkNvbnRlbnRSdWxl
TGlzdC1UZXN0UnVsZUxpc3QiOwogCiAgICAgX19ibG9jayBib29sIGRvbmVHZXR0aW5nQXZhaWxh
YmxlSWRlbnRpZmllcnMgPSBmYWxzZTsKLSAgICBbc3RvcmUgZ2V0QXZhaWxhYmxlQ29udGVudEV4
dGVuc2lvbklkZW50aWZpZXJzOl4oTlNBcnJheTxOU1N0cmluZyAqPiAqaWRlbnRpZmllcnMpIHsK
KyAgICBbc3RvcmUgZ2V0QXZhaWxhYmxlQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnM6XihOU0Fy
cmF5PE5TU3RyaW5nICo+ICppZGVudGlmaWVycykgewogICAgICAgICBFWFBFQ1RfTk9UX05VTEwo
aWRlbnRpZmllcnMpOwogICAgICAgICBFWFBFQ1RfRVEoaWRlbnRpZmllcnMuY291bnQsIDB1KTsK
ICAgICAgICAgZG9uZUdldHRpbmdBdmFpbGFibGVJZGVudGlmaWVycyA9IHRydWU7CkBAIC0yMjks
NyArMjI5LDcgQEAgVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTm9uRAogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUdldHRpbmdBdmFpbGFibGVJZGVudGlmaWVy
cyk7CiAgICAgCiAgICAgX19ibG9jayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsKLSAgICBb
c3RvcmUgY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5j
b2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS0Nv
bnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbc3RvcmUgY29t
cGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVu
dFJ1bGVMaXN0OmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxp
c3QgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZp
bHRlcik7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKICAgICAgICAgZG9uZUNvbXBpbGlu
ZyA9IHRydWU7CkBAIC0yMzcsMTAgKzIzNywxMCBAQCBURVNUX0YoV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmVUZXN0LCBOb25ECiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGls
aW5nKTsKIAogICAgIGRvbmVHZXR0aW5nQXZhaWxhYmxlSWRlbnRpZmllcnMgPSBmYWxzZTsKLSAg
ICBbc3RvcmUgZ2V0QXZhaWxhYmxlQ29udGVudEV4dGVuc2lvbklkZW50aWZpZXJzOl4oTlNBcnJh
eTxOU1N0cmluZyAqPiAqaWRlbnRpZmllcnMpIHsKKyAgICBbc3RvcmUgZ2V0QXZhaWxhYmxlQ29u
dGVudFJ1bGVMaXN0SWRlbnRpZmllcnM6XihOU0FycmF5PE5TU3RyaW5nICo+ICppZGVudGlmaWVy
cykgewogICAgICAgICBFWFBFQ1RfTk9UX05VTEwoaWRlbnRpZmllcnMpOwogICAgICAgICBFWFBF
Q1RfRVEoaWRlbnRpZmllcnMuY291bnQsIDF1KTsKLSAgICAgICAgRVhQRUNUX1NUUkVRKGlkZW50
aWZpZXJzWzBdLlVURjhTdHJpbmcsICJUZXN0RXh0ZW5zaW9uIik7CisgICAgICAgIEVYUEVDVF9T
VFJFUShpZGVudGlmaWVyc1swXS5VVEY4U3RyaW5nLCAiVGVzdFJ1bGVMaXN0Iik7CiAgICAgICAg
IGRvbmVHZXR0aW5nQXZhaWxhYmxlSWRlbnRpZmllcnMgPSB0cnVlOwogICAgIH1dOwogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUdldHRpbmdBdmFpbGFibGVJZGVudGlmaWVycyk7
CkBAIC0yNTAsNyArMjUwLDcgQEAgVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwg
Tm9uRAogICAgIEVYUEVDVF9FUShkYXRhLmxlbmd0aCwgMjI4dSk7CiAgICAgCiAgICAgX19ibG9j
ayBib29sIGRvbmVDaGVja2luZ1NvdXJjZSA9IGZhbHNlOwotICAgIFtzdG9yZSBfZ2V0Q29udGVu
dEV4dGVuc2lvblNvdXJjZUZvcklkZW50aWZpZXI6aWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxl
cjpeKE5TU3RyaW5nICpzb3VyY2UpIHsKKyAgICBbc3RvcmUgX2dldENvbnRlbnRSdWxlTGlzdFNv
dXJjZUZvcklkZW50aWZpZXI6aWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjpeKE5TU3RyaW5n
ICpzb3VyY2UpIHsKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKHNvdXJjZSk7CiAgICAgICAgIEVY
UEVDVF9TVFJFUShiYXNpY0ZpbHRlci5VVEY4U3RyaW5nLCBzb3VyY2UuVVRGOFN0cmluZyk7CiAg
ICAgICAgIGRvbmVDaGVja2luZ1NvdXJjZSA9IHRydWU7CkBAIC0yNTgsNyArMjU4LDcgQEAgVEVT
VF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTm9uRAogICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZUNoZWNraW5nU291cmNlKTsKICAgICAKICAgICBfX2Jsb2NrIGJvb2wg
ZG9uZVJlbW92aW5nID0gZmFsc2U7Ci0gICAgW3N0b3JlIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25G
b3JJZGVudGlmaWVyOmlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJv
cikgeworICAgIFtzdG9yZSByZW1vdmVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOmlkZW50
aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgewogICAgICAgICBFWFBF
Q1RfTlVMTChlcnJvcik7CiAgICAgICAgIGRvbmVSZW1vdmluZyA9IHRydWU7CiAgICAgfV07CkBA
IC0yNjgsMjAgKzI2OCwyMCBAQCBURVNUX0YoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBO
b25ECiAgICAgRVhQRUNUX05VTEwoZGF0YUFmdGVyUmVtb3ZpbmcpOwogfQogCi1URVNUX0YoV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBNdWx0aXBsZUV4dGVuc2lvbnMpCitURVNUX0YoV0tD
b250ZW50UnVsZUxpc3RTdG9yZVRlc3QsIE11bHRpcGxlUnVsZUxpc3RzKQogewogICAgIF9fYmxv
Y2sgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZh
dWx0U3RvcmVdIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIkZpcnN0RXh0
ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNpY0ZpbHRlciBjb21wbGV0aW9uSGFu
ZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAg
IFtbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50UnVs
ZUxpc3RGb3JJZGVudGlmaWVyOkAiRmlyc3RSdWxlTGlzdCIgZW5jb2RlZENvbnRlbnRSdWxlTGlz
dDpiYXNpY0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0ICpmaWx0
ZXIsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOwog
ICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7Ci0gICAgICAgIFtbV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6
QCJTZWNvbmRFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmJhc2ljRmlsdGVyIGNv
bXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9uICpmaWx0ZXIsIE5TRXJyb3IgKmVy
cm9yKSB7CisgICAgICAgIFtbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBkZWZhdWx0U3RvcmVdIGNv
bXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOkAiU2Vjb25kUnVsZUxpc3QiIGVuY29k
ZWRDb250ZW50UnVsZUxpc3Q6YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRl
bnRSdWxlTGlzdCAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgewogICAgICAgICAgICAgRVhQRUNU
X05PVF9OVUxMKGZpbHRlcik7CiAgICAgICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7Ci0gICAg
ICAgICAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gZ2V0QXZhaWxh
YmxlQ29udGVudEV4dGVuc2lvbklkZW50aWZpZXJzOl4oTlNBcnJheTxOU1N0cmluZyAqPiAqaWRl
bnRpZmllcnMpIHsKKyAgICAgICAgICAgIFtbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBkZWZhdWx0
U3RvcmVdIGdldEF2YWlsYWJsZUNvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzOl4oTlNBcnJheTxO
U1N0cmluZyAqPiAqaWRlbnRpZmllcnMpIHsKICAgICAgICAgICAgICAgICBFWFBFQ1RfTk9UX05V
TEwoaWRlbnRpZmllcnMpOwogICAgICAgICAgICAgICAgIEVYUEVDVF9FUShpZGVudGlmaWVycy5j
b3VudCwgMnUpOwotICAgICAgICAgICAgICAgIEVYUEVDVF9TVFJFUShpZGVudGlmaWVyc1swXS5V
VEY4U3RyaW5nLCAiRmlyc3RFeHRlbnNpb24iKTsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfU1RS
RVEoaWRlbnRpZmllcnNbMV0uVVRGOFN0cmluZywgIlNlY29uZEV4dGVuc2lvbiIpOworICAgICAg
ICAgICAgICAgIEVYUEVDVF9TVFJFUShpZGVudGlmaWVyc1swXS5VVEY4U3RyaW5nLCAiRmlyc3RS
dWxlTGlzdCIpOworICAgICAgICAgICAgICAgIEVYUEVDVF9TVFJFUShpZGVudGlmaWVyc1sxXS5V
VEY4U3RyaW5nLCAiU2Vjb25kUnVsZUxpc3QiKTsKICAgICAgICAgICAgICAgICBkb25lID0gdHJ1
ZTsKICAgICAgICAgICAgIH1dOwogICAgICAgICB9XTsKQEAgLTI4OSwyNCArMjg5LDI0IEBAIFRF
U1RfRihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIE11bHQKICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmUpOwogfQogCi1URVNUX0YoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVU
ZXN0LCBOb25BU0NJSVNvdXJjZSkKK1RFU1RfRihXS0NvbnRlbnRSdWxlTGlzdFN0b3JlVGVzdCwg
Tm9uQVNDSUlTb3VyY2UpCiB7CiAgICAgc3RhdGljIE5TU3RyaW5nICpub25BU0NJSUZpbHRlciA9
IEAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcIi4qd2Via2l0Lm9yZ1wifSwgXCJ1bnVzZWRcIjpcIsOwxbjigJnCqVwifV0iOwot
ICAgIE5TVVJMICp0ZW1wRGlyID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3JhcnlE
aXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDb250ZW50RXh0ZW5z
aW9uVGVzdCJdIGlzRGlyZWN0b3J5OllFU107Ci0gICAgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUg
KnN0b3JlID0gW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIHN0b3JlV2l0aFVSTDp0ZW1wRGlyXTsK
LSAgICBOU1N0cmluZyAqaWRlbnRpZmllciA9IEAiVGVzdEV4dGVuc2lvbiI7Ci0gICAgTlNTdHJp
bmcgKmZpbGVOYW1lID0gQCJDb250ZW50RXh0ZW5zaW9uLVRlc3RFeHRlbnNpb24iOworICAgIE5T
VVJMICp0ZW1wRGlyID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNUZW1wb3JhcnlEaXJlY3Rv
cnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDb250ZW50UnVsZUxpc3RUZXN0
Il0gaXNEaXJlY3Rvcnk6WUVTXTsKKyAgICBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlICpzdG9yZSA9
IFtXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIHN0b3JlV2l0aFVSTDp0ZW1wRGlyXTsKKyAgICBOU1N0
cmluZyAqaWRlbnRpZmllciA9IEAiVGVzdFJ1bGVMaXN0IjsKKyAgICBOU1N0cmluZyAqZmlsZU5h
bWUgPSBAIkNvbnRlbnRSdWxlTGlzdC1UZXN0UnVsZUxpc3QiOwogICAgIAogICAgIF9fYmxvY2sg
Ym9vbCBkb25lID0gZmFsc2U7Ci0gICAgW3N0b3JlIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjppZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOm5vbkFTQ0lJRmls
dGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9uICpmaWx0ZXIsIE5TRXJy
b3IgKmVycm9yKSB7CisgICAgW3N0b3JlIGNvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlm
aWVyOmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpub25BU0NJSUZpbHRlciBjb21w
bGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0ICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9y
KSB7CiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOwogICAgICAgICBFWFBFQ1RfTlVM
TChlcnJvcik7CiAKLSAgICAgICAgW3N0b3JlIF9nZXRDb250ZW50RXh0ZW5zaW9uU291cmNlRm9y
SWRlbnRpZmllcjppZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNTdHJpbmcgKnNvdXJj
ZSkgeworICAgICAgICBbc3RvcmUgX2dldENvbnRlbnRSdWxlTGlzdFNvdXJjZUZvcklkZW50aWZp
ZXI6aWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjpeKE5TU3RyaW5nICpzb3VyY2UpIHsKICAg
ICAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChzb3VyY2UpOwogICAgICAgICAgICAgRVhQRUNUX1NU
UkVRKG5vbkFTQ0lJRmlsdGVyLlVURjhTdHJpbmcsIHNvdXJjZS5VVEY4U3RyaW5nKTsKIAotICAg
ICAgICAgICAgW3N0b3JlIF9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9uc107CisgICAgICAgICAg
ICBbc3RvcmUgX3JlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHNdOwogICAgICAgICAgICAgTlNEYXRh
ICpkYXRhQWZ0ZXJSZW1vdmluZyA9IFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJMOlt0ZW1w
RGlyIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpmaWxlTmFtZV1dOwogICAgICAgICAgICAg
RVhQRUNUX05VTEwoZGF0YUFmdGVyUmVtb3ZpbmcpOwogCkBAIC0zMTksMTAgKzMxOSwxMCBAQCBU
RVNUX0YoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBOb25BCiBzdGF0aWMgc2l6ZV90IGFs
ZXJ0Q291bnQgeyAwIH07CiBzdGF0aWMgYm9vbCByZWNlaXZlZEFsZXJ0IHsgZmFsc2UgfTsKIAot
QGludGVyZmFjZSBDb250ZW50RXh0ZW5zaW9uRGVsZWdhdGUgOiBOU09iamVjdCA8V0tVSURlbGVn
YXRlPgorQGludGVyZmFjZSBDb250ZW50UnVsZUxpc3REZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJ
RGVsZWdhdGU+CiBAZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBDb250ZW50RXh0ZW5zaW9uRGVsZWdh
dGUKK0BpbXBsZW1lbnRhdGlvbiBDb250ZW50UnVsZUxpc3REZWxlZ2F0ZQogCiAtICh2b2lkKXdl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVz
c2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICop
ZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVy
CiB7CkBAIC0zMzIsNyArMzMyLDcgQEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJW
aWV3IHJ1bgogICAgICAgICBFWFBFQ1RfU1RSRVEoImNvbnRlbnQgYmxvY2tlcnMgZW5hYmxlZCIs
IG1lc3NhZ2UuVVRGOFN0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMToKLSAgICAg
ICAgLy8gQWZ0ZXIgaGF2aW5nIHJlbW92ZWQgdGhlIGNvbnRlbnQgZXh0ZW5zaW9uLgorICAgICAg
ICAvLyBBZnRlciBoYXZpbmcgcmVtb3ZlZCB0aGUgY29udGVudCBSdWxlTGlzdC4KICAgICAgICAg
RVhQRUNUX1NUUkVRKCJjb250ZW50IGJsb2NrZXJzIGRpc2FibGVkIiwgbWVzc2FnZS5VVEY4U3Ry
aW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTM0NCwyNyArMzQ0LDI3IEBA
IC0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW4KIAogQGVuZAogCi1URVNU
X0YoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBBZGRSZW1vdmUpCitURVNUX0YoV0tDb250
ZW50UnVsZUxpc3RTdG9yZVRlc3QsIEFkZFJlbW92ZSkKIHsKLSAgICBbW1dLQ29udGVudEV4dGVu
c2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zXTsKKyAg
ICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0b3JlXSBfcmVtb3ZlQWxsQ29udGVu
dFJ1bGVMaXN0c107CiAKICAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOwog
ICAgIE5TU3RyaW5nKiBjb250ZW50QmxvY2tlciA9IEAiW3tcImFjdGlvblwiOntcInR5cGVcIjpc
ImNzcy1kaXNwbGF5LW5vbmVcIixcInNlbGVjdG9yXCI6XCIuaGlkZGVuXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIi4qXCJ9fV0iOwotICAgIF9fYmxvY2sgUmV0YWluUHRyPFdLQ29u
dGVudEV4dGVuc2lvbj4gZXh0ZW5zaW9uOwotICAgIFtbV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUg
ZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0
QWRkUmVtb3ZlIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpjb250ZW50QmxvY2tlciBjb21wbGV0
aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqY29tcGlsZWRFeHRlbnNpb24sIE5TRXJy
b3IgKmVycm9yKSB7CisgICAgX19ibG9jayBSZXRhaW5QdHI8V0tDb250ZW50UnVsZUxpc3Q+IHJ1
bGVMaXN0OworICAgIFtbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBp
bGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOkAiVGVzdEFkZFJlbW92ZSIgZW5jb2RlZENv
bnRlbnRSdWxlTGlzdDpjb250ZW50QmxvY2tlciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVu
dFJ1bGVMaXN0ICpjb21waWxlZFJ1bGVMaXN0LCBOU0Vycm9yICplcnJvcikgewogICAgICAgICBF
WFBFQ1RfVFJVRShlcnJvciA9PSBuaWwpOwotICAgICAgICBleHRlbnNpb24gPSBjb21waWxlZEV4
dGVuc2lvbjsKKyAgICAgICAgcnVsZUxpc3QgPSBjb21waWxlZFJ1bGVMaXN0OwogICAgICAgICBk
b25lQ29tcGlsaW5nID0gdHJ1ZTsKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmVDb21waWxpbmcpOwotICAgIEVYUEVDVF9OT1RfTlVMTChleHRlbnNpb24pOworICAg
IEVYUEVDVF9OT1RfTlVMTChydWxlTGlzdCk7CiAKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwotICAgIFtbY29u
ZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZENvbnRlbnRFeHRlbnNpb246ZXh0
ZW5zaW9uLmdldCgpXTsKKyAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVy
XSBhZGRDb250ZW50UnVsZUxpc3Q6cnVsZUxpc3QuZ2V0KCldOwogCiAgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAotICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbQ29udGVudEV4dGVuc2lvbkRlbGVnYXRlIGFsbG9j
XSBpbml0XSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tDb250ZW50UnVsZUxpc3RE
ZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwogICAgIFt3ZWJWaWV3IHNldFVJRGVsZWdhdGU6ZGVsZWdh
dGUuZ2V0KCldOwogCiAgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCBy
ZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiY29u
dGVudEJsb2NrZXJDaGVjayIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwpAQCAtMzczLDcgKzM3Myw3IEBAIFRFU1RfRihXS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIEFkZFIKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpy
ZXF1ZXN0XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkQWxlcnQpOwog
Ci0gICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gcmVtb3ZlQ29udGVu
dEV4dGVuc2lvbjpleHRlbnNpb24uZ2V0KCldOworICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29u
dGVudENvbnRyb2xsZXJdIHJlbW92ZUNvbnRlbnRSdWxlTGlzdDpydWxlTGlzdC5nZXQoKV07CiAK
ICAgICByZWNlaXZlZEFsZXJ0ID0gZmFsc2U7CiAgICAgW3dlYlZpZXcgcmVsb2FkXTsKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL19XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkocmV2aXNpb24gMjE2
NTM5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvX1dLVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBU
RVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsCiAgICAgICAgIEVYUEVDVF9O
T1RfTlVMTChlcnJvcik7CiAgICAgICAgIGNoZWNrRG9tYWluKGVycm9yKTsKICAgICAgICAgRVhQ
RUNUX0VRKGVycm9yLmNvZGUsIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBp
bGVGYWlsZWQpOwotICAgICAgICBFWFBFQ1RfU1RSRVEoIkV4dGVuc2lvbiBjb21waWxhdGlvbiBm
YWlsZWQ6IEZhaWxlZCB0byBwYXJzZSB0aGUgSlNPTiBTdHJpbmcuIiwgW1tlcnJvciBoZWxwQW5j
aG9yXSBVVEY4U3RyaW5nXSk7CisgICAgICAgIEVYUEVDVF9TVFJFUSgiUnVsZSBsaXN0IGNvbXBp
bGF0aW9uIGZhaWxlZDogRmFpbGVkIHRvIHBhcnNlIHRoZSBKU09OIFN0cmluZy4iLCBbW2Vycm9y
IGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKIAogICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1
ZTsKICAgICB9XTsKQEAgLTExMSw3ICsxMTEsNyBAQCBURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZVRlc3QsCiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChlcnJvcik7CiAgICAgICAg
IGNoZWNrRG9tYWluKGVycm9yKTsKICAgICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIF9XS1Vz
ZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckxvb2t1cEZhaWxlZCk7Ci0gICAgICAgIEVYUEVD
VF9TVFJFUSgiRXh0ZW5zaW9uIGxvb2t1cCBmYWlsZWQ6IFVuc3BlY2lmaWVkIGVycm9yIGR1cmlu
ZyBsb29rdXAuIiwgW1tlcnJvciBoZWxwQW5jaG9yXSBVVEY4U3RyaW5nXSk7CisgICAgICAgIEVY
UEVDVF9TVFJFUSgiUnVsZSBsaXN0IGxvb2t1cCBmYWlsZWQ6IFVuc3BlY2lmaWVkIGVycm9yIGR1
cmluZyBsb29rdXAuIiwgW1tlcnJvciBoZWxwQW5jaG9yXSBVVEY4U3RyaW5nXSk7CiAgICAgICAg
IAogICAgICAgICBkb25lTG9va2luZ1VwID0gdHJ1ZTsKICAgICB9XTsKQEAgLTE0MSw3ICsxNDEs
NyBAQCBURVNUX0YoX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsCiAgICAgICAgIEVY
UEVDVF9OT1RfTlVMTChlcnJvcik7CiAgICAgICAgIGNoZWNrRG9tYWluKGVycm9yKTsKICAgICAg
ICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJv
clZlcnNpb25NaXNtYXRjaCk7Ci0gICAgICAgIEVYUEVDVF9TVFJFUSgiRXh0ZW5zaW9uIGxvb2t1
cCBmYWlsZWQ6IFZlcnNpb24gb2YgZmlsZSBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uIG9mIGludGVy
cHJldGVyLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOworICAgICAgICBFWFBF
Q1RfU1RSRVEoIlJ1bGUgbGlzdCBsb29rdXAgZmFpbGVkOiBWZXJzaW9uIG9mIGZpbGUgZG9lcyBu
b3QgbWF0Y2ggdmVyc2lvbiBvZiBpbnRlcnByZXRlci4iLCBbW2Vycm9yIGhlbHBBbmNob3JdIFVU
RjhTdHJpbmddKTsKICAgICAgICAgCiAgICAgICAgIGRvbmVMb29raW5nVXAgPSB0cnVlOwogICAg
IH1dOwpAQCAtMTc2LDcgKzE3Niw3IEBAIFRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlVGVzdCwKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKICAgICAgICAgY2hlY2tE
b21haW4oZXJyb3IpOwogICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUVycm9yUmVtb3ZlRmFpbGVkKTsKLSAgICAgICAgRVhQRUNUX1NUUkVR
KCJFeHRlbnNpb24gcmVtb3ZhbCBmYWlsZWQ6IFVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyByZW1v
dmUuIiwgW1tlcnJvciBoZWxwQW5jaG9yXSBVVEY4U3RyaW5nXSk7CisgICAgICAgIEVYUEVDVF9T
VFJFUSgiUnVsZSBsaXN0IHJlbW92YWwgZmFpbGVkOiBVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcg
cmVtb3ZlLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOwogCiAgICAgICAgIGRv
bmVSZW1vdmluZyA9IHRydWU7CiAgICAgfV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309975</attachid>
            <date>2017-05-12 17:25:01 -0700</date>
            <delta_ts>2017-05-12 18:32:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172053-20170512172539.patch</filename>
            <type>text/plain</type>
            <size>329691</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA1LTEyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVuYW1lIFdL
Q29udGVudEV4dGVuc2lvbiB0byBXS0NvbnRlbnRSdWxlTGlzdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMDUzCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8zMjE0MTAwNT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIEFQSSB0ZXN0cy4KKworICAgICAgICAqIEVuZ2xp
c2gubHByb2ovTG9jYWxpemFibGUuc3RyaW5nczoKKwogMjAxNy0wNS0wOSAgWW91ZW5uIEZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmcmVzaCB3ZWJydGMgV1BUIHRlc3Rz
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9Mb2NhbGl6YWJsZS5z
dHJpbmdzCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9q
L0xvY2FsaXphYmxlLnN0cmluZ3MJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw4ICsxNjMsOCBAQAog
LyogU3VidGl0bGUgb2YgdGhlIGxhYmVsIHRvIHNob3cgb24gYSBzbmFwc2hvdHRlZCBwbHVnLWlu
ICovCiAiQ2xpY2sgdG8gcmVzdGFydCIgPSAiQ2xpY2sgdG8gcmVzdGFydCI7CiAKLS8qIFdLRXJy
b3JDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkIGRlc2NyaXB0aW9uICovCi0iQ29t
cGlsaW5nIGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQiID0gIkNvbXBpbGluZyBhIFdL
VXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkIjsKKy8qIFdLRXJyb3JDb250ZW50UnVsZUxpc3RT
dG9yZUNvbXBpbGVGYWlsZWQgZGVzY3JpcHRpb24gKi8KKyJDb21waWxpbmcgYSBXS0NvbnRlbnRS
dWxlTGlzdCBmYWlsZWQiID0gIkNvbXBpbGluZyBhIFdLQ29udGVudFJ1bGVMaXN0IGZhaWxlZCI7
CiAKIC8qIFdlYktpdEVycm9yQ2Fubm90U2hvd01JTUVUeXBlIGRlc2NyaXB0aW9uICovCiAiQ29u
dGVudCB3aXRoIHNwZWNpZmllZCBNSU1FIHR5cGUgY2Fu4oCZdCBiZSBzaG93biIgPSAiQ29udGVu
dCB3aXRoIHNwZWNpZmllZCBNSU1FIHR5cGUgY2Fu4oCZdCBiZSBzaG93biI7CkBAIC0zNTIsMTEg
KzM1MiwxMSBAQAogLyogTG9vayBVcCBjb250ZXh0IG1lbnUgaXRlbSB3aXRoIHNlbGVjdGVkIHdv
cmQgKi8KICJMb29rIFVwIOKAnCVz4oCdIiA9ICJMb29rIFVwIOKAnCVz4oCdIjsKIAotLyogV0tF
cnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxvb2t1cEZhaWxlZCBkZXNjcmlwdGlvbiAqLwotIkxv
b2tpbmcgdXAgYSBXS1VzZXJDb250ZW50RXh0ZW5zaW9uIGZhaWxlZCIgPSAiTG9va2luZyB1cCBh
IFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkIjsKKy8qIFdLRXJyb3JDb250ZW50UnVsZUxp
c3RTdG9yZUxvb2t1cEZhaWxlZCBkZXNjcmlwdGlvbiAqLworIkxvb2tpbmcgdXAgYSBXS0NvbnRl
bnRSdWxlTGlzdCBmYWlsZWQiID0gIkxvb2tpbmcgdXAgYSBXS0NvbnRlbnRSdWxlTGlzdCBmYWls
ZWQiOwogCi0vKiBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlVmVyc2lvbk1pc21hdGNoIGRl
c2NyaXB0aW9uICovCi0iTG9va2luZyB1cCBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZm91bmQg
YSBiaW5hcnkgdGhhdCBpcyBpbmNvbXBhdGlibGUiID0gIkxvb2tpbmcgdXAgYSBXS1VzZXJDb250
ZW50RXh0ZW5zaW9uIGZvdW5kIGEgYmluYXJ5IHRoYXQgaXMgaW5jb21wYXRpYmxlIjsKKy8qIFdL
RXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZVZlcnNpb25NaXNtYXRjaCBkZXNjcmlwdGlvbiAqLwor
Ikxvb2tpbmcgdXAgYSBXS0NvbnRlbnRSdWxlTGlzdCBmb3VuZCBhIGJpbmFyeSB0aGF0IGlzIGlu
Y29tcGF0aWJsZSIgPSAiTG9va2luZyB1cCBhIFdLQ29udGVudFJ1bGVMaXN0IGZvdW5kIGEgYmlu
YXJ5IHRoYXQgaXMgaW5jb21wYXRpYmxlIjsKIAogLyogTWVkaWEgTG9vcCBjb250ZXh0IG1lbnUg
aXRlbSAqLwogIkxvb3AiID0gIkxvb3AiOwpAQCAtNDk2LDggKzQ5Niw4IEBACiAvKiBSZWxvYWQg
Y29udGV4dCBtZW51IGl0ZW0gKi8KICJSZWxvYWQiID0gIlJlbG9hZCI7CiAKLS8qIFdLRXJyb3JD
b250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQgZGVzY3JpcHRpb24gKi8KLSJSZW1vdmlu
ZyBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkIiA9ICJSZW1vdmluZyBhIFdLVXNlckNv
bnRlbnRFeHRlbnNpb24gZmFpbGVkIjsKKy8qIFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZVJl
bW92ZUZhaWxlZCBkZXNjcmlwdGlvbiAqLworIlJlbW92aW5nIGEgV0tDb250ZW50UnVsZUxpc3Qg
ZmFpbGVkIiA9ICJSZW1vdmluZyBhIFdLQ29udGVudFJ1bGVMaXN0IGZhaWxlZCI7CiAKIC8qIGRl
ZmF1bHQgbGFiZWwgZm9yIFJlc2V0IGJ1dHRvbnMgaW4gZm9ybXMgb24gd2ViIHBhZ2VzICovCiAi
UmVzZXQiID0gIlJlc2V0IjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNyBAQAor
MjAxNy0wNS0xMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgor
CisgICAgICAgIFJlbmFtZSBXS0NvbnRlbnRFeHRlbnNpb24gdG8gV0tDb250ZW50UnVsZUxpc3QK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjA1Mwor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzIxNDEwMDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQSU9iamVjdC5oOgorICAg
ICAgICAqIFNoYXJlZC9BUEkvQ29jb2EvV2ViS2l0Lmg6CisgICAgICAgICogU2hhcmVkL0FQSS9j
L1dLRGVwcmVjYXRlZEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXS1BhZ2VHcm91cEFkZFVzZXJD
b250ZW50RmlsdGVyKToKKyAgICAgICAgKFdLUGFnZUdyb3VwUmVtb3ZlVXNlckNvbnRlbnRGaWx0
ZXIpOgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9BUElPYmplY3QubW06CisgICAgICAgIChBUEk6
Ok9iamVjdDo6bmV3T2JqZWN0KToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1dlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9XZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL1dl
YkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAuCisgICAgICAgIChXZWJLaXQ6
OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6fldlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50UnVs
ZUxpc3Q6OmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0OjpmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29k
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0OjpmaWx0ZXJz
V2l0aG91dENvbmRpdGlvbnNCeXRlY29kZUxlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNv
bXBpbGVkQ29udGVudFJ1bGVMaXN0OjpmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0OjpmaWx0ZXJzV2l0aENv
bmRpdGlvbnNCeXRlY29kZUxlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29u
dGVudFJ1bGVMaXN0Ojp0b3BVUkxGaWx0ZXJzQnl0ZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6dG9wVVJMRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OmFjdGlvbnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6YWN0aW9uc0xlbmd0
aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246On5XZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b246OmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhvdXRDb25kaXRpb25z
Qnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRF
eHRlbnNpb246OmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlTGVuZ3RoKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpmaWx0ZXJz
V2l0aENvbmRpdGlvbnNCeXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVMZW5n
dGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b246OnRvcFVSTEZpbHRlcnNCeXRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6dG9wVVJMRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjph
Y3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uOjphY3Rpb25zTGVuZ3RoKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViQ29t
cGlsZWRDb250ZW50UnVsZUxpc3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oLgorICAgICAgICAqIFNoYXJlZC9XZWJDb21w
aWxlZENvbnRlbnRSdWxlTGlzdERhdGEuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHAuCisgICAgICAgIChXZWJL
aXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhOjpkZWNvZGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjplbmNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlz
dERhdGEuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEuaC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50
UnVsZUxpc3REYXRhOjpXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjpXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb25EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VDcmVhdGlvblBhcmFt
ZXRlcnM6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VDcmVhdGlvblBhcmFtZXRl
cnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvbi5oOiBSZW1v
dmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb25T
dG9yZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVM
aXN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250
ZW50RXh0ZW5zaW9uLmNwcC4KKyAgICAgICAgKEFQSTo6Q29udGVudFJ1bGVMaXN0OjpDb250ZW50
UnVsZUxpc3QpOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxpc3Q6On5Db250ZW50UnVsZUxp
c3QpOgorICAgICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uOjpDb250ZW50RXh0ZW5zaW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKEFQSTo6Q29udGVudEV4dGVuc2lvbjo6fkNvbnRlbnRFeHRlbnNp
b24pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4
dGVuc2lvbi5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3Rv
cmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRl
bnRFeHRlbnNpb25TdG9yZS5jcHAuCisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3Jl
OjpsZWdhY3lEZWZhdWx0U3RvcmUpOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxpc3RTdG9y
ZTo6bm9uTGVnYWN5RGRlZmF1bHRTdG9yZSk6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlz
dFN0b3JlOjpkZWZhdWx0U3RvcmUpOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxpc3RTdG9y
ZTo6c3RvcmVXaXRoUGF0aCk6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpD
b250ZW50UnVsZUxpc3RTdG9yZSk6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3Jl
Ojp+Q29udGVudFJ1bGVMaXN0U3RvcmUpOgorICAgICAgICAoQVBJOjpjb25zdHJ1Y3RlZFBhdGhQ
cmVmaXgpOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxpc3RNZXRhRGF0YTo6ZmlsZVNpemUp
OgorICAgICAgICAoQVBJOjplbmNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YSk6CisgICAgICAg
IChBUEk6OmRlY29kZUNvbnRlbnRSdWxlTGlzdE1ldGFEYXRhKToKKyAgICAgICAgKEFQSTo6b3Bl
bkFuZE1hcENvbnRlbnRSdWxlTGlzdCk6CisgICAgICAgIChBUEk6OmNvbXBpbGVkVG9GaWxlKToK
KyAgICAgICAgKEFQSTo6Y3JlYXRlRXh0ZW5zaW9uKToKKyAgICAgICAgKEFQSTo6Q29udGVudFJ1
bGVMaXN0U3RvcmU6Omxvb2t1cENvbnRlbnRSdWxlTGlzdCk6CisgICAgICAgIChBUEk6OkNvbnRl
bnRSdWxlTGlzdFN0b3JlOjpnZXRBdmFpbGFibGVDb250ZW50UnVsZUxpc3RJZGVudGlmaWVycyk6
CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpjb21waWxlQ29udGVudFJ1bGVM
aXN0KToKKyAgICAgICAgKEFQSTo6Q29udGVudFJ1bGVMaXN0U3RvcmU6OnJlbW92ZUNvbnRlbnRS
dWxlTGlzdCk6CisgICAgICAgIChBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOjpzeW5jaHJvbm91
c1JlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHMpOgorICAgICAgICAoQVBJOjpDb250ZW50UnVsZUxp
c3RTdG9yZTo6aW52YWxpZGF0ZUNvbnRlbnRSdWxlTGlzdFZlcnNpb24pOgorICAgICAgICAoQVBJ
OjpDb250ZW50UnVsZUxpc3RTdG9yZTo6Z2V0Q29udGVudFJ1bGVMaXN0U291cmNlKToKKyAgICAg
ICAgKEFQSTo6Y29udGVudFJ1bGVMaXN0U3RvcmVFcnJvckNhdGVnb3J5KToKKyAgICAgICAgKEFQ
STo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUpOiBEZWxldGVkLgorICAgICAg
ICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgpOiBEZWxldGVkLgor
ICAgICAgICAoQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkNvbnRlbnRFeHRlbnNpb25TdG9y
ZSk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6fkNvbnRl
bnRFeHRlbnNpb25TdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkNvbnRlbnRFeHRlbnNp
b25NZXRhRGF0YTo6ZmlsZVNpemUpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjplbmNvZGVDb250
ZW50RXh0ZW5zaW9uTWV0YURhdGEpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpkZWNvZGVDb250
ZW50RXh0ZW5zaW9uTWV0YURhdGEpOiBEZWxldGVkLgorICAgICAgICAoQVBJOjpvcGVuQW5kTWFw
Q29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkNvbnRlbnRFeHRlbnNp
b25TdG9yZTo6bG9va3VwQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChBUEk6
OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6Z2V0QXZhaWxhYmxlQ29udGVudEV4dGVuc2lvbklkZW50
aWZpZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpj
b21waWxlQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkNvbnRlbnRF
eHRlbnNpb25TdG9yZTo6cmVtb3ZlQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAg
IChBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3luY2hyb25vdXNSZW1vdmVBbGxDb250ZW50
RXh0ZW5zaW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpnZXRDb250ZW50RXh0ZW5zaW9uU291cmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKEFQSTo6Y29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29y
eSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RT
dG9yZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRl
bnRFeHRlbnNpb25TdG9yZS5oLgorICAgICAgICAoQVBJOjptYWtlX2Vycm9yX2NvZGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tQYWdlR3JvdXAuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJD
b250ZW50Q29udHJvbGxlclJlZi5jcHA6CisgICAgICAgIChXS1VzZXJDb250ZW50Q29udHJvbGxl
ckFkZFVzZXJDb250ZW50RmlsdGVyKToKKyAgICAgICAgKFdLVXNlckNvbnRlbnRDb250cm9sbGVy
UmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mv
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZUdldFR5cGVJRCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29jb2EubW06CisgICAgICAgIChBUEk6OkNv
bnRlbnRSdWxlTGlzdFN0b3JlOjpkZWZhdWx0U3RvcmVQYXRoKToKKyAgICAgICAgKEFQSTo6Q29u
dGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvbi5oOiBSZW1vdmVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLm1tOiBSZW1vdmVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJu
YWwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4
dGVuc2lvblN0b3JlLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVs
ZUxpc3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0NvbnRlbnRFeHRlbnNpb24uaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29u
dGVudFJ1bGVMaXN0Lm1tOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLQ29udGVudEV4dGVuc2lvbi5tbS4KKyAgICAgICAgKC1bV0tDb250ZW50UnVsZUxp
c3QgZGVhbGxvY10pOgorICAgICAgICAoLVtXS0NvbnRlbnRSdWxlTGlzdCBfYXBpT2JqZWN0XSk6
CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVMaXN0IGlkZW50aWZpZXJdKToKKyAgICAgICAgKC1b
V0tDb250ZW50RXh0ZW5zaW9uIGRlYWxsb2NdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tDb250
ZW50RXh0ZW5zaW9uIF9hcGlPYmplY3RdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tDb250ZW50
RXh0ZW5zaW9uIGlkZW50aWZpZXJdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLQ29udGVudFJ1bGVMaXN0SW50ZXJuYWwuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oLgor
ICAgICAgICAoV2ViS2l0Ojp3cmFwcGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLQ29udGVudFJ1bGVMaXN0U3RvcmUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5oLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZS5tbTogQ29waWVkIGZyb20g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbS4KKyAgICAgICAgKHRvV0tFcnJvckNvZGUpOgorICAgICAgICAoLVtXS0NvbnRlbnRSdWxl
TGlzdFN0b3JlIGRlYWxsb2NdKToKKyAgICAgICAgKCtbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBk
ZWZhdWx0U3RvcmVdKToKKyAgICAgICAgKCtbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBzdG9yZVdp
dGhVUkw6XSk6CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgY29tcGlsZUNvbnRl
bnRSdWxlTGlzdEZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpjb21wbGV0aW9u
SGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50UnVsZUxpc3RTdG9yZSBfY29tcGlsZUNv
bnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6ZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpjb21wbGV0
aW9uSGFuZGxlcjpyZWxlYXNlc0FyZ3VtZW50Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRSdWxl
TGlzdFN0b3JlIGxvb2tVcENvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6Y29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZ2V0QXZhaWxhYmxl
Q29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnM6XSk6CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVM
aXN0U3RvcmUgcmVtb3ZlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjpjb21wbGV0aW9uSGFu
ZGxlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50UnVsZUxpc3RTdG9yZSBfYXBpT2JqZWN0XSk6
CisgICAgICAgICgtW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgX3JlbW92ZUFsbENvbnRlbnRSdWxl
TGlzdHNdKToKKyAgICAgICAgKC1bV0tDb250ZW50UnVsZUxpc3RTdG9yZSBfaW52YWxpZGF0ZUNv
bnRlbnRSdWxlTGlzdFZlcnNpb25Gb3JJZGVudGlmaWVyOl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRSdWxlTGlzdFN0b3JlIF9nZXRDb250ZW50UnVsZUxpc3RTb3VyY2VGb3JJZGVudGlmaWVyOmNv
bXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIF9j
b21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjplbmNvZGVkQ29udGVudFJ1bGVMaXN0
OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZSBkZWFsbG9jXSk6IERlbGV0ZWQuCisgICAgICAgICgrW1dLQ29udGVudEV4dGVuc2lvblN0b3Jl
IGRlZmF1bHRTdG9yZV0pOiBEZWxldGVkLgorICAgICAgICAoK1tXS0NvbnRlbnRFeHRlbnNpb25T
dG9yZSBzdG9yZVdpdGhVUkw6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLQ29udGVudEV4dGVu
c2lvblN0b3JlIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjplbmNvZGVkQ29u
dGVudEV4dGVuc2lvbjpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRp
ZmllcjplbmNvZGVkQ29udGVudEV4dGVuc2lvbjpjb21wbGV0aW9uSGFuZGxlcjpyZWxlYXNlc0Fy
Z3VtZW50Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBs
b29rVXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpjb21wbGV0aW9uSGFuZGxlcjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgZ2V0QXZhaWxhYmxl
Q29udGVudEV4dGVuc2lvbklkZW50aWZpZXJzOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZSByZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpj
b21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmUgX2FwaU9iamVjdF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRFeHRl
bnNpb25TdG9yZSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgX2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9u
VmVyc2lvbkZvcklkZW50aWZpZXI6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLQ29udGVudEV4
dGVuc2lvblN0b3JlIF9nZXRDb250ZW50RXh0ZW5zaW9uU291cmNlRm9ySWRlbnRpZmllcjpjb21w
bGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmUgX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjplbmNvZGVkQ29udGVu
dEV4dGVuc2lvbjpjb21wbGV0aW9uSGFuZGxlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVJbnRlcm5hbC5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lv
blN0b3JlSW50ZXJuYWwuaC4KKyAgICAgICAgKFdlYktpdDo6d3JhcHBlcik6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVu
c2lvblN0b3JlUHJpdmF0ZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJv
ci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5tbToKKyAgICAgICAg
KGxvY2FsaXplZERlc2NyaXB0aW9uRm9yRXJyb3JDb2RlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tVc2Vy
Q29udGVudENvbnRyb2xsZXIgYWRkQ29udGVudFJ1bGVMaXN0Ol0pOgorICAgICAgICAoLVtXS1Vz
ZXJDb250ZW50Q29udHJvbGxlciByZW1vdmVDb250ZW50UnVsZUxpc3Q6XSk6CisgICAgICAgICgt
W1dLVXNlckNvbnRlbnRDb250cm9sbGVyIHJlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHNdKToKKyAg
ICAgICAgKC1bV0tVc2VyQ29udGVudENvbnRyb2xsZXIgX2FkZFVzZXJDb250ZW50RmlsdGVyOl0p
OgorICAgICAgICAoLVtXS1VzZXJDb250ZW50Q29udHJvbGxlciBfcmVtb3ZlVXNlckNvbnRlbnRG
aWx0ZXI6XSk6CisgICAgICAgICgtW1dLVXNlckNvbnRlbnRDb250cm9sbGVyIF9yZW1vdmVBbGxV
c2VyQ29udGVudEZpbHRlcnNdKToKKyAgICAgICAgKC1bV0tVc2VyQ29udGVudENvbnRyb2xsZXIg
YWRkQ29udGVudEV4dGVuc2lvbjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tVc2VyQ29udGVu
dENvbnRyb2xsZXIgcmVtb3ZlQ29udGVudEV4dGVuc2lvbjpdKTogRGVsZXRlZC4KKyAgICAgICAg
KC1bV0tVc2VyQ29udGVudENvbnRyb2xsZXIgcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdKTog
RGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0
ZW5zaW9uU3RvcmUubW06CisgICAgICAgICh0b1VzZXJDb250ZW50UnVsZUxpc3RTdG9yZUVycm9y
KToKKyAgICAgICAgKCtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVd
KToKKyAgICAgICAgKCtbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBzdG9yZVdpdGhVUkw6
XSk6CisgICAgICAgICgtW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgY29tcGlsZUNvbnRl
bnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmVuY29kZWRDb250ZW50RXh0ZW5zaW9uOmNvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIGxv
b2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIHJlbW92ZUNvbnRlbnRFeHRl
bnNpb25Gb3JJZGVudGlmaWVyOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtfV0tV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9hcGlPYmplY3RdKToKKyAgICAgICAgKC1bX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZSBfcmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdKToKKyAg
ICAgICAgKC1bX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBfaW52YWxpZGF0ZUNvbnRlbnRF
eHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjpdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZSBfaW5pdFdpdGhXS0NvbnRlbnRSdWxlTGlzdFN0b3JlOl0pOgorICAg
ICAgICAodG9Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3IpOiBEZWxldGVkLgorICAgICAg
ICAoLVtfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlIF9pbml0V2l0aFdLQ29udGVudEV4dGVu
c2lvblN0b3JlOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW06CisgICAgICAg
ICgtW19XS1VzZXJDb250ZW50RmlsdGVyIF9hcGlPYmplY3RdKToKKyAgICAgICAgKC1bX1dLVXNl
ckNvbnRlbnRGaWx0ZXIgX2luaXRXaXRoV0tDb250ZW50UnVsZUxpc3Q6XSk6CisgICAgICAgICgt
W19XS1VzZXJDb250ZW50RmlsdGVyIF9pbml0V2l0aFdLQ29udGVudEV4dGVuc2lvbjpdKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVy
SW50ZXJuYWwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50
RmlsdGVyUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjphZGRQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZENvbnRlbnRSdWxlTGlzdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVDb250ZW50UnVsZUxp
c3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cmVt
b3ZlQWxsQ29udGVudFJ1bGVMaXN0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5OjphZGRDb250ZW50RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZUNvbnRlbnRFeHRl
bnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eTo6cmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwOgorICAgICAgICAqIFdlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1VzZXJDb250
ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6YWRkQ29udGVudFJ1bGVMaXN0cyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQ29udGVudFJ1bGVMaXN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxDb250ZW50
UnVsZUxpc3RzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjph
ZGRDb250ZW50RXh0ZW5zaW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQ29udGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsQ29udGVudEV4
dGVuc2lvbnMpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9Vc2VyQ29udGVu
dC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjptX2JhY2tncm91bmRD
UFVMaW1pdCk6CisKIDIwMTctMDUtMDkgIFlvc2hpYWtpIEppdHN1a2F3YSAgPFlvc2hpYWtpLkpp
dHN1a2F3YUBzb255LmNvbT4KIAogICAgICAgICBbQ29vcmRpbmF0ZWQgR3JhcGhpY3NdIERlYnVn
IFZpc3VhbHMgZG9uJ3QgaGlkZQpJbmRleDogU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIx
NjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xODIsOCArMTgyLDggQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJlZC9Vc2VyRGF0
YS5jcHAKICAgICBTaGFyZWQvVmlzaXRlZExpbmtUYWJsZS5jcHAKICAgICBTaGFyZWQvV2ViQmFj
a0ZvcndhcmRMaXN0SXRlbS5jcHAKLSAgICBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uLmNwcAotICAgIFNoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcAor
ICAgIFNoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5jcHAKKyAgICBTaGFyZWQvV2Vi
Q29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmNwcAogICAgIFNoYXJlZC9XZWJDb25uZWN0aW9u
LmNwcAogICAgIFNoYXJlZC9XZWJDb25uZWN0aW9uQ2xpZW50LmNwcAogICAgIFNoYXJlZC9XZWJD
b250ZXh0TWVudUl0ZW0uY3BwCkBAIC0zMzIsOCArMzMyLDggQEAgc2V0KFdlYktpdDJfU09VUkNF
UwogICAgIFVJUHJvY2Vzcy9XZWJWaWJyYXRpb25Qcm94eS5jcHAKICAgICBVSVByb2Nlc3MvV2Vi
Vmlld3BvcnRBdHRyaWJ1dGVzLmNwcAogCi0gICAgVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0
ZW5zaW9uLmNwcAotICAgIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNw
cAorICAgIFVJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0LmNwcAorICAgIFVJUHJvY2Vz
cy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9BUElF
eHBlcmltZW50YWxGZWF0dXJlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvQVBJRnJhbWVJbmZvLmNw
cAogICAgIFVJUHJvY2Vzcy9BUEkvQVBJSFRUUENvb2tpZVN0b3JlLmNwcApJbmRleDogU291cmNl
L1dlYktpdDIvUGxhdGZvcm1NYWMuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
UGxhdGZvcm1NYWMuY21ha2UJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtTWFjLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsOCArMTgyLDggQEAgbGlzdChB
UFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQ
cml2YXRlTWFjLm1tCiAgICAgVUlQcm9jZXNzL0FQSS9DL21hYy9XS1BhZ2VQcml2YXRlTWFjLm1t
CiAKKyAgICBVSVByb2Nlc3MvQVBJL0NvY29hL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlQ29jb2Eu
bW0KICAgICBVSVByb2Nlc3MvQVBJL0NvY29hL0FQSVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUNvY29h
Lm1tCi0gICAgVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
Q29jb2EubW0KICAgICBVSVByb2Nlc3MvQVBJL0NvY29hL0FQSVdlYnNpdGVEYXRhU3RvcmVDb2Nv
YS5tbQogICAgIFVJUHJvY2Vzcy9BUEkvQ29jb2EvTGVnYWN5QnVuZGxlRm9yQ2xhc3MubW0KICAg
ICBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQmFja0ZvcndhcmRMaXN0Lm1tCkBAIC0xOTEsOCArMTkx
LDggQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW0KICAgICBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLQnJvd3NpbmdDb250ZXh0R3JvdXAubW0KICAgICBVSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29u
bmVjdGlvbi5tbQotICAgIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLm1t
Ci0gICAgVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQorICAg
IFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3QubW0KKyAgICBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUubW0KICAgICBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLRXJyb3IubW0KICAgICBVSVByb2Nlc3MvQVBJL0NvY29hL1dLRnJhbWVJbmZvLm1tCiAg
ICAgVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQpJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5j
cHAJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24uY3BwCShub25leGlzdGVudCkKQEAgLTEsOTQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb24uaCIKLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1SZWY8V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhJiYgZGF0YSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb24oV1RGTW92ZShkYXRhKSkpOwotfQotCi1XZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb246OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbihXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhJiYgZGF0YSkKLSAgICA6IG1fZGF0YShXVEZNb3ZlKGRhdGEpKQotewotfQotCi1X
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246On5XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24o
KQotewotfQotCi1ib29sIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y29uZGl0aW9uc0Fw
cGx5T25seVRvRG9tYWluKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2RhdGEuZGF0YS0+ZGF0YSgp
KSArIG1fZGF0YS5jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQpOwotfQotCi1jb25z
dCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqIFdlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGUoKSBjb25zdAot
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6REZBQnl0ZWNvZGUqPihtX2RhdGEuZGF0YS0+ZGF0YSgpKSArIG1fZGF0YS5maWx0ZXJzV2l0
aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldDsKLX0KLQotdW5zaWduZWQgV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uOjpmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZUxlbmd0aCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRl
Y29kZVNpemU7Ci19Ci0KLWNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRl
Y29kZSogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpmaWx0ZXJzV2l0aENvbmRpdGlvbnNC
eXRlY29kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSo+KG1fZGF0YS5kYXRhLT5kYXRhKCkpICsg
bV9kYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0OwotfQotCi11bnNpZ25l
ZCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVj
b2RlTGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLmZpbHRlcnNXaXRoQ29uZGl0
aW9uc0J5dGVjb2RlU2l6ZTsKLX0KLQotY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkRGQUJ5dGVjb2RlKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OnRvcFVSTEZpbHRlcnNC
eXRlY29kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSo+KG1fZGF0YS5kYXRhLT5kYXRhKCkpICsg
bV9kYXRhLnRvcFVSTEZpbHRlcnNCeXRlY29kZU9mZnNldDsKLX0KLQotdW5zaWduZWQgV2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uOjp0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSBjb25z
dAotewotICAgIHJldHVybiBtX2RhdGEudG9wVVJMRmlsdGVyc0J5dGVjb2RlU2l6ZTsKLX0KLQot
Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmFjdGlvbnMoKSBjb25zdAotewotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6U2VyaWFsaXpl
ZEFjdGlvbkJ5dGUqPihtX2RhdGEuZGF0YS0+ZGF0YSgpKSArIG1fZGF0YS5hY3Rpb25zT2Zmc2V0
OwotfQotCi11bnNpZ25lZCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmFjdGlvbnNMZW5n
dGgoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEuYWN0aW9uc1NpemU7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaAkobm9uZXhpc3RlbnQpCkBAIC0xLDYyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCi0KLSNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0NvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIGZpbmFsIDogcHVibGljIFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb24gewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGUoV2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYmKTsKLSAgICB2aXJ0dWFsIH5XZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24oKTsKLQotICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRh
dGEgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQotCi1wcml2YXRlOgotICAgIFdlYkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbihXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiYp
OwotCi0gICAgY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBm
aWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZSgpIGNvbnN0IGZpbmFsOwotICAgIHVuc2ln
bmVkIGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3QgZmluYWw7
Ci0gICAgY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBmaWx0
ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZSgpIGNvbnN0IGZpbmFsOwotICAgIHVuc2lnbmVkIGZp
bHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3QgZmluYWw7Ci0gICAgY29u
c3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiB0b3BVUkxGaWx0ZXJz
Qnl0ZWNvZGUoKSBjb25zdCBmaW5hbDsKLSAgICB1bnNpZ25lZCB0b3BVUkxGaWx0ZXJzQnl0ZWNv
ZGVMZW5ndGgoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGNvbmRpdGlvbnNBcHBseU9ubHlUb0Rv
bWFpbigpIGNvbnN0IGZpbmFsOwotICAgIAotICAgIGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucygpIGNvbnN0IGZpbmFsOwotICAg
IHVuc2lnbmVkIGFjdGlvbnNMZW5ndGgoKSBjb25zdCBmaW5hbDsKLSAgICAKLSAgICBXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIG1fZGF0YTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uRGF0YS5jcHAJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDgw
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oIgotCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKLQotI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCi0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi12b2lkIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE6OmVuY29kZShJUEM6
OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFu
ZGxlOwotICAgIGRhdGEtPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVj
dGlvbjo6UmVhZE9ubHkpOwotICAgIGVuY29kZXIgPDwgaGFuZGxlOwotCi0gICAgZW5jb2RlciA8
PCBhY3Rpb25zT2Zmc2V0OwotICAgIGVuY29kZXIgPDwgYWN0aW9uc1NpemU7Ci0gICAgZW5jb2Rl
ciA8PCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldDsKLSAgICBlbmNvZGVy
IDw8IGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZTsKLSAgICBlbmNvZGVyIDw8
IGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0OwotICAgIGVuY29kZXIgPDwgZmls
dGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplOwotICAgIGVuY29kZXIgPDwgdG9wVVJMRmls
dGVyc0J5dGVjb2RlT2Zmc2V0OwotICAgIGVuY29kZXIgPDwgdG9wVVJMRmlsdGVyc0J5dGVjb2Rl
U2l6ZTsKLX0KLQotYm9vbCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjpkZWNvZGUo
SVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiBj
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKQotewotICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxl
IGhhbmRsZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmRhdGEgPSBTaGFyZWRN
ZW1vcnk6Om1hcChoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwot
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmFj
dGlvbnNPZmZzZXQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmFjdGlvbnNTaXplKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbkRhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YS50b3BVUkxGaWx0ZXJzQnl0ZWNvZGVPZmZzZXQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhLnRvcFVSTEZpbHRlcnNCeXRlY29kZVNpemUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oCShy
ZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YS5oCShub25leGlzdGVudCkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLQot
I2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKLSNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIK
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgRGVjb2Rl
cjsKLWNsYXNzIEVuY29kZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIHsKLXB1YmxpYzoKLSAgICBXZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb25EYXRhKCkgPSBkZWZhdWx0OwotCi0gICAgV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uRGF0YShSZWZQdHI8U2hhcmVkTWVtb3J5PiYmIGRhdGEsIE5ldHdvcmtDYWNoZTo6
RGF0YSBmaWxlRGF0YSwgdW5zaWduZWQgY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0
LCB1bnNpZ25lZCBhY3Rpb25zT2Zmc2V0LCB1bnNpZ25lZCBhY3Rpb25zU2l6ZSwgdW5zaWduZWQg
ZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGZpbHRlcnNX
aXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwgdW5zaWduZWQgZmlsdGVyc1dpdGhDb25kaXRp
b25zQnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2Rl
U2l6ZSwgdW5zaWduZWQgdG9wVVJMRmlsdGVyc0J5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCB0b3BV
UkxGaWx0ZXJzQnl0ZWNvZGVTaXplKQotICAgICAgICA6IGRhdGEoV1RGTW92ZShkYXRhKSkKLSAg
ICAgICAgLCBmaWxlRGF0YShmaWxlRGF0YSkKLSAgICAgICAgLCBjb25kaXRpb25zQXBwbHlPbmx5
VG9Eb21haW5PZmZzZXQoY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0KQotICAgICAg
ICAsIGFjdGlvbnNPZmZzZXQoYWN0aW9uc09mZnNldCkKLSAgICAgICAgLCBhY3Rpb25zU2l6ZShh
Y3Rpb25zU2l6ZSkKLSAgICAgICAgLCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9m
ZnNldChmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCkKLSAgICAgICAgLCBm
aWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUoZmlsdGVyc1dpdGhvdXRDb25kaXRp
b25zQnl0ZWNvZGVTaXplKQotICAgICAgICAsIGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2Rl
T2Zmc2V0KGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0KQotICAgICAgICAsIGZp
bHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZShmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRl
Y29kZVNpemUpCi0gICAgICAgICwgdG9wVVJMRmlsdGVyc0J5dGVjb2RlT2Zmc2V0KHRvcFVSTEZp
bHRlcnNCeXRlY29kZU9mZnNldCkKLSAgICAgICAgLCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVTaXpl
KHRvcFVSTEZpbHRlcnNCeXRlY29kZVNpemUpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZW5j
b2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkRl
Y29kZXImLCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJik7Ci0KLSAgICBSZWZQdHI8
U2hhcmVkTWVtb3J5PiBkYXRhOwotICAgIE5ldHdvcmtDYWNoZTo6RGF0YSBmaWxlRGF0YTsKLSAg
ICB1bnNpZ25lZCBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQgeyAwIH07Ci0gICAg
dW5zaWduZWQgYWN0aW9uc09mZnNldCB7IDAgfTsKLSAgICB1bnNpZ25lZCBhY3Rpb25zU2l6ZSB7
IDAgfTsKLSAgICB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNl
dCB7IDAgfTsKLSAgICB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNp
emUgeyAwIH07Ci0gICAgdW5zaWduZWQgZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVPZmZz
ZXQgeyAwIH07Ci0gICAgdW5zaWduZWQgZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXpl
IHsgMCB9OwotICAgIHVuc2lnbmVkIHRvcFVSTEZpbHRlcnNCeXRlY29kZU9mZnNldCB7IDAgfTsK
LSAgICB1bnNpZ25lZCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVTaXplIHsgMCB9OwotfTsKLQotfQot
Ci0jZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmNwcAkocmV2
aXNpb24gMjE2NTM5KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uLmNwcDoyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29t
cGlsZWRDb250ZW50UnVsZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworUmVmPFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gV2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uRGF0YSYmIGRhdGEpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uKFdURk1vdmUoZGF0YSkpKTsKK30KKworV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uOjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24oV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uRGF0YSYmIGRhdGEpCisgICAgOiBtX2RhdGEoV1RGTW92ZShkYXRhKSkKK3sKK30K
KworV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjp+V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uKCkKK3sKK30KKworYm9vbCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNvbmRpdGlv
bnNBcHBseU9ubHlUb0RvbWFpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PHVpbnQzMl90Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEtPmRh
dGEoKSkgKyBtX2RhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0KTsKK30KKwor
Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb246OmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkRGQUJ5dGVjb2RlKj4obV9kYXRhLmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuZmlsdGVy
c1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVPZmZzZXQ7Cit9CisKK3Vuc2lnbmVkIFdlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVMZW5n
dGgoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25z
Qnl0ZWNvZGVTaXplOworfQorCitjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZB
Qnl0ZWNvZGUqIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhDb25kaXRp
b25zQnl0ZWNvZGUoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqPihtX2RhdGEuZGF0YS0+ZGF0YSgp
KSArIG1fZGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZU9mZnNldDsKK30KKwordW5z
aWduZWQgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpmaWx0ZXJzV2l0aENvbmRpdGlvbnNC
eXRlY29kZUxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS5maWx0ZXJzV2l0aENv
bmRpdGlvbnNCeXRlY29kZVNpemU7Cit9CisKK2NvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpERkFCeXRlY29kZSogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjp0b3BVUkxGaWx0
ZXJzQnl0ZWNvZGUoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqPihtX2RhdGEuZGF0YS0+ZGF0YSgp
KSArIG1fZGF0YS50b3BVUkxGaWx0ZXJzQnl0ZWNvZGVPZmZzZXQ7Cit9CisKK3Vuc2lnbmVkIFdl
YkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6dG9wVVJMRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLnRvcFVSTEZpbHRlcnNCeXRlY29kZVNpemU7Cit9
CisKK2NvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0
ZSogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjphY3Rpb25zKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlNlcmlh
bGl6ZWRBY3Rpb25CeXRlKj4obV9kYXRhLmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuYWN0aW9uc09m
ZnNldDsKK30KKwordW5zaWduZWQgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjphY3Rpb25z
TGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLmFjdGlvbnNTaXplOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENv
bnRlbnRSdWxlTGlzdC5jcHAJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDY3ICsyNCw2NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRS
dWxlTGlzdC5oIgogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKLVJlZjxXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IFdlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEm
JiBkYXRhKQorUmVmPFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0PiBXZWJDb21waWxlZENvbnRl
bnRSdWxlTGlzdDo6Y3JlYXRlKFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YSYmIGRhdGEp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
KFdURk1vdmUoZGF0YSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJDb21waWxlZENv
bnRlbnRSdWxlTGlzdChXVEZNb3ZlKGRhdGEpKSk7CiB9CiAKLVdlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbjo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKFdlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbkRhdGEmJiBkYXRhKQorV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OldlYkNvbXBp
bGVkQ29udGVudFJ1bGVMaXN0KFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YSYmIGRhdGEp
CiAgICAgOiBtX2RhdGEoV1RGTW92ZShkYXRhKSkKIHsKIH0KIAotV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uOjp+V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKCkKK1dlYkNvbXBpbGVkQ29u
dGVudFJ1bGVMaXN0Ojp+V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QoKQogewogfQogCi1ib29s
IFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWlu
KCkgY29uc3QKK2Jvb2wgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OmNvbmRpdGlvbnNBcHBs
eU9ubHlUb0RvbWFpbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PHVp
bnQzMl90Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhLmRhdGEtPmRhdGEoKSkg
KyBtX2RhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0KTsKIH0KIAotY29uc3Qg
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb246OmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlKCkgY29uc3QKK2Nv
bnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogV2ViQ29tcGlsZWRD
b250ZW50UnVsZUxpc3Q6OmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlKCkgY29uc3QK
IHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkRGQUJ5dGVjb2RlKj4obV9kYXRhLmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuZmlsdGVyc1dp
dGhvdXRDb25kaXRpb25zQnl0ZWNvZGVPZmZzZXQ7CiB9CiAKLXVuc2lnbmVkIFdlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbjo6ZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVMZW5ndGgo
KSBjb25zdAordW5zaWduZWQgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OmZpbHRlcnNXaXRo
b3V0Q29uZGl0aW9uc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kYXRh
LmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZTsKIH0KIAotY29uc3QgV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlKiBXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb246OmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlKCkgY29uc3QKK2NvbnN0IFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogV2ViQ29tcGlsZWRDb250ZW50UnVs
ZUxpc3Q6OmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlKCkgY29uc3QKIHsKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVj
b2RlKj4obV9kYXRhLmRhdGEtPmRhdGEoKSkgKyBtX2RhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25z
Qnl0ZWNvZGVPZmZzZXQ7CiB9CiAKLXVuc2lnbmVkIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bjo6ZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVMZW5ndGgoKSBjb25zdAordW5zaWduZWQg
V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2Rl
TGVuZ3RoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9u
c0J5dGVjb2RlU2l6ZTsKIH0KIAotY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRG
QUJ5dGVjb2RlKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OnRvcFVSTEZpbHRlcnNCeXRl
Y29kZSgpIGNvbnN0Citjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNv
ZGUqIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0Ojp0b3BVUkxGaWx0ZXJzQnl0ZWNvZGUoKSBj
b25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6REZBQnl0ZWNvZGUqPihtX2RhdGEuZGF0YS0+ZGF0YSgpKSArIG1fZGF0YS50b3BV
UkxGaWx0ZXJzQnl0ZWNvZGVPZmZzZXQ7CiB9CiAKLXVuc2lnbmVkIFdlYkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbjo6dG9wVVJMRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3QKK3Vuc2lnbmVk
IFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0Ojp0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVMZW5ndGgo
KSBjb25zdAogewogICAgIHJldHVybiBtX2RhdGEudG9wVVJMRmlsdGVyc0J5dGVjb2RlU2l6ZTsK
IH0KIAotY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25C
eXRlKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmFjdGlvbnMoKSBjb25zdAorY29uc3Qg
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBXZWJDb21w
aWxlZENvbnRlbnRSdWxlTGlzdDo6YWN0aW9ucygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9u
Qnl0ZSo+KG1fZGF0YS5kYXRhLT5kYXRhKCkpICsgbV9kYXRhLmFjdGlvbnNPZmZzZXQ7CiB9CiAK
LXVuc2lnbmVkIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6YWN0aW9uc0xlbmd0aCgpIGNv
bnN0Cit1bnNpZ25lZCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6YWN0aW9uc0xlbmd0aCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YS5hY3Rpb25zU2l6ZTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5oCShy
ZXZpc2lvbiAyMTY1MzkpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb24uaDoyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29t
cGlsZWRDb250ZW50UnVsZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQorCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gY3JlYXRlKFdlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbkRhdGEmJik7CisgICAgdmlydHVhbCB+V2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uKCk7CisKKyAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGRh
dGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworcHJpdmF0ZToKKyAgICBXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24oV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYmKTsKKwor
ICAgIGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogZmlsdGVy
c1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGUoKSBjb25zdCBmaW5hbDsKKyAgICB1bnNpZ25lZCBm
aWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0IGZpbmFsOworICAg
IGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogZmlsdGVyc1dp
dGhDb25kaXRpb25zQnl0ZWNvZGUoKSBjb25zdCBmaW5hbDsKKyAgICB1bnNpZ25lZCBmaWx0ZXJz
V2l0aENvbmRpdGlvbnNCeXRlY29kZUxlbmd0aCgpIGNvbnN0IGZpbmFsOworICAgIGNvbnN0IFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogdG9wVVJMRmlsdGVyc0J5dGVj
b2RlKCkgY29uc3QgZmluYWw7CisgICAgdW5zaWduZWQgdG9wVVJMRmlsdGVyc0J5dGVjb2RlTGVu
Z3RoKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4o
KSBjb25zdCBmaW5hbDsKKyAgICAKKyAgICBjb25zdCBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6U2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMoKSBjb25zdCBmaW5hbDsKKyAgICB1bnNp
Z25lZCBhY3Rpb25zTGVuZ3RoKCkgY29uc3QgZmluYWw7CisgICAgCisgICAgV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uRGF0YSBtX2RhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuaAkocmV2aXNp
b24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1
bGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIxICsyNywyMSBAQAogCiAjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKIAotI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5o
PgorI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9D
b250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNz
IFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIHsKK2NsYXNzIFdlYkNvbXBp
bGVkQ29udGVudFJ1bGVMaXN0IGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb24gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGUoV2ViQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uRGF0YSYmKTsKLSAgICB2aXJ0dWFsIH5XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24o
KTsKKyAgICBzdGF0aWMgUmVmPFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0PiBjcmVhdGUoV2Vi
Q29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhJiYpOworICAgIHZpcnR1YWwgfldlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0KCk7CiAKLSAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRh
IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBXZWJDb21waWxlZENvbnRlbnRS
dWxlTGlzdERhdGEgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogCiBwcml2YXRlOgot
ICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbihXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhJiYpOworICAgIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0KFdlYkNvbXBpbGVkQ29u
dGVudFJ1bGVMaXN0RGF0YSYmKTsKIAogICAgIGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpERkFCeXRlY29kZSogZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGUoKSBjb25z
dCBmaW5hbDsKICAgICB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZUxl
bmd0aCgpIGNvbnN0IGZpbmFsOwpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0
IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9u
cygpIGNvbnN0IGZpbmFsOwogICAgIHVuc2lnbmVkIGFjdGlvbnNMZW5ndGgoKSBjb25zdCBmaW5h
bDsKICAgICAKLSAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIG1fZGF0YTsKKyAg
ICBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEgbV9kYXRhOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250
ZW50UnVsZUxpc3REYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmNwcAkocmV2aXNpb24gMjE2NTM5KQkoZnJv
bSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5j
cHA6MjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1
bGVMaXN0RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVk
ZSAiQXJndW1lbnRDb2RlcnMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YTo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAgZGF0YS0+Y3Jl
YXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Cisg
ICAgZW5jb2RlciA8PCBoYW5kbGU7CisKKyAgICBlbmNvZGVyIDw8IGFjdGlvbnNPZmZzZXQ7Cisg
ICAgZW5jb2RlciA8PCBhY3Rpb25zU2l6ZTsKKyAgICBlbmNvZGVyIDw8IGZpbHRlcnNXaXRob3V0
Q29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0OworICAgIGVuY29kZXIgPDwgZmlsdGVyc1dpdGhvdXRD
b25kaXRpb25zQnl0ZWNvZGVTaXplOworICAgIGVuY29kZXIgPDwgZmlsdGVyc1dpdGhDb25kaXRp
b25zQnl0ZWNvZGVPZmZzZXQ7CisgICAgZW5jb2RlciA8PCBmaWx0ZXJzV2l0aENvbmRpdGlvbnNC
eXRlY29kZVNpemU7CisgICAgZW5jb2RlciA8PCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVPZmZzZXQ7
CisgICAgZW5jb2RlciA8PCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVTaXplOworfQorCitib29sIFdl
YkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29k
ZXIsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmIGNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEpCit7CisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbkRhdGEuZGF0YSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRsZSwg
U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuYWN0aW9uc09mZnNldCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbkRhdGEuYWN0aW9uc1NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmZpbHRlcnNX
aXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5maWx0
ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmZp
bHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5m
aWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLnRv
cFVSTEZpbHRlcnNCeXRlY29kZU9mZnNldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEudG9wVVJMRmls
dGVyc0J5dGVjb2RlU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRD
b250ZW50UnVsZUxpc3REYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmNwcAkocmV2aXNpb24gMjE2NTM5KQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oIgorI2lu
Y2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5oIgogCiAjaWYgRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKIApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotdm9pZCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjplbmNvZGUoSVBDOjpF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAordm9pZCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERh
dGE6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgU2hhcmVkTWVt
b3J5OjpIYW5kbGUgaGFuZGxlOwogICAgIGRhdGEtPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJl
ZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwpAQCAtNDgsMjggKzQ4LDI4IEBAIHZvaWQg
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YTo6ZW4KICAgICBlbmNvZGVyIDw8IHRvcFVS
TEZpbHRlcnNCeXRlY29kZVNpemU7CiB9CiAKLWJvb2wgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uRGF0YTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uRGF0YSYgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSkKK2Jvb2wgV2ViQ29t
cGlsZWRDb250ZW50UnVsZUxpc3REYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEmIGNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0
YSkKIHsKICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShoYW5kbGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YS5kYXRhID0gU2hhcmVkTWVtb3J5OjptYXAoaGFuZGxlLCBTaGFyZWRN
ZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKyAgICBjb21waWxlZENvbnRlbnRSdWxlTGlz
dERhdGEuZGF0YSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90
ZWN0aW9uOjpSZWFkT25seSk7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEuYWN0aW9uc09mZnNldCkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShjb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuYWN0aW9uc09mZnNldCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEuYWN0aW9uc1NpemUpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRD
b250ZW50UnVsZUxpc3REYXRhLmFjdGlvbnNTaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5maWx0
ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCkpCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShjb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25z
Qnl0ZWNvZGVPZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0
aW9uc0J5dGVjb2RlU2l6ZSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRl
bnRSdWxlTGlzdERhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCkpCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuZmlsdGVy
c1dpdGhDb25kaXRpb25zQnl0ZWNvZGVPZmZzZXQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmZpbHRl
cnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShj
b21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVT
aXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS50b3BVUkxGaWx0ZXJzQnl0ZWNvZGVPZmZzZXQpKQor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLnRvcFVS
TEZpbHRlcnNCeXRlY29kZU9mZnNldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEudG9wVVJMRmlsdGVy
c0J5dGVjb2RlU2l6ZSkpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRS
dWxlTGlzdERhdGEudG9wVVJMRmlsdGVyc0J5dGVjb2RlU2l6ZSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuaAkocmV2aXNpb24gMjE2
NTM5KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uRGF0YS5oOjIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENv
bnRlbnRSdWxlTGlzdERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQor
CisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRGF0YS5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5o
IgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBEZWNv
ZGVyOworY2xhc3MgRW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdl
YkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgeworcHVibGljOgorICAgIFdlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEoKSA9IGRlZmF1bHQ7CisKKyAgICBXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb25EYXRhKFJlZlB0cjxTaGFyZWRNZW1vcnk+JiYgZGF0YSwgTmV0d29ya0NhY2hl
OjpEYXRhIGZpbGVEYXRhLCB1bnNpZ25lZCBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZz
ZXQsIHVuc2lnbmVkIGFjdGlvbnNPZmZzZXQsIHVuc2lnbmVkIGFjdGlvbnNTaXplLCB1bnNpZ25l
ZCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZU9mZnNldCwgdW5zaWduZWQgZmlsdGVy
c1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplLCB1bnNpZ25lZCBmaWx0ZXJzV2l0aENvbmRp
dGlvbnNCeXRlY29kZU9mZnNldCwgdW5zaWduZWQgZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNv
ZGVTaXplLCB1bnNpZ25lZCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkIHRv
cFVSTEZpbHRlcnNCeXRlY29kZVNpemUpCisgICAgICAgIDogZGF0YShXVEZNb3ZlKGRhdGEpKQor
ICAgICAgICAsIGZpbGVEYXRhKGZpbGVEYXRhKQorICAgICAgICAsIGNvbmRpdGlvbnNBcHBseU9u
bHlUb0RvbWFpbk9mZnNldChjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW5PZmZzZXQpCisgICAg
ICAgICwgYWN0aW9uc09mZnNldChhY3Rpb25zT2Zmc2V0KQorICAgICAgICAsIGFjdGlvbnNTaXpl
KGFjdGlvbnNTaXplKQorICAgICAgICAsIGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2Rl
T2Zmc2V0KGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0KQorICAgICAgICAs
IGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZShmaWx0ZXJzV2l0aG91dENvbmRp
dGlvbnNCeXRlY29kZVNpemUpCisgICAgICAgICwgZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNv
ZGVPZmZzZXQoZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICwg
ZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplKGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5
dGVjb2RlU2l6ZSkKKyAgICAgICAgLCB0b3BVUkxGaWx0ZXJzQnl0ZWNvZGVPZmZzZXQodG9wVVJM
RmlsdGVyc0J5dGVjb2RlT2Zmc2V0KQorICAgICAgICAsIHRvcFVSTEZpbHRlcnNCeXRlY29kZVNp
emUodG9wVVJMRmlsdGVyc0J5dGVjb2RlU2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBl
bmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6
RGVjb2RlciYsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmKTsKKworICAgIFJlZlB0
cjxTaGFyZWRNZW1vcnk+IGRhdGE7CisgICAgTmV0d29ya0NhY2hlOjpEYXRhIGZpbGVEYXRhOwor
ICAgIHVuc2lnbmVkIGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbk9mZnNldCB7IDAgfTsKKyAg
ICB1bnNpZ25lZCBhY3Rpb25zT2Zmc2V0IHsgMCB9OworICAgIHVuc2lnbmVkIGFjdGlvbnNTaXpl
IHsgMCB9OworICAgIHVuc2lnbmVkIGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlT2Zm
c2V0IHsgMCB9OworICAgIHVuc2lnbmVkIGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2Rl
U2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZU9m
ZnNldCB7IDAgfTsKKyAgICB1bnNpZ25lZCBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNp
emUgeyAwIH07CisgICAgdW5zaWduZWQgdG9wVVJMRmlsdGVyc0J5dGVjb2RlT2Zmc2V0IHsgMCB9
OworICAgIHVuc2lnbmVkIHRvcFVSTEZpbHRlcnNCeXRlY29kZVNpemUgeyAwIH07Cit9OworCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEu
aAkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTEgQEAg
Y2xhc3MgRW5jb2RlcjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFdlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEgeworY2xhc3MgV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3RE
YXRhIHsKIHB1YmxpYzoKLSAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKCkgPSBk
ZWZhdWx0OworICAgIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YSgpID0gZGVmYXVsdDsK
IAotICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoUmVmUHRyPFNoYXJlZE1lbW9y
eT4mJiBkYXRhLCBOZXR3b3JrQ2FjaGU6OkRhdGEgZmlsZURhdGEsIHVuc2lnbmVkIGNvbmRpdGlv
bnNBcHBseU9ubHlUb0RvbWFpbk9mZnNldCwgdW5zaWduZWQgYWN0aW9uc09mZnNldCwgdW5zaWdu
ZWQgYWN0aW9uc1NpemUsIHVuc2lnbmVkIGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2Rl
T2Zmc2V0LCB1bnNpZ25lZCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUsIHVu
c2lnbmVkIGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCBmaWx0
ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUsIHVuc2lnbmVkIHRvcFVSTEZpbHRlcnNCeXRl
Y29kZU9mZnNldCwgdW5zaWduZWQgdG9wVVJMRmlsdGVyc0J5dGVjb2RlU2l6ZSkKKyAgICBXZWJD
b21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEoUmVmUHRyPFNoYXJlZE1lbW9yeT4mJiBkYXRhLCBO
ZXR3b3JrQ2FjaGU6OkRhdGEgZmlsZURhdGEsIHVuc2lnbmVkIGNvbmRpdGlvbnNBcHBseU9ubHlU
b0RvbWFpbk9mZnNldCwgdW5zaWduZWQgYWN0aW9uc09mZnNldCwgdW5zaWduZWQgYWN0aW9uc1Np
emUsIHVuc2lnbmVkIGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0LCB1bnNp
Z25lZCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUsIHVuc2lnbmVkIGZpbHRl
cnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCBmaWx0ZXJzV2l0aENvbmRp
dGlvbnNCeXRlY29kZVNpemUsIHVuc2lnbmVkIHRvcFVSTEZpbHRlcnNCeXRlY29kZU9mZnNldCwg
dW5zaWduZWQgdG9wVVJMRmlsdGVyc0J5dGVjb2RlU2l6ZSkKICAgICAgICAgOiBkYXRhKFdURk1v
dmUoZGF0YSkpCiAgICAgICAgICwgZmlsZURhdGEoZmlsZURhdGEpCiAgICAgICAgICwgY29uZGl0
aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0KGNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbk9m
ZnNldCkKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgZW5jb2Rl
KElQQzo6RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkRlY29k
ZXImLCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJik7CisgICAgc3RhdGljIGJvb2wg
ZGVjb2RlKElQQzo6RGVjb2RlciYsIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YSYpOwog
CiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gZGF0YTsKICAgICBOZXR3b3JrQ2FjaGU6OkRhdGEg
ZmlsZURhdGE7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNiw3ICsxMDYsNyBAQCB2b2lkIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJ
CiAgICAgZW5jb2RlciA8PCB1c2VyU3R5bGVTaGVldHM7CiAgICAgZW5jb2RlciA8PCBtZXNzYWdl
SGFuZGxlcnM7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBlbmNvZGVyIDw8
IGNvbnRlbnRFeHRlbnNpb25zOworICAgIGVuY29kZXIgPDwgY29udGVudFJ1bGVMaXN0czsKICNl
bmRpZgogfQogCkBAIC0yNTMsNyArMjUzLDcgQEAgYm9vbCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoSQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5tZXNzYWdl
SGFuZGxlcnMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMuY29udGVudEV4dGVu
c2lvbnMpKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5jb250ZW50UnVsZUxp
c3RzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0
ZXJzLmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQYWdl
Q3JlYXRpb25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNp
bmNsdWRlICJEcmF3aW5nQXJlYUluZm8uaCIKICNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiU2Vzc2lvblN0YXRlLmgiCi0jaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uRGF0YS5oIgorI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0
YS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlBh
Z2VHcm91cERhdGEuaCIKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc1N0b3JlLmgiCkBAIC0xNjQs
NyArMTY0LDcgQEAgc3RydWN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFZlY3Rv
cjxXZWJVc2VyU3R5bGVTaGVldERhdGE+IHVzZXJTdHlsZVNoZWV0czsKICAgICBWZWN0b3I8V2Vi
U2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRhPiBtZXNzYWdlSGFuZGxlcnM7CiAjaWYgRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uRGF0YT4+IGNvbnRlbnRFeHRlbnNpb25zOworICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGE+PiBjb250ZW50
UnVsZUxpc3RzOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJ
L0FQSU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJ
T2JqZWN0LmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkv
QVBJT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw4ICsxMDMsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIEJhY2tGb3J3YXJkTGlzdEl0ZW0sCiAgICAgICAgIENhY2hlTWFuYWdlciwKICAgICAg
ICAgQ29sb3JQaWNrZXJSZXN1bHRMaXN0ZW5lciwKLSAgICAgICAgQ29udGVudEV4dGVuc2lvbiwK
LSAgICAgICAgQ29udGVudEV4dGVuc2lvblN0b3JlLAorICAgICAgICBDb250ZW50UnVsZUxpc3Qs
CisgICAgICAgIENvbnRlbnRSdWxlTGlzdFN0b3JlLAogICAgICAgICBDb250ZXh0TWVudUxpc3Rl
bmVyLAogICAgICAgICBDb29raWVNYW5hZ2VyLAogICAgICAgICBEb3dubG9hZCwKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvV2ViS2l0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9XZWJLaXQuaAkocmV2aXNpb24gMjE2NTM5KQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9XZWJLaXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsOCArMjUsOCBAQAogCiAjaW1wb3J0IDxXZWJLaXQvV0tCYWNrRm9yd2FyZExpc3Qu
aD4KICNpbXBvcnQgPFdlYktpdC9XS0JhY2tGb3J3YXJkTGlzdEl0ZW0uaD4KLSNpbXBvcnQgPFdl
YktpdC9XS0NvbnRlbnRFeHRlbnNpb24uaD4KLSNpbXBvcnQgPFdlYktpdC9XS0NvbnRlbnRFeHRl
bnNpb25TdG9yZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLQ29udGVudFJ1bGVMaXN0Lmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tDb250ZW50UnVsZUxpc3RTdG9yZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
RXJyb3IuaD4KICNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFdlYktp
dC9XS0ZyYW1lSW5mby5oPgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLRGVw
cmVjYXRlZEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L0FQSS9jL1dLRGVwcmVjYXRlZEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0RlcHJlY2F0ZWRGdW5jdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lu
Y2x1ZGUgIkFQSUNvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJBUElDb250ZW50UnVsZUxp
c3QuaCIKICNpbmNsdWRlICJBUElEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0Lmgi
CiAjaW5jbHVkZSAiV0tBcnJheS5oIgpAQCAtNjAsNyArNjAsNyBAQCBXS1N0cmluZ1JlZiBXS1Bh
Z2VHcm91cENvcHlJZGVudGlmaWVyKFdLCiB2b2lkIFdLUGFnZUdyb3VwQWRkVXNlckNvbnRlbnRG
aWx0ZXIoV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS1VzZXJDb250ZW50RmlsdGVyUmVm
IGNvbnRlbnRGaWx0ZXJSZWYpCiB7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAg
ICB0b0ltcGwocGFnZUdyb3VwUmVmKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkQ29udGVu
dEV4dGVuc2lvbigqdG9JbXBsKGNvbnRlbnRGaWx0ZXJSZWYpKTsKKyAgICB0b0ltcGwocGFnZUdy
b3VwUmVmKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkQ29udGVudFJ1bGVMaXN0KCp0b0lt
cGwoY29udGVudEZpbHRlclJlZikpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZUdyb3Vw
UmVmKTsKICAgICBVTlVTRURfUEFSQU0oY29udGVudEZpbHRlclJlZik7CkBAIC03MCw3ICs3MCw3
IEBAIHZvaWQgV0tQYWdlR3JvdXBBZGRVc2VyQ29udGVudEZpbHRlcihXS1AKIHZvaWQgV0tQYWdl
R3JvdXBSZW1vdmVVc2VyQ29udGVudEZpbHRlcihXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYs
IFdLU3RyaW5nUmVmIGNvbnRlbnRGaWx0ZXJOYW1lUmVmKQogewogI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCi0gICAgdG9JbXBsKHBhZ2VHcm91cFJlZiktPnVzZXJDb250ZW50Q29udHJv
bGxlcigpLnJlbW92ZUNvbnRlbnRFeHRlbnNpb24odG9XVEZTdHJpbmcoY29udGVudEZpbHRlck5h
bWVSZWYpKTsKKyAgICB0b0ltcGwocGFnZUdyb3VwUmVmKS0+dXNlckNvbnRlbnRDb250cm9sbGVy
KCkucmVtb3ZlQ29udGVudFJ1bGVMaXN0KHRvV1RGU3RyaW5nKGNvbnRlbnRGaWx0ZXJOYW1lUmVm
KSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdlR3JvdXBSZWYpOwogICAgIFVOVVNFRF9Q
QVJBTShjb250ZW50RmlsdGVyTmFtZVJlZik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29jb2EvQVBJT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b2NvYS9BUElPYmplY3QubW0JKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db2NvYS9BUElPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAK
ICNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckludGVybmFsLmgiCiAjaW1wb3J0
ICJXS0Jyb3dzaW5nQ29udGV4dEdyb3VwSW50ZXJuYWwuaCIKICNpbXBvcnQgIldLQ29ubmVjdGlv
bkludGVybmFsLmgiCi0jaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oIgotI2lt
cG9ydCAiV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tDb250
ZW50UnVsZUxpc3RJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tDb250ZW50UnVsZUxpc3RTdG9yZUlu
dGVybmFsLmgiCiAjaW1wb3J0ICJXS0ZyYW1lSW5mb0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS0hU
VFBDb29raWVTdG9yZUludGVybmFsLmgiCiAjaW1wb3J0ICJXS05TQXJyYXkuaCIKQEAgLTI0Niwx
MiArMjQ2LDEyIEBAIHZvaWQqIE9iamVjdDo6bmV3T2JqZWN0KHNpemVfdCBzaXplLCBUeXAKICAg
ICAgICAgd3JhcHBlciA9IFtXS1VzZXJDb250ZW50Q29udHJvbGxlciBhbGxvY107CiAgICAgICAg
IGJyZWFrOwogCi0gICAgY2FzZSBUeXBlOjpDb250ZW50RXh0ZW5zaW9uOgotICAgICAgICB3cmFw
cGVyID0gW1dLQ29udGVudEV4dGVuc2lvbiBhbGxvY107CisgICAgY2FzZSBUeXBlOjpDb250ZW50
UnVsZUxpc3Q6CisgICAgICAgIHdyYXBwZXIgPSBbV0tDb250ZW50UnVsZUxpc3QgYWxsb2NdOwog
ICAgICAgICBicmVhazsKIAotICAgIGNhc2UgVHlwZTo6Q29udGVudEV4dGVuc2lvblN0b3JlOgot
ICAgICAgICB3cmFwcGVyID0gW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGFsbG9jXTsKKyAgICBj
YXNlIFR5cGU6OkNvbnRlbnRSdWxlTGlzdFN0b3JlOgorICAgICAgICB3cmFwcGVyID0gW1dLQ29u
dGVudFJ1bGVMaXN0U3RvcmUgYWxsb2NdOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVHlw
ZTo6VXNlckNvbnRlbnRXb3JsZDoKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlR3JvdXAuY3BwCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDEwIEBACiAj
aW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCiAKICNpbmNsdWRlICJBUElBcnJheS5oIgotI2luY2x1
ZGUgIkFQSUNvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJBUElDb250ZW50UnVsZUxpc3Qu
aCIKICNpbmNsdWRlICJBUElVc2VyU2NyaXB0LmgiCiAjaW5jbHVkZSAiQVBJVXNlclN0eWxlU2hl
ZXQuaCIKLSNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRl
ICJXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5o
IgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyUHJveHkuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJ
Q29udGVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmNwcAkocmV2aXNpb24gMjE2NTM5KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uLmNwcAkobm9uZXhp
c3RlbnQpCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgotCi0jaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKLQotI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgot
Ci1uYW1lc3BhY2UgQVBJIHsKLQotQ29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVuc2lvbihj
b25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uPiYmIGNvbnRlbnRFeHRlbnNpb24pCi0gICAgOiBtX25hbWUobmFtZSkKLSAgICAsIG1f
Y29tcGlsZWRFeHRlbnNpb24oV1RGTW92ZShjb250ZW50RXh0ZW5zaW9uKSkKLXsKLX0KLQotQ29u
dGVudEV4dGVuc2lvbjo6fkNvbnRlbnRFeHRlbnNpb24oKQotewotfQotCi19IC8vIG5hbWVzcGFj
ZSBBUEkKLQotI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRlbnNpb24uaAko
cmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250
ZW50RXh0ZW5zaW9uLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb247Ci19Ci0KLW5hbWVzcGFjZSBBUEkgewotCi1jbGFzcyBDb250ZW50
RXh0ZW5zaW9uIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpDb250ZW50
RXh0ZW5zaW9uPiB7Ci1wdWJsaWM6Ci0jaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAg
ICBzdGF0aWMgUmVmPENvbnRlbnRFeHRlbnNpb24+IGNyZWF0ZShjb25zdCBXVEY6OlN0cmluZyYg
bmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmIGNvbnRlbnRF
eHRlbnNpb24pCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb250ZW50RXh0
ZW5zaW9uKG5hbWUsIFdURk1vdmUoY29udGVudEV4dGVuc2lvbikpKTsKLSAgICB9Ci0KLSAgICBD
b250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb24+JiYpOwotICAgIHZpcnR1YWwgfkNvbnRlbnRFeHRlbnNp
b24oKTsKLQotICAgIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lOyB9Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24mIGNv
bXBpbGVkRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxlZEV4dGVuc2lvbi5nZXQo
KTsgfQotCi1wcml2YXRlOgotICAgIFdURjo6U3RyaW5nIG1fbmFtZTsKLSAgICBSZWY8V2ViS2l0
OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IG1fY29tcGlsZWRFeHRlbnNpb247Ci0jZW5k
aWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEFQ
SQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9u
U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJ
Q29udGVudEV4dGVuc2lvblN0b3JlLmNwcAkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCShub25leGlz
dGVudCkKQEAgLTEsNTM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCi0KLSNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQotCi0jaW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgotI2lu
Y2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lz
dGVtLmgiCi0jaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCi0jaW5jbHVkZSAiV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uQ29t
cGlsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25FcnJvci5oPgotI2lu
Y2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KLSNpbmNsdWRlIDx3
dGYvcGVyc2lzdGVuY2UvRGVjb2Rlci5oPgotI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9FbmNv
ZGVyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTsKLQotbmFtZXNw
YWNlIEFQSSB7Ci0KLUNvbnRlbnRFeHRlbnNpb25TdG9yZSYgQ29udGVudEV4dGVuc2lvblN0b3Jl
OjpkZWZhdWx0U3RvcmUoKQotewotICAgIHN0YXRpYyBDb250ZW50RXh0ZW5zaW9uU3RvcmUqIGRl
ZmF1bHRTdG9yZSA9IGFkb3B0UmVmKG5ldyBDb250ZW50RXh0ZW5zaW9uU3RvcmUpLmxlYWtSZWYo
KTsKLSAgICByZXR1cm4gKmRlZmF1bHRTdG9yZTsKLX0KLQotUmVmPENvbnRlbnRFeHRlbnNpb25T
dG9yZT4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKGNvbnN0IFdURjo6U3Ry
aW5nJiBzdG9yZVBhdGgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29udGVudEV4dGVu
c2lvblN0b3JlKHN0b3JlUGF0aCkpOwotfQotCi1Db250ZW50RXh0ZW5zaW9uU3RvcmU6OkNvbnRl
bnRFeHRlbnNpb25TdG9yZSgpCi0gICAgOiBDb250ZW50RXh0ZW5zaW9uU3RvcmUoZGVmYXVsdFN0
b3JlUGF0aCgpKQotewotfQotCi1Db250ZW50RXh0ZW5zaW9uU3RvcmU6OkNvbnRlbnRFeHRlbnNp
b25TdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKQotICAgIDogbV9zdG9yZVBhdGgo
c3RvcmVQYXRoKQotICAgICwgbV9jb21waWxlUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIkNvbnRl
bnRFeHRlbnNpb25TdG9yZSBDb21waWxlIFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpDb25jdXJy
ZW50KSkKLSAgICAsIG1fcmVhZFF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJDb250ZW50RXh0ZW5z
aW9uU3RvcmUgUmVhZCBRdWV1ZSIpKQotICAgICwgbV9yZW1vdmVRdWV1ZShXb3JrUXVldWU6OmNy
ZWF0ZSgiQ29udGVudEV4dGVuc2lvblN0b3JlIFJlbW92ZSBRdWV1ZSIpKQotewotICAgIFdlYkNv
cmU6Om1ha2VBbGxEaXJlY3RvcmllcyhzdG9yZVBhdGgpOwotfQotCi1Db250ZW50RXh0ZW5zaW9u
U3RvcmU6On5Db250ZW50RXh0ZW5zaW9uU3RvcmUoKQotewotfQotCi1zdGF0aWMgY29uc3QgU3Ry
aW5nJiBjb25zdHJ1Y3RlZFBhdGhQcmVmaXgoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IHByZWZpeCgiQ29udGVudEV4dGVuc2lvbi0iKTsKLSAgICByZXR1cm4gcHJlZml4
OwotfQotCi1zdGF0aWMgY29uc3QgU3RyaW5nIGNvbnN0cnVjdGVkUGF0aEZpbHRlcigpCi17Ci0g
ICAgcmV0dXJuIG1ha2VTdHJpbmcoY29uc3RydWN0ZWRQYXRoUHJlZml4KCksICcqJyk7Ci19Ci0K
LXN0YXRpYyBTdHJpbmcgY29uc3RydWN0ZWRQYXRoKGNvbnN0IFN0cmluZyYgYmFzZSwgY29uc3Qg
U3RyaW5nJiBpZGVudGlmaWVyKQotewotICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoYmFzZSwgbWFrZVN0cmluZyhjb25zdHJ1Y3RlZFBhdGhQcmVmaXgoKSwgV2Vi
Q29yZTo6ZW5jb2RlRm9yRmlsZU5hbWUoaWRlbnRpZmllcikpKTsKLX0KLQotLy8gVGhlIHNpemUg
YW5kIG9mZnNldCBvZiB0aGUgZGVuc2VseSBwYWNrZWQgYnl0ZXMgaW4gdGhlIGZpbGUsIG5vdCBz
aXplb2YgYW5kIG9mZnNldG9mLCB3aGljaCB3b3VsZAotLy8gcmVwcmVzZW50IHRoZSBzaXplIGFu
ZCBvZmZzZXQgb2YgdGhlIHN0cnVjdHVyZSBpbiBtZW1vcnksIHBvc3NpYmx5IHdpdGggY29tcGls
ZXItYWRkZWQgcGFkZGluZy4KLWNvbnN0IHNpemVfdCBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRl
clNpemUgPSAyICogc2l6ZW9mKHVpbnQzMl90KSArIDUgKiBzaXplb2YodWludDY0X3QpOwotY29u
c3Qgc2l6ZV90IENvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbk9mZnNldCA9IHNpemVvZih1aW50
MzJfdCkgKyA1ICogc2l6ZW9mKHVpbnQ2NF90KTsKLQotc3RydWN0IENvbnRlbnRFeHRlbnNpb25N
ZXRhRGF0YSB7Ci0gICAgdWludDMyX3QgdmVyc2lvbiB7IENvbnRlbnRFeHRlbnNpb25TdG9yZTo6
Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbiB9OwotICAgIHVpbnQ2NF90IHNvdXJj
ZVNpemUgeyAwIH07Ci0gICAgdWludDY0X3QgYWN0aW9uc1NpemUgeyAwIH07Ci0gICAgdWludDY0
X3QgZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplIHsgMCB9OwotICAgIHVpbnQ2
NF90IGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZSB7IDAgfTsKLSAgICB1aW50NjRf
dCBjb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUgeyAwIH07Ci0gICAgdWludDMyX3QgY29u
ZGl0aW9uc0FwcGx5T25seVRvRG9tYWluIHsgZmFsc2UgfTsKLSAgICAKLSAgICBzaXplX3QgZmls
ZVNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25GaWxl
SGVhZGVyU2l6ZQotICAgICAgICAgICAgKyBzb3VyY2VTaXplCi0gICAgICAgICAgICArIGFjdGlv
bnNTaXplCi0gICAgICAgICAgICArIGZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6
ZQotICAgICAgICAgICAgKyBmaWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUKLSAgICAg
ICAgICAgICsgY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplOwotICAgIH0KLX07Ci0KLXN0
YXRpYyBEYXRhIGVuY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShjb25zdCBDb250ZW50RXh0
ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhKQotewotICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXIgZW5jb2RlcjsKLQotICAgIGVuY29kZXIgPDwgbWV0YURhdGEudmVyc2lvbjsKLSAgICBlbmNv
ZGVyIDw8IG1ldGFEYXRhLnNvdXJjZVNpemU7Ci0gICAgZW5jb2RlciA8PCBtZXRhRGF0YS5hY3Rp
b25zU2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9u
c0J5dGVjb2RlU2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0
aW9uc0J5dGVjb2RlU2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbmVkRmls
dGVyc0J5dGVjb2RlU2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBs
eU9ubHlUb0RvbWFpbjsKLQotICAgIEFTU0VSVChlbmNvZGVyLmJ1ZmZlclNpemUoKSA9PSBDb250
ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUpOwotICAgIHJldHVybiBEYXRhKGVuY29kZXIuYnVm
ZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKLX0KLQotc3RhdGljIGJvb2wgZGVjb2RlQ29u
dGVudEV4dGVuc2lvbk1ldGFEYXRhKENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEs
IGNvbnN0IERhdGEmIGZpbGVEYXRhKQotewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAg
IGZpbGVEYXRhLmFwcGx5KFsmbWV0YURhdGEsICZzdWNjZXNzLCAmZmlsZURhdGFdKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gICAgICAgIC8vIFRoZSBmaWxlIGRhdGEgc2hv
dWxkIGJlIG1hcHBlZCBpbnRvIG9uZSBjb250aW51b3VzIG1lbW9yeSBzZWdtZW50IHNvIHRoZSBz
aXplCi0gICAgICAgIC8vIHBhc3NlZCB0byB0aGUgYXBwbGllciBzaG91bGQgYWx3YXlzIGVxdWFs
IHRoZSBkYXRhIHNpemUuCi0gICAgICAgIGlmIChzaXplICE9IGZpbGVEYXRhLnNpemUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNv
ZGVyIGRlY29kZXIoZGF0YSwgc2l6ZSk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0
YURhdGEudmVyc2lvbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuc291cmNlU2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuYWN0aW9uc1NpemUp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEu
ZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5jb25kaXRpb25lZEZp
bHRlcnNCeXRlY29kZVNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbikp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLXN0
YXRpYyBib29sIG9wZW5BbmRNYXBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgcGF0aCwg
Q29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSwgRGF0YSYgZmlsZURhdGEpCi17Ci0g
ICAgZmlsZURhdGEgPSBtYXBGaWxlKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoKS5kYXRhKCkpOwotICAgIGlmIChmaWxlRGF0YS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEobWV0YURh
dGEsIGZpbGVEYXRhKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXN0YXRpYyBib29sIHdyaXRlRGF0YVRvRmlsZShjb25zdCBEYXRhJiBmaWxlRGF0YSwg
V2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQotewotICAgIGJvb2wgc3VjY2VzcyA9IHRy
dWU7Ci0gICAgZmlsZURhdGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IHNpemUpIHsKLSAgICAgICAgaWYgKFdlYkNvcmU6OndyaXRlVG9GaWxlKGZkLCAo
Y29uc3QgY2hhciopZGF0YSwgc2l6ZSkgPT0gLTEpIHsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9KTsKLSAgICAKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotc3RhdGlj
IHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRvRmlsZShTdHJpbmcmJiBqc29uLCBjb25zdCBTdHJp
bmcmIGZpbmFsRmlsZVBhdGgsIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIERh
dGEmIG1hcHBlZERhdGEpCi17Ci0gICAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOwotCi0gICAgY2xhc3MgQ29tcGlsYXRpb25DbGllbnQgZmluYWwgOiBwdWJsaWMg
Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IENvbXBpbGF0aW9uQ2xpZW50KFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlSGFuZGxl
LCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhKQotICAgICAgICAgICAgOiBtX2Zp
bGVIYW5kbGUoZmlsZUhhbmRsZSkKLSAgICAgICAgICAgICwgbV9tZXRhRGF0YShtZXRhRGF0YSkK
LSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5zb3VyY2VTaXplKTsKLSAg
ICAgICAgICAgIEFTU0VSVCghbWV0YURhdGEuYWN0aW9uc1NpemUpOwotICAgICAgICAgICAgQVNT
RVJUKCFtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUpOwotICAg
ICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNp
emUpOwotICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRl
Y29kZVNpemUpOwotICAgICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5jb25kaXRpb25zQXBwbHlP
bmx5VG9Eb21haW4pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHdyaXRlU291
cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSlNPTikgZmluYWwgewotICAgICAgICAgICAgQVNTRVJU
KCFtX2ZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlV3JpdHRlbik7Ci0gICAgICAgICAg
ICBBU1NFUlQoIW1fZmlsdGVyc1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW4pOwotICAgICAg
ICAgICAgQVNTRVJUKCFtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4pOwotICAgICAg
ICAgICAgQVNTRVJUKCFtX2FjdGlvbnNXcml0dGVuKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9z
b3VyY2VXcml0dGVuKTsKLSAgICAgICAgICAgIHdyaXRlVG9GaWxlKHNvdXJjZUpTT04uaXM4Qml0
KCkpOwotICAgICAgICAgICAgbV9zb3VyY2VXcml0dGVuICs9IHNpemVvZihib29sKTsKLSAgICAg
ICAgICAgIGlmIChzb3VyY2VKU09OLmlzOEJpdCgpKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZV90
IHNlcmlhbGl6ZWRMZW5ndGggPSBzb3VyY2VKU09OLmxlbmd0aCgpICogc2l6ZW9mKExDaGFyKTsK
LSAgICAgICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKHNvdXJjZUpTT04uY2hhcmFjdGVyczgo
KSwgc2VyaWFsaXplZExlbmd0aCkpOwotICAgICAgICAgICAgICAgIG1fc291cmNlV3JpdHRlbiAr
PSBzZXJpYWxpemVkTGVuZ3RoOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBzaXplX3Qgc2VyaWFsaXplZExlbmd0aCA9IHNvdXJjZUpTT04ubGVuZ3RoKCkgKiBzaXplb2Yo
VUNoYXIpOwotICAgICAgICAgICAgICAgIHdyaXRlVG9GaWxlKERhdGEocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4oc291cmNlSlNPTi5jaGFyYWN0ZXJzMTYoKSksIHNlcmlhbGl6ZWRM
ZW5ndGgpKTsKLSAgICAgICAgICAgICAgICBtX3NvdXJjZVdyaXR0ZW4gKz0gc2VyaWFsaXplZExl
bmd0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCB3
cml0ZUZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29kZT4m
JiBieXRlY29kZSkgZmluYWwKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFtX2ZpbHRl
cnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9j
b25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuKTsKLSAgICAgICAgICAgIG1fZmlsdGVyc1dp
dGhvdXRDb25kaXRpb25zQnl0ZWNvZGVXcml0dGVuICs9IGJ5dGVjb2RlLnNpemUoKTsKLSAgICAg
ICAgICAgIHdyaXRlVG9GaWxlKERhdGEoYnl0ZWNvZGUuZGF0YSgpLCBieXRlY29kZS5zaXplKCkp
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCB3cml0ZUZpbHRlcnNXaXRoQ29u
ZGl0aW9uc0J5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29kZT4mJiBieXRlY29kZSkgZmluYWwKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFtX2NvbmRpdGlvbkZpbHRlcnNCeXRlY29kZVdy
aXR0ZW4pOwotICAgICAgICAgICAgbV9maWx0ZXJzV2l0aENvbmRpdGlvbkJ5dGVjb2RlV3JpdHRl
biArPSBieXRlY29kZS5zaXplKCk7Ci0gICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKGJ5dGVj
b2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHZvaWQgd3JpdGVUb3BVUkxGaWx0ZXJzQnl0ZWNvZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYm
IGJ5dGVjb2RlKSBmaW5hbAotICAgICAgICB7Ci0gICAgICAgICAgICBtX2NvbmRpdGlvbkZpbHRl
cnNCeXRlY29kZVdyaXR0ZW4gKz0gYnl0ZWNvZGUuc2l6ZSgpOwotICAgICAgICAgICAgd3JpdGVU
b0ZpbGUoRGF0YShieXRlY29kZS5kYXRhKCksIGJ5dGVjb2RlLnNpemUoKSkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCB3cml0ZUFjdGlvbnMoVmVjdG9yPFNlcmlhbGl6ZWRBY3Rpb25CeXRl
PiYmIGFjdGlvbnMsIGJvb2wgY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluKSBmaW5hbAotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0
ZWNvZGVXcml0dGVuKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9maWx0ZXJzV2l0aENvbmRpdGlv
bkJ5dGVjb2RlV3JpdHRlbik7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fY29uZGl0aW9uRmlsdGVy
c0J5dGVjb2RlV3JpdHRlbik7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fYWN0aW9uc1dyaXR0ZW4p
OwotICAgICAgICAgICAgbV9hY3Rpb25zV3JpdHRlbiArPSBhY3Rpb25zLnNpemUoKTsKLSAgICAg
ICAgICAgIG1fY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluID0gY29uZGl0aW9uc0FwcGx5T25s
eVRvRG9tYWluOwotICAgICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0YShhY3Rpb25zLmRhdGEoKSwg
YWN0aW9ucy5zaXplKCkpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBmaW5h
bGl6ZSgpIGZpbmFsCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fbWV0YURhdGEuc291cmNlU2l6
ZSA9IG1fc291cmNlV3JpdHRlbjsKLSAgICAgICAgICAgIG1fbWV0YURhdGEuYWN0aW9uc1NpemUg
PSBtX2FjdGlvbnNXcml0dGVuOwotICAgICAgICAgICAgbV9tZXRhRGF0YS5maWx0ZXJzV2l0aG91
dENvbmRpdGlvbnNCeXRlY29kZVNpemUgPSBtX2ZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVj
b2RlV3JpdHRlbjsKLSAgICAgICAgICAgIG1fbWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25z
Qnl0ZWNvZGVTaXplID0gbV9maWx0ZXJzV2l0aENvbmRpdGlvbkJ5dGVjb2RlV3JpdHRlbjsKLSAg
ICAgICAgICAgIG1fbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplID0gbV9j
b25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuOwotICAgICAgICAgICAgbV9tZXRhRGF0YS5j
b25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4gPSBtX2NvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFp
bjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgRGF0YSBoZWFkZXIgPSBlbmNvZGVDb250ZW50
RXh0ZW5zaW9uTWV0YURhdGEobV9tZXRhRGF0YSk7Ci0gICAgICAgICAgICBpZiAoIW1fZmlsZUVy
cm9yICYmIFdlYkNvcmU6OnNlZWtGaWxlKG1fZmlsZUhhbmRsZSwgMGxsLCBXZWJDb3JlOjpGaWxl
U2Vla09yaWdpbjo6U2Vla0Zyb21CZWdpbm5pbmcpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAg
V2ViQ29yZTo6Y2xvc2VGaWxlKG1fZmlsZUhhbmRsZSk7Ci0gICAgICAgICAgICAgICAgbV9maWxl
RXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd3JpdGVUb0ZpbGUoaGVh
ZGVyKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBoYWRFcnJvcldoaWxlV3Jp
dGluZ1RvRmlsZSgpIHsgcmV0dXJuIG1fZmlsZUVycm9yOyB9Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICB2b2lkIHdyaXRlVG9GaWxlKGJvb2wgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHdyaXRlVG9GaWxlKERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJnZhbHVl
KSwgc2l6ZW9mKHZhbHVlKSkpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgd3JpdGVUb0ZpbGUo
Y29uc3QgRGF0YSYgZGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2ZpbGVFcnJv
ciAmJiAhd3JpdGVEYXRhVG9GaWxlKGRhdGEsIG1fZmlsZUhhbmRsZSkpIHsKLSAgICAgICAgICAg
ICAgICBXZWJDb3JlOjpjbG9zZUZpbGUobV9maWxlSGFuZGxlKTsKLSAgICAgICAgICAgICAgICBt
X2ZpbGVFcnJvciA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZpbGVIYW5kbGU7Ci0gICAgICAg
IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbV9tZXRhRGF0YTsKLSAgICAgICAgc2l6ZV90IG1f
ZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVXcml0dGVuIHsgMCB9OwotICAgICAgICBz
aXplX3QgbV9maWx0ZXJzV2l0aENvbmRpdGlvbkJ5dGVjb2RlV3JpdHRlbiB7IDAgfTsKLSAgICAg
ICAgc2l6ZV90IG1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbiB7IDAgfTsKLSAgICAg
ICAgc2l6ZV90IG1fYWN0aW9uc1dyaXR0ZW4geyAwIH07Ci0gICAgICAgIHNpemVfdCBtX3NvdXJj
ZVdyaXR0ZW4geyAwIH07Ci0gICAgICAgIGJvb2wgbV9jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21h
aW4geyBmYWxzZSB9OwotICAgICAgICBib29sIG1fZmlsZUVycm9yIHsgZmFsc2UgfTsKLSAgICB9
OwotCi0gICAgYXV0byB0ZW1wb3JhcnlGaWxlSGFuZGxlID0gV2ViQ29yZTo6aW52YWxpZFBsYXRm
b3JtRmlsZUhhbmRsZTsKLSAgICBTdHJpbmcgdGVtcG9yYXJ5RmlsZVBhdGggPSBXZWJDb3JlOjpv
cGVuVGVtcG9yYXJ5RmlsZSgiQ29udGVudEV4dGVuc2lvbiIsIHRlbXBvcmFyeUZpbGVIYW5kbGUp
OwotICAgIGlmICh0ZW1wb3JhcnlGaWxlSGFuZGxlID09IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9y
bUZpbGVIYW5kbGUpCi0gICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9y
OjpDb21waWxlRmFpbGVkOwotICAgIAotICAgIGNoYXIgaW52YWxpZEhlYWRlcltDb250ZW50RXh0
ZW5zaW9uRmlsZUhlYWRlclNpemVdOwotICAgIG1lbXNldChpbnZhbGlkSGVhZGVyLCAweEZGLCBz
aXplb2YoaW52YWxpZEhlYWRlcikpOwotICAgIC8vIFRoaXMgaGVhZGVyIHdpbGwgYmUgcmV3cml0
dGVuIGluIENvbXBpbGF0aW9uQ2xpZW50OjpmaW5hbGl6ZS4KLSAgICBpZiAoV2ViQ29yZTo6d3Jp
dGVUb0ZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSwgaW52YWxpZEhlYWRlciwgc2l6ZW9mKGludmFs
aWRIZWFkZXIpKSA9PSAtMSkgewotICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5
RmlsZUhhbmRsZSk7Ci0gICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9y
OjpDb21waWxlRmFpbGVkOwotICAgIH0KLQotICAgIENvbXBpbGF0aW9uQ2xpZW50IGNvbXBpbGF0
aW9uQ2xpZW50KHRlbXBvcmFyeUZpbGVIYW5kbGUsIG1ldGFEYXRhKTsKLSAgICAKLSAgICBpZiAo
YXV0byBjb21waWxlckVycm9yID0gY29tcGlsZVJ1bGVMaXN0KGNvbXBpbGF0aW9uQ2xpZW50LCBX
VEZNb3ZlKGpzb24pKSkgewotICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5Rmls
ZUhhbmRsZSk7Ci0gICAgICAgIHJldHVybiBjb21waWxlckVycm9yOwotICAgIH0KLSAgICBpZiAo
Y29tcGlsYXRpb25DbGllbnQuaGFkRXJyb3JXaGlsZVdyaXRpbmdUb0ZpbGUoKSkgewotICAgICAg
ICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7Ci0gICAgICAgIHJldHVy
biBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOwotICAgIH0KLSAg
ICAKLSAgICBtYXBwZWREYXRhID0gYWRvcHRBbmRNYXBGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUs
IDAsIG1ldGFEYXRhLmZpbGVTaXplKCkpOwotICAgIGlmIChtYXBwZWREYXRhLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxl
ZDsKLQotICAgIGlmICghV2ViQ29yZTo6bW92ZUZpbGUodGVtcG9yYXJ5RmlsZVBhdGgsIGZpbmFs
RmlsZVBhdGgpKQotICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6
Q29tcGlsZUZhaWxlZDsKLQotICAgIHJldHVybiB7IH07Ci19Ci0KLXN0YXRpYyBSZWY8QVBJOjpD
b250ZW50RXh0ZW5zaW9uPiBjcmVhdGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCBjb25zdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBm
aWxlRGF0YSkKLXsKLSAgICBhdXRvIHNoYXJlZE1lbW9yeSA9IFdlYktpdDo6U2hhcmVkTWVtb3J5
OjpjcmVhdGUoY29uc3RfY2FzdDx1aW50OF90Kj4oZmlsZURhdGEuZGF0YSgpKSwgZmlsZURhdGEu
c2l6ZSgpLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotICAg
IGNvbnN0IHNpemVfdCBoZWFkZXJBbmRTb3VyY2VTaXplID0gQ29udGVudEV4dGVuc2lvbkZpbGVI
ZWFkZXJTaXplICsgbWV0YURhdGEuc291cmNlU2l6ZTsKLSAgICBhdXRvIGNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbkRhdGEgPSBXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEo
Ci0gICAgICAgIFdURk1vdmUoc2hhcmVkTWVtb3J5KSwKLSAgICAgICAgZmlsZURhdGEsCi0gICAg
ICAgIENvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbk9mZnNldCwKLSAgICAgICAgaGVhZGVyQW5k
U291cmNlU2l6ZSwKLSAgICAgICAgbWV0YURhdGEuYWN0aW9uc1NpemUsCi0gICAgICAgIGhlYWRl
ckFuZFNvdXJjZVNpemUKLSAgICAgICAgICAgICsgbWV0YURhdGEuYWN0aW9uc1NpemUsCi0gICAg
ICAgIG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSwKLSAgICAg
ICAgaGVhZGVyQW5kU291cmNlU2l6ZQotICAgICAgICAgICAgKyBtZXRhRGF0YS5hY3Rpb25zU2l6
ZQotICAgICAgICAgICAgKyBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29k
ZVNpemUsCi0gICAgICAgIG1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6
ZSwKLSAgICAgICAgaGVhZGVyQW5kU291cmNlU2l6ZQotICAgICAgICAgICAgKyBtZXRhRGF0YS5h
Y3Rpb25zU2l6ZQotICAgICAgICAgICAgKyBtZXRhRGF0YS5maWx0ZXJzV2l0aG91dENvbmRpdGlv
bnNCeXRlY29kZVNpemUKLSAgICAgICAgICAgICsgbWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRp
b25zQnl0ZWNvZGVTaXplLAotICAgICAgICBtZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRl
Y29kZVNpemUKLSAgICApOwotICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0gV2Vi
S2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEZNb3ZlKGNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEpKTsKLSAgICByZXR1cm4gQVBJOjpDb250ZW50RXh0ZW5zaW9u
OjpjcmVhdGUoaWRlbnRpZmllciwgV1RGTW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb24pKTsK
LX0KLQotdm9pZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6Omxvb2t1cENvbnRlbnRFeHRlbnNpb24o
Y29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6
Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIG1fcmVhZFF1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBpZGVudGlmaWVyID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0g
bV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0
cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50aWZpZXIpOwotICAgICAgICAKLSAgICAgICAgQ29u
dGVudEV4dGVuc2lvbk1ldGFEYXRhIG1ldGFEYXRhOwotICAgICAgICBEYXRhIGZpbGVEYXRhOwot
ICAgICAgICBpZiAoIW9wZW5BbmRNYXBDb250ZW50RXh0ZW5zaW9uKHBhdGgsIG1ldGFEYXRhLCBm
aWxlRGF0YSkpIHsKLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVj
dGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihudWxscHRyLCBFcnJvcjo6TG9va3VwRmFpbGVkKTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobWV0YURh
dGEudmVyc2lvbiAhPSBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkN1cnJlbnRDb250ZW50RXh0ZW5z
aW9uRmlsZVZlcnNpb24pIHsKLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
cHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihudWxscHRyLCBFcnJvcjo6VmVyc2lvbk1pc21hdGNoKTsKLSAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3Rl
ZFRoaXMpLCBpZGVudGlmaWVyID0gV1RGTW92ZShpZGVudGlmaWVyKSwgZmlsZURhdGEgPSBXVEZN
b3ZlKGZpbGVEYXRhKSwgbWV0YURhdGEgPSBXVEZNb3ZlKG1ldGFEYXRhKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoY3JlYXRlRXh0ZW5zaW9uKGlkZW50aWZpZXIsIG1ldGFEYXRhLCBmaWxlRGF0
YSksIHsgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIENvbnRlbnRFeHRlbnNp
b25TdG9yZTo6Z2V0QXZhaWxhYmxlQ29udGVudEV4dGVuc2lvbklkZW50aWZpZXJzKEZ1bmN0aW9u
PHZvaWQoV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+KT4gY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgbV9yZWFkUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotCi0gICAgICAgIFZl
Y3RvcjxTdHJpbmc+IGZ1bGxQYXRocyA9IFdlYkNvcmU6Omxpc3REaXJlY3Rvcnkoc3RvcmVQYXRo
LCBjb25zdHJ1Y3RlZFBhdGhGaWx0ZXIoKSk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGlkZW50
aWZpZXJzOwotICAgICAgICBpZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZ1bGxQ
YXRocy5zaXplKCkpOwotICAgICAgICBjb25zdCBhdXRvIHByZWZpeExlbmd0aCA9IGNvbnN0cnVj
dGVkUGF0aFByZWZpeCgpLmxlbmd0aCgpOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGgg
OiBmdWxsUGF0aHMpCi0gICAgICAgICAgICBpZGVudGlmaWVycy51bmNoZWNrZWRBcHBlbmQoV2Vi
Q29yZTo6ZGVjb2RlRnJvbUZpbGVuYW1lKHBhdGguc3Vic3RyaW5nKHBhdGgucmV2ZXJzZUZpbmQo
Jy8nKSArIDEgKyBwcmVmaXhMZW5ndGgpKSk7Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgaWRlbnRpZmllcnMgPSBXVEZN
b3ZlKGlkZW50aWZpZXJzKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUoaWRlbnRpZmllcnMpKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgQ29udGVudEV4dGVuc2lvblN0b3JlOjpjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBX
VEY6OlN0cmluZyYgaWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBGdW5jdGlvbjx2b2lk
KFJlZlB0cjxBUEk6OkNvbnRlbnRFeHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0
aW9uSGFuZGxlcikKLXsKLSAgICBBdG9taWNTdHJpbmc6OmluaXQoKTsKLSAgICBtX2NvbXBpbGVR
dWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmll
ciA9IGlkZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIGpzb24gPSBqc29uLmlzb2xhdGVkQ29weSgp
LCBzdG9yZVBhdGggPSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1
dG8gcGF0aCA9IGNvbnN0cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50aWZpZXIpOwotCi0gICAg
ICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBtZXRhRGF0YTsKLSAgICAgICAgRGF0YSBmaWxl
RGF0YTsKLSAgICAgICAgYXV0byBlcnJvciA9IGNvbXBpbGVkVG9GaWxlKFdURk1vdmUoanNvbiks
IHBhdGgsIG1ldGFEYXRhLCBmaWxlRGF0YSk7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShw
cm90ZWN0ZWRUaGlzKSwgZXJyb3IgPSBXVEZNb3ZlKGVycm9yKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKG51bGxwdHIsIGVycm9yKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtw
cm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgaWRlbnRpZmllciA9IFdURk1v
dmUoaWRlbnRpZmllciksIGZpbGVEYXRhID0gV1RGTW92ZShmaWxlRGF0YSksIG1ldGFEYXRhID0g
V1RGTW92ZShtZXRhRGF0YSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildIHsKLSAgICAgICAgICAgIFJlZlB0cjxBUEk6OkNvbnRlbnRFeHRlbnNpb24+IGNv
bnRlbnRFeHRlbnNpb24gPSBjcmVhdGVFeHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURhdGEsIGZp
bGVEYXRhKTsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbnRlbnRFeHRlbnNpb24s
IHsgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIENvbnRlbnRFeHRlbnNpb25T
dG9yZTo6cmVtb3ZlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmll
ciwgRnVuY3Rpb248dm9pZChzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBtX3JlbW92ZVF1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBpZGVudGlmaWVyID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0g
bV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0
cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50aWZpZXIpOwotCi0gICAgICAgIGlmICghV2ViQ29y
ZTo6ZGVsZXRlRmlsZShwYXRoKSkgewotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gewotICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKEVycm9yOjpSZW1vdmVGYWlsZWQpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7Ci0gICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcih7IH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBD
b250ZW50RXh0ZW5zaW9uU3RvcmU6OnN5bmNocm9ub3VzUmVtb3ZlQWxsQ29udGVudEV4dGVuc2lv
bnMoKQotewotICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6IFdlYkNvcmU6Omxpc3REaXJlY3Rv
cnkobV9zdG9yZVBhdGgsICIqIikpCi0gICAgICAgIFdlYkNvcmU6OmRlbGV0ZUZpbGUocGF0aCk7
Ci19Ci0KLXZvaWQgQ29udGVudEV4dGVuc2lvblN0b3JlOjppbnZhbGlkYXRlQ29udGVudEV4dGVu
c2lvblZlcnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIpCi17Ci0gICAgYXV0byBm
aWxlID0gV2ViQ29yZTo6b3BlbkZpbGUoY29uc3RydWN0ZWRQYXRoKG1fc3RvcmVQYXRoLCBpZGVu
dGlmaWVyKSwgV2ViQ29yZTo6T3BlbkZvcldyaXRlKTsKLSAgICBpZiAoZmlsZSA9PSBXZWJDb3Jl
OjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQotICAgICAgICByZXR1cm47Ci0gICAgQ29udGVu
dEV4dGVuc2lvbk1ldGFEYXRhIGludmFsaWRIZWFkZXIgPSB7MCwgMCwgMCwgMCwgMCwgMH07Ci0g
ICAgYXV0byBieXRlc1dyaXR0ZW4gPSBXZWJDb3JlOjp3cml0ZVRvRmlsZShmaWxlLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPigmaW52YWxpZEhlYWRlciksIHNpemVvZihpbnZhbGlkSGVh
ZGVyKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChieXRlc1dyaXR0ZW4sIGJ5dGVzV3JpdHRlbiA9PSBz
aXplb2YoaW52YWxpZEhlYWRlcikpOwotICAgIFdlYkNvcmU6OmNsb3NlRmlsZShmaWxlKTsKLX0K
LQotdm9pZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmdldENvbnRlbnRFeHRlbnNpb25Tb3VyY2Uo
Y29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoV1RGOjpTdHJpbmcp
PiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBtX3JlYWRRdWV1ZS0+ZGlzcGF0Y2goW3Byb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuaXNvbGF0
ZWRDb3B5KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAg
ICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyKTsK
LSAgICAgICAgCi0gICAgICAgIGF1dG8gY29tcGxldGUgPSBbcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKFN0cmluZyBzb3VyY2UpIG11dGFibGUgewotICAgICAgICAgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc291cmNlID0g
c291cmNlLmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoc291cmNlKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9OwotICAgICAgICAKLSAgICAg
ICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIG1ldGFEYXRhOwotICAgICAgICBEYXRhIGZpbGVE
YXRhOwotICAgICAgICBpZiAoIW9wZW5BbmRNYXBDb250ZW50RXh0ZW5zaW9uKHBhdGgsIG1ldGFE
YXRhLCBmaWxlRGF0YSkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRlKHsgfSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobWV0YURhdGEu
dmVyc2lvbikgewotICAgICAgICBjYXNlIDk6Ci0gICAgICAgICAgICBpZiAoIW1ldGFEYXRhLnNv
dXJjZVNpemUpIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0ZSh7IH0pOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJvb2wgaXM4Qml0ID0gZmls
ZURhdGEuZGF0YSgpW0NvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZV07Ci0gICAgICAgICAg
ICBzaXplX3Qgc3RhcnQgPSBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUgKyBzaXplb2Yo
Ym9vbCk7Ci0gICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0gbWV0YURhdGEuc291cmNlU2l6ZSAt
IHNpemVvZihib29sKTsKLSAgICAgICAgICAgIGlmIChpczhCaXQpCi0gICAgICAgICAgICAgICAg
Y29tcGxldGUoU3RyaW5nKGZpbGVEYXRhLmRhdGEoKSArIHN0YXJ0LCBsZW5ndGgpKTsKLSAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCghKGxlbmd0aCAlIHNpemVvZihV
Q2hhcikpKTsKLSAgICAgICAgICAgICAgICBjb21wbGV0ZShTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBVQ2hhcio+KGZpbGVEYXRhLmRhdGEoKSArIHN0YXJ0KSwgbGVuZ3RoIC8gc2l6ZW9m
KFVDaGFyKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gT2xkZXIgdmVyc2lvbnMgY2Fubm90IHJlY292ZXIgdGhlIG9yaWdpbmFs
IEpTT04gc291cmNlIGZyb20gZGlzay4KLSAgICAgICAgY29tcGxldGUoeyB9KTsKLSAgICB9KTsK
LX0KLQotY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVuc2lvblN0b3JlRXJy
b3JDYXRlZ29yeSgpCi17Ci0gICAgY2xhc3MgQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRl
Z29yeSA6IHB1YmxpYyBzdGQ6OmVycm9yX2NhdGVnb3J5IHsKLSAgICAgICAgY29uc3QgY2hhciog
bmFtZSgpIGNvbnN0IG5vZXhjZXB0IGZpbmFsCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAiY29udGVudCBleHRlbnNpb24gc3RvcmUiOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjpz
dHJpbmcgbWVzc2FnZShpbnQgZXJyb3JDb2RlKSBjb25zdCBmaW5hbAotICAgICAgICB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+
KGVycm9yQ29kZSkpIHsKLSAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvblN0b3JlOjpF
cnJvcjo6TG9va3VwRmFpbGVkOgotICAgICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQg
ZXJyb3IgZHVyaW5nIGxvb2t1cC4iOwotICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9u
U3RvcmU6OkVycm9yOjpWZXJzaW9uTWlzbWF0Y2g6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJW
ZXJzaW9uIG9mIGZpbGUgZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiBvZiBpbnRlcnByZXRlci4iOwot
ICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFp
bGVkOgotICAgICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIGNv
bXBpbGUuIjsKLSAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6
UmVtb3ZlRmFpbGVkOgotICAgICAgICAgICAgICAgIHJldHVybiAiVW5zcGVjaWZpZWQgZXJyb3Ig
ZHVyaW5nIHJlbW92ZS4iOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gc3Rk
OjpzdHJpbmcoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Q29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeT4gY29udGVudEV4dGVuc2lvbkVy
cm9yQ2F0ZWdvcnk7Ci0gICAgcmV0dXJuIGNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5Owot
fQotCi19IC8vIG5hbWVzcGFjZSBBUEkKLQotI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRFeHRl
bnNpb25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
QVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgJKG5vbmV4aXN0
ZW50KQpAQCAtMSw5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5j
bHVkZSA8c3lzdGVtX2Vycm9yPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgV1RGIHsKLWNsYXNzIFdvcmtRdWV1ZTsKLX0KLQotbmFtZXNwYWNlIEFQSSB7Ci0K
LWNsYXNzIENvbnRlbnRFeHRlbnNpb247Ci0KLWNsYXNzIENvbnRlbnRFeHRlbnNpb25TdG9yZSBm
aW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6VHlwZTo6Q29udGVudEV4dGVuc2lvblN0
b3JlPiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBFcnJvciB7Ci0gICAgICAgIExvb2t1cEZh
aWxlZCA9IDEsCi0gICAgICAgIFZlcnNpb25NaXNtYXRjaCwKLSAgICAgICAgQ29tcGlsZUZhaWxl
ZCwKLSAgICAgICAgUmVtb3ZlRmFpbGVkCi0gICAgfTsKLSAgICAKLSAgICAvLyBUaGlzIHNob3Vs
ZCBiZSBpbmNyZW1lbnRlZCBldmVyeSB0aW1lIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgbWFkZSB0
byB0aGUgYnl0ZWNvZGUsIGZpbGUgZm9ybWF0LCBldGMuCi0gICAgLy8gdG8gcHJldmVudCBjcmFz
aGluZyB3aGlsZSBsb2FkaW5nIG9sZCBkYXRhLgotICAgIC8vIEFsc28gdXBkYXRlIENvbnRlbnRF
eHRlbnNpb25TdG9yZTo6Z2V0Q29udGVudEV4dGVuc2lvblNvdXJjZSB0byBiZSBhYmxlIHRvIGZp
bmQgdGhlIG9yaWdpbmFsIEpTT04KLSAgICAvLyBzb3VyY2UgZnJvbSBvbGQgdmVyc2lvbnMuCi0g
ICAgY29uc3Qgc3RhdGljIHVpbnQzMl90IEN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNp
b24gPSA5OwotCi0gICAgc3RhdGljIENvbnRlbnRFeHRlbnNpb25TdG9yZSYgZGVmYXVsdFN0b3Jl
KCk7Ci0gICAgc3RhdGljIFJlZjxDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3JlV2l0aFBhdGgo
Y29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7Ci0KLSAgICBleHBsaWNpdCBDb250ZW50RXh0
ZW5zaW9uU3RvcmUoKTsKLSAgICBleHBsaWNpdCBDb250ZW50RXh0ZW5zaW9uU3RvcmUoY29uc3Qg
V1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7Ci0gICAgdmlydHVhbCB+Q29udGVudEV4dGVuc2lvblN0
b3JlKCk7Ci0KLSAgICB2b2lkIGNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3Ry
aW5nJiBpZGVudGlmaWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIEZ1bmN0aW9uPHZvaWQoUmVmUHRy
PEFQSTo6Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKLSAgICB2b2lkIGxv
b2t1cENvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0
aW9uPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+
KTsKLSAgICB2b2lkIHJlbW92ZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlk
ZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoc3RkOjplcnJvcl9jb2RlKT4pOwotICAgIHZvaWQgZ2V0
QXZhaWxhYmxlQ29udGVudEV4dGVuc2lvbklkZW50aWZpZXJzKEZ1bmN0aW9uPHZvaWQoV1RGOjpW
ZWN0b3I8V1RGOjpTdHJpbmc+KT4pOwotCi0gICAgLy8gRm9yIHRlc3Rpbmcgb25seS4KLSAgICB2
b2lkIHN5bmNocm9ub3VzUmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKLSAgICB2b2lkIGlu
dmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRp
Zmllcik7Ci0gICAgdm9pZCBnZXRDb250ZW50RXh0ZW5zaW9uU291cmNlKGNvbnN0IFdURjo6U3Ry
aW5nJiBpZGVudGlmaWVyLCBGdW5jdGlvbjx2b2lkKFdURjo6U3RyaW5nKT4pOwotCi1wcml2YXRl
OgotICAgIFdURjo6U3RyaW5nIGRlZmF1bHRTdG9yZVBhdGgoKTsKLQotICAgIGNvbnN0IFdURjo6
U3RyaW5nIG1fc3RvcmVQYXRoOwotICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9jb21waWxlUXVl
dWU7Ci0gICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX3JlYWRRdWV1ZTsKLSAgICBSZWY8V1RGOjpX
b3JrUXVldWU+IG1fcmVtb3ZlUXVldWU7Ci19OwotCi1jb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5
JiBjb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5KCk7Ci0KLWlubGluZSBzdGQ6OmVy
cm9yX2NvZGUgbWFrZV9lcnJvcl9jb2RlKENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3IgZXJy
b3IpCi17Ci0gICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8aW50PihlcnJvciksIGNvbnRlbnRFeHRl
bnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKSB9OwotfQotCi19IC8vIG5hbWVzcGFjZSBBUEkKLQot
bmFtZXNwYWNlIHN0ZCB7Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19lcnJvcl9jb2RlX2VudW08QVBJ
OjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPiA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9Owot
fQotCi0jZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdC5jcHAJKHJl
dmlzaW9uIDIxNjUzOSkJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250
ZW50RXh0ZW5zaW9uLmNwcDoyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSUNvbnRlbnRSdWxlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBUElDb250ZW50RXh0
ZW5zaW9uLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAi
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCisKK25hbWVzcGFjZSBBUEkgeworCitDb250
ZW50RXh0ZW5zaW9uOjpDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBS
ZWY8V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+JiYgY29udGVudEV4dGVuc2lv
bikKKyAgICA6IG1fbmFtZShuYW1lKQorICAgICwgbV9jb21waWxlZEV4dGVuc2lvbihXVEZNb3Zl
KGNvbnRlbnRFeHRlbnNpb24pKQoreworfQorCitDb250ZW50RXh0ZW5zaW9uOjp+Q29udGVudEV4
dGVuc2lvbigpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEFQSQorCisjZW5kaWYgLy8gRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
QVBJQ29udGVudFJ1bGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdC5jcHAJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsMjEgKzI0LDIxIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkFQSUNvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJBUElDb250ZW50UnVs
ZUxpc3QuaCIKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKLSNpbmNsdWRlICJX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJXZWJDb21waWxlZENvbnRl
bnRSdWxlTGlzdC5oIgogCiBuYW1lc3BhY2UgQVBJIHsKIAotQ29udGVudEV4dGVuc2lvbjo6Q29u
dGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmIGNvbnRlbnRFeHRlbnNpb24pCitDb250ZW50UnVsZUxp
c3Q6OkNvbnRlbnRSdWxlTGlzdChjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6
V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q+JiYgY29udGVudFJ1bGVMaXN0KQogICAgIDogbV9u
YW1lKG5hbWUpCi0gICAgLCBtX2NvbXBpbGVkRXh0ZW5zaW9uKFdURk1vdmUoY29udGVudEV4dGVu
c2lvbikpCisgICAgLCBtX2NvbXBpbGVkUnVsZUxpc3QoV1RGTW92ZShjb250ZW50UnVsZUxpc3Qp
KQogewogfQogCi1Db250ZW50RXh0ZW5zaW9uOjp+Q29udGVudEV4dGVuc2lvbigpCitDb250ZW50
UnVsZUxpc3Q6On5Db250ZW50UnVsZUxpc3QoKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0LmgJKHJldmlzaW9uIDIx
NjUzOSkJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50RXh0ZW5z
aW9uLmg6MjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50
UnVsZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb247Cit9CisKK25hbWVzcGFjZSBBUEkgeworCitjbGFzcyBDb250ZW50RXh0
ZW5zaW9uIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpDb250ZW50RXh0
ZW5zaW9uPiB7CitwdWJsaWM6CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKyAgICBz
dGF0aWMgUmVmPENvbnRlbnRFeHRlbnNpb24+IGNyZWF0ZShjb25zdCBXVEY6OlN0cmluZyYgbmFt
ZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmIGNvbnRlbnRFeHRl
bnNpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb250ZW50RXh0ZW5z
aW9uKG5hbWUsIFdURk1vdmUoY29udGVudEV4dGVuc2lvbikpKTsKKyAgICB9CisKKyAgICBDb250
ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb24+JiYpOworICAgIHZpcnR1YWwgfkNvbnRlbnRFeHRlbnNpb24o
KTsKKworICAgIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1l
OyB9CisgICAgY29uc3QgV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24mIGNvbXBp
bGVkRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxlZEV4dGVuc2lvbi5nZXQoKTsg
fQorCitwcml2YXRlOgorICAgIFdURjo6U3RyaW5nIG1fbmFtZTsKKyAgICBSZWY8V2ViS2l0OjpX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IG1fY29tcGlsZWRFeHRlbnNpb247CisjZW5kaWYg
Ly8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKK307CisKK30gLy8gbmFtZXNwYWNlIEFQSQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxl
TGlzdC5oCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSUNvbnRlbnRSdWxlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyOCArMjksMjggQEAK
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1j
bGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb247CitjbGFzcyBXZWJDb21waWxlZENvbnRl
bnRSdWxlTGlzdDsKIH0KIAogbmFtZXNwYWNlIEFQSSB7CiAKLWNsYXNzIENvbnRlbnRFeHRlbnNp
b24gZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OkNvbnRlbnRFeHRlbnNp
b24+IHsKK2NsYXNzIENvbnRlbnRSdWxlTGlzdCBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9i
amVjdDo6VHlwZTo6Q29udGVudFJ1bGVMaXN0PiB7CiBwdWJsaWM6CiAjaWYgRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKLSAgICBzdGF0aWMgUmVmPENvbnRlbnRFeHRlbnNpb24+IGNyZWF0ZShj
b25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uPiYmIGNvbnRlbnRFeHRlbnNpb24pCisgICAgc3RhdGljIFJlZjxDb250ZW50UnVsZUxp
c3Q+IGNyZWF0ZShjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGls
ZWRDb250ZW50UnVsZUxpc3Q+JiYgY29udGVudFJ1bGVMaXN0KQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQ29udGVudEV4dGVuc2lvbihuYW1lLCBXVEZNb3ZlKGNvbnRlbnRF
eHRlbnNpb24pKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbnRlbnRSdWxlTGlz
dChuYW1lLCBXVEZNb3ZlKGNvbnRlbnRSdWxlTGlzdCkpKTsKICAgICB9CiAKLSAgICBDb250ZW50
RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24+JiYpOwotICAgIHZpcnR1YWwgfkNvbnRlbnRFeHRlbnNpb24oKTsK
KyAgICBDb250ZW50UnVsZUxpc3QoY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFJlZjxXZWJLaXQ6
OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0PiYmKTsKKyAgICB2aXJ0dWFsIH5Db250ZW50UnVs
ZUxpc3QoKTsKIAogICAgIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9uYW1lOyB9Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24m
IGNvbXBpbGVkRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxlZEV4dGVuc2lvbi5n
ZXQoKTsgfQorICAgIGNvbnN0IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QmIGNv
bXBpbGVkUnVsZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2NvbXBpbGVkUnVsZUxpc3QuZ2V0KCk7
IH0KIAogcHJpdmF0ZToKICAgICBXVEY6OlN0cmluZyBtX25hbWU7Ci0gICAgUmVmPFdlYktpdDo6
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBtX2NvbXBpbGVkRXh0ZW5zaW9uOworICAgIFJl
ZjxXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0PiBtX2NvbXBpbGVkUnVsZUxpc3Q7
CiAjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0
U3RvcmUuY3BwCShyZXZpc2lvbiAyMTY1MzkpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcDoyMTY1MzkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCIKKworI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5j
bHVkZSAiTmV0d29ya0NhY2hlRGF0YS5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0
ZW0uaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJXZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25Db21w
aWxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkVycm9yLmg+CisjaW5j
bHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0
Zi9wZXJzaXN0ZW5jZS9EZWNvZGVyLmg+CisjaW5jbHVkZSA8d3RmL3BlcnNpc3RlbmNlL0VuY29k
ZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDo6TmV0d29ya0NhY2hlOworCituYW1lc3Bh
Y2UgQVBJIHsKKworQ29udGVudEV4dGVuc2lvblN0b3JlJiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6
OmRlZmF1bHRTdG9yZSgpCit7CisgICAgc3RhdGljIENvbnRlbnRFeHRlbnNpb25TdG9yZSogZGVm
YXVsdFN0b3JlID0gYWRvcHRSZWYobmV3IENvbnRlbnRFeHRlbnNpb25TdG9yZSkubGVha1JlZigp
OworICAgIHJldHVybiAqZGVmYXVsdFN0b3JlOworfQorCitSZWY8Q29udGVudEV4dGVuc2lvblN0
b3JlPiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnN0b3JlV2l0aFBhdGgoY29uc3QgV1RGOjpTdHJp
bmcmIHN0b3JlUGF0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb250ZW50RXh0ZW5z
aW9uU3RvcmUoc3RvcmVQYXRoKSk7Cit9CisKK0NvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q29udGVu
dEV4dGVuc2lvblN0b3JlKCkKKyAgICA6IENvbnRlbnRFeHRlbnNpb25TdG9yZShkZWZhdWx0U3Rv
cmVQYXRoKCkpCit7Cit9CisKK0NvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q29udGVudEV4dGVuc2lv
blN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpCisgICAgOiBtX3N0b3JlUGF0aChz
dG9yZVBhdGgpCisgICAgLCBtX2NvbXBpbGVRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiQ29udGVu
dEV4dGVuc2lvblN0b3JlIENvbXBpbGUgUXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OkNvbmN1cnJl
bnQpKQorICAgICwgbV9yZWFkUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIkNvbnRlbnRFeHRlbnNp
b25TdG9yZSBSZWFkIFF1ZXVlIikpCisgICAgLCBtX3JlbW92ZVF1ZXVlKFdvcmtRdWV1ZTo6Y3Jl
YXRlKCJDb250ZW50RXh0ZW5zaW9uU3RvcmUgUmVtb3ZlIFF1ZXVlIikpCit7CisgICAgV2ViQ29y
ZTo6bWFrZUFsbERpcmVjdG9yaWVzKHN0b3JlUGF0aCk7Cit9CisKK0NvbnRlbnRFeHRlbnNpb25T
dG9yZTo6fkNvbnRlbnRFeHRlbnNpb25TdG9yZSgpCit7Cit9CisKK3N0YXRpYyBjb25zdCBTdHJp
bmcmIGNvbnN0cnVjdGVkUGF0aFByZWZpeCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFN0cmluZz4gcHJlZml4KCJDb250ZW50RXh0ZW5zaW9uLSIpOworICAgIHJldHVybiBwcmVmaXg7
Cit9CisKK3N0YXRpYyBjb25zdCBTdHJpbmcgY29uc3RydWN0ZWRQYXRoRmlsdGVyKCkKK3sKKyAg
ICByZXR1cm4gbWFrZVN0cmluZyhjb25zdHJ1Y3RlZFBhdGhQcmVmaXgoKSwgJyonKTsKK30KKwor
c3RhdGljIFN0cmluZyBjb25zdHJ1Y3RlZFBhdGgoY29uc3QgU3RyaW5nJiBiYXNlLCBjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChiYXNlLCBtYWtlU3RyaW5nKGNvbnN0cnVjdGVkUGF0aFByZWZpeCgpLCBXZWJD
b3JlOjplbmNvZGVGb3JGaWxlTmFtZShpZGVudGlmaWVyKSkpOworfQorCisvLyBUaGUgc2l6ZSBh
bmQgb2Zmc2V0IG9mIHRoZSBkZW5zZWx5IHBhY2tlZCBieXRlcyBpbiB0aGUgZmlsZSwgbm90IHNp
emVvZiBhbmQgb2Zmc2V0b2YsIHdoaWNoIHdvdWxkCisvLyByZXByZXNlbnQgdGhlIHNpemUgYW5k
IG9mZnNldCBvZiB0aGUgc3RydWN0dXJlIGluIG1lbW9yeSwgcG9zc2libHkgd2l0aCBjb21waWxl
ci1hZGRlZCBwYWRkaW5nLgorY29uc3Qgc2l6ZV90IENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVy
U2l6ZSA9IDIgKiBzaXplb2YodWludDMyX3QpICsgNSAqIHNpemVvZih1aW50NjRfdCk7Citjb25z
dCBzaXplX3QgQ29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0ID0gc2l6ZW9mKHVpbnQz
Ml90KSArIDUgKiBzaXplb2YodWludDY0X3QpOworCitzdHJ1Y3QgQ29udGVudEV4dGVuc2lvbk1l
dGFEYXRhIHsKKyAgICB1aW50MzJfdCB2ZXJzaW9uIHsgQ29udGVudEV4dGVuc2lvblN0b3JlOjpD
dXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uIH07CisgICAgdWludDY0X3Qgc291cmNl
U2l6ZSB7IDAgfTsKKyAgICB1aW50NjRfdCBhY3Rpb25zU2l6ZSB7IDAgfTsKKyAgICB1aW50NjRf
dCBmaWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVNpemUgeyAwIH07CisgICAgdWludDY0
X3QgZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplIHsgMCB9OworICAgIHVpbnQ2NF90
IGNvbmRpdGlvbmVkRmlsdGVyc0J5dGVjb2RlU2l6ZSB7IDAgfTsKKyAgICB1aW50MzJfdCBjb25k
aXRpb25zQXBwbHlPbmx5VG9Eb21haW4geyBmYWxzZSB9OworICAgIAorICAgIHNpemVfdCBmaWxl
U2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkZpbGVI
ZWFkZXJTaXplCisgICAgICAgICAgICArIHNvdXJjZVNpemUKKyAgICAgICAgICAgICsgYWN0aW9u
c1NpemUKKyAgICAgICAgICAgICsgZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXpl
CisgICAgICAgICAgICArIGZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6ZQorICAgICAg
ICAgICAgKyBjb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemU7CisgICAgfQorfTsKKworc3Rh
dGljIERhdGEgZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKGNvbnN0IENvbnRlbnRFeHRl
bnNpb25NZXRhRGF0YSYgbWV0YURhdGEpCit7CisgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2Rl
ciBlbmNvZGVyOworCisgICAgZW5jb2RlciA8PCBtZXRhRGF0YS52ZXJzaW9uOworICAgIGVuY29k
ZXIgPDwgbWV0YURhdGEuc291cmNlU2l6ZTsKKyAgICBlbmNvZGVyIDw8IG1ldGFEYXRhLmFjdGlv
bnNTaXplOworICAgIGVuY29kZXIgPDwgbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25z
Qnl0ZWNvZGVTaXplOworICAgIGVuY29kZXIgPDwgbWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRp
b25zQnl0ZWNvZGVTaXplOworICAgIGVuY29kZXIgPDwgbWV0YURhdGEuY29uZGl0aW9uZWRGaWx0
ZXJzQnl0ZWNvZGVTaXplOworICAgIGVuY29kZXIgPDwgbWV0YURhdGEuY29uZGl0aW9uc0FwcGx5
T25seVRvRG9tYWluOworCisgICAgQVNTRVJUKGVuY29kZXIuYnVmZmVyU2l6ZSgpID09IENvbnRl
bnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZSk7CisgICAgcmV0dXJuIERhdGEoZW5jb2Rlci5idWZm
ZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworfQorCitzdGF0aWMgYm9vbCBkZWNvZGVDb250
ZW50RXh0ZW5zaW9uTWV0YURhdGEoQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSwg
Y29uc3QgRGF0YSYgZmlsZURhdGEpCit7CisgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAg
ZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1Y2Nlc3MsICZmaWxlRGF0YV0oY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKKyAgICAgICAgLy8gVGhlIGZpbGUgZGF0YSBzaG91
bGQgYmUgbWFwcGVkIGludG8gb25lIGNvbnRpbnVvdXMgbWVtb3J5IHNlZ21lbnQgc28gdGhlIHNp
emUKKyAgICAgICAgLy8gcGFzc2VkIHRvIHRoZSBhcHBsaWVyIHNob3VsZCBhbHdheXMgZXF1YWwg
dGhlIGRhdGEgc2l6ZS4KKyAgICAgICAgaWYgKHNpemUgIT0gZmlsZURhdGEuc2l6ZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFdURjo6UGVyc2lzdGVuY2U6OkRlY29k
ZXIgZGVjb2RlcihkYXRhLCBzaXplKTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRh
RGF0YS52ZXJzaW9uKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShtZXRhRGF0YS5zb3VyY2VTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5hY3Rpb25zU2l6ZSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
bWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5m
aWx0ZXJzV2l0aENvbmRpdGlvbnNCeXRlY29kZVNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFEYXRhLmNvbmRpdGlvbmVkRmls
dGVyc0J5dGVjb2RlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUobWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9KTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworc3Rh
dGljIGJvb2wgb3BlbkFuZE1hcENvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBwYXRoLCBD
b250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBEYXRhJiBmaWxlRGF0YSkKK3sKKyAg
ICBmaWxlRGF0YSA9IG1hcEZpbGUoV2ViQ29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpLmRhdGEoKSk7CisgICAgaWYgKGZpbGVEYXRhLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShtZXRhRGF0
YSwgZmlsZURhdGEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIGJvb2wgd3JpdGVEYXRhVG9GaWxlKGNvbnN0IERhdGEmIGZpbGVEYXRhLCBX
ZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCit7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1
ZTsKKyAgICBmaWxlRGF0YS5hcHBseShbZmQsICZzdWNjZXNzXShjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBpZiAoV2ViQ29yZTo6d3JpdGVUb0ZpbGUoZmQsIChj
b25zdCBjaGFyKilkYXRhLCBzaXplKSA9PSAtMSkgeworICAgICAgICAgICAgc3VjY2VzcyA9IGZh
bHNlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0pOworICAgIAorICAgIHJldHVybiBzdWNjZXNzOworfQorCitzdGF0aWMg
c3RkOjplcnJvcl9jb2RlIGNvbXBpbGVkVG9GaWxlKFN0cmluZyYmIGpzb24sIGNvbnN0IFN0cmlu
ZyYgZmluYWxGaWxlUGF0aCwgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSwgRGF0
YSYgbWFwcGVkRGF0YSkKK3sKKyAgICB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM7CisKKyAgICBjbGFzcyBDb21waWxhdGlvbkNsaWVudCBmaW5hbCA6IHB1YmxpYyBD
b250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAg
Q29tcGlsYXRpb25DbGllbnQoV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVIYW5kbGUs
IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEpCisgICAgICAgICAgICA6IG1fZmls
ZUhhbmRsZShmaWxlSGFuZGxlKQorICAgICAgICAgICAgLCBtX21ldGFEYXRhKG1ldGFEYXRhKQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW1ldGFEYXRhLnNvdXJjZVNpemUpOworICAg
ICAgICAgICAgQVNTRVJUKCFtZXRhRGF0YS5hY3Rpb25zU2l6ZSk7CisgICAgICAgICAgICBBU1NF
UlQoIW1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSk7CisgICAg
ICAgICAgICBBU1NFUlQoIW1ldGFEYXRhLmZpbHRlcnNXaXRoQ29uZGl0aW9uc0J5dGVjb2RlU2l6
ZSk7CisgICAgICAgICAgICBBU1NFUlQoIW1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVj
b2RlU2l6ZSk7CisgICAgICAgICAgICBBU1NFUlQoIW1ldGFEYXRhLmNvbmRpdGlvbnNBcHBseU9u
bHlUb0RvbWFpbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgd3JpdGVTb3Vy
Y2UoY29uc3QgU3RyaW5nJiBzb3VyY2VKU09OKSBmaW5hbCB7CisgICAgICAgICAgICBBU1NFUlQo
IW1fZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVXcml0dGVuKTsKKyAgICAgICAgICAg
IEFTU0VSVCghbV9maWx0ZXJzV2l0aENvbmRpdGlvbkJ5dGVjb2RlV3JpdHRlbik7CisgICAgICAg
ICAgICBBU1NFUlQoIW1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbik7CisgICAgICAg
ICAgICBBU1NFUlQoIW1fYWN0aW9uc1dyaXR0ZW4pOworICAgICAgICAgICAgQVNTRVJUKCFtX3Nv
dXJjZVdyaXR0ZW4pOworICAgICAgICAgICAgd3JpdGVUb0ZpbGUoc291cmNlSlNPTi5pczhCaXQo
KSk7CisgICAgICAgICAgICBtX3NvdXJjZVdyaXR0ZW4gKz0gc2l6ZW9mKGJvb2wpOworICAgICAg
ICAgICAgaWYgKHNvdXJjZUpTT04uaXM4Qml0KCkpIHsKKyAgICAgICAgICAgICAgICBzaXplX3Qg
c2VyaWFsaXplZExlbmd0aCA9IHNvdXJjZUpTT04ubGVuZ3RoKCkgKiBzaXplb2YoTENoYXIpOwor
ICAgICAgICAgICAgICAgIHdyaXRlVG9GaWxlKERhdGEoc291cmNlSlNPTi5jaGFyYWN0ZXJzOCgp
LCBzZXJpYWxpemVkTGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgbV9zb3VyY2VXcml0dGVuICs9
IHNlcmlhbGl6ZWRMZW5ndGg7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHNpemVfdCBzZXJpYWxpemVkTGVuZ3RoID0gc291cmNlSlNPTi5sZW5ndGgoKSAqIHNpemVvZihV
Q2hhcik7CisgICAgICAgICAgICAgICAgd3JpdGVUb0ZpbGUoRGF0YShyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2VKU09OLmNoYXJhY3RlcnMxNigpKSwgc2VyaWFsaXplZExl
bmd0aCkpOworICAgICAgICAgICAgICAgIG1fc291cmNlV3JpdHRlbiArPSBzZXJpYWxpemVkTGVu
Z3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHdy
aXRlRmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYm
IGJ5dGVjb2RlKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW1fZmlsdGVy
c1dpdGhDb25kaXRpb25CeXRlY29kZVdyaXR0ZW4pOworICAgICAgICAgICAgQVNTRVJUKCFtX2Nv
bmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW4pOworICAgICAgICAgICAgbV9maWx0ZXJzV2l0
aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW4gKz0gYnl0ZWNvZGUuc2l6ZSgpOworICAgICAg
ICAgICAgd3JpdGVUb0ZpbGUoRGF0YShieXRlY29kZS5kYXRhKCksIGJ5dGVjb2RlLnNpemUoKSkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHdyaXRlRmlsdGVyc1dpdGhDb25k
aXRpb25zQnl0ZWNvZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBmaW5hbAorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIW1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3Jp
dHRlbik7CisgICAgICAgICAgICBtX2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVu
ICs9IGJ5dGVjb2RlLnNpemUoKTsKKyAgICAgICAgICAgIHdyaXRlVG9GaWxlKERhdGEoYnl0ZWNv
ZGUuZGF0YSgpLCBieXRlY29kZS5zaXplKCkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCB3cml0ZVRvcFVSTEZpbHRlcnNCeXRlY29kZShWZWN0b3I8REZBQnl0ZWNvZGU+JiYg
Ynl0ZWNvZGUpIGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY29uZGl0aW9uRmlsdGVy
c0J5dGVjb2RlV3JpdHRlbiArPSBieXRlY29kZS5zaXplKCk7CisgICAgICAgICAgICB3cml0ZVRv
RmlsZShEYXRhKGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKSk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHdyaXRlQWN0aW9ucyhWZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5dGU+
JiYgYWN0aW9ucywgYm9vbCBjb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4pIGZpbmFsCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRl
Y29kZVdyaXR0ZW4pOworICAgICAgICAgICAgQVNTRVJUKCFtX2ZpbHRlcnNXaXRoQ29uZGl0aW9u
Qnl0ZWNvZGVXcml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9jb25kaXRpb25GaWx0ZXJz
Qnl0ZWNvZGVXcml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9hY3Rpb25zV3JpdHRlbik7
CisgICAgICAgICAgICBtX2FjdGlvbnNXcml0dGVuICs9IGFjdGlvbnMuc2l6ZSgpOworICAgICAg
ICAgICAgbV9jb25kaXRpb25zQXBwbHlPbmx5VG9Eb21haW4gPSBjb25kaXRpb25zQXBwbHlPbmx5
VG9Eb21haW47CisgICAgICAgICAgICB3cml0ZVRvRmlsZShEYXRhKGFjdGlvbnMuZGF0YSgpLCBh
Y3Rpb25zLnNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGZpbmFs
aXplKCkgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgbV9tZXRhRGF0YS5zb3VyY2VTaXpl
ID0gbV9zb3VyY2VXcml0dGVuOworICAgICAgICAgICAgbV9tZXRhRGF0YS5hY3Rpb25zU2l6ZSA9
IG1fYWN0aW9uc1dyaXR0ZW47CisgICAgICAgICAgICBtX21ldGFEYXRhLmZpbHRlcnNXaXRob3V0
Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZSA9IG1fZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNv
ZGVXcml0dGVuOworICAgICAgICAgICAgbV9tZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlvbnNC
eXRlY29kZVNpemUgPSBtX2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuOworICAg
ICAgICAgICAgbV9tZXRhRGF0YS5jb25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUgPSBtX2Nv
bmRpdGlvbkZpbHRlcnNCeXRlY29kZVdyaXR0ZW47CisgICAgICAgICAgICBtX21ldGFEYXRhLmNv
bmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbiA9IG1fY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWlu
OworICAgICAgICAgICAgCisgICAgICAgICAgICBEYXRhIGhlYWRlciA9IGVuY29kZUNvbnRlbnRF
eHRlbnNpb25NZXRhRGF0YShtX21ldGFEYXRhKTsKKyAgICAgICAgICAgIGlmICghbV9maWxlRXJy
b3IgJiYgV2ViQ29yZTo6c2Vla0ZpbGUobV9maWxlSGFuZGxlLCAwbGwsIFdlYkNvcmU6OkZpbGVT
ZWVrT3JpZ2luOjpTZWVrRnJvbUJlZ2lubmluZykgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBX
ZWJDb3JlOjpjbG9zZUZpbGUobV9maWxlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICBtX2ZpbGVF
cnJvciA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3cml0ZVRvRmlsZShoZWFk
ZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGhhZEVycm9yV2hpbGVXcml0
aW5nVG9GaWxlKCkgeyByZXR1cm4gbV9maWxlRXJyb3I7IH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIHZvaWQgd3JpdGVUb0ZpbGUoYm9vbCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
d3JpdGVUb0ZpbGUoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmdmFsdWUp
LCBzaXplb2YodmFsdWUpKSk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCB3cml0ZVRvRmlsZShj
b25zdCBEYXRhJiBkYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fZmlsZUVycm9y
ICYmICF3cml0ZURhdGFUb0ZpbGUoZGF0YSwgbV9maWxlSGFuZGxlKSkgeworICAgICAgICAgICAg
ICAgIFdlYkNvcmU6OmNsb3NlRmlsZShtX2ZpbGVIYW5kbGUpOworICAgICAgICAgICAgICAgIG1f
ZmlsZUVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIG1fZmlsZUhhbmRsZTsKKyAgICAgICAg
Q29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtX21ldGFEYXRhOworICAgICAgICBzaXplX3QgbV9m
aWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW4geyAwIH07CisgICAgICAgIHNp
emVfdCBtX2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuIHsgMCB9OworICAgICAg
ICBzaXplX3QgbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuIHsgMCB9OworICAgICAg
ICBzaXplX3QgbV9hY3Rpb25zV3JpdHRlbiB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1fc291cmNl
V3JpdHRlbiB7IDAgfTsKKyAgICAgICAgYm9vbCBtX2NvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFp
biB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV9maWxlRXJyb3IgeyBmYWxzZSB9OworICAgIH07
CisKKyAgICBhdXRvIHRlbXBvcmFyeUZpbGVIYW5kbGUgPSBXZWJDb3JlOjppbnZhbGlkUGxhdGZv
cm1GaWxlSGFuZGxlOworICAgIFN0cmluZyB0ZW1wb3JhcnlGaWxlUGF0aCA9IFdlYkNvcmU6Om9w
ZW5UZW1wb3JhcnlGaWxlKCJDb250ZW50RXh0ZW5zaW9uIiwgdGVtcG9yYXJ5RmlsZUhhbmRsZSk7
CisgICAgaWYgKHRlbXBvcmFyeUZpbGVIYW5kbGUgPT0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3Jt
RmlsZUhhbmRsZSkKKyAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6
OkNvbXBpbGVGYWlsZWQ7CisgICAgCisgICAgY2hhciBpbnZhbGlkSGVhZGVyW0NvbnRlbnRFeHRl
bnNpb25GaWxlSGVhZGVyU2l6ZV07CisgICAgbWVtc2V0KGludmFsaWRIZWFkZXIsIDB4RkYsIHNp
emVvZihpbnZhbGlkSGVhZGVyKSk7CisgICAgLy8gVGhpcyBoZWFkZXIgd2lsbCBiZSByZXdyaXR0
ZW4gaW4gQ29tcGlsYXRpb25DbGllbnQ6OmZpbmFsaXplLgorICAgIGlmIChXZWJDb3JlOjp3cml0
ZVRvRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCBpbnZhbGlkSGVhZGVyLCBzaXplb2YoaW52YWxp
ZEhlYWRlcikpID09IC0xKSB7CisgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3JhcnlG
aWxlSGFuZGxlKTsKKyAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6
OkNvbXBpbGVGYWlsZWQ7CisgICAgfQorCisgICAgQ29tcGlsYXRpb25DbGllbnQgY29tcGlsYXRp
b25DbGllbnQodGVtcG9yYXJ5RmlsZUhhbmRsZSwgbWV0YURhdGEpOworICAgIAorICAgIGlmIChh
dXRvIGNvbXBpbGVyRXJyb3IgPSBjb21waWxlUnVsZUxpc3QoY29tcGlsYXRpb25DbGllbnQsIFdU
Rk1vdmUoanNvbikpKSB7CisgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxl
SGFuZGxlKTsKKyAgICAgICAgcmV0dXJuIGNvbXBpbGVyRXJyb3I7CisgICAgfQorICAgIGlmIChj
b21waWxhdGlvbkNsaWVudC5oYWRFcnJvcldoaWxlV3JpdGluZ1RvRmlsZSgpKSB7CisgICAgICAg
IFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKKyAgICAgICAgcmV0dXJu
IENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CisgICAgfQorICAg
IAorICAgIG1hcHBlZERhdGEgPSBhZG9wdEFuZE1hcEZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSwg
MCwgbWV0YURhdGEuZmlsZVNpemUoKSk7CisgICAgaWYgKG1hcHBlZERhdGEuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVk
OworCisgICAgaWYgKCFXZWJDb3JlOjptb3ZlRmlsZSh0ZW1wb3JhcnlGaWxlUGF0aCwgZmluYWxG
aWxlUGF0aCkpCisgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpD
b21waWxlRmFpbGVkOworCisgICAgcmV0dXJuIHsgfTsKK30KKworc3RhdGljIFJlZjxBUEk6OkNv
bnRlbnRFeHRlbnNpb24+IGNyZWF0ZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIs
IGNvbnN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIGNvbnN0IERhdGEmIGZp
bGVEYXRhKQoreworICAgIGF1dG8gc2hhcmVkTWVtb3J5ID0gV2ViS2l0OjpTaGFyZWRNZW1vcnk6
OmNyZWF0ZShjb25zdF9jYXN0PHVpbnQ4X3QqPihmaWxlRGF0YS5kYXRhKCkpLCBmaWxlRGF0YS5z
aXplKCksIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAg
Y29uc3Qgc2l6ZV90IGhlYWRlckFuZFNvdXJjZVNpemUgPSBDb250ZW50RXh0ZW5zaW9uRmlsZUhl
YWRlclNpemUgKyBtZXRhRGF0YS5zb3VyY2VTaXplOworICAgIGF1dG8gY29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uRGF0YSA9IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSgK
KyAgICAgICAgV1RGTW92ZShzaGFyZWRNZW1vcnkpLAorICAgICAgICBmaWxlRGF0YSwKKyAgICAg
ICAgQ29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluT2Zmc2V0LAorICAgICAgICBoZWFkZXJBbmRT
b3VyY2VTaXplLAorICAgICAgICBtZXRhRGF0YS5hY3Rpb25zU2l6ZSwKKyAgICAgICAgaGVhZGVy
QW5kU291cmNlU2l6ZQorICAgICAgICAgICAgKyBtZXRhRGF0YS5hY3Rpb25zU2l6ZSwKKyAgICAg
ICAgbWV0YURhdGEuZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNvZGVTaXplLAorICAgICAg
ICBoZWFkZXJBbmRTb3VyY2VTaXplCisgICAgICAgICAgICArIG1ldGFEYXRhLmFjdGlvbnNTaXpl
CisgICAgICAgICAgICArIG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9uc0J5dGVjb2Rl
U2l6ZSwKKyAgICAgICAgbWV0YURhdGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXpl
LAorICAgICAgICBoZWFkZXJBbmRTb3VyY2VTaXplCisgICAgICAgICAgICArIG1ldGFEYXRhLmFj
dGlvbnNTaXplCisgICAgICAgICAgICArIG1ldGFEYXRhLmZpbHRlcnNXaXRob3V0Q29uZGl0aW9u
c0J5dGVjb2RlU2l6ZQorICAgICAgICAgICAgKyBtZXRhRGF0YS5maWx0ZXJzV2l0aENvbmRpdGlv
bnNCeXRlY29kZVNpemUsCisgICAgICAgIG1ldGFEYXRhLmNvbmRpdGlvbmVkRmlsdGVyc0J5dGVj
b2RlU2l6ZQorICAgICk7CisgICAgYXV0byBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBXZWJL
aXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURk1vdmUoY29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uRGF0YSkpOworICAgIHJldHVybiBBUEk6OkNvbnRlbnRFeHRlbnNpb246
OmNyZWF0ZShpZGVudGlmaWVyLCBXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpOwor
fQorCit2b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6bG9va3VwQ29udGVudEV4dGVuc2lvbihj
b25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpD
b250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCit7
CisgICAgbV9yZWFkUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBzdG9yZVBhdGggPSBt
X3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBwYXRoID0gY29uc3Ry
dWN0ZWRQYXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllcik7CisgICAgICAgIAorICAgICAgICBDb250
ZW50RXh0ZW5zaW9uTWV0YURhdGEgbWV0YURhdGE7CisgICAgICAgIERhdGEgZmlsZURhdGE7Cisg
ICAgICAgIGlmICghb3BlbkFuZE1hcENvbnRlbnRFeHRlbnNpb24ocGF0aCwgbWV0YURhdGEsIGZp
bGVEYXRhKSkgeworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKG51bGxwdHIsIEVycm9yOjpMb29rdXBGYWlsZWQpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtZXRhRGF0
YS52ZXJzaW9uICE9IENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNp
b25GaWxlVmVyc2lvbikgeworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtw
cm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0geworICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKG51bGxwdHIsIEVycm9yOjpWZXJzaW9uTWlzbWF0Y2gpOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVk
VGhpcyksIGlkZW50aWZpZXIgPSBXVEZNb3ZlKGlkZW50aWZpZXIpLCBmaWxlRGF0YSA9IFdURk1v
dmUoZmlsZURhdGEpLCBtZXRhRGF0YSA9IFdURk1vdmUobWV0YURhdGEpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihjcmVhdGVFeHRlbnNpb24oaWRlbnRpZmllciwgbWV0YURhdGEsIGZpbGVEYXRh
KSwgeyB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ29udGVudEV4dGVuc2lv
blN0b3JlOjpnZXRBdmFpbGFibGVDb250ZW50RXh0ZW5zaW9uSWRlbnRpZmllcnMoRnVuY3Rpb248
dm9pZChXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4pPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBtX3JlYWRRdWV1ZS0+ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
c3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisKKyAgICAgICAgVmVj
dG9yPFN0cmluZz4gZnVsbFBhdGhzID0gV2ViQ29yZTo6bGlzdERpcmVjdG9yeShzdG9yZVBhdGgs
IGNvbnN0cnVjdGVkUGF0aEZpbHRlcigpKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gaWRlbnRp
ZmllcnM7CisgICAgICAgIGlkZW50aWZpZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZnVsbFBh
dGhzLnNpemUoKSk7CisgICAgICAgIGNvbnN0IGF1dG8gcHJlZml4TGVuZ3RoID0gY29uc3RydWN0
ZWRQYXRoUHJlZml4KCkubGVuZ3RoKCk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6
IGZ1bGxQYXRocykKKyAgICAgICAgICAgIGlkZW50aWZpZXJzLnVuY2hlY2tlZEFwcGVuZChXZWJD
b3JlOjpkZWNvZGVGcm9tRmlsZW5hbWUocGF0aC5zdWJzdHJpbmcocGF0aC5yZXZlcnNlRmluZCgn
LycpICsgMSArIHByZWZpeExlbmd0aCkpKTsKKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBpZGVudGlmaWVycyA9IFdURk1v
dmUoaWRlbnRpZmllcnMpXSgpIG11dGFibGUgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShpZGVudGlmaWVycykpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9p
ZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmNvbXBpbGVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdU
Rjo6U3RyaW5nJiBpZGVudGlmaWVyLCBXVEY6OlN0cmluZyYmIGpzb24sIEZ1bmN0aW9uPHZvaWQo
UmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4sIHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIEF0b21pY1N0cmluZzo6aW5pdCgpOworICAgIG1fY29tcGlsZVF1
ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBpZGVudGlmaWVy
ID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwganNvbiA9IGpzb24uaXNvbGF0ZWRDb3B5KCks
IHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0
byBwYXRoID0gY29uc3RydWN0ZWRQYXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllcik7CisKKyAgICAg
ICAgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhIG1ldGFEYXRhOworICAgICAgICBEYXRhIGZpbGVE
YXRhOworICAgICAgICBhdXRvIGVycm9yID0gY29tcGlsZWRUb0ZpbGUoV1RGTW92ZShqc29uKSwg
cGF0aCwgbWV0YURhdGEsIGZpbGVEYXRhKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHBy
b3RlY3RlZFRoaXMpLCBlcnJvciA9IFdURk1vdmUoZXJyb3IpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIobnVsbHB0ciwgZXJyb3IpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3By
b3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBpZGVudGlmaWVyID0gV1RGTW92
ZShpZGVudGlmaWVyKSwgZmlsZURhdGEgPSBXVEZNb3ZlKGZpbGVEYXRhKSwgbWV0YURhdGEgPSBX
VEZNb3ZlKG1ldGFEYXRhKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0geworICAgICAgICAgICAgUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4gY29u
dGVudEV4dGVuc2lvbiA9IGNyZWF0ZUV4dGVuc2lvbihpZGVudGlmaWVyLCBtZXRhRGF0YSwgZmls
ZURhdGEpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29udGVudEV4dGVuc2lvbiwg
eyB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgQ29udGVudEV4dGVuc2lvblN0
b3JlOjpyZW1vdmVDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVy
LCBGdW5jdGlvbjx2b2lkKHN0ZDo6ZXJyb3JfY29kZSk+IGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIG1fcmVtb3ZlUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBzdG9yZVBhdGggPSBt
X3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBwYXRoID0gY29uc3Ry
dWN0ZWRQYXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllcik7CisKKyAgICAgICAgaWYgKCFXZWJDb3Jl
OjpkZWxldGVGaWxlKHBhdGgpKSB7CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSB7CisgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoRXJyb3I6OlJlbW92ZUZhaWxlZCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKKyAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIENv
bnRlbnRFeHRlbnNpb25TdG9yZTo6c3luY2hyb25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9u
cygpCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogV2ViQ29yZTo6bGlzdERpcmVjdG9y
eShtX3N0b3JlUGF0aCwgIioiKSkKKyAgICAgICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShwYXRoKTsK
K30KKwordm9pZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmludmFsaWRhdGVDb250ZW50RXh0ZW5z
aW9uVmVyc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllcikKK3sKKyAgICBhdXRvIGZp
bGUgPSBXZWJDb3JlOjpvcGVuRmlsZShjb25zdHJ1Y3RlZFBhdGgobV9zdG9yZVBhdGgsIGlkZW50
aWZpZXIpLCBXZWJDb3JlOjpPcGVuRm9yV3JpdGUpOworICAgIGlmIChmaWxlID09IFdlYkNvcmU6
OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCisgICAgICAgIHJldHVybjsKKyAgICBDb250ZW50
RXh0ZW5zaW9uTWV0YURhdGEgaW52YWxpZEhlYWRlciA9IHswLCAwLCAwLCAwLCAwLCAwfTsKKyAg
ICBhdXRvIGJ5dGVzV3JpdHRlbiA9IFdlYkNvcmU6OndyaXRlVG9GaWxlKGZpbGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZpbnZhbGlkSGVhZGVyKSwgc2l6ZW9mKGludmFsaWRIZWFk
ZXIpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGJ5dGVzV3JpdHRlbiwgYnl0ZXNXcml0dGVuID09IHNp
emVvZihpbnZhbGlkSGVhZGVyKSk7CisgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKGZpbGUpOworfQor
Cit2b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6Z2V0Q29udGVudEV4dGVuc2lvblNvdXJjZShj
b25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChXVEY6OlN0cmluZyk+
IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG1fcmVhZFF1ZXVlLT5kaXNwYXRjaChbcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBpZGVudGlmaWVyID0gaWRlbnRpZmllci5pc29sYXRl
ZENvcHkoKSwgc3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAg
ICAgIGF1dG8gcGF0aCA9IGNvbnN0cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50aWZpZXIpOwor
ICAgICAgICAKKyAgICAgICAgYXV0byBjb21wbGV0ZSA9IFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92
ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oU3RyaW5nIHNvdXJjZSkgbXV0YWJsZSB7CisgICAgICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzb3VyY2UgPSBz
b3VyY2UuaXNvbGF0ZWRDb3B5KCldIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihzb3VyY2UpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAg
ICBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgbWV0YURhdGE7CisgICAgICAgIERhdGEgZmlsZURh
dGE7CisgICAgICAgIGlmICghb3BlbkFuZE1hcENvbnRlbnRFeHRlbnNpb24ocGF0aCwgbWV0YURh
dGEsIGZpbGVEYXRhKSkgeworICAgICAgICAgICAgY29tcGxldGUoeyB9KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtZXRhRGF0YS52
ZXJzaW9uKSB7CisgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgIGlmICghbWV0YURhdGEuc291
cmNlU2l6ZSkgeworICAgICAgICAgICAgICAgIGNvbXBsZXRlKHsgfSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbCBpczhCaXQgPSBmaWxl
RGF0YS5kYXRhKClbQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplXTsKKyAgICAgICAgICAg
IHNpemVfdCBzdGFydCA9IENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZSArIHNpemVvZihi
b29sKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBtZXRhRGF0YS5zb3VyY2VTaXplIC0g
c2l6ZW9mKGJvb2wpOworICAgICAgICAgICAgaWYgKGlzOEJpdCkKKyAgICAgICAgICAgICAgICBj
b21wbGV0ZShTdHJpbmcoZmlsZURhdGEuZGF0YSgpICsgc3RhcnQsIGxlbmd0aCkpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCEobGVuZ3RoICUgc2l6ZW9mKFVD
aGFyKSkpOworICAgICAgICAgICAgICAgIGNvbXBsZXRlKFN0cmluZyhyZWludGVycHJldF9jYXN0
PGNvbnN0IFVDaGFyKj4oZmlsZURhdGEuZGF0YSgpICsgc3RhcnQpLCBsZW5ndGggLyBzaXplb2Yo
VUNoYXIpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICAvLyBPbGRlciB2ZXJzaW9ucyBjYW5ub3QgcmVjb3ZlciB0aGUgb3JpZ2luYWwg
SlNPTiBzb3VyY2UgZnJvbSBkaXNrLgorICAgICAgICBjb21wbGV0ZSh7IH0pOworICAgIH0pOwor
fQorCitjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJv
ckNhdGVnb3J5KCkKK3sKKyAgICBjbGFzcyBDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVn
b3J5IDogcHVibGljIHN0ZDo6ZXJyb3JfY2F0ZWdvcnkgeworICAgICAgICBjb25zdCBjaGFyKiBu
YW1lKCkgY29uc3Qgbm9leGNlcHQgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICJjb250ZW50IGV4dGVuc2lvbiBzdG9yZSI7CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OnN0
cmluZyBtZXNzYWdlKGludCBlcnJvckNvZGUpIGNvbnN0IGZpbmFsCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcj4o
ZXJyb3JDb2RlKSkgeworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVy
cm9yOjpMb29rdXBGYWlsZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJVbnNwZWNpZmllZCBl
cnJvciBkdXJpbmcgbG9va3VwLiI7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25T
dG9yZTo6RXJyb3I6OlZlcnNpb25NaXNtYXRjaDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlZl
cnNpb24gb2YgZmlsZSBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uIG9mIGludGVycHJldGVyLiI7Cisg
ICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWls
ZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJVbnNwZWNpZmllZCBlcnJvciBkdXJpbmcgY29t
cGlsZS4iOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpS
ZW1vdmVGYWlsZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJVbnNwZWNpZmllZCBlcnJvciBk
dXJpbmcgcmVtb3ZlLiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
OnN0cmluZygpOworICAgICAgICB9CisgICAgfTsKKworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5PiBjb250ZW50RXh0ZW5zaW9uRXJy
b3JDYXRlZ29yeTsKKyAgICByZXR1cm4gY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVM
aXN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
QVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuY3BwCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsMTUgKzI0LDE1IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgorI2luY2x1ZGUgIkFQSUNvbnRl
bnRSdWxlTGlzdFN0b3JlLmgiCiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCi0j
aW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgIkFQSUNvbnRlbnRSdWxl
TGlzdC5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURhdGEuaCIKICNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCi0jaW5jbHVkZSAi
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250
ZW50UnVsZUxpc3QuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25Db21waWxl
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkVycm9yLmg+CiAjaW5jbHVk
ZSA8c3RyaW5nPgpAQCAtNDUsNTkgKzQ1LDc4IEBACiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OjpO
ZXR3b3JrQ2FjaGU7CiAKIG5hbWVzcGFjZSBBUEkgewotCi1Db250ZW50RXh0ZW5zaW9uU3RvcmUm
IENvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlKCkKKyAgICAKK0NvbnRlbnRSdWxl
TGlzdFN0b3JlJiBDb250ZW50UnVsZUxpc3RTdG9yZTo6bGVnYWN5RGVmYXVsdFN0b3JlKCkKIHsK
LSAgICBzdGF0aWMgQ29udGVudEV4dGVuc2lvblN0b3JlKiBkZWZhdWx0U3RvcmUgPSBhZG9wdFJl
ZihuZXcgQ29udGVudEV4dGVuc2lvblN0b3JlKS5sZWFrUmVmKCk7CisgICAgY29uc3QgYm9vbCBs
ZWdhY3lGaWxlbmFtZSA9IHRydWU7CisgICAgc3RhdGljIENvbnRlbnRSdWxlTGlzdFN0b3JlKiBk
ZWZhdWx0U3RvcmUgPSBhZG9wdFJlZihuZXcgQ29udGVudFJ1bGVMaXN0U3RvcmUobGVnYWN5Rmls
ZW5hbWUpKS5sZWFrUmVmKCk7CiAgICAgcmV0dXJuICpkZWZhdWx0U3RvcmU7CiB9CisgICAgCitD
b250ZW50UnVsZUxpc3RTdG9yZSYgQ29udGVudFJ1bGVMaXN0U3RvcmU6Om5vbkxlZ2FjeURkZWZh
dWx0U3RvcmUoKQoreworICAgIGNvbnN0IGJvb2wgbGVnYWN5RmlsZW5hbWUgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgQ29udGVudFJ1bGVMaXN0U3RvcmUqIGRlZmF1bHRTdG9yZSA9IGFkb3B0UmVmKG5l
dyBDb250ZW50UnVsZUxpc3RTdG9yZShsZWdhY3lGaWxlbmFtZSkpLmxlYWtSZWYoKTsKKyAgICBy
ZXR1cm4gKmRlZmF1bHRTdG9yZTsKK30KKyAgICAKK0NvbnRlbnRSdWxlTGlzdFN0b3JlJiBDb250
ZW50UnVsZUxpc3RTdG9yZTo6ZGVmYXVsdFN0b3JlKGJvb2wgbGVnYWN5RmlsZW5hbWUpCit7Cisg
ICAgaWYgKGxlZ2FjeUZpbGVuYW1lKQorICAgICAgICByZXR1cm4gbGVnYWN5RGVmYXVsdFN0b3Jl
KCk7CisgICAgcmV0dXJuIG5vbkxlZ2FjeURkZWZhdWx0U3RvcmUoKTsKK30KIAotUmVmPENvbnRl
bnRFeHRlbnNpb25TdG9yZT4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKGNv
bnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpCitSZWY8Q29udGVudFJ1bGVMaXN0U3RvcmU+IENv
bnRlbnRSdWxlTGlzdFN0b3JlOjpzdG9yZVdpdGhQYXRoKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9y
ZVBhdGgsIGJvb2wgbGVnYWN5RmlsZW5hbWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q29udGVudEV4dGVuc2lvblN0b3JlKHN0b3JlUGF0aCkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IENvbnRlbnRSdWxlTGlzdFN0b3JlKHN0b3JlUGF0aCwgbGVnYWN5RmlsZW5hbWUpKTsKIH0K
IAotQ29udGVudEV4dGVuc2lvblN0b3JlOjpDb250ZW50RXh0ZW5zaW9uU3RvcmUoKQotICAgIDog
Q29udGVudEV4dGVuc2lvblN0b3JlKGRlZmF1bHRTdG9yZVBhdGgoKSkKK0NvbnRlbnRSdWxlTGlz
dFN0b3JlOjpDb250ZW50UnVsZUxpc3RTdG9yZShib29sIGxlZ2FjeUZpbGVuYW1lKQorICAgIDog
Q29udGVudFJ1bGVMaXN0U3RvcmUoZGVmYXVsdFN0b3JlUGF0aChsZWdhY3lGaWxlbmFtZSksIGxl
Z2FjeUZpbGVuYW1lKQogewogfQogCi1Db250ZW50RXh0ZW5zaW9uU3RvcmU6OkNvbnRlbnRFeHRl
bnNpb25TdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKQorQ29udGVudFJ1bGVMaXN0
U3RvcmU6OkNvbnRlbnRSdWxlTGlzdFN0b3JlKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgs
IGJvb2wgbGVnYWN5RmlsZW5hbWUpCiAgICAgOiBtX3N0b3JlUGF0aChzdG9yZVBhdGgpCi0gICAg
LCBtX2NvbXBpbGVRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiQ29udGVudEV4dGVuc2lvblN0b3Jl
IENvbXBpbGUgUXVldWUiLCBXb3JrUXVldWU6OlR5cGU6OkNvbmN1cnJlbnQpKQotICAgICwgbV9y
ZWFkUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIkNvbnRlbnRFeHRlbnNpb25TdG9yZSBSZWFkIFF1
ZXVlIikpCi0gICAgLCBtX3JlbW92ZVF1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJDb250ZW50RXh0
ZW5zaW9uU3RvcmUgUmVtb3ZlIFF1ZXVlIikpCisgICAgLCBtX2NvbXBpbGVRdWV1ZShXb3JrUXVl
dWU6OmNyZWF0ZSgiQ29udGVudFJ1bGVMaXN0U3RvcmUgQ29tcGlsZSBRdWV1ZSIsIFdvcmtRdWV1
ZTo6VHlwZTo6Q29uY3VycmVudCkpCisgICAgLCBtX3JlYWRRdWV1ZShXb3JrUXVldWU6OmNyZWF0
ZSgiQ29udGVudFJ1bGVMaXN0U3RvcmUgUmVhZCBRdWV1ZSIpKQorICAgICwgbV9yZW1vdmVRdWV1
ZShXb3JrUXVldWU6OmNyZWF0ZSgiQ29udGVudFJ1bGVMaXN0U3RvcmUgUmVtb3ZlIFF1ZXVlIikp
CisgICAgLCBtX2xlZ2FjeUZpbGVuYW1lKGxlZ2FjeUZpbGVuYW1lKQogewogICAgIFdlYkNvcmU6
Om1ha2VBbGxEaXJlY3RvcmllcyhzdG9yZVBhdGgpOwogfQogCi1Db250ZW50RXh0ZW5zaW9uU3Rv
cmU6On5Db250ZW50RXh0ZW5zaW9uU3RvcmUoKQorQ29udGVudFJ1bGVMaXN0U3RvcmU6On5Db250
ZW50UnVsZUxpc3RTdG9yZSgpCiB7CiB9CiAKLXN0YXRpYyBjb25zdCBTdHJpbmcmIGNvbnN0cnVj
dGVkUGF0aFByZWZpeCgpCitzdGF0aWMgY29uc3QgU3RyaW5nJiBjb25zdHJ1Y3RlZFBhdGhQcmVm
aXgoYm9vbCBsZWdhY3lGaWxlbmFtZSkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiBwcmVmaXgoIkNvbnRlbnRFeHRlbnNpb24tIik7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFN0cmluZz4gcHJlZml4KCJDb250ZW50UnVsZUxpc3QtIik7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFN0cmluZz4gbGVnYWN5UHJlZml4KCJDb250ZW50RXh0ZW5zaW9uLSIpOworICAg
IGlmIChsZWdhY3lGaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIGxlZ2FjeVByZWZpeDsKICAgICBy
ZXR1cm4gcHJlZml4OwogfQogCi1zdGF0aWMgY29uc3QgU3RyaW5nIGNvbnN0cnVjdGVkUGF0aEZp
bHRlcigpCitzdGF0aWMgY29uc3QgU3RyaW5nIGNvbnN0cnVjdGVkUGF0aEZpbHRlcihib29sIGxl
Z2FjeUZpbGVuYW1lKQogewotICAgIHJldHVybiBtYWtlU3RyaW5nKGNvbnN0cnVjdGVkUGF0aFBy
ZWZpeCgpLCAnKicpOworICAgIHJldHVybiBtYWtlU3RyaW5nKGNvbnN0cnVjdGVkUGF0aFByZWZp
eChsZWdhY3lGaWxlbmFtZSksICcqJyk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgY29uc3RydWN0ZWRQ
YXRoKGNvbnN0IFN0cmluZyYgYmFzZSwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQorc3RhdGlj
IFN0cmluZyBjb25zdHJ1Y3RlZFBhdGgoY29uc3QgU3RyaW5nJiBiYXNlLCBjb25zdCBTdHJpbmcm
IGlkZW50aWZpZXIsIGJvb2wgbGVnYWN5RmlsZW5hbWUpCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChiYXNlLCBtYWtlU3RyaW5nKGNvbnN0cnVjdGVkUGF0
aFByZWZpeCgpLCBXZWJDb3JlOjplbmNvZGVGb3JGaWxlTmFtZShpZGVudGlmaWVyKSkpOworICAg
IHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoYmFzZSwgbWFrZVN0cmlu
Zyhjb25zdHJ1Y3RlZFBhdGhQcmVmaXgobGVnYWN5RmlsZW5hbWUpLCBXZWJDb3JlOjplbmNvZGVG
b3JGaWxlTmFtZShpZGVudGlmaWVyKSkpOwogfQogCiAvLyBUaGUgc2l6ZSBhbmQgb2Zmc2V0IG9m
IHRoZSBkZW5zZWx5IHBhY2tlZCBieXRlcyBpbiB0aGUgZmlsZSwgbm90IHNpemVvZiBhbmQgb2Zm
c2V0b2YsIHdoaWNoIHdvdWxkCiAvLyByZXByZXNlbnQgdGhlIHNpemUgYW5kIG9mZnNldCBvZiB0
aGUgc3RydWN0dXJlIGluIG1lbW9yeSwgcG9zc2libHkgd2l0aCBjb21waWxlci1hZGRlZCBwYWRk
aW5nLgotY29uc3Qgc2l6ZV90IENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZSA9IDIgKiBz
aXplb2YodWludDMyX3QpICsgNSAqIHNpemVvZih1aW50NjRfdCk7Citjb25zdCBzaXplX3QgQ29u
dGVudFJ1bGVMaXN0RmlsZUhlYWRlclNpemUgPSAyICogc2l6ZW9mKHVpbnQzMl90KSArIDUgKiBz
aXplb2YodWludDY0X3QpOwogY29uc3Qgc2l6ZV90IENvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFp
bk9mZnNldCA9IHNpemVvZih1aW50MzJfdCkgKyA1ICogc2l6ZW9mKHVpbnQ2NF90KTsKIAotc3Ry
dWN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSB7Ci0gICAgdWludDMyX3QgdmVyc2lvbiB7IENv
bnRlbnRFeHRlbnNpb25TdG9yZTo6Q3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbiB9
Oworc3RydWN0IENvbnRlbnRSdWxlTGlzdE1ldGFEYXRhIHsKKyAgICB1aW50MzJfdCB2ZXJzaW9u
IHsgQ29udGVudFJ1bGVMaXN0U3RvcmU6OkN1cnJlbnRDb250ZW50UnVsZUxpc3RGaWxlVmVyc2lv
biB9OwogICAgIHVpbnQ2NF90IHNvdXJjZVNpemUgeyAwIH07CiAgICAgdWludDY0X3QgYWN0aW9u
c1NpemUgeyAwIH07CiAgICAgdWludDY0X3QgZmlsdGVyc1dpdGhvdXRDb25kaXRpb25zQnl0ZWNv
ZGVTaXplIHsgMCB9OwpAQCAtMTA3LDcgKzEyNiw3IEBAIHN0cnVjdCBDb250ZW50RXh0ZW5zaW9u
TWV0YURhdGEgewogICAgIAogICAgIHNpemVfdCBmaWxlU2l6ZSgpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplCisgICAgICAgIHJldHVy
biBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZQogICAgICAgICAgICAgKyBzb3VyY2VTaXpl
CiAgICAgICAgICAgICArIGFjdGlvbnNTaXplCiAgICAgICAgICAgICArIGZpbHRlcnNXaXRob3V0
Q29uZGl0aW9uc0J5dGVjb2RlU2l6ZQpAQCAtMTE2LDcgKzEzNSw3IEBAIHN0cnVjdCBDb250ZW50
RXh0ZW5zaW9uTWV0YURhdGEgewogICAgIH0KIH07CiAKLXN0YXRpYyBEYXRhIGVuY29kZUNvbnRl
bnRFeHRlbnNpb25NZXRhRGF0YShjb25zdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFE
YXRhKQorc3RhdGljIERhdGEgZW5jb2RlQ29udGVudFJ1bGVMaXN0TWV0YURhdGEoY29uc3QgQ29u
dGVudFJ1bGVMaXN0TWV0YURhdGEmIG1ldGFEYXRhKQogewogICAgIFdURjo6UGVyc2lzdGVuY2U6
OkVuY29kZXIgZW5jb2RlcjsKIApAQCAtMTI4LDExICsxNDcsMTEgQEAgc3RhdGljIERhdGEgZW5j
b2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYQogICAgIGVuY29kZXIgPDwgbWV0YURhdGEuY29uZGl0
aW9uZWRGaWx0ZXJzQnl0ZWNvZGVTaXplOwogICAgIGVuY29kZXIgPDwgbWV0YURhdGEuY29uZGl0
aW9uc0FwcGx5T25seVRvRG9tYWluOwogCi0gICAgQVNTRVJUKGVuY29kZXIuYnVmZmVyU2l6ZSgp
ID09IENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZSk7CisgICAgQVNTRVJUKGVuY29kZXIu
YnVmZmVyU2l6ZSgpID09IENvbnRlbnRSdWxlTGlzdEZpbGVIZWFkZXJTaXplKTsKICAgICByZXR1
cm4gRGF0YShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CiB9CiAKLXN0
YXRpYyBib29sIGRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShDb250ZW50RXh0ZW5zaW9u
TWV0YURhdGEmIG1ldGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKK3N0YXRpYyBib29sIGRl
Y29kZUNvbnRlbnRSdWxlTGlzdE1ldGFEYXRhKENvbnRlbnRSdWxlTGlzdE1ldGFEYXRhJiBtZXRh
RGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCiB7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7
CiAgICAgZmlsZURhdGEuYXBwbHkoWyZtZXRhRGF0YSwgJnN1Y2Nlc3MsICZmaWxlRGF0YV0oY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKQEAgLTE2MiwxMyArMTgxLDEzIEBAIHN0
YXRpYyBib29sIGRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGEKICAgICByZXR1cm4gc3VjY2Vz
czsKIH0KIAotc3RhdGljIGJvb2wgb3BlbkFuZE1hcENvbnRlbnRFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBwYXRoLCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhLCBEYXRhJiBmaWxl
RGF0YSkKK3N0YXRpYyBib29sIG9wZW5BbmRNYXBDb250ZW50UnVsZUxpc3QoY29uc3QgU3RyaW5n
JiBwYXRoLCBDb250ZW50UnVsZUxpc3RNZXRhRGF0YSYgbWV0YURhdGEsIERhdGEmIGZpbGVEYXRh
KQogewogICAgIGZpbGVEYXRhID0gbWFwRmlsZShXZWJDb3JlOjpmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24ocGF0aCkuZGF0YSgpKTsKICAgICBpZiAoZmlsZURhdGEuaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmICghZGVjb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRh
KG1ldGFEYXRhLCBmaWxlRGF0YSkpCisgICAgaWYgKCFkZWNvZGVDb250ZW50UnVsZUxpc3RNZXRh
RGF0YShtZXRhRGF0YSwgZmlsZURhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTE4OCwxMyArMjA3LDEzIEBAIHN0YXRpYyBib29sIHdyaXRlRGF0YVRv
RmlsZShjb25zdCBEYXRhJiAKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAotc3RhdGljIHN0ZDo6
ZXJyb3JfY29kZSBjb21waWxlZFRvRmlsZShTdHJpbmcmJiBqc29uLCBjb25zdCBTdHJpbmcmIGZp
bmFsRmlsZVBhdGgsIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEsIERhdGEmIG1h
cHBlZERhdGEpCitzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVkVG9GaWxlKFN0cmluZyYm
IGpzb24sIGNvbnN0IFN0cmluZyYgZmluYWxGaWxlUGF0aCwgQ29udGVudFJ1bGVMaXN0TWV0YURh
dGEmIG1ldGFEYXRhLCBEYXRhJiBtYXBwZWREYXRhKQogewogICAgIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczsKIAogICAgIGNsYXNzIENvbXBpbGF0aW9uQ2xpZW50
IGZpbmFsIDogcHVibGljIENvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCB7CiAgICAg
cHVibGljOgotICAgICAgICBDb21waWxhdGlvbkNsaWVudChXZWJDb3JlOjpQbGF0Zm9ybUZpbGVI
YW5kbGUgZmlsZUhhbmRsZSwgQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhJiBtZXRhRGF0YSkKKyAg
ICAgICAgQ29tcGlsYXRpb25DbGllbnQoV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVI
YW5kbGUsIENvbnRlbnRSdWxlTGlzdE1ldGFEYXRhJiBtZXRhRGF0YSkKICAgICAgICAgICAgIDog
bV9maWxlSGFuZGxlKGZpbGVIYW5kbGUpCiAgICAgICAgICAgICAsIG1fbWV0YURhdGEobWV0YURh
dGEpCiAgICAgICAgIHsKQEAgLTI2Niw3ICsyODUsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2Rl
IGNvbXBpbGVkVG9GaWxlKFN0CiAgICAgICAgICAgICBtX21ldGFEYXRhLmNvbmRpdGlvbmVkRmls
dGVyc0J5dGVjb2RlU2l6ZSA9IG1fY29uZGl0aW9uRmlsdGVyc0J5dGVjb2RlV3JpdHRlbjsKICAg
ICAgICAgICAgIG1fbWV0YURhdGEuY29uZGl0aW9uc0FwcGx5T25seVRvRG9tYWluID0gbV9jb25k
aXRpb25zQXBwbHlPbmx5VG9Eb21haW47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIERhdGEg
aGVhZGVyID0gZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKG1fbWV0YURhdGEpOworICAg
ICAgICAgICAgRGF0YSBoZWFkZXIgPSBlbmNvZGVDb250ZW50UnVsZUxpc3RNZXRhRGF0YShtX21l
dGFEYXRhKTsKICAgICAgICAgICAgIGlmICghbV9maWxlRXJyb3IgJiYgV2ViQ29yZTo6c2Vla0Zp
bGUobV9maWxlSGFuZGxlLCAwbGwsIFdlYkNvcmU6OkZpbGVTZWVrT3JpZ2luOjpTZWVrRnJvbUJl
Z2lubmluZykgPT0gLTEpIHsKICAgICAgICAgICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUobV9m
aWxlSGFuZGxlKTsKICAgICAgICAgICAgICAgICBtX2ZpbGVFcnJvciA9IHRydWU7CkBAIC0yOTAs
NyArMzA5LDcgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRvRmlsZShTdAogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9m
aWxlSGFuZGxlOwotICAgICAgICBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1fbWV0YURhdGE7
CisgICAgICAgIENvbnRlbnRSdWxlTGlzdE1ldGFEYXRhJiBtX21ldGFEYXRhOwogICAgICAgICBz
aXplX3QgbV9maWx0ZXJzV2l0aG91dENvbmRpdGlvbnNCeXRlY29kZVdyaXR0ZW4geyAwIH07CiAg
ICAgICAgIHNpemVfdCBtX2ZpbHRlcnNXaXRoQ29uZGl0aW9uQnl0ZWNvZGVXcml0dGVuIHsgMCB9
OwogICAgICAgICBzaXplX3QgbV9jb25kaXRpb25GaWx0ZXJzQnl0ZWNvZGVXcml0dGVuIHsgMCB9
OwpAQCAtMzAxLDE2ICszMjAsMTYgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRv
RmlsZShTdAogICAgIH07CiAKICAgICBhdXRvIHRlbXBvcmFyeUZpbGVIYW5kbGUgPSBXZWJDb3Jl
OjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOwotICAgIFN0cmluZyB0ZW1wb3JhcnlGaWxlUGF0
aCA9IFdlYkNvcmU6Om9wZW5UZW1wb3JhcnlGaWxlKCJDb250ZW50RXh0ZW5zaW9uIiwgdGVtcG9y
YXJ5RmlsZUhhbmRsZSk7CisgICAgU3RyaW5nIHRlbXBvcmFyeUZpbGVQYXRoID0gV2ViQ29yZTo6
b3BlblRlbXBvcmFyeUZpbGUoIkNvbnRlbnRSdWxlTGlzdCIsIHRlbXBvcmFyeUZpbGVIYW5kbGUp
OwogICAgIGlmICh0ZW1wb3JhcnlGaWxlSGFuZGxlID09IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9y
bUZpbGVIYW5kbGUpCi0gICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9y
OjpDb21waWxlRmFpbGVkOworICAgICAgICByZXR1cm4gQ29udGVudFJ1bGVMaXN0U3RvcmU6OkVy
cm9yOjpDb21waWxlRmFpbGVkOwogICAgIAotICAgIGNoYXIgaW52YWxpZEhlYWRlcltDb250ZW50
RXh0ZW5zaW9uRmlsZUhlYWRlclNpemVdOworICAgIGNoYXIgaW52YWxpZEhlYWRlcltDb250ZW50
UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZV07CiAgICAgbWVtc2V0KGludmFsaWRIZWFkZXIsIDB4RkYs
IHNpemVvZihpbnZhbGlkSGVhZGVyKSk7CiAgICAgLy8gVGhpcyBoZWFkZXIgd2lsbCBiZSByZXdy
aXR0ZW4gaW4gQ29tcGlsYXRpb25DbGllbnQ6OmZpbmFsaXplLgogICAgIGlmIChXZWJDb3JlOjp3
cml0ZVRvRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCBpbnZhbGlkSGVhZGVyLCBzaXplb2YoaW52
YWxpZEhlYWRlcikpID09IC0xKSB7CiAgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3Jh
cnlGaWxlSGFuZGxlKTsKLSAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJy
b3I6OkNvbXBpbGVGYWlsZWQ7CisgICAgICAgIHJldHVybiBDb250ZW50UnVsZUxpc3RTdG9yZTo6
RXJyb3I6OkNvbXBpbGVGYWlsZWQ7CiAgICAgfQogCiAgICAgQ29tcGlsYXRpb25DbGllbnQgY29t
cGlsYXRpb25DbGllbnQodGVtcG9yYXJ5RmlsZUhhbmRsZSwgbWV0YURhdGEpOwpAQCAtMzIxLDI0
ICszNDAsMjQgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRvRmlsZShTdAogICAg
IH0KICAgICBpZiAoY29tcGlsYXRpb25DbGllbnQuaGFkRXJyb3JXaGlsZVdyaXRpbmdUb0ZpbGUo
KSkgewogICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7Ci0g
ICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVk
OworICAgICAgICByZXR1cm4gQ29udGVudFJ1bGVMaXN0U3RvcmU6OkVycm9yOjpDb21waWxlRmFp
bGVkOwogICAgIH0KICAgICAKICAgICBtYXBwZWREYXRhID0gYWRvcHRBbmRNYXBGaWxlKHRlbXBv
cmFyeUZpbGVIYW5kbGUsIDAsIG1ldGFEYXRhLmZpbGVTaXplKCkpOwogICAgIGlmIChtYXBwZWRE
YXRhLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJv
cjo6Q29tcGlsZUZhaWxlZDsKKyAgICAgICAgcmV0dXJuIENvbnRlbnRSdWxlTGlzdFN0b3JlOjpF
cnJvcjo6Q29tcGlsZUZhaWxlZDsKIAogICAgIGlmICghV2ViQ29yZTo6bW92ZUZpbGUodGVtcG9y
YXJ5RmlsZVBhdGgsIGZpbmFsRmlsZVBhdGgpKQotICAgICAgICByZXR1cm4gQ29udGVudEV4dGVu
c2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKyAgICAgICAgcmV0dXJuIENvbnRlbnRS
dWxlTGlzdFN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKIAogICAgIHJldHVybiB7IH07CiB9
CiAKLXN0YXRpYyBSZWY8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGVFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1l
dGFEYXRhLCBjb25zdCBEYXRhJiBmaWxlRGF0YSkKK3N0YXRpYyBSZWY8QVBJOjpDb250ZW50UnVs
ZUxpc3Q+IGNyZWF0ZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IENv
bnRlbnRSdWxlTGlzdE1ldGFEYXRhJiBtZXRhRGF0YSwgY29uc3QgRGF0YSYgZmlsZURhdGEpCiB7
CiAgICAgYXV0byBzaGFyZWRNZW1vcnkgPSBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKGNv
bnN0X2Nhc3Q8dWludDhfdCo+KGZpbGVEYXRhLmRhdGEoKSksIGZpbGVEYXRhLnNpemUoKSwgV2Vi
S2l0OjpTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLSAgICBjb25zdCBzaXpl
X3QgaGVhZGVyQW5kU291cmNlU2l6ZSA9IENvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZSAr
IG1ldGFEYXRhLnNvdXJjZVNpemU7Ci0gICAgYXV0byBjb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKAorICAgIGNvbnN0
IHNpemVfdCBoZWFkZXJBbmRTb3VyY2VTaXplID0gQ29udGVudFJ1bGVMaXN0RmlsZUhlYWRlclNp
emUgKyBtZXRhRGF0YS5zb3VyY2VTaXplOworICAgIGF1dG8gY29tcGlsZWRDb250ZW50UnVsZUxp
c3REYXRhID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEoCiAgICAgICAg
IFdURk1vdmUoc2hhcmVkTWVtb3J5KSwKICAgICAgICAgZmlsZURhdGEsCiAgICAgICAgIENvbmRp
dGlvbnNBcHBseU9ubHlUb0RvbWFpbk9mZnNldCwKQEAgLTM1NywyNSArMzc2LDI1IEBAIHN0YXRp
YyBSZWY8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGUKICAgICAgICAgICAgICsgbWV0YURh
dGEuZmlsdGVyc1dpdGhDb25kaXRpb25zQnl0ZWNvZGVTaXplLAogICAgICAgICBtZXRhRGF0YS5j
b25kaXRpb25lZEZpbHRlcnNCeXRlY29kZVNpemUKICAgICApOwotICAgIGF1dG8gY29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEpKTsKLSAgICByZXR1cm4g
QVBJOjpDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoaWRlbnRpZmllciwgV1RGTW92ZShjb21waWxl
ZENvbnRlbnRFeHRlbnNpb24pKTsKKyAgICBhdXRvIGNvbXBpbGVkQ29udGVudFJ1bGVMaXN0ID0g
V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdDo6Y3JlYXRlKFdURk1vdmUoY29tcGls
ZWRDb250ZW50UnVsZUxpc3REYXRhKSk7CisgICAgcmV0dXJuIEFQSTo6Q29udGVudFJ1bGVMaXN0
OjpjcmVhdGUoaWRlbnRpZmllciwgV1RGTW92ZShjb21waWxlZENvbnRlbnRSdWxlTGlzdCkpOwog
fQogCi12b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6bG9va3VwQ29udGVudEV4dGVuc2lvbihj
b25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpD
b250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCit2
b2lkIENvbnRlbnRSdWxlTGlzdFN0b3JlOjpsb29rdXBDb250ZW50UnVsZUxpc3QoY29uc3QgV1RG
OjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoUmVmUHRyPEFQSTo6Q29udGVudFJ1
bGVMaXN0Piwgc3RkOjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9y
ZWFkUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50
aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBzdG9yZVBhdGggPSBtX3N0b3JlUGF0
aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBwYXRoID0gY29uc3RydWN0ZWRQYXRo
KHN0b3JlUGF0aCwgaWRlbnRpZmllcik7CisgICAgbV9yZWFkUXVldWUtPmRpc3BhdGNoKFtwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmlzb2xh
dGVkQ29weSgpLCBzdG9yZVBhdGggPSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgbGVnYWN5
RmlsZW5hbWUgPSBtX2xlZ2FjeUZpbGVuYW1lLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvIHBhdGggPSBjb25z
dHJ1Y3RlZFBhdGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyLCBsZWdhY3lGaWxlbmFtZSk7CiAgICAg
ICAgIAotICAgICAgICBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEgbWV0YURhdGE7CisgICAgICAg
IENvbnRlbnRSdWxlTGlzdE1ldGFEYXRhIG1ldGFEYXRhOwogICAgICAgICBEYXRhIGZpbGVEYXRh
OwotICAgICAgICBpZiAoIW9wZW5BbmRNYXBDb250ZW50RXh0ZW5zaW9uKHBhdGgsIG1ldGFEYXRh
LCBmaWxlRGF0YSkpIHsKKyAgICAgICAgaWYgKCFvcGVuQW5kTWFwQ29udGVudFJ1bGVMaXN0KHBh
dGgsIG1ldGFEYXRhLCBmaWxlRGF0YSkpIHsKICAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCBFcnJvcjo6TG9va3VwRmFpbGVkKTsKICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBpZiAobWV0YURhdGEudmVyc2lvbiAhPSBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkN1cnJl
bnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24pIHsKKyAgICAgICAgaWYgKG1ldGFEYXRhLnZl
cnNpb24gIT0gQ29udGVudFJ1bGVMaXN0U3RvcmU6OkN1cnJlbnRDb250ZW50UnVsZUxpc3RGaWxl
VmVyc2lvbikgewogICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKG51bGxwdHIsIEVycm9yOjpWZXJzaW9uTWlzbWF0Y2gpOwogICAgICAgICAgICAgfSk7CkBA
IC0zODgsMTQgKzQwNywxNCBAQCB2b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6bG9va3VwQ29u
dGVuCiAgICAgfSk7CiB9CiAKLXZvaWQgQ29udGVudEV4dGVuc2lvblN0b3JlOjpnZXRBdmFpbGFi
bGVDb250ZW50RXh0ZW5zaW9uSWRlbnRpZmllcnMoRnVuY3Rpb248dm9pZChXVEY6OlZlY3RvcjxX
VEY6OlN0cmluZz4pPiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgQ29udGVudFJ1bGVMaXN0U3Rv
cmU6OmdldEF2YWlsYWJsZUNvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzKEZ1bmN0aW9uPHZvaWQo
V1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+KT4gY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9y
ZWFkUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHN0b3Jl
UGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgIG1fcmVhZFF1ZXVlLT5k
aXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzdG9yZVBhdGggPSBtX3N0
b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgbGVnYWN5RmlsZW5hbWUgPSBtX2xlZ2FjeUZpbGVuYW1l
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewogCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGZ1bGxQYXRocyA9IFdlYkNvcmU6Omxpc3RE
aXJlY3Rvcnkoc3RvcmVQYXRoLCBjb25zdHJ1Y3RlZFBhdGhGaWx0ZXIoKSk7CisgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IGZ1bGxQYXRocyA9IFdlYkNvcmU6Omxpc3REaXJlY3Rvcnkoc3RvcmVQYXRo
LCBjb25zdHJ1Y3RlZFBhdGhGaWx0ZXIobGVnYWN5RmlsZW5hbWUpKTsKICAgICAgICAgVmVjdG9y
PFN0cmluZz4gaWRlbnRpZmllcnM7CiAgICAgICAgIGlkZW50aWZpZXJzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoZnVsbFBhdGhzLnNpemUoKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8gcHJlZml4TGVu
Z3RoID0gY29uc3RydWN0ZWRQYXRoUHJlZml4KCkubGVuZ3RoKCk7CisgICAgICAgIGNvbnN0IGF1
dG8gcHJlZml4TGVuZ3RoID0gY29uc3RydWN0ZWRQYXRoUHJlZml4KGxlZ2FjeUZpbGVuYW1lKS5s
ZW5ndGgoKTsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogZnVsbFBhdGhzKQogICAg
ICAgICAgICAgaWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKFdlYkNvcmU6OmRlY29kZUZyb21G
aWxlbmFtZShwYXRoLnN1YnN0cmluZyhwYXRoLnJldmVyc2VGaW5kKCcvJykgKyAxICsgcHJlZml4
TGVuZ3RoKSkpOwogCkBAIC00MDUsMTMgKzQyNCwxMyBAQCB2b2lkIENvbnRlbnRFeHRlbnNpb25T
dG9yZTo6Z2V0QXZhaWxhYmxlCiAgICAgfSk7CiB9CiAKLXZvaWQgQ29udGVudEV4dGVuc2lvblN0
b3JlOjpjb21waWxlQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmll
ciwgV1RGOjpTdHJpbmcmJiBqc29uLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6OkNvbnRlbnRF
eHRlbnNpb24+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgQ29u
dGVudFJ1bGVMaXN0U3RvcmU6OmNvbXBpbGVDb250ZW50UnVsZUxpc3QoY29uc3QgV1RGOjpTdHJp
bmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYganNvbiwgRnVuY3Rpb248dm9pZChSZWZQdHI8
QVBJOjpDb250ZW50UnVsZUxpc3Q+LCBzdGQ6OmVycm9yX2NvZGUpPiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBdG9taWNTdHJpbmc6OmluaXQoKTsKLSAgICBtX2NvbXBpbGVRdWV1ZS0+ZGlz
cGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciA9IGlkZW50
aWZpZXIuaXNvbGF0ZWRDb3B5KCksIGpzb24gPSBqc29uLmlzb2xhdGVkQ29weSgpLCBzdG9yZVBh
dGggPSBtX3N0b3JlUGF0aC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gcGF0aCA9
IGNvbnN0cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50aWZpZXIpOworICAgIG1fY29tcGlsZVF1
ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBpZGVudGlmaWVy
ID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwgbGVnYWN5RmlsZW5hbWUgPSBtX2xlZ2FjeUZp
bGVuYW1lLCBqc29uID0ganNvbi5pc29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0gbV9zdG9yZVBh
dGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBh
dGgoc3RvcmVQYXRoLCBpZGVudGlmaWVyLCBsZWdhY3lGaWxlbmFtZSk7CiAKLSAgICAgICAgQ29u
dGVudEV4dGVuc2lvbk1ldGFEYXRhIG1ldGFEYXRhOworICAgICAgICBDb250ZW50UnVsZUxpc3RN
ZXRhRGF0YSBtZXRhRGF0YTsKICAgICAgICAgRGF0YSBmaWxlRGF0YTsKICAgICAgICAgYXV0byBl
cnJvciA9IGNvbXBpbGVkVG9GaWxlKFdURk1vdmUoanNvbiksIHBhdGgsIG1ldGFEYXRhLCBmaWxl
RGF0YSk7CiAgICAgICAgIGlmIChlcnJvcikgewpAQCAtNDIyLDE2ICs0NDEsMTYgQEAgdm9pZCBD
b250ZW50RXh0ZW5zaW9uU3RvcmU6OmNvbXBpbGVDb250ZQogICAgICAgICB9CiAKICAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0
ZWRUaGlzKSwgaWRlbnRpZmllciA9IFdURk1vdmUoaWRlbnRpZmllciksIGZpbGVEYXRhID0gV1RG
TW92ZShmaWxlRGF0YSksIG1ldGFEYXRhID0gV1RGTW92ZShtZXRhRGF0YSksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIHsKLSAgICAgICAgICAgIFJlZlB0
cjxBUEk6OkNvbnRlbnRFeHRlbnNpb24+IGNvbnRlbnRFeHRlbnNpb24gPSBjcmVhdGVFeHRlbnNp
b24oaWRlbnRpZmllciwgbWV0YURhdGEsIGZpbGVEYXRhKTsKLSAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKGNvbnRlbnRFeHRlbnNpb24sIHsgfSk7CisgICAgICAgICAgICBSZWZQdHI8QVBJ
OjpDb250ZW50UnVsZUxpc3Q+IGNvbnRlbnRSdWxlTGlzdCA9IGNyZWF0ZUV4dGVuc2lvbihpZGVu
dGlmaWVyLCBtZXRhRGF0YSwgZmlsZURhdGEpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoY29udGVudFJ1bGVMaXN0LCB7IH0pOwogICAgICAgICB9KTsKICAgICB9KTsKIH0KIAotdm9p
ZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RG
OjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoc3RkOjplcnJvcl9jb2RlKT4gY29t
cGxldGlvbkhhbmRsZXIpCit2b2lkIENvbnRlbnRSdWxlTGlzdFN0b3JlOjpyZW1vdmVDb250ZW50
UnVsZUxpc3QoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9uPHZvaWQoc3Rk
OjplcnJvcl9jb2RlKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9yZW1vdmVRdWV1ZS0+
ZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciA9IGlk
ZW50aWZpZXIuaXNvbGF0ZWRDb3B5KCksIHN0b3JlUGF0aCA9IG1fc3RvcmVQYXRoLmlzb2xhdGVk
Q29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICBhdXRvIHBhdGggPSBjb25zdHJ1Y3RlZFBhdGgoc3RvcmVQYXRo
LCBpZGVudGlmaWVyKTsKKyAgICBtX3JlbW92ZVF1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCBpZGVudGlmaWVyID0gaWRlbnRpZmllci5pc29sYXRlZENvcHko
KSwgc3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGxlZ2FjeUZpbGVuYW1l
ID0gbV9sZWdhY3lGaWxlbmFtZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBwYXRoID0gY29uc3RydWN0ZWRQ
YXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllciwgbGVnYWN5RmlsZW5hbWUpOwogCiAgICAgICAgIGlm
ICghV2ViQ29yZTo6ZGVsZXRlRmlsZShwYXRoKSkgewogICAgICAgICAgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gewpAQCAtNDQ2LDI3
ICs0NjUsMjcgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OnJlbW92ZUNvbnRlbgogICAg
IH0pOwogfQogCi12b2lkIENvbnRlbnRFeHRlbnNpb25TdG9yZTo6c3luY2hyb25vdXNSZW1vdmVB
bGxDb250ZW50RXh0ZW5zaW9ucygpCit2b2lkIENvbnRlbnRSdWxlTGlzdFN0b3JlOjpzeW5jaHJv
bm91c1JlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHMoKQogewogICAgIGZvciAoY29uc3QgYXV0byYg
cGF0aCA6IFdlYkNvcmU6Omxpc3REaXJlY3RvcnkobV9zdG9yZVBhdGgsICIqIikpCiAgICAgICAg
IFdlYkNvcmU6OmRlbGV0ZUZpbGUocGF0aCk7CiB9CiAKLXZvaWQgQ29udGVudEV4dGVuc2lvblN0
b3JlOjppbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb24oY29uc3QgV1RGOjpTdHJpbmcm
IGlkZW50aWZpZXIpCit2b2lkIENvbnRlbnRSdWxlTGlzdFN0b3JlOjppbnZhbGlkYXRlQ29udGVu
dFJ1bGVMaXN0VmVyc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllcikKIHsKLSAgICBh
dXRvIGZpbGUgPSBXZWJDb3JlOjpvcGVuRmlsZShjb25zdHJ1Y3RlZFBhdGgobV9zdG9yZVBhdGgs
IGlkZW50aWZpZXIpLCBXZWJDb3JlOjpPcGVuRm9yV3JpdGUpOworICAgIGF1dG8gZmlsZSA9IFdl
YkNvcmU6Om9wZW5GaWxlKGNvbnN0cnVjdGVkUGF0aChtX3N0b3JlUGF0aCwgaWRlbnRpZmllciwg
bV9sZWdhY3lGaWxlbmFtZSksIFdlYkNvcmU6Ok9wZW5Gb3JXcml0ZSk7CiAgICAgaWYgKGZpbGUg
PT0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBpbnZhbGlkSGVhZGVyID0gezAsIDAsIDAsIDAs
IDAsIDB9OworICAgIENvbnRlbnRSdWxlTGlzdE1ldGFEYXRhIGludmFsaWRIZWFkZXIgPSB7MCwg
MCwgMCwgMCwgMCwgMH07CiAgICAgYXV0byBieXRlc1dyaXR0ZW4gPSBXZWJDb3JlOjp3cml0ZVRv
RmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmaW52YWxpZEhlYWRlciks
IHNpemVvZihpbnZhbGlkSGVhZGVyKSk7CiAgICAgQVNTRVJUX1VOVVNFRChieXRlc1dyaXR0ZW4s
IGJ5dGVzV3JpdHRlbiA9PSBzaXplb2YoaW52YWxpZEhlYWRlcikpOwogICAgIFdlYkNvcmU6OmNs
b3NlRmlsZShmaWxlKTsKIH0KIAotdm9pZCBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmdldENvbnRl
bnRFeHRlbnNpb25Tb3VyY2UoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1bmN0aW9u
PHZvaWQoV1RGOjpTdHJpbmcpPiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgQ29udGVudFJ1bGVM
aXN0U3RvcmU6OmdldENvbnRlbnRSdWxlTGlzdFNvdXJjZShjb25zdCBXVEY6OlN0cmluZyYgaWRl
bnRpZmllciwgRnVuY3Rpb248dm9pZChXVEY6OlN0cmluZyk+IGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIG1fcmVhZFF1ZXVlLT5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBpZGVudGlmaWVyID0gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0g
bV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gcGF0aCA9IGNvbnN0
cnVjdGVkUGF0aChzdG9yZVBhdGgsIGlkZW50aWZpZXIpOworICAgIG1fcmVhZFF1ZXVlLT5kaXNw
YXRjaChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBpZGVudGlmaWVyID0gaWRlbnRp
Zmllci5pc29sYXRlZENvcHkoKSwgc3RvcmVQYXRoID0gbV9zdG9yZVBhdGguaXNvbGF0ZWRDb3B5
KCksIGxlZ2FjeUZpbGVuYW1lID0gbV9sZWdhY3lGaWxlbmFtZSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBw
YXRoID0gY29uc3RydWN0ZWRQYXRoKHN0b3JlUGF0aCwgaWRlbnRpZmllciwgbGVnYWN5RmlsZW5h
bWUpOwogICAgICAgICAKICAgICAgICAgYXV0byBjb21wbGV0ZSA9IFtwcm90ZWN0ZWRUaGlzID0g
V1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oU3RyaW5nIHNvdXJjZSkgbXV0YWJsZSB7CiAgICAgICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzb3Vy
Y2UgPSBzb3VyY2UuaXNvbGF0ZWRDb3B5KCldIHsKQEAgLTQ3NCw5ICs0OTMsOSBAQCB2b2lkIENv
bnRlbnRFeHRlbnNpb25TdG9yZTo6Z2V0Q29udGVudEV4CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgfTsKICAgICAgICAgCi0gICAgICAgIENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSBtZXRhRGF0
YTsKKyAgICAgICAgQ29udGVudFJ1bGVMaXN0TWV0YURhdGEgbWV0YURhdGE7CiAgICAgICAgIERh
dGEgZmlsZURhdGE7Ci0gICAgICAgIGlmICghb3BlbkFuZE1hcENvbnRlbnRFeHRlbnNpb24ocGF0
aCwgbWV0YURhdGEsIGZpbGVEYXRhKSkgeworICAgICAgICBpZiAoIW9wZW5BbmRNYXBDb250ZW50
UnVsZUxpc3QocGF0aCwgbWV0YURhdGEsIGZpbGVEYXRhKSkgewogICAgICAgICAgICAgY29tcGxl
dGUoeyB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDg3LDggKzUwNiw4
IEBAIHZvaWQgQ29udGVudEV4dGVuc2lvblN0b3JlOjpnZXRDb250ZW50RXgKICAgICAgICAgICAg
ICAgICBjb21wbGV0ZSh7IH0pOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJvb2wgaXM4Qml0ID0gZmlsZURhdGEuZGF0YSgpW0NvbnRlbnRFeHRl
bnNpb25GaWxlSGVhZGVyU2l6ZV07Ci0gICAgICAgICAgICBzaXplX3Qgc3RhcnQgPSBDb250ZW50
RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUgKyBzaXplb2YoYm9vbCk7CisgICAgICAgICAgICBib29s
IGlzOEJpdCA9IGZpbGVEYXRhLmRhdGEoKVtDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6ZV07
CisgICAgICAgICAgICBzaXplX3Qgc3RhcnQgPSBDb250ZW50UnVsZUxpc3RGaWxlSGVhZGVyU2l6
ZSArIHNpemVvZihib29sKTsKICAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBtZXRhRGF0YS5z
b3VyY2VTaXplIC0gc2l6ZW9mKGJvb2wpOwogICAgICAgICAgICAgaWYgKGlzOEJpdCkKICAgICAg
ICAgICAgICAgICBjb21wbGV0ZShTdHJpbmcoZmlsZURhdGEuZGF0YSgpICsgc3RhcnQsIGxlbmd0
aCkpOwpAQCAtNTA0LDkgKzUyMyw5IEBAIHZvaWQgQ29udGVudEV4dGVuc2lvblN0b3JlOjpnZXRD
b250ZW50RXgKICAgICB9KTsKIH0KIAotY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVu
dEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpCitjb25zdCBzdGQ6OmVycm9yX2NhdGVnb3J5
JiBjb250ZW50UnVsZUxpc3RTdG9yZUVycm9yQ2F0ZWdvcnkoKQogewotICAgIGNsYXNzIENvbnRl
bnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkgOiBwdWJsaWMgc3RkOjplcnJvcl9jYXRlZ29y
eSB7CisgICAgY2xhc3MgQ29udGVudFJ1bGVMaXN0U3RvcmVFcnJvckNhdGVnb3J5IDogcHVibGlj
IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkgewogICAgICAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3Qg
bm9leGNlcHQgZmluYWwKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICJjb250ZW50IGV4
dGVuc2lvbiBzdG9yZSI7CkBAIC01MTQsMTQgKzUzMywxNCBAQCBjb25zdCBzdGQ6OmVycm9yX2Nh
dGVnb3J5JiBjb250ZW50RXh0ZW5zCiAKICAgICAgICAgc3RkOjpzdHJpbmcgbWVzc2FnZShpbnQg
ZXJyb3JDb2RlKSBjb25zdCBmaW5hbAogICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0
YXRpY19jYXN0PENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+KGVycm9yQ29kZSkpIHsKLSAg
ICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6TG9va3VwRmFpbGVk
OgorICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxDb250ZW50UnVsZUxpc3RTdG9yZTo6
RXJyb3I+KGVycm9yQ29kZSkpIHsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudFJ1bGVMaXN0U3Rv
cmU6OkVycm9yOjpMb29rdXBGYWlsZWQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJVbnNwZWNp
ZmllZCBlcnJvciBkdXJpbmcgbG9va3VwLiI7Ci0gICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRl
bnNpb25TdG9yZTo6RXJyb3I6OlZlcnNpb25NaXNtYXRjaDoKKyAgICAgICAgICAgIGNhc2UgQ29u
dGVudFJ1bGVMaXN0U3RvcmU6OkVycm9yOjpWZXJzaW9uTWlzbWF0Y2g6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuICJWZXJzaW9uIG9mIGZpbGUgZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiBvZiBpbnRl
cnByZXRlci4iOwotICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9y
OjpDb21waWxlRmFpbGVkOgorICAgICAgICAgICAgY2FzZSBDb250ZW50UnVsZUxpc3RTdG9yZTo6
RXJyb3I6OkNvbXBpbGVGYWlsZWQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJVbnNwZWNpZmll
ZCBlcnJvciBkdXJpbmcgY29tcGlsZS4iOwotICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OkVycm9yOjpSZW1vdmVGYWlsZWQ6CisgICAgICAgICAgICBjYXNlIENvbnRlbnRS
dWxlTGlzdFN0b3JlOjpFcnJvcjo6UmVtb3ZlRmFpbGVkOgogICAgICAgICAgICAgICAgIHJldHVy
biAiVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIHJlbW92ZS4iOwogICAgICAgICAgICAgfQogCkBA
IC01MjksOCArNTQ4LDggQEAgY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVu
cwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb250ZW50
RXh0ZW5zaW9uU3RvcmVFcnJvckNhdGVnb3J5PiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29y
eTsKLSAgICByZXR1cm4gY29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnk7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPENvbnRlbnRSdWxlTGlzdFN0b3JlRXJyb3JDYXRlZ29yeT4gY29udGVu
dFJ1bGVMaXN0RXJyb3JDYXRlZ29yeTsKKyAgICByZXR1cm4gY29udGVudFJ1bGVMaXN0RXJyb3JD
YXRlZ29yeTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgQVBJCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5oCShyZXZp
c2lvbiAyMTY1MzkpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVu
dEV4dGVuc2lvblN0b3JlLmg6MjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlIDxzeXN0ZW1fZXJyb3I+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworY2xh
c3MgV29ya1F1ZXVlOworfQorCituYW1lc3BhY2UgQVBJIHsKKworY2xhc3MgQ29udGVudEV4dGVu
c2lvbjsKKworY2xhc3MgQ29udGVudEV4dGVuc2lvblN0b3JlIGZpbmFsIDogcHVibGljIE9iamVj
dEltcGw8T2JqZWN0OjpUeXBlOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHsKK3B1YmxpYzoKKyAg
ICBlbnVtIGNsYXNzIEVycm9yIHsKKyAgICAgICAgTG9va3VwRmFpbGVkID0gMSwKKyAgICAgICAg
VmVyc2lvbk1pc21hdGNoLAorICAgICAgICBDb21waWxlRmFpbGVkLAorICAgICAgICBSZW1vdmVG
YWlsZWQKKyAgICB9OworICAgIAorICAgIC8vIFRoaXMgc2hvdWxkIGJlIGluY3JlbWVudGVkIGV2
ZXJ5IHRpbWUgYSBmdW5jdGlvbmFsIGNoYW5nZSBpcyBtYWRlIHRvIHRoZSBieXRlY29kZSwgZmls
ZSBmb3JtYXQsIGV0Yy4KKyAgICAvLyB0byBwcmV2ZW50IGNyYXNoaW5nIHdoaWxlIGxvYWRpbmcg
b2xkIGRhdGEuCisgICAgLy8gQWxzbyB1cGRhdGUgQ29udGVudEV4dGVuc2lvblN0b3JlOjpnZXRD
b250ZW50RXh0ZW5zaW9uU291cmNlIHRvIGJlIGFibGUgdG8gZmluZCB0aGUgb3JpZ2luYWwgSlNP
TgorICAgIC8vIHNvdXJjZSBmcm9tIG9sZCB2ZXJzaW9ucy4KKyAgICBjb25zdCBzdGF0aWMgdWlu
dDMyX3QgQ3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbiA9IDk7CisKKyAgICBzdGF0
aWMgQ29udGVudEV4dGVuc2lvblN0b3JlJiBkZWZhdWx0U3RvcmUoKTsKKyAgICBzdGF0aWMgUmVm
PENvbnRlbnRFeHRlbnNpb25TdG9yZT4gc3RvcmVXaXRoUGF0aChjb25zdCBXVEY6OlN0cmluZyYg
c3RvcmVQYXRoKTsKKworICAgIGV4cGxpY2l0IENvbnRlbnRFeHRlbnNpb25TdG9yZSgpOworICAg
IGV4cGxpY2l0IENvbnRlbnRFeHRlbnNpb25TdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQ
YXRoKTsKKyAgICB2aXJ0dWFsIH5Db250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKKworICAgIHZvaWQg
Y29tcGlsZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdU
Rjo6U3RyaW5nJiYganNvbiwgRnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5z
aW9uPiwgc3RkOjplcnJvcl9jb2RlKT4pOworICAgIHZvaWQgbG9va3VwQ29udGVudEV4dGVuc2lv
bihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChSZWZQdHI8QVBJ
OjpDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4pOworICAgIHZvaWQgcmVtb3Zl
Q29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248
dm9pZChzdGQ6OmVycm9yX2NvZGUpPik7CisgICAgdm9pZCBnZXRBdmFpbGFibGVDb250ZW50RXh0
ZW5zaW9uSWRlbnRpZmllcnMoRnVuY3Rpb248dm9pZChXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4p
Pik7CisKKyAgICAvLyBGb3IgdGVzdGluZyBvbmx5LgorICAgIHZvaWQgc3luY2hyb25vdXNSZW1v
dmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOworICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRlbnRFeHRl
bnNpb25WZXJzaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyKTsKKyAgICB2b2lkIGdl
dENvbnRlbnRFeHRlbnNpb25Tb3VyY2UoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIEZ1
bmN0aW9uPHZvaWQoV1RGOjpTdHJpbmcpPik7CisKK3ByaXZhdGU6CisgICAgV1RGOjpTdHJpbmcg
ZGVmYXVsdFN0b3JlUGF0aCgpOworCisgICAgY29uc3QgV1RGOjpTdHJpbmcgbV9zdG9yZVBhdGg7
CisgICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX2NvbXBpbGVRdWV1ZTsKKyAgICBSZWY8V1RGOjpX
b3JrUXVldWU+IG1fcmVhZFF1ZXVlOworICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9yZW1vdmVR
dWV1ZTsKK307CisKK2NvbnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkmIGNvbnRlbnRFeHRlbnNpb25T
dG9yZUVycm9yQ2F0ZWdvcnkoKTsKKworaW5saW5lIHN0ZDo6ZXJyb3JfY29kZSBtYWtlX2Vycm9y
X2NvZGUoQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvciBlcnJvcikKK3sKKyAgICByZXR1cm4g
eyBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSwgY29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRl
Z29yeSgpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIEFQSQorCituYW1lc3BhY2Ugc3RkIHsKK3Rl
bXBsYXRlPD4gc3RydWN0IGlzX2Vycm9yX2NvZGVfZW51bTxBUEk6OkNvbnRlbnRFeHRlbnNpb25T
dG9yZTo6RXJyb3I+IDogcHVibGljIHRydWVfdHlwZSB7IH07Cit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9BUElDb250ZW50UnVsZUxpc3RTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJQ29udGVudFJ1bGVMaXN0U3RvcmUuaAkocmV2aXNpb24gMjE2NTM5
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElDb250ZW50UnVsZUxpc3RTdG9y
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw5IEBAIGNsYXNzIFdvcmtRdWV1ZTsKIAog
bmFtZXNwYWNlIEFQSSB7CiAKLWNsYXNzIENvbnRlbnRFeHRlbnNpb247CitjbGFzcyBDb250ZW50
UnVsZUxpc3Q7CiAKLWNsYXNzIENvbnRlbnRFeHRlbnNpb25TdG9yZSBmaW5hbCA6IHB1YmxpYyBP
YmplY3RJbXBsPE9iamVjdDo6VHlwZTo6Q29udGVudEV4dGVuc2lvblN0b3JlPiB7CitjbGFzcyBD
b250ZW50UnVsZUxpc3RTdG9yZSBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVjdDo6VHlw
ZTo6Q29udGVudFJ1bGVMaXN0U3RvcmU+IHsKIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEVycm9y
IHsKICAgICAgICAgTG9va3VwRmFpbGVkID0gMSwKQEAgLTUwLDQ3ICs1MCw1MCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgLy8gVGhpcyBzaG91bGQgYmUgaW5jcmVtZW50ZWQgZXZlcnkgdGltZSBhIGZ1
bmN0aW9uYWwgY2hhbmdlIGlzIG1hZGUgdG8gdGhlIGJ5dGVjb2RlLCBmaWxlIGZvcm1hdCwgZXRj
LgogICAgIC8vIHRvIHByZXZlbnQgY3Jhc2hpbmcgd2hpbGUgbG9hZGluZyBvbGQgZGF0YS4KLSAg
ICAvLyBBbHNvIHVwZGF0ZSBDb250ZW50RXh0ZW5zaW9uU3RvcmU6OmdldENvbnRlbnRFeHRlbnNp
b25Tb3VyY2UgdG8gYmUgYWJsZSB0byBmaW5kIHRoZSBvcmlnaW5hbCBKU09OCisgICAgLy8gQWxz
byB1cGRhdGUgQ29udGVudFJ1bGVMaXN0U3RvcmU6OmdldENvbnRlbnRSdWxlTGlzdFNvdXJjZSB0
byBiZSBhYmxlIHRvIGZpbmQgdGhlIG9yaWdpbmFsIEpTT04KICAgICAvLyBzb3VyY2UgZnJvbSBv
bGQgdmVyc2lvbnMuCi0gICAgY29uc3Qgc3RhdGljIHVpbnQzMl90IEN1cnJlbnRDb250ZW50RXh0
ZW5zaW9uRmlsZVZlcnNpb24gPSA5OworICAgIGNvbnN0IHN0YXRpYyB1aW50MzJfdCBDdXJyZW50
Q29udGVudFJ1bGVMaXN0RmlsZVZlcnNpb24gPSA5OwogCi0gICAgc3RhdGljIENvbnRlbnRFeHRl
bnNpb25TdG9yZSYgZGVmYXVsdFN0b3JlKCk7Ci0gICAgc3RhdGljIFJlZjxDb250ZW50RXh0ZW5z
aW9uU3RvcmU+IHN0b3JlV2l0aFBhdGgoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCk7Cisg
ICAgc3RhdGljIENvbnRlbnRSdWxlTGlzdFN0b3JlJiBkZWZhdWx0U3RvcmUoYm9vbCBsZWdhY3lG
aWxlbmFtZSk7CisgICAgc3RhdGljIFJlZjxDb250ZW50UnVsZUxpc3RTdG9yZT4gc3RvcmVXaXRo
UGF0aChjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoLCBib29sIGxlZ2FjeUZpbGVuYW1lKTsK
IAotICAgIGV4cGxpY2l0IENvbnRlbnRFeHRlbnNpb25TdG9yZSgpOwotICAgIGV4cGxpY2l0IENv
bnRlbnRFeHRlbnNpb25TdG9yZShjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsKLSAgICB2
aXJ0dWFsIH5Db250ZW50RXh0ZW5zaW9uU3RvcmUoKTsKLQotICAgIHZvaWQgY29tcGlsZUNvbnRl
bnRFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIsIFdURjo6U3RyaW5nJiYg
anNvbiwgRnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiwgc3RkOjpl
cnJvcl9jb2RlKT4pOwotICAgIHZvaWQgbG9va3VwQ29udGVudEV4dGVuc2lvbihjb25zdCBXVEY6
OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChSZWZQdHI8QVBJOjpDb250ZW50RXh0
ZW5zaW9uPiwgc3RkOjplcnJvcl9jb2RlKT4pOwotICAgIHZvaWQgcmVtb3ZlQ29udGVudEV4dGVu
c2lvbihjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9pZChzdGQ6OmVy
cm9yX2NvZGUpPik7Ci0gICAgdm9pZCBnZXRBdmFpbGFibGVDb250ZW50RXh0ZW5zaW9uSWRlbnRp
ZmllcnMoRnVuY3Rpb248dm9pZChXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4pPik7CisgICAgZXhw
bGljaXQgQ29udGVudFJ1bGVMaXN0U3RvcmUoYm9vbCBsZWdhY3lGaWxlbmFtZSk7CisgICAgZXhw
bGljaXQgQ29udGVudFJ1bGVMaXN0U3RvcmUoY29uc3QgV1RGOjpTdHJpbmcmIHN0b3JlUGF0aCwg
Ym9vbCBsZWdhY3lGaWxlbmFtZSk7CisgICAgdmlydHVhbCB+Q29udGVudFJ1bGVMaXN0U3RvcmUo
KTsKKworICAgIHZvaWQgY29tcGlsZUNvbnRlbnRSdWxlTGlzdChjb25zdCBXVEY6OlN0cmluZyYg
aWRlbnRpZmllciwgV1RGOjpTdHJpbmcmJiBqc29uLCBGdW5jdGlvbjx2b2lkKFJlZlB0cjxBUEk6
OkNvbnRlbnRSdWxlTGlzdD4sIHN0ZDo6ZXJyb3JfY29kZSk+KTsKKyAgICB2b2lkIGxvb2t1cENv
bnRlbnRSdWxlTGlzdChjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwgRnVuY3Rpb248dm9p
ZChSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+LCBzdGQ6OmVycm9yX2NvZGUpPik7CisgICAg
dm9pZCByZW1vdmVDb250ZW50UnVsZUxpc3QoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIs
IEZ1bmN0aW9uPHZvaWQoc3RkOjplcnJvcl9jb2RlKT4pOworICAgIHZvaWQgZ2V0QXZhaWxhYmxl
Q29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnMoRnVuY3Rpb248dm9pZChXVEY6OlZlY3RvcjxXVEY6
OlN0cmluZz4pPik7CiAKICAgICAvLyBGb3IgdGVzdGluZyBvbmx5LgotICAgIHZvaWQgc3luY2hy
b25vdXNSZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucygpOwotICAgIHZvaWQgaW52YWxpZGF0ZUNv
bnRlbnRFeHRlbnNpb25WZXJzaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyKTsKLSAg
ICB2b2lkIGdldENvbnRlbnRFeHRlbnNpb25Tb3VyY2UoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50
aWZpZXIsIEZ1bmN0aW9uPHZvaWQoV1RGOjpTdHJpbmcpPik7CisgICAgdm9pZCBzeW5jaHJvbm91
c1JlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHMoKTsKKyAgICB2b2lkIGludmFsaWRhdGVDb250ZW50
UnVsZUxpc3RWZXJzaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyKTsKKyAgICB2b2lk
IGdldENvbnRlbnRSdWxlTGlzdFNvdXJjZShjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllciwg
RnVuY3Rpb248dm9pZChXVEY6OlN0cmluZyk+KTsKIAogcHJpdmF0ZToKLSAgICBXVEY6OlN0cmlu
ZyBkZWZhdWx0U3RvcmVQYXRoKCk7Ci0KKyAgICBXVEY6OlN0cmluZyBkZWZhdWx0U3RvcmVQYXRo
KGJvb2wgbGVnYWN5RmlsZW5hbWUpOworICAgIHN0YXRpYyBDb250ZW50UnVsZUxpc3RTdG9yZSYg
bGVnYWN5RGVmYXVsdFN0b3JlKCk7CisgICAgc3RhdGljIENvbnRlbnRSdWxlTGlzdFN0b3JlJiBu
b25MZWdhY3lEZGVmYXVsdFN0b3JlKCk7CisgICAgCiAgICAgY29uc3QgV1RGOjpTdHJpbmcgbV9z
dG9yZVBhdGg7CiAgICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX2NvbXBpbGVRdWV1ZTsKICAgICBS
ZWY8V1RGOjpXb3JrUXVldWU+IG1fcmVhZFF1ZXVlOwogICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4g
bV9yZW1vdmVRdWV1ZTsKKyAgICBib29sIG1fbGVnYWN5RmlsZW5hbWUgeyBmYWxzZSB9OwogfTsK
IAotY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JD
YXRlZ29yeSgpOworY29uc3Qgc3RkOjplcnJvcl9jYXRlZ29yeSYgY29udGVudFJ1bGVMaXN0U3Rv
cmVFcnJvckNhdGVnb3J5KCk7CiAKLWlubGluZSBzdGQ6OmVycm9yX2NvZGUgbWFrZV9lcnJvcl9j
b2RlKENvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3IgZXJyb3IpCitpbmxpbmUgc3RkOjplcnJv
cl9jb2RlIG1ha2VfZXJyb3JfY29kZShDb250ZW50UnVsZUxpc3RTdG9yZTo6RXJyb3IgZXJyb3Ip
CiB7Ci0gICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8aW50PihlcnJvciksIGNvbnRlbnRFeHRlbnNp
b25TdG9yZUVycm9yQ2F0ZWdvcnkoKSB9OworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PGludD4o
ZXJyb3IpLCBjb250ZW50UnVsZUxpc3RTdG9yZUVycm9yQ2F0ZWdvcnkoKSB9OwogfQogCiB9IC8v
IG5hbWVzcGFjZSBBUEkKIAogbmFtZXNwYWNlIHN0ZCB7Ci10ZW1wbGF0ZTw+IHN0cnVjdCBpc19l
cnJvcl9jb2RlX2VudW08QVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yPiA6IHB1Ymxp
YyB0cnVlX3R5cGUgeyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZXJyb3JfY29kZV9lbnVtPEFQ
STo6Q29udGVudFJ1bGVMaXN0U3RvcmU6OkVycm9yPiA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9Owog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHJldmlzaW9uIDIxNjUzOSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsOCArNTMsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KIAogbmFt
ZXNwYWNlIEFQSSB7Ci1jbGFzcyBDb250ZW50RXh0ZW5zaW9uOwotY2xhc3MgQ29udGVudEV4dGVu
c2lvblN0b3JlOworY2xhc3MgQ29udGVudFJ1bGVMaXN0OworY2xhc3MgQ29udGVudFJ1bGVMaXN0
U3RvcmU7CiBjbGFzcyBFeHBlcmltZW50YWxGZWF0dXJlOwogY2xhc3MgRnJhbWVIYW5kbGU7CiBj
bGFzcyBGcmFtZUluZm87CkBAIC0xNjMsOCArMTYzLDggQEAgV0tfQUREX0FQSV9NQVBQSU5HKFdL
UmVzb3VyY2VMb2FkU3RhdGlzdAogV0tfQUREX0FQSV9NQVBQSU5HKFdLU2Vzc2lvblN0YXRlUmVm
LCBBUEk6OlNlc3Npb25TdGF0ZSkKIFdLX0FERF9BUElfTUFQUElORyhXS1RleHRDaGVja2VyUmVm
LCBXZWJUZXh0Q2hlY2tlcikKIFdLX0FERF9BUElfTUFQUElORyhXS1VzZXJDb250ZW50Q29udHJv
bGxlclJlZiwgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkpCi1XS19BRERfQVBJX01BUFBJ
TkcoV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmLCBBUEk6OkNvbnRlbnRFeHRlbnNpb25T
dG9yZSkKLVdLX0FERF9BUElfTUFQUElORyhXS1VzZXJDb250ZW50RmlsdGVyUmVmLCBBUEk6OkNv
bnRlbnRFeHRlbnNpb24pCitXS19BRERfQVBJX01BUFBJTkcoV0tVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlUmVmLCBBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlKQorV0tfQUREX0FQSV9NQVBQSU5H
KFdLVXNlckNvbnRlbnRGaWx0ZXJSZWYsIEFQSTo6Q29udGVudFJ1bGVMaXN0KQogV0tfQUREX0FQ
SV9NQVBQSU5HKFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUmVmLCBVc2VyTWVkaWFQZXJtaXNz
aW9uQ2hlY2tQcm94eSkKIFdLX0FERF9BUElfTUFQUElORyhXS1VzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0UmVmLCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5KQogV0tfQUREX0FQSV9N
QVBQSU5HKFdLVXNlclNjcmlwdFJlZiwgQVBJOjpVc2VyU2NyaXB0KQpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlR3JvdXAuY3BwCShyZXZpc2lvbiAyMTY1
MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlR3JvdXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV0tQYWdlR3JvdXAuaCIKIAotI2luY2x1ZGUgIkFQSUNvbnRlbnRFeHRlbnNpb24uaCIK
KyNpbmNsdWRlICJBUElDb250ZW50UnVsZUxpc3QuaCIKICNpbmNsdWRlICJBUElVc2VyQ29udGVu
dFdvcmxkLmgiCiAjaW5jbHVkZSAiQVBJVXNlclNjcmlwdC5oIgogI2luY2x1ZGUgIkFQSVVzZXJT
dHlsZVNoZWV0LmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2Vy
Q29udGVudENvbnRyb2xsZXJSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50Q29udHJvbGxlclJlZi5jcHAJKHJldmlzaW9uIDIx
NjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50Q29u
dHJvbGxlclJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZi5oIgogCi0j
aW5jbHVkZSAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgIkFQSUNvbnRlbnRSdWxl
TGlzdC5oIgogI2luY2x1ZGUgIkFQSVVzZXJTY3JpcHQuaCIKICNpbmNsdWRlICJXS0FQSUNhc3Qu
aCIKICNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oIgpAQCAtNjIsMTMg
KzYyLDEzIEBAIHZvaWQgV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZW1vdmVBbGxVc2UKIHZvaWQg
V0tVc2VyQ29udGVudENvbnRyb2xsZXJBZGRVc2VyQ29udGVudEZpbHRlcihXS1VzZXJDb250ZW50
Q29udHJvbGxlclJlZiB1c2VyQ29udGVudENvbnRyb2xsZXJSZWYsIFdLVXNlckNvbnRlbnRGaWx0
ZXJSZWYgdXNlckNvbnRlbnRGaWx0ZXJSZWYpCiB7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKLSAgICB0b0ltcGwodXNlckNvbnRlbnRDb250cm9sbGVyUmVmKS0+YWRkQ29udGVudEV4
dGVuc2lvbigqdG9JbXBsKHVzZXJDb250ZW50RmlsdGVyUmVmKSk7CisgICAgdG9JbXBsKHVzZXJD
b250ZW50Q29udHJvbGxlclJlZiktPmFkZENvbnRlbnRSdWxlTGlzdCgqdG9JbXBsKHVzZXJDb250
ZW50RmlsdGVyUmVmKSk7CiAjZW5kaWYKIH0KIAogdm9pZCBXS1VzZXJDb250ZW50Q29udHJvbGxl
clJlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVycyhXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZiB1
c2VyQ29udGVudENvbnRyb2xsZXJSZWYpCiB7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKLSAgICB0b0ltcGwodXNlckNvbnRlbnRDb250cm9sbGVyUmVmKS0+cmVtb3ZlQWxsQ29udGVu
dEV4dGVuc2lvbnMoKTsKKyAgICB0b0ltcGwodXNlckNvbnRlbnRDb250cm9sbGVyUmVmKS0+cmVt
b3ZlQWxsQ29udGVudFJ1bGVMaXN0cygpOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlUmVmLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlUmVmLmNwcAkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlZi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJXS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVSZWYuaCIKIAotI2luY2x1ZGUgIkFQSUNvbnRl
bnRFeHRlbnNpb25TdG9yZS5oIgorI2luY2x1ZGUgIkFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmgi
CiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC0z
NCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiBXS1R5cGVJRCBXS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVHZXRUeXBlSUQoKQogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCi0gICAgcmV0dXJuIHRvQVBJKEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpBUElU
eXBlKTsKKyAgICByZXR1cm4gdG9BUEkoQVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZTo6QVBJVHlw
ZSk7CiAjZWxzZQogICAgIHJldHVybiAwOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlQ29jb2EubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElDb250ZW50UnVs
ZUxpc3RTdG9yZUNvY29hLm1tCShyZXZpc2lvbiAyMTY1MzkpCShmcm9tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1t
OjIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJQ29udGVu
dFJ1bGVMaXN0U3RvcmVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFQSUNvbnRlbnRFeHRl
bnNpb25TdG9yZS5oIgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1
ZGUgIlNhbmRib3hVdGlsaXRpZXMuaCIKKworbmFtZXNwYWNlIEFQSSB7CisKK1N0cmluZyBDb250
ZW50RXh0ZW5zaW9uU3RvcmU6OmRlZmF1bHRTdG9yZVBhdGgoKQoreworICAgIHN0YXRpYyBkaXNw
YXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIHN0YXRpYyBOU1VSTCAqY29udGVudEV4dGVuc2lv
blN0b3JlVVJMOworCisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBO
U1VSTCAqdXJsID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBVUkxGb3JEaXJlY3Rv
cnk6TlNMaWJyYXJ5RGlyZWN0b3J5IGluRG9tYWluOk5TVXNlckRvbWFpbk1hc2sgYXBwcm9wcmlh
dGVGb3JVUkw6bnVsbHB0ciBjcmVhdGU6Tk8gZXJyb3I6bnVsbHB0cl07CisgICAgICAgIGlmICgh
dXJsKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAg
ICB1cmwgPSBbdXJsIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIldlYktpdCIgaXNEaXJl
Y3Rvcnk6WUVTXTsKKworICAgICAgICBpZiAoIVdlYktpdDo6cHJvY2Vzc0hhc0NvbnRhaW5lcigp
KSB7CisgICAgICAgICAgICBOU1N0cmluZyAqYnVuZGxlSWRlbnRpZmllciA9IFtOU0J1bmRsZSBt
YWluQnVuZGxlXS5idW5kbGVJZGVudGlmaWVyOworICAgICAgICAgICAgaWYgKCFidW5kbGVJZGVu
dGlmaWVyKQorICAgICAgICAgICAgICAgIGJ1bmRsZUlkZW50aWZpZXIgPSBbTlNQcm9jZXNzSW5m
byBwcm9jZXNzSW5mb10ucHJvY2Vzc05hbWU7CisgICAgICAgICAgICB1cmwgPSBbdXJsIFVSTEJ5
QXBwZW5kaW5nUGF0aENvbXBvbmVudDpidW5kbGVJZGVudGlmaWVyIGlzRGlyZWN0b3J5OllFU107
CisgICAgICAgIH0KKworICAgICAgICBjb250ZW50RXh0ZW5zaW9uU3RvcmVVUkwgPSBbW3VybCBV
UkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDb250ZW50RXh0ZW5zaW9ucyIgaXNEaXJlY3Rv
cnk6WUVTXSByZXRhaW5dOworICAgIH0pOworCisgICAgaWYgKCFbW05TRmlsZU1hbmFnZXIgZGVm
YXVsdE1hbmFnZXJdIGNyZWF0ZURpcmVjdG9yeUF0VVJMOmNvbnRlbnRFeHRlbnNpb25TdG9yZVVS
TCB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6WUVTIGF0dHJpYnV0ZXM6bmlsIGVycm9yOm51
bGxwdHJdKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVA
IiwgY29udGVudEV4dGVuc2lvblN0b3JlVVJMKTsKKworICAgIHJldHVybiBjb250ZW50RXh0ZW5z
aW9uU3RvcmVVUkwuYWJzb2x1dGVVUkwucGF0aC5maWxlU3lzdGVtUmVwcmVzZW50YXRpb247Cit9
CisKK30gLy8gbmFtZXNwYWNlIEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJQ29udGVu
dFJ1bGVMaXN0U3RvcmVDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL0FQSUNvbnRlbnRSdWxlTGlzdFN0b3JlQ29jb2EubW0JKHJldmlzaW9u
IDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJQ29udGVu
dFJ1bGVMaXN0U3RvcmVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBUElDb250ZW50RXh0ZW5zaW9u
U3RvcmUuaCIKKyNpbmNsdWRlICJBUElDb250ZW50UnVsZUxpc3RTdG9yZS5oIgogCiAjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKIApAQCAtMzIsMTAgKzMyLDEwIEBACiAKIG5hbWVzcGFj
ZSBBUEkgewogCi1TdHJpbmcgQ29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmVQYXRo
KCkKK1N0cmluZyBDb250ZW50UnVsZUxpc3RTdG9yZTo6ZGVmYXVsdFN0b3JlUGF0aChib29sIGxl
Z2FjeUZpbGVuYW1lKQogewogICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOwot
ICAgIHN0YXRpYyBOU1VSTCAqY29udGVudEV4dGVuc2lvblN0b3JlVVJMOworICAgIHN0YXRpYyBO
U1VSTCAqY29udGVudFJ1bGVMaXN0U3RvcmVVUkw7CiAKICAgICBkaXNwYXRjaF9vbmNlKCZvbmNl
VG9rZW4sIF57CiAgICAgICAgIE5TVVJMICp1cmwgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1h
bmFnZXJdIFVSTEZvckRpcmVjdG9yeTpOU0xpYnJhcnlEaXJlY3RvcnkgaW5Eb21haW46TlNVc2Vy
RG9tYWluTWFzayBhcHByb3ByaWF0ZUZvclVSTDpudWxscHRyIGNyZWF0ZTpOTyBlcnJvcjpudWxs
cHRyXTsKQEAgLTUwLDE0ICs1MCwxNyBAQCBTdHJpbmcgQ29udGVudEV4dGVuc2lvblN0b3JlOjpk
ZWZhdWx0U3RvCiAgICAgICAgICAgICAgICAgYnVuZGxlSWRlbnRpZmllciA9IFtOU1Byb2Nlc3NJ
bmZvIHByb2Nlc3NJbmZvXS5wcm9jZXNzTmFtZTsKICAgICAgICAgICAgIHVybCA9IFt1cmwgVVJM
QnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OmJ1bmRsZUlkZW50aWZpZXIgaXNEaXJlY3Rvcnk6WUVT
XTsKICAgICAgICAgfQotCi0gICAgICAgIGNvbnRlbnRFeHRlbnNpb25TdG9yZVVSTCA9IFtbdXJs
IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNvbnRlbnRFeHRlbnNpb25zIiBpc0RpcmVj
dG9yeTpZRVNdIHJldGFpbl07CisgICAgICAgIAorICAgICAgICBpZiAobGVnYWN5RmlsZW5hbWUp
CisgICAgICAgICAgICBjb250ZW50UnVsZUxpc3RTdG9yZVVSTCA9IFtbdXJsIFVSTEJ5QXBwZW5k
aW5nUGF0aENvbXBvbmVudDpAIkNvbnRlbnRFeHRlbnNpb25zIiBpc0RpcmVjdG9yeTpZRVNdIHJl
dGFpbl07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbnRlbnRSdWxlTGlzdFN0b3JlVVJM
ID0gW1t1cmwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ29udGVudFJ1bGVMaXN0cyIg
aXNEaXJlY3Rvcnk6WUVTXSByZXRhaW5dOwogICAgIH0pOwogCi0gICAgaWYgKCFbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNyZWF0ZURpcmVjdG9yeUF0VVJMOmNvbnRlbnRFeHRlbnNp
b25TdG9yZVVSTCB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6WUVTIGF0dHJpYnV0ZXM6bmls
IGVycm9yOm51bGxwdHJdKQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgZGly
ZWN0b3J5ICVAIiwgY29udGVudEV4dGVuc2lvblN0b3JlVVJMKTsKKyAgICBpZiAoIVtbTlNGaWxl
TWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6Y29udGVudFJ1bGVM
aXN0U3RvcmVVUkwgd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOllFUyBhdHRyaWJ1dGVzOm5p
bCBlcnJvcjpudWxscHRyXSkKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGRp
cmVjdG9yeSAlQCIsIGNvbnRlbnRSdWxlTGlzdFN0b3JlVVJMKTsKIAotICAgIHJldHVybiBjb250
ZW50RXh0ZW5zaW9uU3RvcmVVUkwuYWJzb2x1dGVVUkwucGF0aC5maWxlU3lzdGVtUmVwcmVzZW50
YXRpb247CisgICAgcmV0dXJuIGNvbnRlbnRSdWxlTGlzdFN0b3JlVVJMLmFic29sdXRlVVJMLnBh
dGguZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOwogfQogCiB9IC8vIG5hbWVzcGFjZSBBUEkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJVXNlckNvbnRlbnRFeHRl
bnNpb25TdG9yZUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tCShyZXZpc2lv
biAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL0FQSVVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbQkobm9uZXhpc3RlbnQpCkBAIC0xLDY1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQVBJQ29udGVu
dEV4dGVuc2lvblN0b3JlLmgiCi0KLSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotCi0j
aW5jbHVkZSAiU2FuZGJveFV0aWxpdGllcy5oIgotCi1uYW1lc3BhY2UgQVBJIHsKLQotU3RyaW5n
IENvbnRlbnRFeHRlbnNpb25TdG9yZTo6ZGVmYXVsdFN0b3JlUGF0aCgpCi17Ci0gICAgc3RhdGlj
IGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47Ci0gICAgc3RhdGljIE5TVVJMICpjb250ZW50RXh0
ZW5zaW9uU3RvcmVVUkw7Ci0KLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0gICAg
ICAgIE5TVVJMICp1cmwgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIFVSTEZvckRp
cmVjdG9yeTpOU0xpYnJhcnlEaXJlY3RvcnkgaW5Eb21haW46TlNVc2VyRG9tYWluTWFzayBhcHBy
b3ByaWF0ZUZvclVSTDpudWxscHRyIGNyZWF0ZTpOTyBlcnJvcjpudWxscHRyXTsKLSAgICAgICAg
aWYgKCF1cmwpCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0g
ICAgICAgIHVybCA9IFt1cmwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiV2ViS2l0IiBp
c0RpcmVjdG9yeTpZRVNdOwotCi0gICAgICAgIGlmICghV2ViS2l0Ojpwcm9jZXNzSGFzQ29udGFp
bmVyKCkpIHsKLSAgICAgICAgICAgIE5TU3RyaW5nICpidW5kbGVJZGVudGlmaWVyID0gW05TQnVu
ZGxlIG1haW5CdW5kbGVdLmJ1bmRsZUlkZW50aWZpZXI7Ci0gICAgICAgICAgICBpZiAoIWJ1bmRs
ZUlkZW50aWZpZXIpCi0gICAgICAgICAgICAgICAgYnVuZGxlSWRlbnRpZmllciA9IFtOU1Byb2Nl
c3NJbmZvIHByb2Nlc3NJbmZvXS5wcm9jZXNzTmFtZTsKLSAgICAgICAgICAgIHVybCA9IFt1cmwg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OmJ1bmRsZUlkZW50aWZpZXIgaXNEaXJlY3Rvcnk6
WUVTXTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnRlbnRFeHRlbnNpb25TdG9yZVVSTCA9IFtb
dXJsIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNvbnRlbnRFeHRlbnNpb25zIiBpc0Rp
cmVjdG9yeTpZRVNdIHJldGFpbl07Ci0gICAgfSk7Ci0KLSAgICBpZiAoIVtbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6Y29udGVudEV4dGVuc2lvblN0
b3JlVVJMIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJy
b3I6bnVsbHB0cl0pCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3Rv
cnkgJUAiLCBjb250ZW50RXh0ZW5zaW9uU3RvcmVVUkwpOwotCi0gICAgcmV0dXJuIGNvbnRlbnRF
eHRlbnNpb25TdG9yZVVSTC5hYnNvbHV0ZVVSTC5wYXRoLmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgQVBJCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Nv
bnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvbi5oCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvbi5oCShub25l
eGlzdGVudCkKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPFdlYktpdC9X
S0ZvdW5kYXRpb24uaD4KLQotI2lmIFdLX0FQSV9FTkFCTEVECi0KLVdLX0NMQVNTX0FWQUlMQUJM
RShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKLUBpbnRlcmZhY2UgV0tDb250
ZW50RXh0ZW5zaW9uIDogTlNPYmplY3QKLQotLyohIEBhYnN0cmFjdCBBIGNvcHkgb2YgdGhlIGlk
ZW50aWZpZXIgb2YgdGhlIGNvbnRlbnQgZXh0ZW5zaW9uLiAqLwotQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqaWRlbnRpZmllcjsKLQotQGVuZAotCi0jZW5k
aWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uLm1tCShyZXZpc2lvbiAyMTY1
MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVu
c2lvbi5tbQkobm9uZXhpc3RlbnQpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldLQ29udGVudEV4dGVuc2lvbkludGVybmFsLmgiCi0K
LSNpZiBXS19BUElfRU5BQkxFRAotCi0jaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uLmgiCi0KLUBpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRFeHRlbnNpb24KLQotLSAodm9pZClk
ZWFsbG9jCi17Ci0gICAgX2NvbnRlbnRFeHRlbnNpb24tPn5Db250ZW50RXh0ZW5zaW9uKCk7Ci0K
LSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLSNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2Nv
bCBpbXBsZW1lbnRhdGlvbgotCi0tIChBUEk6Ok9iamVjdCYpX2FwaU9iamVjdAotewotICAgIHJl
dHVybiAqX2NvbnRlbnRFeHRlbnNpb247Ci19Ci0KLS0gKE5TU3RyaW5nICopaWRlbnRpZmllcgot
ewotICAgIHJldHVybiBfY29udGVudEV4dGVuc2lvbi0+bmFtZSgpOwotfQotCi1AZW5kCi0KLSNl
bmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwu
aAkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oCShub25leGlzdGVudCkKQEAgLTEsNDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIldLQ29udGVudEV4dGVuc2lvbi5oIgotCi0jaWYg
V0tfQVBJX0VOQUJMRUQKLQotI2ltcG9ydCAiQVBJQ29udGVudEV4dGVuc2lvbi5oIgotI2ltcG9y
dCAiV0tPYmplY3QuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWlubGluZSBXS0NvbnRlbnRF
eHRlbnNpb24gKndyYXBwZXIoQVBJOjpDb250ZW50RXh0ZW5zaW9uJiBjb250ZW50RXh0ZW5zaW9u
KQotewotICAgIEFTU0VSVChbY29udGVudEV4dGVuc2lvbi53cmFwcGVyKCkgaXNLaW5kT2ZDbGFz
czpbV0tDb250ZW50RXh0ZW5zaW9uIGNsYXNzXV0pOwotICAgIHJldHVybiAoV0tDb250ZW50RXh0
ZW5zaW9uICopY29udGVudEV4dGVuc2lvbi53cmFwcGVyKCk7Ci19Ci0KLX0KLQotQGludGVyZmFj
ZSBXS0NvbnRlbnRFeHRlbnNpb24gKCkgPFdLT2JqZWN0PiB7Ci1AcGFja2FnZQotICAgIEFQSTo6
T2JqZWN0U3RvcmFnZTxBUEk6OkNvbnRlbnRFeHRlbnNpb24+IF9jb250ZW50RXh0ZW5zaW9uOwot
fQotQGVuZAotCi0jZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lv
blN0b3JlLmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+Ci0K
LSNpZiBXS19BUElfRU5BQkxFRAotCi1AY2xhc3MgV0tDb250ZW50RXh0ZW5zaW9uOwotCi1XS19D
TEFTU19BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCi1AaW50
ZXJmYWNlIFdLQ29udGVudEV4dGVuc2lvblN0b3JlIDogTlNPYmplY3QKLQotKyAoaW5zdGFuY2V0
eXBlKWRlZmF1bHRTdG9yZTsKLSsgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICop
dXJsOwotCi0tICh2b2lkKWNvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNT
dHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKSBl
bmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250
ZW50RXh0ZW5zaW9uICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7Ci0tICh2b2lkKWxv
b2tVcENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIg
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9y
ICopKWNvbXBsZXRpb25IYW5kbGVyOwotLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOwotLSAodm9pZClnZXRBdmFpbGFibGVD
b250ZW50RXh0ZW5zaW9uSWRlbnRpZmllcnM6KHZvaWQgKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4q
KSljb21wbGV0aW9uSGFuZGxlcjsKLQotQGVuZAotCi0jZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQkocmV2aXNpb24gMjE2NTM5KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5t
bQkobm9uZXhpc3RlbnQpCkBAIC0xLDE3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oIgotI2ltcG9y
dCAiV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oIgotCi0jaWYgV0tfQVBJX0VOQUJM
RUQKLQotI2ltcG9ydCAiQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCi0jaW1wb3J0ICJXS0Vy
cm9ySW50ZXJuYWwuaCIKLSNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgotCi1zdGF0aWMgV0tFcnJv
ckNvZGUgdG9XS0Vycm9yQ29kZShjb25zdCBzdGQ6OmVycm9yX2NvZGUmIGVycm9yKQotewotICAg
IEFTU0VSVChlcnJvci5jYXRlZ29yeSgpID09IEFQSTo6Y29udGVudEV4dGVuc2lvblN0b3JlRXJy
b3JDYXRlZ29yeSgpKTsKLSAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEFQSTo6Q29udGVudEV4dGVu
c2lvblN0b3JlOjpFcnJvcj4oZXJyb3IudmFsdWUoKSkpIHsKLSAgICBjYXNlIEFQSTo6Q29udGVu
dEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6TG9va3VwRmFpbGVkOgotICAgICAgICByZXR1cm4gV0tF
cnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxvb2tVcEZhaWxlZDsKLSAgICBjYXNlIEFQSTo6Q29u
dGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6VmVyc2lvbk1pc21hdGNoOgotICAgICAgICByZXR1
cm4gV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25NaXNtYXRjaDsKLSAgICBjYXNl
IEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKLSAgICAg
ICAgcmV0dXJuIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkOwotICAg
IGNhc2UgQVBJOjpDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpSZW1vdmVGYWlsZWQ6Ci0g
ICAgICAgIHJldHVybiBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlUmVtb3ZlRmFpbGVkOwot
ICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gV0tFcnJvclVua25v
d247Ci19Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZQotCi0tICh2
b2lkKWRlYWxsb2MKLXsKLSAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5+Q29udGVudEV4dGVu
c2lvblN0b3JlKCk7Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLSsgKGluc3RhbmNldHlw
ZSlkZWZhdWx0U3RvcmUKLXsKLSAgICByZXR1cm4gV2ViS2l0Ojp3cmFwcGVyKEFQSTo6Q29udGVu
dEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUoKSk7Ci19Ci0KLSsgKGluc3RhbmNldHlwZSlz
dG9yZVdpdGhVUkw6KE5TVVJMICopdXJsCi17Ci0gICAgUmVmPEFQSTo6Q29udGVudEV4dGVuc2lv
blN0b3JlPiBzdG9yZSA9IEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRo
KHVybC5hYnNvbHV0ZVVSTC5maWxlU3lzdGVtUmVwcmVzZW50YXRpb24pOwotICAgIHJldHVybiBX
ZWJLaXQ6OndyYXBwZXIoc3RvcmUubGVha1JlZigpKTsKLX0KLQotLSAodm9pZCljb21waWxlQ29u
dGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVk
Q29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKillbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50RXh0ZW5zaW9uICosIE5TRXJyb3IgKikp
Y29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBbc2VsZiBfY29tcGlsZUNvbnRlbnRFeHRlbnNpb25G
b3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246ZW5jb2RlZENv
bnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXIgcmVsZWFz
ZXNBcmd1bWVudDpOT107Ci19Ci0KLS0gKHZvaWQpX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9u
OihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxl
ciByZWxlYXNlc0FyZ3VtZW50OihCT09MKXJlbGVhc2VzQXJndW1lbnQKLXsKLSAgICBTdHJpbmcg
anNvbihlbmNvZGVkQ29udGVudEV4dGVuc2lvbik7Ci0gICAgaWYgKHJlbGVhc2VzQXJndW1lbnQp
IHsKLSAgICAgICAgW2VuY29kZWRDb250ZW50RXh0ZW5zaW9uIHJlbGVhc2VdOwotICAgICAgICBl
bmNvZGVkQ29udGVudEV4dGVuc2lvbiA9IG5pbDsKLSAgICB9Ci0KLSAgICBfY29udGVudEV4dGVu
c2lvblN0b3JlLT5jb21waWxlQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBXVEZNb3ZlKGpz
b24pLCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIp
XShSZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVy
cm9yX2NvZGUgZXJyb3IpIHsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBhdXRv
IHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCJFeHRlbnNpb24gY29tcGlsYXRpb24gZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2Uo
KS5jX3N0cigpXX07Ci0KLSAgICAgICAgICAgIC8vIGVycm9yLnZhbHVlKCkgY291bGQgaGF2ZSBh
IHNwZWNpZmljIGNvbXBpbGVyIGVycm9yIHRoYXQgaXMgbm90IGVxdWFsIHRvIFdLRXJyb3JDb250
ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkLgotICAgICAgICAgICAgLy8gV2Ugd2FudCB0
byB1c2UgZXJyb3IubWVzc2FnZSwgYnV0IGhlcmUgd2Ugd2FudCB0byBvbmx5IHBhc3Mgb24gQ29t
cGlsZUZhaWxlZCB3aXRoIHVzZXJJbmZvIGZyb20gdGhlIHN0ZDo6ZXJyb3JfY29kZS4KLSAgICAg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERv
bWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6V0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBp
bGVGYWlsZWQgdXNlckluZm86dXNlckluZm9dKTsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXZWJLaXQ6OndyYXBwZXIoKmNvbnRlbnRFeHRlbnNpb24uZ2V0KCkpLCBuaWwp
OwotICAgIH0pOwotfQotCi0tICh2b2lkKWxvb2tVcENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlm
aWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdL
Q29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAg
X2NvbnRlbnRFeHRlbnNpb25TdG9yZS0+bG9va3VwQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVy
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShS
ZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9y
X2NvZGUgZXJyb3IpIHsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBhdXRvIHVz
ZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJFeHRlbnNpb24gbG9va3VwIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIo
KV19OwotICAgICAgICAgICAgYXV0byB3a0Vycm9yID0gdG9XS0Vycm9yQ29kZShlcnJvcik7Ci0g
ICAgICAgICAgICBBU1NFUlQod2tFcnJvciA9PSBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3Jl
TG9va1VwRmFpbGVkIHx8IHdrRXJyb3IgPT0gV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZl
cnNpb25NaXNtYXRjaCk7Ci0gICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobmls
LCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46V0tFcnJvckRvbWFpbiBjb2RlOndrRXJyb3IgdXNl
ckluZm86dXNlckluZm9dKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdlYktpdDo6d3JhcHBlcigqY29udGVudEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7Ci0gICAgfSk7
Ci19Ci0KLS0gKHZvaWQpZ2V0QXZhaWxhYmxlQ29udGVudEV4dGVuc2lvbklkZW50aWZpZXJzOih2
b2lkICheKShOU0FycmF5PE5TU3RyaW5nICo+KikpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBf
Y29udGVudEV4dGVuc2lvblN0b3JlLT5nZXRBdmFpbGFibGVDb250ZW50RXh0ZW5zaW9uSWRlbnRp
ZmllcnMoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVy
KV0oVmVjdG9yPFN0cmluZz4gaWRlbnRpZmllcnMpIHsKLSAgICAgICAgTlNNdXRhYmxlQXJyYXk8
TlNTdHJpbmcgKj4gKm5zSWRlbnRpZmllcnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2Fw
YWNpdHk6aWRlbnRpZmllcnMuc2l6ZSgpXTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpZGVu
dGlmaWVyIDogaWRlbnRpZmllcnMpCi0gICAgICAgICAgICBbbnNJZGVudGlmaWVycyBhZGRPYmpl
Y3Q6aWRlbnRpZmllcl07Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5zSWRlbnRpZmllcnMp
OwotICAgIH0pOwotfQotCi0tICh2b2lkKXJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlm
aWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5T
RXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKLXsKLSAgICBfY29udGVudEV4dGVuc2lvblN0b3Jl
LT5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFtjb21wbGV0aW9uSGFuZGxlciA9
IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikg
ewotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05T
SGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lv
biByZW1vdmFsIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwotICAgICAg
ICAgICAgQVNTRVJUKHRvV0tFcnJvckNvZGUoZXJyb3IpID09IFdLRXJyb3JDb250ZW50RXh0ZW5z
aW9uU3RvcmVSZW1vdmVGYWlsZWQpOwotICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6V0tFcnJvckNv
bnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCB1c2VySW5mbzp1c2VySW5mb10pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKLSAgICB9KTsKLX0KLQot
I3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCi0KLS0gKEFQSTo6
T2JqZWN0JilfYXBpT2JqZWN0Ci17Ci0gICAgcmV0dXJuICpfY29udGVudEV4dGVuc2lvblN0b3Jl
OwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAo
V0tQcml2YXRlKQotCi0vLyBGb3IgdGVzdGluZyBvbmx5LgotCi0tICh2b2lkKV9yZW1vdmVBbGxD
b250ZW50RXh0ZW5zaW9ucwotewotICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUtPnN5bmNocm9u
b3VzUmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKLX0KLQotLSAodm9pZClfaW52YWxpZGF0
ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlm
aWVyCi17Ci0gICAgX2NvbnRlbnRFeHRlbnNpb25TdG9yZS0+aW52YWxpZGF0ZUNvbnRlbnRFeHRl
bnNpb25WZXJzaW9uKGlkZW50aWZpZXIpOwotfQotCi0tICh2b2lkKV9nZXRDb250ZW50RXh0ZW5z
aW9uU291cmNlRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShOU1N0cmluZyopKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgYXV0
byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlvbkhhbmRsZXIgY29weV0pOwotICAgIF9jb250
ZW50RXh0ZW5zaW9uU3RvcmUtPmdldENvbnRlbnRFeHRlbnNpb25Tb3VyY2UoaWRlbnRpZmllciwg
W2hhbmRsZXJdKFN0cmluZyBzb3VyY2UpIHsKLSAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZv
aWQgKF4pKE5TU3RyaW5nICopKWhhbmRsZXIuZ2V0KCk7Ci0gICAgICAgIGlmIChzb3VyY2UuaXNO
dWxsKCkpCi0gICAgICAgICAgICByYXdIYW5kbGVyKG5pbCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHJhd0hhbmRsZXIoc291cmNlKTsKLSAgICB9KTsKLX0KLQotLy8gTlNfUkVMRUFTRVNf
QVJHVU1FTlQgdG8ga2VlcCBwZWFrIG1lbW9yeSB1c2FnZSBsb3cuCi0KLS0gKHZvaWQpX2NvbXBp
bGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVu
Y29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9u
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJv
ciAqKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIFtzZWxmIF9jb21waWxlQ29udGVudEV4dGVu
c2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjplbmNv
ZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlciBy
ZWxlYXNlc0FyZ3VtZW50OllFU107Ci19Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFdLX0FQSV9FTkFC
TEVECkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4
dGVuc2lvblN0b3JlSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaAkocmV2aXNp
b24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRl
bnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgi
Ci0KLSNpZiBXS19BUElfRU5BQkxFRAotCi0jaW1wb3J0ICJBUElDb250ZW50RXh0ZW5zaW9uU3Rv
cmUuaCIKLSNpbXBvcnQgIldLT2JqZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1pbmxp
bmUgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKndyYXBwZXIoQVBJOjpDb250ZW50RXh0ZW5zaW9u
U3RvcmUmIHN0b3JlKQotewotICAgIEFTU0VSVChbc3RvcmUud3JhcHBlcigpIGlzS2luZE9mQ2xh
c3M6W1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGNsYXNzXV0pOwotICAgIHJldHVybiAoV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmUgKilzdG9yZS53cmFwcGVyKCk7Ci19Ci0KLX0KLQotQGludGVyZmFj
ZSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAoKSA8V0tPYmplY3Q+IHsKLUBwYWNrYWdlCi0gICAg
QVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlPiBfY29udGVudEV4
dGVuc2lvblN0b3JlOwotfQotQGVuZAotCi0jZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3Rv
cmVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjE2NTM5KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb25T
dG9yZVByaXZhdGUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0IDxXZWJLaXQvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaD4KLQotI2lmIFdLX0FQ
SV9FTkFCTEVECi0KLUBpbnRlcmZhY2UgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0
ZSkKLQotLy8gRm9yIHRlc3Rpbmcgb25seS4KLS0gKHZvaWQpX3JlbW92ZUFsbENvbnRlbnRFeHRl
bnNpb25zOwotLSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRl
bnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyOwotLSAodm9pZClfZ2V0Q29udGVudEV4dGVu
c2lvblNvdXJjZUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikoTlNTdHJpbmcqKSljb21wbGV0aW9uSGFuZGxlcjsKLQotLy8gTlNf
UkVMRUFTRVNfQVJHVU1FTlQgdG8ga2VlcCBwZWFrIG1lbW9yeSB1c2FnZSBsb3cuCi0tICh2b2lk
KV9jb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRp
ZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKikgTlNfUkVMRUFTRVNfQVJH
VU1FTlQgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOwotCi1A
ZW5kCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0NvbnRlbnRSdWxlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3QuaAkocmV2aXNpb24gMjE2NTM5KQkoZnJvbSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lvbi5oOjIx
NjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVs
ZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGlu
dGVyZmFjZSBXS0NvbnRlbnRFeHRlbnNpb24gOiBOU09iamVjdAorCisvKiEgQGFic3RyYWN0IEEg
Y29weSBvZiB0aGUgaWRlbnRpZmllciBvZiB0aGUgY29udGVudCBleHRlbnNpb24uICovCitAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICppZGVudGlmaWVyOwor
CitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3QuaAkocmV2
aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Nv
bnRlbnRSdWxlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgV0tf
QVBJX0VOQUJMRUQKIAogV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKQotQGludGVyZmFjZSBXS0NvbnRlbnRFeHRlbnNpb24gOiBOU09iamVjdAor
QGludGVyZmFjZSBXS0NvbnRlbnRSdWxlTGlzdCA6IE5TT2JqZWN0CiAKIC8qISBAYWJzdHJhY3Qg
QSBjb3B5IG9mIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBjb250ZW50IGV4dGVuc2lvbi4gKi8KIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNTdHJpbmcgKmlkZW50aWZpZXI7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVM
aXN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tDb250ZW50UnVsZUxpc3QubW0JKHJldmlzaW9uIDIxNjUzOSkJKGZyb20gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRlbnNpb24ubW06MjE2NTM5KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oIgorCisjaWYgV0tf
QVBJX0VOQUJMRUQKKworI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgor
CitAaW1wbGVtZW50YXRpb24gV0tDb250ZW50RXh0ZW5zaW9uCisKKy0gKHZvaWQpZGVhbGxvYwor
eworICAgIF9jb250ZW50RXh0ZW5zaW9uLT5+Q29udGVudEV4dGVuc2lvbigpOworCisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCisjcHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVt
ZW50YXRpb24KKworLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKK3sKKyAgICByZXR1cm4gKl9j
b250ZW50RXh0ZW5zaW9uOworfQorCistIChOU1N0cmluZyAqKWlkZW50aWZpZXIKK3sKKyAgICBy
ZXR1cm4gX2NvbnRlbnRFeHRlbnNpb24tPm5hbWUoKTsKK30KKworQGVuZAorCisjZW5kaWYgLy8g
V0tfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tDb250ZW50UnVsZUxpc3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdC5tbQkocmV2aXNpb24gMjE2NTM5KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjQsMTcgKzI0LDE3IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tD
b250ZW50UnVsZUxpc3RJbnRlcm5hbC5oIgogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAotI2luY2x1
ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgIldlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0LmgiCiAKLUBpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRFeHRlbnNpb24K
K0BpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRSdWxlTGlzdAogCiAtICh2b2lkKWRlYWxsb2MKIHsK
LSAgICBfY29udGVudEV4dGVuc2lvbi0+fkNvbnRlbnRFeHRlbnNpb24oKTsKKyAgICBfY29udGVu
dFJ1bGVMaXN0LT5+Q29udGVudFJ1bGVMaXN0KCk7CiAKICAgICBbc3VwZXIgZGVhbGxvY107CiB9
CkBAIC00MywxMiArNDMsMTIgQEAgLSAodm9pZClkZWFsbG9jCiAKIC0gKEFQSTo6T2JqZWN0Jilf
YXBpT2JqZWN0CiB7Ci0gICAgcmV0dXJuICpfY29udGVudEV4dGVuc2lvbjsKKyAgICByZXR1cm4g
Kl9jb250ZW50UnVsZUxpc3Q7CiB9CiAKIC0gKE5TU3RyaW5nICopaWRlbnRpZmllcgogewotICAg
IHJldHVybiBfY29udGVudEV4dGVuc2lvbi0+bmFtZSgpOworICAgIHJldHVybiBfY29udGVudFJ1
bGVMaXN0LT5uYW1lKCk7CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RJbnRlcm5h
bC5oCShyZXZpc2lvbiAyMTY1MzkpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaDoyMTY1MzkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0SW50ZXJuYWwuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV0tDb250
ZW50RXh0ZW5zaW9uLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElDb250
ZW50RXh0ZW5zaW9uLmgiCisjaW1wb3J0ICJXS09iamVjdC5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworaW5saW5lIFdLQ29udGVudEV4dGVuc2lvbiAqd3JhcHBlcihBUEk6OkNvbnRlbnRFeHRl
bnNpb24mIGNvbnRlbnRFeHRlbnNpb24pCit7CisgICAgQVNTRVJUKFtjb250ZW50RXh0ZW5zaW9u
LndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltXS0NvbnRlbnRFeHRlbnNpb24gY2xhc3NdXSk7Cisg
ICAgcmV0dXJuIChXS0NvbnRlbnRFeHRlbnNpb24gKiljb250ZW50RXh0ZW5zaW9uLndyYXBwZXIo
KTsKK30KKworfQorCitAaW50ZXJmYWNlIFdLQ29udGVudEV4dGVuc2lvbiAoKSA8V0tPYmplY3Q+
IHsKK0BwYWNrYWdlCisgICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6Q29udGVudEV4dGVuc2lv
bj4gX2NvbnRlbnRFeHRlbnNpb247Cit9CitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxF
RApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxl
TGlzdEludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdEludGVybmFsLmgJKHJldmlzaW9uIDIxNjUzOSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RJbnRl
cm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyNiArMjMsMjYgQEAKICAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb24u
aCIKKyNpbXBvcnQgIldLQ29udGVudFJ1bGVMaXN0LmgiCiAKICNpZiBXS19BUElfRU5BQkxFRAog
Ci0jaW1wb3J0ICJBUElDb250ZW50RXh0ZW5zaW9uLmgiCisjaW1wb3J0ICJBUElDb250ZW50UnVs
ZUxpc3QuaCIKICNpbXBvcnQgIldLT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1p
bmxpbmUgV0tDb250ZW50RXh0ZW5zaW9uICp3cmFwcGVyKEFQSTo6Q29udGVudEV4dGVuc2lvbiYg
Y29udGVudEV4dGVuc2lvbikKK2lubGluZSBXS0NvbnRlbnRSdWxlTGlzdCAqd3JhcHBlcihBUEk6
OkNvbnRlbnRSdWxlTGlzdCYgY29udGVudFJ1bGVMaXN0KQogewotICAgIEFTU0VSVChbY29udGVu
dEV4dGVuc2lvbi53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbV0tDb250ZW50RXh0ZW5zaW9uIGNs
YXNzXV0pOwotICAgIHJldHVybiAoV0tDb250ZW50RXh0ZW5zaW9uICopY29udGVudEV4dGVuc2lv
bi53cmFwcGVyKCk7CisgICAgQVNTRVJUKFtjb250ZW50UnVsZUxpc3Qud3JhcHBlcigpIGlzS2lu
ZE9mQ2xhc3M6W1dLQ29udGVudFJ1bGVMaXN0IGNsYXNzXV0pOworICAgIHJldHVybiAoV0tDb250
ZW50UnVsZUxpc3QgKiljb250ZW50UnVsZUxpc3Qud3JhcHBlcigpOwogfQogCiB9CiAKLUBpbnRl
cmZhY2UgV0tDb250ZW50RXh0ZW5zaW9uICgpIDxXS09iamVjdD4geworQGludGVyZmFjZSBXS0Nv
bnRlbnRSdWxlTGlzdCAoKSA8V0tPYmplY3Q+IHsKIEBwYWNrYWdlCi0gICAgQVBJOjpPYmplY3RT
dG9yYWdlPEFQSTo6Q29udGVudEV4dGVuc2lvbj4gX2NvbnRlbnRFeHRlbnNpb247CisgICAgQVBJ
OjpPYmplY3RTdG9yYWdlPEFQSTo6Q29udGVudFJ1bGVMaXN0PiBfY29udGVudFJ1bGVMaXN0Owog
fQogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29u
dGVudFJ1bGVMaXN0U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUuaAkocmV2aXNpb24gMjE2NTM5KQko
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudEV4dGVuc2lv
blN0b3JlLmg6MjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0NvbnRlbnRSdWxlTGlzdFN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2lmIFdLX0FQ
SV9FTkFCTEVECisKK0BjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb247CisKK1dLX0NMQVNTX0FWQUlM
QUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgV0tD
b250ZW50RXh0ZW5zaW9uU3RvcmUgOiBOU09iamVjdAorCisrIChpbnN0YW5jZXR5cGUpZGVmYXVs
dFN0b3JlOworKyAoaW5zdGFuY2V0eXBlKXN0b3JlV2l0aFVSTDooTlNVUkwgKil1cmw7CisKKy0g
KHZvaWQpY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlk
ZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICopIGVuY29kZWRDb250
ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRlbnNp
b24gKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpbG9va1VwQ29udGVu
dEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50RXh0ZW5zaW9uICosIE5TRXJyb3IgKikpY29tcGxl
dGlvbkhhbmRsZXI7CistICh2b2lkKXJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVy
OihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJy
b3IgKikpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKWdldEF2YWlsYWJsZUNvbnRlbnRFeHRl
bnNpb25JZGVudGlmaWVyczoodm9pZCAoXikoTlNBcnJheTxOU1N0cmluZyAqPiopKWNvbXBsZXRp
b25IYW5kbGVyOworCitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRl
bnRSdWxlTGlzdFN0b3JlLmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywxOCArMjcsMTggQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLUBjbGFzcyBXS0Nv
bnRlbnRFeHRlbnNpb247CitAY2xhc3MgV0tDb250ZW50UnVsZUxpc3Q7CiAKIFdLX0NMQVNTX0FW
QUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKLUBpbnRlcmZhY2Ug
V0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgOiBOU09iamVjdAorQGludGVyZmFjZSBXS0NvbnRlbnRS
dWxlTGlzdFN0b3JlIDogTlNPYmplY3QKIAogKyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRTdG9yZTsK
ICsgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICopdXJsOwogCi0tICh2b2lkKWNv
bXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVy
IGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKSBlbmNvZGVkQ29udGVudEV4dGVu
c2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50RXh0ZW5zaW9uICosIE5T
RXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7Ci0tICh2b2lkKWxvb2tVcENvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5k
bGVyOwotLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJp
bmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0Vycm9yICopKWNv
bXBsZXRpb25IYW5kbGVyOwotLSAodm9pZClnZXRBdmFpbGFibGVDb250ZW50RXh0ZW5zaW9uSWRl
bnRpZmllcnM6KHZvaWQgKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4qKSljb21wbGV0aW9uSGFuZGxl
cjsKKy0gKHZvaWQpY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5n
ICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKSBlbmNvZGVk
Q29udGVudFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRSdWxl
TGlzdCAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClsb29rVXBDb250
ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudFJ1bGVMaXN0ICosIE5TRXJyb3IgKikpY29tcGxl
dGlvbkhhbmRsZXI7CistICh2b2lkKXJlbW92ZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6
KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJv
ciAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpZ2V0QXZhaWxhYmxlQ29udGVudFJ1bGVM
aXN0SWRlbnRpZmllcnM6KHZvaWQgKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4qKSljb21wbGV0aW9u
SGFuZGxlcjsKIAogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1tCShyZXZpc2lv
biAyMTY1MzkpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmUubW06MjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJX
S0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tDb250ZW50RXh0ZW5zaW9u
U3RvcmVJbnRlcm5hbC5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiQVBJQ29u
dGVudEV4dGVuc2lvblN0b3JlLmgiCisjaW1wb3J0ICJXS0Vycm9ySW50ZXJuYWwuaCIKKyNpbXBv
cnQgPHd0Zi9CbG9ja1B0ci5oPgorCitzdGF0aWMgV0tFcnJvckNvZGUgdG9XS0Vycm9yQ29kZShj
b25zdCBzdGQ6OmVycm9yX2NvZGUmIGVycm9yKQoreworICAgIEFTU0VSVChlcnJvci5jYXRlZ29y
eSgpID09IEFQSTo6Y29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JDYXRlZ29yeSgpKTsKKyAgICBz
d2l0Y2ggKHN0YXRpY19jYXN0PEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcj4oZXJy
b3IudmFsdWUoKSkpIHsKKyAgICBjYXNlIEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJv
cjo6TG9va3VwRmFpbGVkOgorICAgICAgICByZXR1cm4gV0tFcnJvckNvbnRlbnRFeHRlbnNpb25T
dG9yZUxvb2tVcEZhaWxlZDsKKyAgICBjYXNlIEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpF
cnJvcjo6VmVyc2lvbk1pc21hdGNoOgorICAgICAgICByZXR1cm4gV0tFcnJvckNvbnRlbnRFeHRl
bnNpb25TdG9yZVZlcnNpb25NaXNtYXRjaDsKKyAgICBjYXNlIEFQSTo6Q29udGVudEV4dGVuc2lv
blN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKKyAgICAgICAgcmV0dXJuIFdLRXJyb3JDb250
ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkOworICAgIGNhc2UgQVBJOjpDb250ZW50RXh0
ZW5zaW9uU3RvcmU6OkVycm9yOjpSZW1vdmVGYWlsZWQ6CisgICAgICAgIHJldHVybiBXS0Vycm9y
Q29udGVudEV4dGVuc2lvblN0b3JlUmVtb3ZlRmFpbGVkOworICAgIH0KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV0tFcnJvclVua25vd247Cit9CisKK0BpbXBsZW1lbnRh
dGlvbiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBf
Y29udGVudEV4dGVuc2lvblN0b3JlLT5+Q29udGVudEV4dGVuc2lvblN0b3JlKCk7CisKKyAgICBb
c3VwZXIgZGVhbGxvY107Cit9CisKKysgKGluc3RhbmNldHlwZSlkZWZhdWx0U3RvcmUKK3sKKyAg
ICByZXR1cm4gV2ViS2l0Ojp3cmFwcGVyKEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZh
dWx0U3RvcmUoKSk7Cit9CisKKysgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICop
dXJsCit7CisgICAgUmVmPEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlPiBzdG9yZSA9IEFQSTo6
Q29udGVudEV4dGVuc2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKHVybC5hYnNvbHV0ZVVSTC5maWxl
U3lzdGVtUmVwcmVzZW50YXRpb24pOworICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIoc3RvcmUu
bGVha1JlZigpKTsKK30KKworLSAodm9pZCljb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50
aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjooTlNT
dHJpbmcgKillbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoV0tDb250ZW50RXh0ZW5zaW9uICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKK3sK
KyAgICBbc2VsZiBfY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZp
ZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246ZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxl
dGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZXNBcmd1bWVudDpOT107Cit9CisK
Ky0gKHZvaWQpX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcg
KilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0cmluZyAqKWVuY29kZWRD
b250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRFeHRl
bnNpb24gKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlciByZWxlYXNlc0FyZ3VtZW50OihC
T09MKXJlbGVhc2VzQXJndW1lbnQKK3sKKyAgICBTdHJpbmcganNvbihlbmNvZGVkQ29udGVudEV4
dGVuc2lvbik7CisgICAgaWYgKHJlbGVhc2VzQXJndW1lbnQpIHsKKyAgICAgICAgW2VuY29kZWRD
b250ZW50RXh0ZW5zaW9uIHJlbGVhc2VdOworICAgICAgICBlbmNvZGVkQ29udGVudEV4dGVuc2lv
biA9IG5pbDsKKyAgICB9CisKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5jb21waWxlQ29u
dGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBXVEZNb3ZlKGpzb24pLCBbY29tcGxldGlvbkhhbmRs
ZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShSZWZQdHI8QVBJOjpDb250ZW50
RXh0ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKKyAg
ICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBB
bmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gY29t
cGlsYXRpb24gZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07CisKKyAgICAg
ICAgICAgIC8vIGVycm9yLnZhbHVlKCkgY291bGQgaGF2ZSBhIHNwZWNpZmljIGNvbXBpbGVyIGVy
cm9yIHRoYXQgaXMgbm90IGVxdWFsIHRvIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21w
aWxlRmFpbGVkLgorICAgICAgICAgICAgLy8gV2Ugd2FudCB0byB1c2UgZXJyb3IubWVzc2FnZSwg
YnV0IGhlcmUgd2Ugd2FudCB0byBvbmx5IHBhc3Mgb24gQ29tcGlsZUZhaWxlZCB3aXRoIHVzZXJJ
bmZvIGZyb20gdGhlIHN0ZDo6ZXJyb3JfY29kZS4KKyAgICAgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihuaWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNv
ZGU6V0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBpbGVGYWlsZWQgdXNlckluZm86dXNl
ckluZm9dKTsKKyAgICAgICAgfQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJLaXQ6Ondy
YXBwZXIoKmNvbnRlbnRFeHRlbnNpb24uZ2V0KCkpLCBuaWwpOworICAgIH0pOworfQorCistICh2
b2lkKWxvb2tVcENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50
aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBO
U0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX2NvbnRlbnRFeHRlbnNpb25TdG9y
ZS0+bG9va3VwQ29udGVudEV4dGVuc2lvbihpZGVudGlmaWVyLCBbY29tcGxldGlvbkhhbmRsZXIg
PSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShSZWZQdHI8QVBJOjpDb250ZW50RXh0
ZW5zaW9uPiBjb250ZW50RXh0ZW5zaW9uLCBzdGQ6OmVycm9yX2NvZGUgZXJyb3IpIHsKKyAgICAg
ICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBhdXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNo
b3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHRlbnNpb24gbG9va3Vw
IGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OworICAgICAgICAgICAgYXV0
byB3a0Vycm9yID0gdG9XS0Vycm9yQ29kZShlcnJvcik7CisgICAgICAgICAgICBBU1NFUlQod2tF
cnJvciA9PSBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlTG9va1VwRmFpbGVkIHx8IHdrRXJy
b3IgPT0gV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25NaXNtYXRjaCk7CisgICAg
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobmlsLCBbTlNFcnJvciBlcnJvcldpdGhE
b21haW46V0tFcnJvckRvbWFpbiBjb2RlOndrRXJyb3IgdXNlckluZm86dXNlckluZm9dKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYktpdDo6d3JhcHBlcigqY29u
dGVudEV4dGVuc2lvbi5nZXQoKSksIG5pbCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpZ2V0QXZh
aWxhYmxlQ29udGVudEV4dGVuc2lvbklkZW50aWZpZXJzOih2b2lkICheKShOU0FycmF5PE5TU3Ry
aW5nICo+KikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3Jl
LT5nZXRBdmFpbGFibGVDb250ZW50RXh0ZW5zaW9uSWRlbnRpZmllcnMoW2NvbXBsZXRpb25IYW5k
bGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oVmVjdG9yPFN0cmluZz4gaWRl
bnRpZmllcnMpIHsKKyAgICAgICAgTlNNdXRhYmxlQXJyYXk8TlNTdHJpbmcgKj4gKm5zSWRlbnRp
ZmllcnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6aWRlbnRpZmllcnMuc2l6
ZSgpXTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpZGVudGlmaWVyIDogaWRlbnRpZmllcnMp
CisgICAgICAgICAgICBbbnNJZGVudGlmaWVycyBhZGRPYmplY3Q6aWRlbnRpZmllcl07CisgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG5zSWRlbnRpZmllcnMpOworICAgIH0pOworfQorCistICh2
b2lkKXJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50
aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhh
bmRsZXIKK3sKKyAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5yZW1vdmVDb250ZW50RXh0ZW5z
aW9uKGlkZW50aWZpZXIsIFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0
aW9uSGFuZGxlcildKHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAgICAgICBpZiAoZXJyb3Ip
IHsKKyAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFuY2hvckVycm9yS2V5OiBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lvbiByZW1vdmFsIGZhaWxlZDogJXMi
LCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OworICAgICAgICAgICAgQVNTRVJUKHRvV0tFcnJv
ckNvZGUoZXJyb3IpID09IFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQp
OworICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFtOU0Vycm9yIGVycm9yV2l0
aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6V0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJl
bW92ZUZhaWxlZCB1c2VySW5mbzp1c2VySW5mb10pOworICAgICAgICB9CisKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIobmlsKTsKKyAgICB9KTsKK30KKworI3ByYWdtYSBtYXJrIFdLT2JqZWN0
IHByb3RvY29sIGltcGxlbWVudGF0aW9uCisKKy0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0Cit7
CisgICAgcmV0dXJuICpfY29udGVudEV4dGVuc2lvblN0b3JlOworfQorCitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAoV0tQcml2YXRlKQorCisvLyBGb3Ig
dGVzdGluZyBvbmx5LgorCistICh2b2lkKV9yZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucworewor
ICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUtPnN5bmNocm9ub3VzUmVtb3ZlQWxsQ29udGVudEV4
dGVuc2lvbnMoKTsKK30KKworLSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJz
aW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisgICAgX2NvbnRlbnRF
eHRlbnNpb25TdG9yZS0+aW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uKGlkZW50aWZp
ZXIpOworfQorCistICh2b2lkKV9nZXRDb250ZW50RXh0ZW5zaW9uU291cmNlRm9ySWRlbnRpZmll
cjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1N0
cmluZyopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhb
Y29tcGxldGlvbkhhbmRsZXIgY29weV0pOworICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUtPmdl
dENvbnRlbnRFeHRlbnNpb25Tb3VyY2UoaWRlbnRpZmllciwgW2hhbmRsZXJdKFN0cmluZyBzb3Vy
Y2UpIHsKKyAgICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKE5TU3RyaW5nICopKWhh
bmRsZXIuZ2V0KCk7CisgICAgICAgIGlmIChzb3VyY2UuaXNOdWxsKCkpCisgICAgICAgICAgICBy
YXdIYW5kbGVyKG5pbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhd0hhbmRsZXIoc291
cmNlKTsKKyAgICB9KTsKK30KKworLy8gTlNfUkVMRUFTRVNfQVJHVU1FTlQgdG8ga2VlcCBwZWFr
IG1lbW9yeSB1c2FnZSBsb3cuCisKKy0gKHZvaWQpX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9y
SWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9u
OihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxl
cgoreworICAgIFtzZWxmIF9jb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6aWRl
bnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjplbmNvZGVkQ29udGVudEV4dGVuc2lvbiBj
b21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlciByZWxlYXNlc0FyZ3VtZW50OllFU107
Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxl
TGlzdFN0b3JlLm1tCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI0LDk0ICsyNCw5NiBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV0tD
b250ZW50RXh0ZW5zaW9uSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldLQ29udGVudEV4dGVuc2lvblN0
b3JlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVudFJ1bGVMaXN0SW50ZXJuYWwuaCIKKyNp
bXBvcnQgIldLQ29udGVudFJ1bGVMaXN0U3RvcmVJbnRlcm5hbC5oIgogCiAjaWYgV0tfQVBJX0VO
QUJMRUQKIAotI2ltcG9ydCAiQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisjaW1wb3J0ICJB
UElDb250ZW50UnVsZUxpc3RTdG9yZS5oIgogI2ltcG9ydCAiV0tFcnJvckludGVybmFsLmgiCiAj
aW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KIAogc3RhdGljIFdLRXJyb3JDb2RlIHRvV0tFcnJvckNv
ZGUoY29uc3Qgc3RkOjplcnJvcl9jb2RlJiBlcnJvcikKIHsKLSAgICBBU1NFUlQoZXJyb3IuY2F0
ZWdvcnkoKSA9PSBBUEk6OmNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ2F0ZWdvcnkoKSk7Ci0g
ICAgc3dpdGNoIChzdGF0aWNfY2FzdDxBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I+
KGVycm9yLnZhbHVlKCkpKSB7Ci0gICAgY2FzZSBBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9yZTo6
RXJyb3I6Okxvb2t1cEZhaWxlZDoKLSAgICAgICAgcmV0dXJuIFdLRXJyb3JDb250ZW50RXh0ZW5z
aW9uU3RvcmVMb29rVXBGYWlsZWQ7Ci0gICAgY2FzZSBBUEk6OkNvbnRlbnRFeHRlbnNpb25TdG9y
ZTo6RXJyb3I6OlZlcnNpb25NaXNtYXRjaDoKLSAgICAgICAgcmV0dXJuIFdLRXJyb3JDb250ZW50
RXh0ZW5zaW9uU3RvcmVWZXJzaW9uTWlzbWF0Y2g7Ci0gICAgY2FzZSBBUEk6OkNvbnRlbnRFeHRl
bnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ6Ci0gICAgICAgIHJldHVybiBXS0Vycm9y
Q29udGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZUZhaWxlZDsKLSAgICBjYXNlIEFQSTo6Q29udGVu
dEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6UmVtb3ZlRmFpbGVkOgotICAgICAgICByZXR1cm4gV0tF
cnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZDsKKyAgICBBU1NFUlQoZXJyb3Iu
Y2F0ZWdvcnkoKSA9PSBBUEk6OmNvbnRlbnRSdWxlTGlzdFN0b3JlRXJyb3JDYXRlZ29yeSgpKTsK
KyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEFQSTo6Q29udGVudFJ1bGVMaXN0U3RvcmU6OkVycm9y
PihlcnJvci52YWx1ZSgpKSkgeworICAgIGNhc2UgQVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZTo6
RXJyb3I6Okxvb2t1cEZhaWxlZDoKKyAgICAgICAgcmV0dXJuIFdLRXJyb3JDb250ZW50UnVsZUxp
c3RTdG9yZUxvb2tVcEZhaWxlZDsKKyAgICBjYXNlIEFQSTo6Q29udGVudFJ1bGVMaXN0U3RvcmU6
OkVycm9yOjpWZXJzaW9uTWlzbWF0Y2g6CisgICAgICAgIHJldHVybiBXS0Vycm9yQ29udGVudFJ1
bGVMaXN0U3RvcmVWZXJzaW9uTWlzbWF0Y2g7CisgICAgY2FzZSBBUEk6OkNvbnRlbnRSdWxlTGlz
dFN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxlZDoKKyAgICAgICAgcmV0dXJuIFdLRXJyb3JDb250
ZW50UnVsZUxpc3RTdG9yZUNvbXBpbGVGYWlsZWQ7CisgICAgY2FzZSBBUEk6OkNvbnRlbnRSdWxl
TGlzdFN0b3JlOjpFcnJvcjo6UmVtb3ZlRmFpbGVkOgorICAgICAgICByZXR1cm4gV0tFcnJvckNv
bnRlbnRSdWxlTGlzdFN0b3JlUmVtb3ZlRmFpbGVkOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gV0tFcnJvclVua25vd247CiB9CiAKLUBpbXBsZW1lbnRhdGlv
biBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZQorQGltcGxlbWVudGF0aW9uIFdLQ29udGVudFJ1bGVM
aXN0U3RvcmUKIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgX2NvbnRlbnRFeHRlbnNpb25TdG9y
ZS0+fkNvbnRlbnRFeHRlbnNpb25TdG9yZSgpOworICAgIF9jb250ZW50UnVsZUxpc3RTdG9yZS0+
fkNvbnRlbnRSdWxlTGlzdFN0b3JlKCk7CiAKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKICsg
KGluc3RhbmNldHlwZSlkZWZhdWx0U3RvcmUKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp3cmFwcGVy
KEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlOjpkZWZhdWx0U3RvcmUoKSk7CisgICAgY29uc3Qg
Ym9vbCBsZWdhY3lGaWxlbmFtZSA9IGZhbHNlOworICAgIHJldHVybiBXZWJLaXQ6OndyYXBwZXIo
QVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZTo6ZGVmYXVsdFN0b3JlKGxlZ2FjeUZpbGVuYW1lKSk7
CiB9CiAKICsgKGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkw6KE5TVVJMICopdXJsCiB7Ci0gICAg
UmVmPEFQSTo6Q29udGVudEV4dGVuc2lvblN0b3JlPiBzdG9yZSA9IEFQSTo6Q29udGVudEV4dGVu
c2lvblN0b3JlOjpzdG9yZVdpdGhQYXRoKHVybC5hYnNvbHV0ZVVSTC5maWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24pOworICAgIGNvbnN0IGJvb2wgbGVnYWN5RmlsZW5hbWUgPSBmYWxzZTsKKyAgICBS
ZWY8QVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZT4gc3RvcmUgPSBBUEk6OkNvbnRlbnRSdWxlTGlz
dFN0b3JlOjpzdG9yZVdpdGhQYXRoKHVybC5hYnNvbHV0ZVVSTC5maWxlU3lzdGVtUmVwcmVzZW50
YXRpb24sIGxlZ2FjeUZpbGVuYW1lKTsKICAgICByZXR1cm4gV2ViS2l0Ojp3cmFwcGVyKHN0b3Jl
LmxlYWtSZWYoKSk7CiB9CiAKLS0gKHZvaWQpY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5T
U3RyaW5nICopZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCist
ICh2b2lkKWNvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlk
ZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDooTlNTdHJpbmcgKillbmNvZGVkQ29udGVu
dFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAq
LCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgW3NlbGYgX2NvbXBpbGVDb250
ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5z
aW9uOmVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25I
YW5kbGVyIHJlbGVhc2VzQXJndW1lbnQ6Tk9dOworICAgIFtzZWxmIF9jb21waWxlQ29udGVudFJ1
bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGVuY29kZWRDb250ZW50UnVsZUxpc3Q6ZW5j
b2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlciBy
ZWxlYXNlc0FyZ3VtZW50Ok5PXTsKIH0KIAotLSAodm9pZClfY29tcGlsZUNvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRl
bnNpb246KE5TU3RyaW5nICopZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25I
YW5kbGVyIHJlbGVhc2VzQXJndW1lbnQ6KEJPT0wpcmVsZWFzZXNBcmd1bWVudAorLSAodm9pZClf
Y29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmll
ciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50UnVsZUxp
c3QgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudFJ1bGVMaXN0ICosIE5TRXJy
b3IgKikpY29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZXNBcmd1bWVudDooQk9PTClyZWxlYXNlc0Fy
Z3VtZW50CiB7Ci0gICAgU3RyaW5nIGpzb24oZW5jb2RlZENvbnRlbnRFeHRlbnNpb24pOworICAg
IFN0cmluZyBqc29uKGVuY29kZWRDb250ZW50UnVsZUxpc3QpOwogICAgIGlmIChyZWxlYXNlc0Fy
Z3VtZW50KSB7Ci0gICAgICAgIFtlbmNvZGVkQ29udGVudEV4dGVuc2lvbiByZWxlYXNlXTsKLSAg
ICAgICAgZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gPSBuaWw7CisgICAgICAgIFtlbmNvZGVkQ29u
dGVudFJ1bGVMaXN0IHJlbGVhc2VdOworICAgICAgICBlbmNvZGVkQ29udGVudFJ1bGVMaXN0ID0g
bmlsOwogICAgIH0KIAotICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUtPmNvbXBpbGVDb250ZW50
RXh0ZW5zaW9uKGlkZW50aWZpZXIsIFdURk1vdmUoanNvbiksIFtjb21wbGV0aW9uSGFuZGxlciA9
IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKFJlZlB0cjxBUEk6OkNvbnRlbnRFeHRl
bnNpb24+IGNvbnRlbnRFeHRlbnNpb24sIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAgIF9j
b250ZW50UnVsZUxpc3RTdG9yZS0+Y29tcGlsZUNvbnRlbnRSdWxlTGlzdChpZGVudGlmaWVyLCBX
VEZNb3ZlKGpzb24pLCBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlv
bkhhbmRsZXIpXShSZWZQdHI8QVBJOjpDb250ZW50UnVsZUxpc3Q+IGNvbnRlbnRSdWxlTGlzdCwg
c3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CiAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAg
ICAgYXV0byB1c2VySW5mbyA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiRXh0ZW5zaW9uIGNvbXBpbGF0aW9uIGZhaWxlZDogJXMiLCBlcnJvci5t
ZXNzYWdlKCkuY19zdHIoKV19OworICAgICAgICAgICAgYXV0byB1c2VySW5mbyA9IEB7TlNIZWxw
QW5jaG9yRXJyb3JLZXk6IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiUnVsZSBsaXN0IGNv
bXBpbGF0aW9uIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwogCi0gICAg
ICAgICAgICAvLyBlcnJvci52YWx1ZSgpIGNvdWxkIGhhdmUgYSBzcGVjaWZpYyBjb21waWxlciBl
cnJvciB0aGF0IGlzIG5vdCBlcXVhbCB0byBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlQ29t
cGlsZUZhaWxlZC4KKyAgICAgICAgICAgIC8vIGVycm9yLnZhbHVlKCkgY291bGQgaGF2ZSBhIHNw
ZWNpZmljIGNvbXBpbGVyIGVycm9yIHRoYXQgaXMgbm90IGVxdWFsIHRvIFdLRXJyb3JDb250ZW50
UnVsZUxpc3RTdG9yZUNvbXBpbGVGYWlsZWQuCiAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIHVz
ZSBlcnJvci5tZXNzYWdlLCBidXQgaGVyZSB3ZSB3YW50IHRvIG9ubHkgcGFzcyBvbiBDb21waWxl
RmFpbGVkIHdpdGggdXNlckluZm8gZnJvbSB0aGUgc3RkOjplcnJvcl9jb2RlLgotICAgICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWlu
OldLRXJyb3JEb21haW4gY29kZTpXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZUZh
aWxlZCB1c2VySW5mbzp1c2VySW5mb10pOworICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29kZTpX
S0Vycm9yQ29udGVudFJ1bGVMaXN0U3RvcmVDb21waWxlRmFpbGVkIHVzZXJJbmZvOnVzZXJJbmZv
XSk7CiAgICAgICAgIH0KLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0Ojp3cmFwcGVy
KCpjb250ZW50RXh0ZW5zaW9uLmdldCgpKSwgbmlsKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV2ViS2l0Ojp3cmFwcGVyKCpjb250ZW50UnVsZUxpc3QuZ2V0KCkpLCBuaWwpOwogICAgIH0p
OwogfQogCi0tICh2b2lkKWxvb2tVcENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0
cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4
dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKWxvb2tVcENv
bnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoV0tDb250ZW50UnVsZUxpc3QgKiwgTlNFcnJvciAqKSljb21w
bGV0aW9uSGFuZGxlcgogewotICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUtPmxvb2t1cENvbnRl
bnRFeHRlbnNpb24oaWRlbnRpZmllciwgW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRy
KGNvbXBsZXRpb25IYW5kbGVyKV0oUmVmUHRyPEFQSTo6Q29udGVudEV4dGVuc2lvbj4gY29udGVu
dEV4dGVuc2lvbiwgc3RkOjplcnJvcl9jb2RlIGVycm9yKSB7CisgICAgX2NvbnRlbnRSdWxlTGlz
dFN0b3JlLT5sb29rdXBDb250ZW50UnVsZUxpc3QoaWRlbnRpZmllciwgW2NvbXBsZXRpb25IYW5k
bGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oUmVmUHRyPEFQSTo6Q29udGVu
dFJ1bGVMaXN0PiBjb250ZW50UnVsZUxpc3QsIHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgewogICAg
ICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBAe05TSGVscEFu
Y2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVuc2lvbiBsb29r
dXAgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07CisgICAgICAgICAgICBh
dXRvIHVzZXJJbmZvID0gQHtOU0hlbHBBbmNob3JFcnJvcktleTogW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJSdWxlIGxpc3QgbG9va3VwIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCku
Y19zdHIoKV19OwogICAgICAgICAgICAgYXV0byB3a0Vycm9yID0gdG9XS0Vycm9yQ29kZShlcnJv
cik7Ci0gICAgICAgICAgICBBU1NFUlQod2tFcnJvciA9PSBXS0Vycm9yQ29udGVudEV4dGVuc2lv
blN0b3JlTG9va1VwRmFpbGVkIHx8IHdrRXJyb3IgPT0gV0tFcnJvckNvbnRlbnRFeHRlbnNpb25T
dG9yZVZlcnNpb25NaXNtYXRjaCk7CisgICAgICAgICAgICBBU1NFUlQod2tFcnJvciA9PSBXS0Vy
cm9yQ29udGVudFJ1bGVMaXN0U3RvcmVMb29rVXBGYWlsZWQgfHwgd2tFcnJvciA9PSBXS0Vycm9y
Q29udGVudFJ1bGVMaXN0U3RvcmVWZXJzaW9uTWlzbWF0Y2gpOwogICAgICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldLRXJyb3JE
b21haW4gY29kZTp3a0Vycm9yIHVzZXJJbmZvOnVzZXJJbmZvXSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJLaXQ6OndyYXBwZXIoKmNvbnRlbnRFeHRlbnNpb24u
Z2V0KCkpLCBuaWwpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJLaXQ6OndyYXBwZXIo
KmNvbnRlbnRSdWxlTGlzdC5nZXQoKSksIG5pbCk7CiAgICAgfSk7CiB9CiAKLS0gKHZvaWQpZ2V0
QXZhaWxhYmxlQ29udGVudEV4dGVuc2lvbklkZW50aWZpZXJzOih2b2lkICheKShOU0FycmF5PE5T
U3RyaW5nICo+KikpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpZ2V0QXZhaWxhYmxlQ29udGVu
dFJ1bGVMaXN0SWRlbnRpZmllcnM6KHZvaWQgKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4qKSljb21w
bGV0aW9uSGFuZGxlcgogewotICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUtPmdldEF2YWlsYWJs
ZUNvbnRlbnRFeHRlbnNpb25JZGVudGlmaWVycyhbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXShWZWN0b3I8U3RyaW5nPiBpZGVudGlmaWVycykgewor
ICAgIF9jb250ZW50UnVsZUxpc3RTdG9yZS0+Z2V0QXZhaWxhYmxlQ29udGVudFJ1bGVMaXN0SWRl
bnRpZmllcnMoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5k
bGVyKV0oVmVjdG9yPFN0cmluZz4gaWRlbnRpZmllcnMpIHsKICAgICAgICAgTlNNdXRhYmxlQXJy
YXk8TlNTdHJpbmcgKj4gKm5zSWRlbnRpZmllcnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRo
Q2FwYWNpdHk6aWRlbnRpZmllcnMuc2l6ZSgpXTsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBp
ZGVudGlmaWVyIDogaWRlbnRpZmllcnMpCiAgICAgICAgICAgICBbbnNJZGVudGlmaWVycyBhZGRP
YmplY3Q6aWRlbnRpZmllcl07CkBAIC0xMTksMTMgKzEyMSwxMyBAQCAtICh2b2lkKWdldEF2YWls
YWJsZUNvbnRlbnRFeHRlbnNpb25JZGVuCiAgICAgfSk7CiB9CiAKLS0gKHZvaWQpcmVtb3ZlQ29u
dGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgorLSAodm9p
ZClyZW1vdmVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZp
ZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRs
ZXIKIHsKLSAgICBfY29udGVudEV4dGVuc2lvblN0b3JlLT5yZW1vdmVDb250ZW50RXh0ZW5zaW9u
KGlkZW50aWZpZXIsIFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9u
SGFuZGxlcildKHN0ZDo6ZXJyb3JfY29kZSBlcnJvcikgeworICAgIF9jb250ZW50UnVsZUxpc3RT
dG9yZS0+cmVtb3ZlQ29udGVudFJ1bGVMaXN0KGlkZW50aWZpZXIsIFtjb21wbGV0aW9uSGFuZGxl
ciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKHN0ZDo6ZXJyb3JfY29kZSBlcnJv
cikgewogICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGF1dG8gdXNlckluZm8gPSBA
e05TSGVscEFuY2hvckVycm9yS2V5OiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkV4dGVu
c2lvbiByZW1vdmFsIGZhaWxlZDogJXMiLCBlcnJvci5tZXNzYWdlKCkuY19zdHIoKV19OwotICAg
ICAgICAgICAgQVNTRVJUKHRvV0tFcnJvckNvZGUoZXJyb3IpID09IFdLRXJyb3JDb250ZW50RXh0
ZW5zaW9uU3RvcmVSZW1vdmVGYWlsZWQpOwotICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6V0tFcnJv
ckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCB1c2VySW5mbzp1c2VySW5mb10pOwor
ICAgICAgICAgICAgYXV0byB1c2VySW5mbyA9IEB7TlNIZWxwQW5jaG9yRXJyb3JLZXk6IFtOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiUnVsZSBsaXN0IHJlbW92YWwgZmFpbGVkOiAlcyIsIGVy
cm9yLm1lc3NhZ2UoKS5jX3N0cigpXX07CisgICAgICAgICAgICBBU1NFUlQodG9XS0Vycm9yQ29k
ZShlcnJvcikgPT0gV0tFcnJvckNvbnRlbnRSdWxlTGlzdFN0b3JlUmVtb3ZlRmFpbGVkKTsKKyAg
ICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihbTlNFcnJvciBlcnJvcldpdGhEb21h
aW46V0tFcnJvckRvbWFpbiBjb2RlOldLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZVJlbW92ZUZh
aWxlZCB1c2VySW5mbzp1c2VySW5mb10pOwogICAgICAgICB9CiAKICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIobmlsKTsKQEAgLTEzNiwyOSArMTM4LDI5IEBAIC0gKHZvaWQpcmVtb3ZlQ29udGVu
dEV4dGVuc2lvbkZvcklkZW50aWYKIAogLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIHsKLSAg
ICByZXR1cm4gKl9jb250ZW50RXh0ZW5zaW9uU3RvcmU7CisgICAgcmV0dXJuICpfY29udGVudFJ1
bGVMaXN0U3RvcmU7CiB9CiAKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIFdLQ29udGVudEV4dGVu
c2lvblN0b3JlIChXS1ByaXZhdGUpCitAaW1wbGVtZW50YXRpb24gV0tDb250ZW50UnVsZUxpc3RT
dG9yZSAoV0tQcml2YXRlKQogCiAvLyBGb3IgdGVzdGluZyBvbmx5LgogCi0tICh2b2lkKV9yZW1v
dmVBbGxDb250ZW50RXh0ZW5zaW9ucworLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudFJ1bGVMaXN0
cwogewotICAgIF9jb250ZW50RXh0ZW5zaW9uU3RvcmUtPnN5bmNocm9ub3VzUmVtb3ZlQWxsQ29u
dGVudEV4dGVuc2lvbnMoKTsKKyAgICBfY29udGVudFJ1bGVMaXN0U3RvcmUtPnN5bmNocm9ub3Vz
UmVtb3ZlQWxsQ29udGVudFJ1bGVMaXN0cygpOwogfQogCi0tICh2b2lkKV9pbnZhbGlkYXRlQ29u
dGVudEV4dGVuc2lvblZlcnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIK
Ky0gKHZvaWQpX2ludmFsaWRhdGVDb250ZW50UnVsZUxpc3RWZXJzaW9uRm9ySWRlbnRpZmllcjoo
TlNTdHJpbmcgKilpZGVudGlmaWVyCiB7Ci0gICAgX2NvbnRlbnRFeHRlbnNpb25TdG9yZS0+aW52
YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uKGlkZW50aWZpZXIpOworICAgIF9jb250ZW50
UnVsZUxpc3RTdG9yZS0+aW52YWxpZGF0ZUNvbnRlbnRSdWxlTGlzdFZlcnNpb24oaWRlbnRpZmll
cik7CiB9CiAKLS0gKHZvaWQpX2dldENvbnRlbnRFeHRlbnNpb25Tb3VyY2VGb3JJZGVudGlmaWVy
OihOU1N0cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TU3Ry
aW5nKikpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpX2dldENvbnRlbnRSdWxlTGlzdFNvdXJj
ZUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoTlNTdHJpbmcqKSljb21wbGV0aW9uSGFuZGxlcgogewogICAgIGF1dG8gaGFuZGxl
ciA9IGFkb3B0TlMoW2NvbXBsZXRpb25IYW5kbGVyIGNvcHldKTsKLSAgICBfY29udGVudEV4dGVu
c2lvblN0b3JlLT5nZXRDb250ZW50RXh0ZW5zaW9uU291cmNlKGlkZW50aWZpZXIsIFtoYW5kbGVy
XShTdHJpbmcgc291cmNlKSB7CisgICAgX2NvbnRlbnRSdWxlTGlzdFN0b3JlLT5nZXRDb250ZW50
UnVsZUxpc3RTb3VyY2UoaWRlbnRpZmllciwgW2hhbmRsZXJdKFN0cmluZyBzb3VyY2UpIHsKICAg
ICAgICAgYXV0byByYXdIYW5kbGVyID0gKHZvaWQgKF4pKE5TU3RyaW5nICopKWhhbmRsZXIuZ2V0
KCk7CiAgICAgICAgIGlmIChzb3VyY2UuaXNOdWxsKCkpCiAgICAgICAgICAgICByYXdIYW5kbGVy
KG5pbCk7CkBAIC0xNjksOSArMTcxLDIyIEBAIC0gKHZvaWQpX2dldENvbnRlbnRFeHRlbnNpb25T
b3VyY2VGb3JJZGUKIAogLy8gTlNfUkVMRUFTRVNfQVJHVU1FTlQgdG8ga2VlcCBwZWFrIG1lbW9y
eSB1c2FnZSBsb3cuCiAKLS0gKHZvaWQpX2NvbXBpbGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRp
ZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIGVuY29kZWRDb250ZW50RXh0ZW5zaW9uOihOU1N0
cmluZyAqKWVuY29kZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShXS0NvbnRlbnRFeHRlbnNpb24gKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgorLSAo
dm9pZClfY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRl
bnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OihOU1N0cmluZyAqKWVuY29kZWRDb250ZW50
UnVsZUxpc3QgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudFJ1bGVMaXN0ICos
IE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBbc2VsZiBfY29tcGlsZUNvbnRl
bnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNp
b246ZW5jb2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhh
bmRsZXIgcmVsZWFzZXNBcmd1bWVudDpZRVNdOworICAgIFtzZWxmIF9jb21waWxlQ29udGVudFJ1
bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGVuY29kZWRDb250ZW50UnVsZUxpc3Q6ZW5j
b2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlciBy
ZWxlYXNlc0FyZ3VtZW50OllFU107Cit9CisKKysgKGluc3RhbmNldHlwZSlkZWZhdWx0U3RvcmVX
aXRoTGVnYWN5RmlsZW5hbWUKK3sKKyAgICBjb25zdCBib29sIGxlZ2FjeUZpbGVuYW1lID0gdHJ1
ZTsKKyAgICByZXR1cm4gV2ViS2l0Ojp3cmFwcGVyKEFQSTo6Q29udGVudFJ1bGVMaXN0U3RvcmU6
OmRlZmF1bHRTdG9yZShsZWdhY3lGaWxlbmFtZSkpOworfQorCisrIChpbnN0YW5jZXR5cGUpc3Rv
cmVXaXRoVVJMQW5kTGVnYWN5RmlsZW5hbWU6KE5TVVJMICopdXJsCit7CisgICAgY29uc3QgYm9v
bCBsZWdhY3lGaWxlbmFtZSA9IHRydWU7CisgICAgUmVmPEFQSTo6Q29udGVudFJ1bGVMaXN0U3Rv
cmU+IHN0b3JlID0gQVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZTo6c3RvcmVXaXRoUGF0aCh1cmwu
YWJzb2x1dGVVUkwuZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uLCBsZWdhY3lGaWxlbmFtZSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6d3JhcHBlcihzdG9yZS5sZWFrUmVmKCkpOwogfQogCiBAZW5kCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLQ29udGVudFJ1bGVMaXN0
U3RvcmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZUludGVybmFsLmgJKHJldmlzaW9uIDIxNjUz
OSkJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRFeHRl
bnNpb25TdG9yZUludGVybmFsLmg6MjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlSW50ZXJuYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmVQcml2YXRlLmgiCisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJBUElD
b250ZW50RXh0ZW5zaW9uU3RvcmUuaCIKKyNpbXBvcnQgIldLT2JqZWN0LmgiCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitpbmxpbmUgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKndyYXBwZXIoQVBJ
OjpDb250ZW50RXh0ZW5zaW9uU3RvcmUmIHN0b3JlKQoreworICAgIEFTU0VSVChbc3RvcmUud3Jh
cHBlcigpIGlzS2luZE9mQ2xhc3M6W1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGNsYXNzXV0pOwor
ICAgIHJldHVybiAoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKilzdG9yZS53cmFwcGVyKCk7Cit9
CisKK30KKworQGludGVyZmFjZSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAoKSA8V0tPYmplY3Q+
IHsKK0BwYWNrYWdlCisgICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6Q29udGVudEV4dGVuc2lv
blN0b3JlPiBfY29udGVudEV4dGVuc2lvblN0b3JlOworfQorQGVuZAorCisjZW5kaWYgLy8gV0tf
QVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tD
b250ZW50UnVsZUxpc3RTdG9yZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlSW50ZXJuYWwuaAko
cmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0NvbnRlbnRSdWxlTGlzdFN0b3JlSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjYg
KzIzLDI2IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lt
cG9ydCAiV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgiCisjaW1wb3J0ICJXS0NvbnRl
bnRSdWxlTGlzdFN0b3JlUHJpdmF0ZS5oIgogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAotI2ltcG9y
dCAiQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmgiCisjaW1wb3J0ICJBUElDb250ZW50UnVsZUxp
c3RTdG9yZS5oIgogI2ltcG9ydCAiV0tPYmplY3QuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LWlubGluZSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAqd3JhcHBlcihBUEk6OkNvbnRlbnRFeHRl
bnNpb25TdG9yZSYgc3RvcmUpCitpbmxpbmUgV0tDb250ZW50UnVsZUxpc3RTdG9yZSAqd3JhcHBl
cihBUEk6OkNvbnRlbnRSdWxlTGlzdFN0b3JlJiBzdG9yZSkKIHsKLSAgICBBU1NFUlQoW3N0b3Jl
LndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBjbGFzc11d
KTsKLSAgICByZXR1cm4gKFdLQ29udGVudEV4dGVuc2lvblN0b3JlICopc3RvcmUud3JhcHBlcigp
OworICAgIEFTU0VSVChbc3RvcmUud3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W1dLQ29udGVudFJ1
bGVMaXN0U3RvcmUgY2xhc3NdXSk7CisgICAgcmV0dXJuIChXS0NvbnRlbnRSdWxlTGlzdFN0b3Jl
ICopc3RvcmUud3JhcHBlcigpOwogfQogCiB9CiAKLUBpbnRlcmZhY2UgV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmUgKCkgPFdLT2JqZWN0PiB7CitAaW50ZXJmYWNlIFdLQ29udGVudFJ1bGVMaXN0U3Rv
cmUgKCkgPFdLT2JqZWN0PiB7CiBAcGFja2FnZQotICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxBUEk6
OkNvbnRlbnRFeHRlbnNpb25TdG9yZT4gX2NvbnRlbnRFeHRlbnNpb25TdG9yZTsKKyAgICBBUEk6
Ok9iamVjdFN0b3JhZ2U8QVBJOjpDb250ZW50UnVsZUxpc3RTdG9yZT4gX2NvbnRlbnRSdWxlTGlz
dFN0b3JlOwogfQogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0
ZS5oCShyZXZpc2lvbiAyMTY1MzkpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmg6MjE2NTM5KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlUHJpdmF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
IDxXZWJLaXQvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaD4KKworI2lmIFdLX0FQSV9FTkFCTEVE
CisKK0BpbnRlcmZhY2UgV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdLUHJpdmF0ZSkKKworLy8g
Rm9yIHRlc3Rpbmcgb25seS4KKy0gKHZvaWQpX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zOwor
LSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjoo
TlNTdHJpbmcgKilpZGVudGlmaWVyOworLSAodm9pZClfZ2V0Q29udGVudEV4dGVuc2lvblNvdXJj
ZUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoTlNTdHJpbmcqKSljb21wbGV0aW9uSGFuZGxlcjsKKworLy8gTlNfUkVMRUFTRVNf
QVJHVU1FTlQgdG8ga2VlcCBwZWFrIG1lbW9yeSB1c2FnZSBsb3cuCistICh2b2lkKV9jb21waWxl
Q29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNv
ZGVkQ29udGVudEV4dGVuc2lvbjooTlNTdHJpbmcgKikgTlNfUkVMRUFTRVNfQVJHVU1FTlQgZW5j
b2RlZENvbnRlbnRFeHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVu
dEV4dGVuc2lvbiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworCitAZW5kCisKKyNl
bmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRS
dWxlTGlzdFN0b3JlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tDb250ZW50UnVsZUxpc3RTdG9yZVByaXZhdGUuaAkocmV2aXNpb24g
MjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0NvbnRlbnRS
dWxlTGlzdFN0b3JlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxOSArMjMsMjUgQEAK
ICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0IDxXZWJL
aXQvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS0NvbnRlbnRS
dWxlTGlzdFN0b3JlLmg+CiAKICNpZiBXS19BUElfRU5BQkxFRAogCi1AaW50ZXJmYWNlIFdLQ29u
dGVudEV4dGVuc2lvblN0b3JlIChXS1ByaXZhdGUpCitAaW50ZXJmYWNlIFdLQ29udGVudFJ1bGVM
aXN0U3RvcmUgKFdLUHJpdmF0ZSkKIAogLy8gRm9yIHRlc3Rpbmcgb25seS4KLS0gKHZvaWQpX3Jl
bW92ZUFsbENvbnRlbnRFeHRlbnNpb25zOwotLSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRl
bnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyOwotLSAodm9p
ZClfZ2V0Q29udGVudEV4dGVuc2lvblNvdXJjZUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRl
bnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNTdHJpbmcqKSljb21wbGV0aW9u
SGFuZGxlcjsKKy0gKHZvaWQpX3JlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHM7CistICh2b2lkKV9p
bnZhbGlkYXRlQ29udGVudFJ1bGVMaXN0VmVyc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICop
aWRlbnRpZmllcjsKKy0gKHZvaWQpX2dldENvbnRlbnRSdWxlTGlzdFNvdXJjZUZvcklkZW50aWZp
ZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNT
dHJpbmcqKSljb21wbGV0aW9uSGFuZGxlcjsKIAogLy8gTlNfUkVMRUFTRVNfQVJHVU1FTlQgdG8g
a2VlcCBwZWFrIG1lbW9yeSB1c2FnZSBsb3cuCi0tICh2b2lkKV9jb21waWxlQ29udGVudEV4dGVu
c2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4
dGVuc2lvbjooTlNTdHJpbmcgKikgTlNfUkVMRUFTRVNfQVJHVU1FTlQgZW5jb2RlZENvbnRlbnRF
eHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFdLQ29udGVudEV4dGVuc2lvbiAq
LCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClfY29tcGlsZUNvbnRlbnRS
dWxlTGlzdEZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciBlbmNvZGVkQ29udGVu
dFJ1bGVMaXN0OihOU1N0cmluZyAqKSBOU19SRUxFQVNFU19BUkdVTUVOVCBlbmNvZGVkQ29udGVu
dFJ1bGVMaXN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShXS0NvbnRlbnRSdWxlTGlzdCAq
LCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOworCisvLyBUbyBtYWludGFpbiBjb21wYXRp
YmlsaXR5IHdpdGggX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZQorLy8gRklYTUU6IEFkZCBz
b21ldGhpbmcgdG8gZXhpc3RpbmcgY2xpZW50cyBvZiBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlIHRvIG1pZ3JhdGUgZmlsZXMgZnJvbSBsZWdhY3kgZmlsZW5hbWVzLAorLy8gYWRvcHQgV0tD
b250ZW50UnVsZUxpc3RTdG9yZSwgYW5kIHJlbW92ZSBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlLgorKyAoaW5zdGFuY2V0eXBlKWRlZmF1bHRTdG9yZVdpdGhMZWdhY3lGaWxlbmFtZTsKKysg
KGluc3RhbmNldHlwZSlzdG9yZVdpdGhVUkxBbmRMZWdhY3lGaWxlbmFtZTooTlNVUkwgKil1cmw7
CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Vy
cm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0Vycm9yLmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tFcnJvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMTAgQEAgV0tf
RVhURVJOIE5TU3RyaW5nICogY29uc3QgV0tFcnJvckRvbWFpbgogIEBjb25zdGFudCBXS0Vycm9y
V2ViVmlld0ludmFsaWRhdGVkICAgICAgICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBX
S1dlYlZpZXcgd2FzIGludmFsaWRhdGVkLgogIEBjb25zdGFudCBXS0Vycm9ySmF2YVNjcmlwdEV4
Y2VwdGlvbk9jY3VycmVkICAgICAgICAgIEluZGljYXRlcyB0aGF0IGEgSmF2YVNjcmlwdCBleGNl
cHRpb24gb2NjdXJyZWQuCiAgQGNvbnN0YW50IFdLRXJyb3JKYXZhU2NyaXB0UmVzdWx0VHlwZUlz
VW5zdXBwb3J0ZWQgICAgSW5kaWNhdGVzIHRoYXQgdGhlIHJlc3VsdCBvZiBKYXZhU2NyaXB0IGV4
ZWN1dGlvbiBjb3VsZCBub3QgYmUgcmV0dXJuZWQuCi0gQGNvbnN0YW50IFdLRXJyb3JDb250ZW50
RXh0ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkICAgSW5kaWNhdGVzIHRoYXQgY29tcGlsaW5nIGEg
V0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQuCi0gQGNvbnN0YW50IFdLRXJyb3JDb250ZW50
RXh0ZW5zaW9uU3RvcmVMb29rVXBGYWlsZWQgICAgSW5kaWNhdGVzIHRoYXQgbG9va2luZyB1cCBh
IFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZmFpbGVkLgotIEBjb25zdGFudCBXS0Vycm9yQ29udGVu
dEV4dGVuc2lvblN0b3JlUmVtb3ZlRmFpbGVkICAgIEluZGljYXRlcyB0aGF0IHJlbW92aW5nIGEg
V0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQuCi0gQGNvbnN0YW50IFdLRXJyb3JDb250ZW50
RXh0ZW5zaW9uU3RvcmVWZXJzaW9uTWlzbWF0Y2ggSW5kaWNhdGVzIHRoYXQgdGhlIFdLVXNlckNv
bnRlbnRFeHRlbnNpb24gdmVyc2lvbiBkaWQgbm90IG1hdGNoIHRoZSBsYXRlc3QuCisgQGNvbnN0
YW50IFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZUNvbXBpbGVGYWlsZWQgICAgSW5kaWNhdGVz
IHRoYXQgY29tcGlsaW5nIGEgV0tVc2VyQ29udGVudFJ1bGVMaXN0IGZhaWxlZC4KKyBAY29uc3Rh
bnQgV0tFcnJvckNvbnRlbnRSdWxlTGlzdFN0b3JlTG9va1VwRmFpbGVkICAgICBJbmRpY2F0ZXMg
dGhhdCBsb29raW5nIHVwIGEgV0tVc2VyQ29udGVudFJ1bGVMaXN0IGZhaWxlZC4KKyBAY29uc3Rh
bnQgV0tFcnJvckNvbnRlbnRSdWxlTGlzdFN0b3JlUmVtb3ZlRmFpbGVkICAgICBJbmRpY2F0ZXMg
dGhhdCByZW1vdmluZyBhIFdLVXNlckNvbnRlbnRSdWxlTGlzdCBmYWlsZWQuCisgQGNvbnN0YW50
IFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZVZlcnNpb25NaXNtYXRjaCAgSW5kaWNhdGVzIHRo
YXQgdGhlIFdLVXNlckNvbnRlbnRSdWxlTGlzdCB2ZXJzaW9uIGRpZCBub3QgbWF0Y2ggdGhlIGxh
dGVzdC4KICAqLwogdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgV0tFcnJvckNvZGUpIHsKICAg
ICBXS0Vycm9yVW5rbm93biA9IDEsCkBAIC01MiwxMCArNTIsMTAgQEAgdHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgV0tFcnJvckNvZGUpIAogICAgIFdLRXJyb3JXZWJWaWV3SW52YWxpZGF0ZWQs
CiAgICAgV0tFcnJvckphdmFTY3JpcHRFeGNlcHRpb25PY2N1cnJlZCwKICAgICBXS0Vycm9ySmF2
YVNjcmlwdFJlc3VsdFR5cGVJc1Vuc3VwcG9ydGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEw
LjExKSwgaW9zKDkuMCkpLAotICAgIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxl
RmFpbGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpLAotICAgIFdLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVMb29rVXBGYWlsZWQgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSksCi0gICAgV0tF
cnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVJlbW92ZUZhaWxlZCBXS19BUElfQVZBSUxBQkxFKG1h
Y29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKSwKLSAgICBXS0Vycm9yQ29udGVudEV4
dGVuc2lvblN0b3JlVmVyc2lvbk1pc21hdGNoIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01B
Q19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpLAorICAgIFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9y
ZUNvbXBpbGVGYWlsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSksCisgICAgV0tFcnJvckNvbnRlbnRSdWxlTGlzdFN0b3JlTG9va1VwRmFpbGVk
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpLAor
ICAgIFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZVJlbW92ZUZhaWxlZCBXS19BUElfQVZBSUxB
QkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKSwKKyAgICBXS0Vycm9yQ29u
dGVudFJ1bGVMaXN0U3RvcmVWZXJzaW9uTWlzbWF0Y2ggV0tfQVBJX0FWQUlMQUJMRShtYWNvc3go
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSksCiB9IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4
KDEwLjEwKSwgaW9zKDguMCkpOwogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLRXJyb3IubW0JKHJldmlzaW9uIDIx
NjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tFcnJvci5tbQko
d29ya2luZyBjb3B5KQpAQCAtNTgsMTcgKzU4LDE3IEBAIE5TU3RyaW5nICpsb2NhbGl6ZWREZXNj
cmlwdGlvbkZvckVycm9yQ28KICAgICBjYXNlIFdLRXJyb3JKYXZhU2NyaXB0UmVzdWx0VHlwZUlz
VW5zdXBwb3J0ZWQ6CiAgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJKYXZhU2NyaXB0IGV4
ZWN1dGlvbiByZXR1cm5lZCBhIHJlc3VsdCBvZiBhbiB1bnN1cHBvcnRlZCB0eXBlIiwgIldLRXJy
b3JKYXZhU2NyaXB0UmVzdWx0VHlwZUlzVW5zdXBwb3J0ZWQgZGVzY3JpcHRpb24iKTsKIAotICAg
IGNhc2UgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxvb2tVcEZhaWxlZDoKLSAgICAgICAg
cmV0dXJuIFdFQl9VSV9TVFJJTkcoIkxvb2tpbmcgdXAgYSBXS1VzZXJDb250ZW50RXh0ZW5zaW9u
IGZhaWxlZCIsICJXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlTG9va3VwRmFpbGVkIGRlc2Ny
aXB0aW9uIik7CisgICAgY2FzZSBXS0Vycm9yQ29udGVudFJ1bGVMaXN0U3RvcmVMb29rVXBGYWls
ZWQ6CisgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5HKCJMb29raW5nIHVwIGEgV0tDb250ZW50
UnVsZUxpc3QgZmFpbGVkIiwgIldLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZUxvb2t1cEZhaWxl
ZCBkZXNjcmlwdGlvbiIpOwogCi0gICAgY2FzZSBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3Jl
VmVyc2lvbk1pc21hdGNoOgotICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklORygiTG9va2luZyB1
cCBhIFdLVXNlckNvbnRlbnRFeHRlbnNpb24gZm91bmQgYSBiaW5hcnkgdGhhdCBpcyBpbmNvbXBh
dGlibGUiLCAiV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZVZlcnNpb25NaXNtYXRjaCBkZXNj
cmlwdGlvbiIpOworICAgIGNhc2UgV0tFcnJvckNvbnRlbnRSdWxlTGlzdFN0b3JlVmVyc2lvbk1p
c21hdGNoOgorICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklORygiTG9va2luZyB1cCBhIFdLQ29u
dGVudFJ1bGVMaXN0IGZvdW5kIGEgYmluYXJ5IHRoYXQgaXMgaW5jb21wYXRpYmxlIiwgIldLRXJy
b3JDb250ZW50UnVsZUxpc3RTdG9yZVZlcnNpb25NaXNtYXRjaCBkZXNjcmlwdGlvbiIpOwogCi0g
ICAgY2FzZSBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZUZhaWxlZDoKLSAgICAg
ICAgcmV0dXJuIFdFQl9VSV9TVFJJTkcoIkNvbXBpbGluZyBhIFdLVXNlckNvbnRlbnRFeHRlbnNp
b24gZmFpbGVkIiwgIldLRXJyb3JDb250ZW50RXh0ZW5zaW9uU3RvcmVDb21waWxlRmFpbGVkIGRl
c2NyaXB0aW9uIik7CisgICAgY2FzZSBXS0Vycm9yQ29udGVudFJ1bGVMaXN0U3RvcmVDb21waWxl
RmFpbGVkOgorICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklORygiQ29tcGlsaW5nIGEgV0tDb250
ZW50UnVsZUxpc3QgZmFpbGVkIiwgIldLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZUNvbXBpbGVG
YWlsZWQgZGVzY3JpcHRpb24iKTsKIAotICAgIGNhc2UgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25T
dG9yZVJlbW92ZUZhaWxlZDoKLSAgICAgICAgcmV0dXJuIFdFQl9VSV9TVFJJTkcoIlJlbW92aW5n
IGEgV0tVc2VyQ29udGVudEV4dGVuc2lvbiBmYWlsZWQiLCAiV0tFcnJvckNvbnRlbnRFeHRlbnNp
b25TdG9yZVJlbW92ZUZhaWxlZCBkZXNjcmlwdGlvbiIpOworICAgIGNhc2UgV0tFcnJvckNvbnRl
bnRSdWxlTGlzdFN0b3JlUmVtb3ZlRmFpbGVkOgorICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklO
RygiUmVtb3ZpbmcgYSBXS0NvbnRlbnRSdWxlTGlzdCBmYWlsZWQiLCAiV0tFcnJvckNvbnRlbnRS
dWxlTGlzdFN0b3JlUmVtb3ZlRmFpbGVkIGRlc2NyaXB0aW9uIik7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9s
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1VzZXJDb250ZW50Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIAot
QGNsYXNzIFdLQ29udGVudEV4dGVuc2lvbjsKK0BjbGFzcyBXS0NvbnRlbnRSdWxlTGlzdDsKIEBj
bGFzcyBXS1VzZXJTY3JpcHQ7CiBAcHJvdG9jb2wgV0tTY3JpcHRNZXNzYWdlSGFuZGxlcjsKIApA
QCAtNzEsMTkgKzcxLDE5IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAuMTApLCBpb3Mo
OC4KICAqLwogLSAodm9pZClyZW1vdmVTY3JpcHRNZXNzYWdlSGFuZGxlckZvck5hbWU6KE5TU3Ry
aW5nICopbmFtZTsKIAotLyohIEBhYnN0cmFjdCBBZGRzIGEgdXNlciBjb250ZW50IGV4dGVuc2lv
bi4KLSBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdXNlciBjb250ZW50IGV4dGVuc2lvbiB0
byBhZGQuCisvKiEgQGFic3RyYWN0IEFkZHMgYSBjb250ZW50IHJ1bGUgbGlzdC4KKyBAcGFyYW0g
bmFtZSBUaGUgbmFtZSBvZiB0aGUgY29udGVudCBydWxlIGxpc3QgdG8gYWRkLgogICovCi0tICh2
b2lkKWFkZENvbnRlbnRFeHRlbnNpb246KFdLQ29udGVudEV4dGVuc2lvbiAqKWNvbnRlbnRFeHRl
bnNpb24gV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CistICh2b2lkKWFkZENvbnRlbnRSdWxlTGlzdDooV0tDb250ZW50UnVsZUxpc3QgKiljb250
ZW50UnVsZUxpc3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7CiAKLS8qISBAYWJzdHJhY3QgUmVtb3ZlcyBhIHVzZXIgY29udGVudCBleHRlbnNp
b24uCi0gQHBhcmFtIG5hbWUgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHVzZXIgY29udGVudCBleHRl
bnNpb24gdG8gcmVtb3ZlLgorLyohIEBhYnN0cmFjdCBSZW1vdmVzIGEgY29udGVudCBydWxlIGxp
c3QuCisgQHBhcmFtIG5hbWUgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGNvbnRlbnQgcnVsZSBsaXN0
IHRvIHJlbW92ZS4KICAqLwotLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5zaW9uOihXS0NvbnRl
bnRFeHRlbnNpb24gKiljb250ZW50RXh0ZW5zaW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClyZW1vdmVDb250ZW50UnVsZUxp
c3Q6KFdLQ29udGVudFJ1bGVMaXN0ICopY29udGVudFJ1bGVMaXN0IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCi0vKiEgQGFic3RyYWN0IFJl
bW92ZXMgYWxsIGFzc29jaWF0ZWQgdXNlciBjb250ZW50IGV4dGVuc2lvbnMuCisvKiEgQGFic3Ry
YWN0IFJlbW92ZXMgYWxsIGFzc29jaWF0ZWQgY29udGVudCBydWxlIGxpc3RzLgogICovCi0tICh2
b2lkKXJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdL
X01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClyZW1vdmVBbGxDb250ZW50UnVs
ZUxpc3RzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tVc2VyQ29udGVudENvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbQkocmV2aXNpb24g
MjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250
ZW50Q29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW1w
b3J0ICJBUElTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbXBvcnQgIkFQSVVzZXJDb250ZW50
V29ybGQuaCIKLSNpbXBvcnQgIldLQ29udGVudEV4dGVuc2lvbkludGVybmFsLmgiCisjaW1wb3J0
ICJXS0NvbnRlbnRSdWxlTGlzdEludGVybmFsLmgiCiAjaW1wb3J0ICJXS0ZyYW1lSW5mb0ludGVy
bmFsLmgiCiAjaW1wb3J0ICJXS05TQXJyYXkuaCIKICNpbXBvcnQgIldLU2NyaXB0TWVzc2FnZUhh
bmRsZXIuaCIKQEAgLTkyLDI0ICs5MiwyNCBAQCAtICh2b2lkKXJlbW92ZUFsbFVzZXJTY3JpcHRz
CiAgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVBbGxVc2VyU2NyaXB0cygp
OwogfQogCi0tICh2b2lkKWFkZENvbnRlbnRFeHRlbnNpb246KFdLQ29udGVudEV4dGVuc2lvbiAq
KWNvbnRlbnRFeHRlbnNpb24KKy0gKHZvaWQpYWRkQ29udGVudFJ1bGVMaXN0OihXS0NvbnRlbnRS
dWxlTGlzdCAqKWNvbnRlbnRSdWxlTGlzdAogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCi0gICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5hZGRDb250ZW50RXh0ZW5zaW9u
KCpjb250ZW50RXh0ZW5zaW9uLT5fY29udGVudEV4dGVuc2lvbik7CisgICAgX3VzZXJDb250ZW50
Q29udHJvbGxlclByb3h5LT5hZGRDb250ZW50UnVsZUxpc3QoKmNvbnRlbnRSdWxlTGlzdC0+X2Nv
bnRlbnRSdWxlTGlzdCk7CiAjZW5kaWYKIH0KIAotLSAodm9pZClyZW1vdmVDb250ZW50RXh0ZW5z
aW9uOihXS0NvbnRlbnRFeHRlbnNpb24gKiljb250ZW50RXh0ZW5zaW9uCistICh2b2lkKXJlbW92
ZUNvbnRlbnRSdWxlTGlzdDooV0tDb250ZW50UnVsZUxpc3QgKiljb250ZW50UnVsZUxpc3QKIHsK
ICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIF91c2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eS0+cmVtb3ZlQ29udGVudEV4dGVuc2lvbihjb250ZW50RXh0ZW5zaW9uLT5fY29udGVu
dEV4dGVuc2lvbi0+bmFtZSgpKTsKKyAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJl
bW92ZUNvbnRlbnRSdWxlTGlzdChjb250ZW50UnVsZUxpc3QtPl9jb250ZW50UnVsZUxpc3QtPm5h
bWUoKSk7CiAjZW5kaWYKIH0KIAotLSAodm9pZClyZW1vdmVBbGxDb250ZW50RXh0ZW5zaW9ucwor
LSAodm9pZClyZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzCiB7CiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKLSAgICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZUFsbENv
bnRlbnRFeHRlbnNpb25zKCk7CisgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5yZW1v
dmVBbGxDb250ZW50UnVsZUxpc3RzKCk7CiAjZW5kaWYKIH0KIApAQCAtMTc1LDIxICsxNzUsMjEg
QEAgLSAodm9pZClfcmVtb3ZlQWxsVXNlclNjcmlwdHNBc3NvY2lhdGVkVwogLSAodm9pZClfYWRk
VXNlckNvbnRlbnRGaWx0ZXI6KF9XS1VzZXJDb250ZW50RmlsdGVyICopdXNlckNvbnRlbnRGaWx0
ZXIKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIF91c2VyQ29udGVudENv
bnRyb2xsZXJQcm94eS0+YWRkQ29udGVudEV4dGVuc2lvbigqdXNlckNvbnRlbnRGaWx0ZXItPl9j
b250ZW50RXh0ZW5zaW9uLT5fY29udGVudEV4dGVuc2lvbik7CisgICAgX3VzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5LT5hZGRDb250ZW50UnVsZUxpc3QoKnVzZXJDb250ZW50RmlsdGVyLT5fY29u
dGVudFJ1bGVMaXN0LT5fY29udGVudFJ1bGVMaXN0KTsKICNlbmRpZgogfQogCiAtICh2b2lkKV9y
ZW1vdmVVc2VyQ29udGVudEZpbHRlcjooTlNTdHJpbmcgKil1c2VyQ29udGVudEZpbHRlck5hbWUK
IHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIF91c2VyQ29udGVudENvbnRy
b2xsZXJQcm94eS0+cmVtb3ZlQ29udGVudEV4dGVuc2lvbih1c2VyQ29udGVudEZpbHRlck5hbWUp
OworICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlQ29udGVudFJ1bGVMaXN0
KHVzZXJDb250ZW50RmlsdGVyTmFtZSk7CiAjZW5kaWYKIH0KIAogLSAodm9pZClfcmVtb3ZlQWxs
VXNlckNvbnRlbnRGaWx0ZXJzCiB7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAg
ICBfdXNlckNvbnRlbnRDb250cm9sbGVyUHJveHktPnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25z
KCk7CisgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVBbGxDb250ZW50UnVs
ZUxpc3RzKCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5tbQkocmV2aXNpb24gMjE2NTM5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw4ICsyOCw4IEBACiAKICNpZiBXS19BUElfRU5BQkxFRAogCi0jaW1wb3J0ICJXS0NvbnRl
bnRFeHRlbnNpb25TdG9yZUludGVybmFsLmgiCi0jaW1wb3J0ICJXS0NvbnRlbnRFeHRlbnNpb25T
dG9yZVByaXZhdGUuaCIKKyNpbXBvcnQgIldLQ29udGVudFJ1bGVMaXN0U3RvcmVJbnRlcm5hbC5o
IgorI2ltcG9ydCAiV0tDb250ZW50UnVsZUxpc3RTdG9yZVByaXZhdGUuaCIKICNpbXBvcnQgIldL
RXJyb3JJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZVBy
aXZhdGUuaCIKICNpbXBvcnQgIl9XS1VzZXJDb250ZW50RmlsdGVySW50ZXJuYWwuaCIKQEAgLTM4
LDIwICszOCwyMCBAQAogCiBOU1N0cmluZyAqIGNvbnN0IF9XS1VzZXJDb250ZW50RXh0ZW5zaW9u
c0RvbWFpbiA9IEAiV0tFcnJvckRvbWFpbiI7CiAKLXN0YXRpYyBOU0Vycm9yICp0b1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmVFcnJvcihjb25zdCBOU0Vycm9yICplcnJvcikKK3N0YXRpYyBOU0Vy
cm9yICp0b1VzZXJDb250ZW50UnVsZUxpc3RTdG9yZUVycm9yKGNvbnN0IE5TRXJyb3IgKmVycm9y
KQogewogICAgIGlmICghZXJyb3IpCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBBU1NFUlQo
ZXJyb3IuZG9tYWluID09IFdLRXJyb3JEb21haW4pOwogICAgIHN3aXRjaCAoZXJyb3IuY29kZSkg
ewotICAgIGNhc2UgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUxvb2tVcEZhaWxlZDoKKyAg
ICBjYXNlIFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZUxvb2tVcEZhaWxlZDoKICAgICAgICAg
cmV0dXJuIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNE
b21haW4gY29kZTpfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JMb29rdXBGYWlsZWQg
dXNlckluZm86ZXJyb3IudXNlckluZm9dOwotICAgIGNhc2UgV0tFcnJvckNvbnRlbnRFeHRlbnNp
b25TdG9yZVZlcnNpb25NaXNtYXRjaDoKKyAgICBjYXNlIFdLRXJyb3JDb250ZW50UnVsZUxpc3RT
dG9yZVZlcnNpb25NaXNtYXRjaDoKICAgICAgICAgcmV0dXJuIFtOU0Vycm9yIGVycm9yV2l0aERv
bWFpbjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gY29kZTpfV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlRXJyb3JWZXJzaW9uTWlzbWF0Y2ggdXNlckluZm86ZXJyb3IudXNlckluZm9d
OwotICAgIGNhc2UgV0tFcnJvckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvbXBpbGVGYWlsZWQ6Cisg
ICAgY2FzZSBXS0Vycm9yQ29udGVudFJ1bGVMaXN0U3RvcmVDb21waWxlRmFpbGVkOgogICAgICAg
ICByZXR1cm4gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOl9XS1VzZXJDb250ZW50RXh0ZW5zaW9u
c0RvbWFpbiBjb2RlOl9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVFcnJvckNvbXBpbGVGYWls
ZWQgdXNlckluZm86ZXJyb3IudXNlckluZm9dOwotICAgIGNhc2UgV0tFcnJvckNvbnRlbnRFeHRl
bnNpb25TdG9yZVJlbW92ZUZhaWxlZDoKKyAgICBjYXNlIFdLRXJyb3JDb250ZW50UnVsZUxpc3RT
dG9yZVJlbW92ZUZhaWxlZDoKICAgICAgICAgcmV0dXJuIFtOU0Vycm9yIGVycm9yV2l0aERvbWFp
bjpfV0tVc2VyQ29udGVudEV4dGVuc2lvbnNEb21haW4gY29kZTpfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlRXJyb3JSZW1vdmVGYWlsZWQgdXNlckluZm86ZXJyb3IudXNlckluZm9dOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC02Miwz
NCArNjIsMzQgQEAgc3RhdGljIE5TRXJyb3IgKnRvVXNlckNvbnRlbnRFeHRlbnNpb25TdAogCiAr
IChpbnN0YW5jZXR5cGUpZGVmYXVsdFN0b3JlCiB7Ci0gICAgcmV0dXJuIFtbW19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUgYWxsb2NdIF9pbml0V2l0aFdLQ29udGVudEV4dGVuc2lvblN0b3Jl
OltXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdXSBhdXRvcmVsZWFzZV07Cisg
ICAgcmV0dXJuIFtbW19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgYWxsb2NdIF9pbml0V2l0
aFdLQ29udGVudFJ1bGVMaXN0U3RvcmU6W1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0
b3JlV2l0aExlZ2FjeUZpbGVuYW1lXV0gYXV0b3JlbGVhc2VdOwogfQogCiArIChpbnN0YW5jZXR5
cGUpc3RvcmVXaXRoVVJMOihOU1VSTCAqKXVybAogewotICAgIHJldHVybiBbW1tfV0tVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlIGFsbG9jXSBfaW5pdFdpdGhXS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZTpbV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgc3RvcmVXaXRoVVJMOnVybF1dIGF1dG9yZWxlYXNl
XTsKKyAgICByZXR1cm4gW1tbX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZSBhbGxvY10gX2lu
aXRXaXRoV0tDb250ZW50UnVsZUxpc3RTdG9yZTpbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBzdG9y
ZVdpdGhVUkxBbmRMZWdhY3lGaWxlbmFtZTp1cmxdXSBhdXRvcmVsZWFzZV07CiB9CiAKLS0gKHZv
aWQpY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50
aWZpZXIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246KE5TU3RyaW5nICopZW5jb2RlZENvbnRlbnRF
eHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS1VzZXJDb250ZW50RmlsdGVy
ICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpY29tcGlsZUNvbnRlbnRF
eHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgZW5jb2RlZENvbnRl
bnRFeHRlbnNpb246KE5TU3RyaW5nICopZW5jb2RlZENvbnRlbnRSdWxlTGlzdCBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKiwgTlNFcnJvciAqKSljb21w
bGV0aW9uSGFuZGxlcgogewotICAgIFtfY29udGVudEV4dGVuc2lvblN0b3JlIF9jb21waWxlQ29u
dGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVu
c2lvbjplbmNvZGVkQ29udGVudEV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVu
dEV4dGVuc2lvbiAqY29udGVudEV4dGVuc2lvbiwgTlNFcnJvciAqZXJyb3IpIHsKLSAgICAgICAg
X1dLVXNlckNvbnRlbnRGaWx0ZXIgKmNvbnRlbnRGaWx0ZXIgPSBjb250ZW50RXh0ZW5zaW9uID8g
W1tbX1dLVXNlckNvbnRlbnRGaWx0ZXIgYWxsb2NdIF9pbml0V2l0aFdLQ29udGVudEV4dGVuc2lv
bjpjb250ZW50RXh0ZW5zaW9uXSBhdXRvcmVsZWFzZV0gOiBuaWw7Ci0gICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKGNvbnRlbnRGaWx0ZXIsIHRvVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9y
KGVycm9yKSk7CisgICAgW19jb250ZW50UnVsZUxpc3RTdG9yZSBfY29tcGlsZUNvbnRlbnRSdWxl
TGlzdEZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OmVuY29k
ZWRDb250ZW50UnVsZUxpc3QgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRSdWxlTGlzdCAq
Y29udGVudFJ1bGVMaXN0LCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBfV0tVc2VyQ29udGVu
dEZpbHRlciAqY29udGVudEZpbHRlciA9IGNvbnRlbnRSdWxlTGlzdCA/IFtbW19XS1VzZXJDb250
ZW50RmlsdGVyIGFsbG9jXSBfaW5pdFdpdGhXS0NvbnRlbnRSdWxlTGlzdDpjb250ZW50UnVsZUxp
c3RdIGF1dG9yZWxlYXNlXSA6IG5pbDsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29udGVu
dEZpbHRlciwgdG9Vc2VyQ29udGVudFJ1bGVMaXN0U3RvcmVFcnJvcihlcnJvcikpOwogICAgIH1d
OwogfQogCiAtICh2b2lkKWxvb2t1cENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOihOU1N0
cmluZyAqKWlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS1VzZXJDb250
ZW50RmlsdGVyICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBbX2NvbnRl
bnRFeHRlbnNpb25TdG9yZSBsb29rVXBDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjppZGVu
dGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9uICpjb250ZW50RXh0
ZW5zaW9uLCBOU0Vycm9yICplcnJvcikgewotICAgICAgICBfV0tVc2VyQ29udGVudEZpbHRlciAq
Y29udGVudEZpbHRlciA9IGNvbnRlbnRFeHRlbnNpb24gPyBbW1tfV0tVc2VyQ29udGVudEZpbHRl
ciBhbGxvY10gX2luaXRXaXRoV0tDb250ZW50RXh0ZW5zaW9uOmNvbnRlbnRFeHRlbnNpb25dIGF1
dG9yZWxlYXNlXSA6IG5pbDsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY29udGVudEZpbHRl
ciwgdG9Vc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3IoZXJyb3IpKTsKKyAgICBbX2NvbnRl
bnRSdWxlTGlzdFN0b3JlIGxvb2tVcENvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6aWRlbnRp
ZmllciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0ICpjb250ZW50UnVsZUxp
c3QsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIF9XS1VzZXJDb250ZW50RmlsdGVyICpjb250
ZW50RmlsdGVyID0gY29udGVudFJ1bGVMaXN0ID8gW1tbX1dLVXNlckNvbnRlbnRGaWx0ZXIgYWxs
b2NdIF9pbml0V2l0aFdLQ29udGVudFJ1bGVMaXN0OmNvbnRlbnRSdWxlTGlzdF0gYXV0b3JlbGVh
c2VdIDogbmlsOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb250ZW50RmlsdGVyLCB0b1Vz
ZXJDb250ZW50UnVsZUxpc3RTdG9yZUVycm9yKGVycm9yKSk7CiAgICAgfV07CiB9CiAKIC0gKHZv
aWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRp
ZmllciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAqKSljb21wbGV0aW9uSGFu
ZGxlcgogewotICAgIFtfY29udGVudEV4dGVuc2lvblN0b3JlIHJlbW92ZUNvbnRlbnRFeHRlbnNp
b25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICpl
cnJvcikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0b1VzZXJDb250ZW50RXh0ZW5zaW9u
U3RvcmVFcnJvcihlcnJvcikpOworICAgIFtfY29udGVudFJ1bGVMaXN0U3RvcmUgcmVtb3ZlQ29u
dGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOl4o
TlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIodG9Vc2VyQ29udGVu
dFJ1bGVMaXN0U3RvcmVFcnJvcihlcnJvcikpOwogICAgIH1dOwogfQogCkBAIC05Nyw3ICs5Nyw3
IEBAIC0gKHZvaWQpcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWYKIAogLSAoQVBJOjpP
YmplY3QmKV9hcGlPYmplY3QKIHsKLSAgICByZXR1cm4gW19jb250ZW50RXh0ZW5zaW9uU3RvcmUg
X2FwaU9iamVjdF07CisgICAgcmV0dXJuIFtfY29udGVudFJ1bGVMaXN0U3RvcmUgX2FwaU9iamVj
dF07CiB9CiAKIEBlbmQKQEAgLTEwOCwyMSArMTA4LDIxIEBAIC0gKEFQSTo6T2JqZWN0JilfYXBp
T2JqZWN0CiAKIC0gKHZvaWQpX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zCiB7Ci0gICAgW19j
b250ZW50RXh0ZW5zaW9uU3RvcmUgX3JlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zXTsKKyAgICBb
X2NvbnRlbnRSdWxlTGlzdFN0b3JlIF9yZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzXTsKIH0KIAog
LSAodm9pZClfaW52YWxpZGF0ZUNvbnRlbnRFeHRlbnNpb25WZXJzaW9uRm9ySWRlbnRpZmllcjoo
TlNTdHJpbmcgKilpZGVudGlmaWVyCiB7Ci0gICAgW19jb250ZW50RXh0ZW5zaW9uU3RvcmUgX2lu
dmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllcl07
CisgICAgW19jb250ZW50UnVsZUxpc3RTdG9yZSBfaW52YWxpZGF0ZUNvbnRlbnRSdWxlTGlzdFZl
cnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXJdOwogfQogCi0tIChpZClfaW5pdFdpdGhXS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZTooV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUqKWNvbnRlbnRFeHRl
bnNpb25TdG9yZQorLSAoaWQpX2luaXRXaXRoV0tDb250ZW50UnVsZUxpc3RTdG9yZTooV0tDb250
ZW50UnVsZUxpc3RTdG9yZSopY29udGVudFJ1bGVMaXN0U3RvcmUKIHsKICAgICBzZWxmID0gW3N1
cGVyIGluaXRdOwogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAg
ICBfY29udGVudEV4dGVuc2lvblN0b3JlID0gY29udGVudEV4dGVuc2lvblN0b3JlOworICAgIF9j
b250ZW50UnVsZUxpc3RTdG9yZSA9IGNvbnRlbnRSdWxlTGlzdFN0b3JlOwogICAgIAogICAgIHJl
dHVybiBzZWxmOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3Rv
cmVJbnRlcm5hbC5oCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNywxNCArMjcsMTQgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLSNp
bXBvcnQgIkFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5oIgorI2ltcG9ydCAiQVBJQ29udGVudFJ1
bGVMaXN0U3RvcmUuaCIKICNpbXBvcnQgIldLT2JqZWN0LmgiCiAKLUBjbGFzcyBXS0NvbnRlbnRF
eHRlbnNpb25TdG9yZTsKK0BjbGFzcyBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlOwogCiBAaW50ZXJm
YWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKCkgPFdLT2JqZWN0PiB7CiBAcGFja2Fn
ZQotICAgIFJldGFpblB0cjxXS0NvbnRlbnRFeHRlbnNpb25TdG9yZT4gX2NvbnRlbnRFeHRlbnNp
b25TdG9yZTsKKyAgICBSZXRhaW5QdHI8V0tDb250ZW50UnVsZUxpc3RTdG9yZT4gX2NvbnRlbnRS
dWxlTGlzdFN0b3JlOwogfQogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4
dGVuc2lvblN0b3JlUHJpdmF0ZS5oCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVE
CiAKLUBjbGFzcyBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZTsKK0BjbGFzcyBXS0NvbnRlbnRSdWxl
TGlzdFN0b3JlOwogCiBAaW50ZXJmYWNlIF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUgKFdL
UHJpdmF0ZSkKIApAQCAtMzUsNyArMzUsNyBAQAogLSAodm9pZClfcmVtb3ZlQWxsQ29udGVudEV4
dGVuc2lvbnM7CiAtICh2b2lkKV9pbnZhbGlkYXRlQ29udGVudEV4dGVuc2lvblZlcnNpb25Gb3JJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXI7CiAKLS0gKGlkKV9pbml0V2l0aFdLQ29u
dGVudEV4dGVuc2lvblN0b3JlOihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSopY29udGVudEV4dGVu
c2lvblN0b3JlOworLSAoaWQpX2luaXRXaXRoV0tDb250ZW50UnVsZUxpc3RTdG9yZTooV0tDb250
ZW50UnVsZUxpc3RTdG9yZSopY29udGVudFJ1bGVMaXN0U3RvcmU7CiAKIEBlbmQKIApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Vz
ZXJDb250ZW50RmlsdGVyLm1tCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBXS19BUElfRU5BQkxFRAogCi0jaW5jbHVkZSAiV2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50
UnVsZUxpc3QuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkVycm9yLmg+CiAjaW5jbHVkZSA8
c3RyaW5nPgpAQCAtMzksMjAgKzM5LDIwIEBACiAKIC0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0
CiB7Ci0gICAgcmV0dXJuIFtfY29udGVudEV4dGVuc2lvbiBfYXBpT2JqZWN0XTsKKyAgICByZXR1
cm4gW19jb250ZW50UnVsZUxpc3QgX2FwaU9iamVjdF07CiB9CiAKIEBlbmQKIAogQGltcGxlbWVu
dGF0aW9uIF9XS1VzZXJDb250ZW50RmlsdGVyIChXS1ByaXZhdGUpCiAKLS0gKGlkKV9pbml0V2l0
aFdLQ29udGVudEV4dGVuc2lvbjooV0tDb250ZW50RXh0ZW5zaW9uKiljb250ZW50RXh0ZW5zaW9u
CistIChpZClfaW5pdFdpdGhXS0NvbnRlbnRSdWxlTGlzdDooV0tDb250ZW50UnVsZUxpc3QqKWNv
bnRlbnRSdWxlTGlzdAogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAgICAgaWYgKCFzZWxm
KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIF9jb250ZW50RXh0ZW5zaW9uID0gY29u
dGVudEV4dGVuc2lvbjsKKyAgICBfY29udGVudFJ1bGVMaXN0ID0gY29udGVudFJ1bGVMaXN0Owog
ICAgIAogICAgIHJldHVybiBzZWxmOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlcklu
dGVybmFsLmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywxNCArMjcsMTQgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLSNpbXBvcnQgIkFQSUNv
bnRlbnRFeHRlbnNpb24uaCIKKyNpbXBvcnQgIkFQSUNvbnRlbnRSdWxlTGlzdC5oIgogI2ltcG9y
dCAiV0tPYmplY3QuaCIKIAotQGNsYXNzIFdLQ29udGVudEV4dGVuc2lvbjsKK0BjbGFzcyBXS0Nv
bnRlbnRSdWxlTGlzdDsKIAogQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEZpbHRlciAoKSA8V0tP
YmplY3Q+IHsKIEBwYWNrYWdlCi0gICAgUmV0YWluUHRyPFdLQ29udGVudEV4dGVuc2lvbj4gX2Nv
bnRlbnRFeHRlbnNpb247CisgICAgUmV0YWluUHRyPFdLQ29udGVudFJ1bGVMaXN0PiBfY29udGVu
dFJ1bGVMaXN0OwogfQogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRl
LmgJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEx
ICsyNywxMSBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAotQGNsYXNzIFdLVXNlckNvbnRlbnRF
eHRlbnNpb247CitAY2xhc3MgV0tVc2VyQ29udGVudFJ1bGVMaXN0OwogCiBAaW50ZXJmYWNlIF9X
S1VzZXJDb250ZW50RmlsdGVyIChXS1ByaXZhdGUpCiAKLS0gKGlkKV9pbml0V2l0aFdLQ29udGVu
dEV4dGVuc2lvbjooV0tDb250ZW50RXh0ZW5zaW9uKiljb250ZW50RXh0ZW5zaW9uOworLSAoaWQp
X2luaXRXaXRoV0tDb250ZW50UnVsZUxpc3Q6KFdLQ29udGVudFJ1bGVMaXN0Kiljb250ZW50UnVs
ZUxpc3Q7CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250
ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHkuY3BwCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
VXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw4ICs0MCw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuaD4KIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0jaW5jbHVkZSAiQVBJ
Q29udGVudEV4dGVuc2lvbi5oIgotI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bi5oIgorI2luY2x1ZGUgIkFQSUNvbnRlbnRSdWxlTGlzdC5oIgorI2luY2x1ZGUgIldlYkNvbXBp
bGVkQ29udGVudFJ1bGVMaXN0LmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC05
Miw5ICs5Miw5IEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFAKICAg
ICAgICAgcGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcnMuYXBwZW5kKHsgaGFuZGxlci0+aWRlbnRp
ZmllcigpLCBoYW5kbGVyLT51c2VyQ29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCBoYW5kbGVy
LT5uYW1lKCkgfSk7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIEFTU0VS
VChwYXJhbWV0ZXJzLmNvbnRlbnRFeHRlbnNpb25zLmlzRW1wdHkoKSk7Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBjb250ZW50RXh0ZW5zaW9uIDogbV9jb250ZW50RXh0ZW5zaW9ucy52YWx1ZXMoKSkK
LSAgICAgICAgcGFyYW1ldGVycy5jb250ZW50RXh0ZW5zaW9ucy5hcHBlbmQoc3RkOjptYWtlX3Bh
aXIoY29udGVudEV4dGVuc2lvbi0+bmFtZSgpLCBjb250ZW50RXh0ZW5zaW9uLT5jb21waWxlZEV4
dGVuc2lvbigpLmRhdGEoKSkpOworICAgIEFTU0VSVChwYXJhbWV0ZXJzLmNvbnRlbnRSdWxlTGlz
dHMuaXNFbXB0eSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRlbnRSdWxlTGlzdCA6IG1f
Y29udGVudFJ1bGVMaXN0cy52YWx1ZXMoKSkKKyAgICAgICAgcGFyYW1ldGVycy5jb250ZW50UnVs
ZUxpc3RzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjb250ZW50UnVsZUxpc3QtPm5hbWUoKSwgY29u
dGVudFJ1bGVMaXN0LT5jb21waWxlZFJ1bGVMaXN0KCkuZGF0YSgpKSk7CiAjZW5kaWYKIH0KIApA
QCAtMzMyLDMwICszMzIsMzAgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6
ZGlkUAogfQogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLXZvaWQgV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHk6OmFkZENvbnRlbnRFeHRlbnNpb24oQVBJOjpDb250ZW50RXh0
ZW5zaW9uJiBjb250ZW50RXh0ZW5zaW9uKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eTo6YWRkQ29udGVudFJ1bGVMaXN0KEFQSTo6Q29udGVudFJ1bGVMaXN0JiBjb250ZW50UnVs
ZUxpc3QpCiB7Ci0gICAgbV9jb250ZW50RXh0ZW5zaW9ucy5zZXQoY29udGVudEV4dGVuc2lvbi5u
YW1lKCksICZjb250ZW50RXh0ZW5zaW9uKTsKKyAgICBtX2NvbnRlbnRSdWxlTGlzdHMuc2V0KGNv
bnRlbnRSdWxlTGlzdC5uYW1lKCksICZjb250ZW50UnVsZUxpc3QpOwogCi0gICAgYXV0byBwYWly
ID0gc3RkOjptYWtlX3BhaXIoY29udGVudEV4dGVuc2lvbi5uYW1lKCksIGNvbnRlbnRFeHRlbnNp
b24uY29tcGlsZWRFeHRlbnNpb24oKS5kYXRhKCkpOworICAgIGF1dG8gcGFpciA9IHN0ZDo6bWFr
ZV9wYWlyKGNvbnRlbnRSdWxlTGlzdC5uYW1lKCksIGNvbnRlbnRSdWxlTGlzdC5jb21waWxlZFJ1
bGVMaXN0KCkuZGF0YSgpKTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDog
bV9wcm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlcjo6QWRkQ29udGVudEV4dGVuc2lvbnMoeyBwYWlyIH0pLCBtX2lkZW50aWZp
ZXIpOworICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI6OkFkZENvbnRlbnRSdWxlTGlzdHMoeyBwYWlyIH0pLCBtX2lkZW50aWZpZXIpOwogfQog
Ci12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVDb250ZW50RXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk6OnJlbW92ZUNvbnRlbnRSdWxlTGlzdChjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgbV9j
b250ZW50RXh0ZW5zaW9ucy5yZW1vdmUobmFtZSk7CisgICAgbV9jb250ZW50UnVsZUxpc3RzLnJl
bW92ZShuYW1lKTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9j
ZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6UmVtb3ZlQ29udGVudEV4dGVuc2lvbihuYW1lKSwgbV9pZGVudGlmaWVyKTsKKyAg
ICAgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpS
ZW1vdmVDb250ZW50UnVsZUxpc3QobmFtZSksIG1faWRlbnRpZmllcik7CiB9CiAKLXZvaWQgV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCkK
K3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZUFsbENvbnRlbnRSdWxl
TGlzdHMoKQogewotICAgIG1fY29udGVudEV4dGVuc2lvbnMuY2xlYXIoKTsKKyAgICBtX2NvbnRl
bnRSdWxlTGlzdHMuY2xlYXIoKTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNz
IDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6UmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKSwgbV9pZGVudGlm
aWVyKTsKKyAgICAgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpSZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzKCksIG1faWRlbnRpZmllcik7CiB9CiAj
ZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgJKHJl
dmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9X
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBACiAKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXJyYXk7Ci1jbGFzcyBDb250ZW50RXh0
ZW5zaW9uOworY2xhc3MgQ29udGVudFJ1bGVMaXN0OwogY2xhc3MgVXNlckNvbnRlbnRXb3JsZDsK
IGNsYXNzIFVzZXJTY3JpcHQ7CiBjbGFzcyBVc2VyU3R5bGVTaGVldDsKQEAgLTkyLDkgKzkyLDkg
QEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQWxsVXNlck1lc3NhZ2VIYW5kbGVycyhBUEk6OlVz
ZXJDb250ZW50V29ybGQmKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAg
dm9pZCBhZGRDb250ZW50RXh0ZW5zaW9uKEFQSTo6Q29udGVudEV4dGVuc2lvbiYpOwotICAgIHZv
aWQgcmVtb3ZlQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHJlbW92
ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7CisgICAgdm9pZCBhZGRDb250ZW50UnVsZUxpc3QoQVBJ
OjpDb250ZW50UnVsZUxpc3QmKTsKKyAgICB2b2lkIHJlbW92ZUNvbnRlbnRSdWxlTGlzdChjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIHJlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHMoKTsKICNlbmRp
ZgogCiBwcml2YXRlOgpAQCAtMTE2LDcgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgSGFzaENvdW50
ZWRTZXQ8UmVmUHRyPEFQSTo6VXNlckNvbnRlbnRXb3JsZD4+IG1fdXNlckNvbnRlbnRXb3JsZHM7
CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIEhhc2hNYXA8U3RyaW5nLCBS
ZWZQdHI8QVBJOjpDb250ZW50RXh0ZW5zaW9uPj4gbV9jb250ZW50RXh0ZW5zaW9uczsKKyAgICBI
YXNoTWFwPFN0cmluZywgUmVmUHRyPEFQSTo6Q29udGVudFJ1bGVMaXN0Pj4gbV9jb250ZW50UnVs
ZUxpc3RzOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTExNjgsMTQgKzExNjgsMTQgQEAKIAkJNUNCMjM3OTIxREYwRTJFRTAwMTE3QUEzIC8qIEFQ
SVdlYnNpdGVQb2xpY2llcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNCMjM3OEYxREYwRTFCODAwMTE3QUEzIC8qIEFQSVdlYnNpdGVQb2xpY2llcy5o
ICovOyB9OwogCQk1Q0JDOUI4RDFDNjUyNzlDMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29j
b2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0JD
OUI4QjFDNjUyNTczMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gKi87IH07CiAJ
CTVDQkM5QjhFMUM2NTJDQTAwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQkM5Qjg5MUM2NTI0QTUwMEE4
RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCAqLzsgfTsKLQkJNUNEMjg2NTExRTcyMzU5OTAwOTRG
REM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0QyODY0RDFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMs
ICk7IH07IH07Ci0JCTVDRDI4NjUyMUU3MjM1QTYwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNp
b24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0Qy
ODY0QjFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uLm1tICovOyB9OworCQk1
Q0QyODY1MTFFNzIzNTk5MDA5NEZEQzggLyogV0tDb250ZW50UnVsZUxpc3RTdG9yZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNEMjg2NEQxRTcyMkY0
NDAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0U3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCTVDRDI4NjUyMUU3MjM1QTYwMDk0RkRDOCAv
KiBXS0NvbnRlbnRSdWxlTGlzdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDRDI4NjRCMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlz
dC5tbSAqLzsgfTsKIAkJNUNEMjg2NTMxRTcyMzVBQTAwOTRGREM4IC8qIF9XS1VzZXJDb250ZW50
RmlsdGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNEMjg2NDkxRTcyMkY0NDAwOTRGREM4IC8qIF9XS1VzZXJDb250ZW50RmlsdGVyUHJp
dmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTVDRDI4NjU0MUU3MjM1QjEwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRDI4NjRBMUU3MjJGNDQw
MDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTVDRDI4NjU1MUU3MjM1QjgwMDk0RkRDOCAvKiBXS0Nv
bnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUNEMjg2NEMxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVu
c2lvbkludGVybmFsLmggKi87IH07Ci0JCTVDRDI4NjU2MUU3MjM1QzYwMDk0RkRDOCAvKiBXS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDRDI4NjRFMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNp
b25TdG9yZS5tbSAqLzsgfTsKLQkJNUNEMjg2NTcxRTcyMzVDOTAwOTRGREM4IC8qIFdLQ29udGVu
dEV4dGVuc2lvblN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDRDI4NjRGMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRl
bnNpb25TdG9yZUludGVybmFsLmggKi87IH07Ci0JCTVDRDI4NjU4MUU3MjM1RDEwMDk0RkRDOCAv
KiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRDI4NjUwMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0Nv
bnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk1Q0QyODY1NDFFNzIzNUIxMDA5NEZEQzggLyogV0tDb250
ZW50UnVsZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVDRDI4NjRBMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJNUNEMjg2NTUxRTcy
MzVCODAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRDI4NjRDMUU3MjJGNDQwMDk0RkRD
OCAvKiBXS0NvbnRlbnRSdWxlTGlzdEludGVybmFsLmggKi87IH07CisJCTVDRDI4NjU2MUU3MjM1
QzYwMDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNEMjg2NEUxRTcyMkY0NDAwOTRGREM4IC8q
IFdLQ29udGVudFJ1bGVMaXN0U3RvcmUubW0gKi87IH07CisJCTVDRDI4NjU3MUU3MjM1QzkwMDk0
RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRDI4NjRGMUU3MjJGNDQwMDk0RkRDOCAv
KiBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlSW50ZXJuYWwuaCAqLzsgfTsKKwkJNUNEMjg2NTgxRTcy
MzVEMTAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0QyODY1MDFFNzIyRjQ0MDA5
NEZEQzggLyogV0tDb250ZW50UnVsZUxpc3RTdG9yZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1Q0U4NUIyMDFDODhFNjRCMDA3MEJG
Q0UgLyogUGluZ0xvYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVDRTg1QjFGMUM4OEU2NDMwMDcwQkZDRSAvKiBQaW5nTG9hZC5oICovOyB9OwogCQk1
Q0ZFQ0IwNDFFMUVEMUNDMDBGODg1MDQgLyogTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRkVDQjAz
MUUxRUQxQzgwMEY4ODUwNCAvKiBMZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXIuY3BwICovOyB9
OwogCQk2MzYzNTNBNTFFOTg1OERGMDAwOUY4QUYgLyogX1dLR2VvbG9jYXRpb25Db3JlTG9jYXRp
b25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNjNGQUJFMTkxRTk3MEQ2NTAwMzAxMUQ1IC8qIF9XS0dlb2xvY2F0aW9uQ29yZUxvY2F0aW9u
UHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTIzMiw4ICsxMjMyLDggQEAKIAkJN0MzNjFENzgxOTI4MDNCRDAwMzZBNTlEIC8qIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzYxRDc2MTkyODAzQkQwMDM2
QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki87IH07CiAJCTdDMzYxRDc5MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QzM2MUQ3NzE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQk3QzM4NzQzNDE3MkY1NjE1MDAxQkQ4OEEg
LyogUGFnZUJhbm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzM4NzQzMzE3MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgKi87IH07
Ci0JCTdDM0EwNkE3MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzQTA2
QTUxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAgKi87IH07
Ci0JCTdDM0EwNkE4MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0EwNkE2
MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLzsgfTsKKwkJ
N0MzQTA2QTcxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0EwNkE1MUFB
QjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50UnVsZUxpc3RTdG9yZS5jcHAgKi87IH07CisJCTdD
M0EwNkE4MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50UnVsZUxpc3RTdG9yZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzQTA2QTYxQUFCOTAz
RTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmggKi87IH07CiAJCTdDM0Y4Qzkw
MTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNGOEM4RTE3M0FGNTJEMDA3QjdGMzkg
LyogUGx1Z2luSW5mb3JtYXRpb24uY3BwICovOyB9OwogCQk3QzNGOEM5MTE3M0FGNTJEMDA3QjdG
MzkgLyogUGx1Z2luSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDM0Y4QzhGMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1h
dGlvbi5oICovOyB9OwogCQk3QzQ2OTRDOTFBNEI0RUExMDBBRDU4NDUgLyogV2ViUGFzdGVib2Fy
ZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDNDY5NEM3MUE0QjRFQTAwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJk
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwpAQCAtMTI0MSwxMCArMTI0MSwxMCBAQAog
CQk3QzQ2OTRDQzFBNEI1MTBBMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ2OTRDQjFB
NEI1MTBBMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0gKi87IH07CiAJCTdD
NDY5NEQwMUE1MUUzNjgwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0Njk0Q0QxQTUxRTM2ODAw
QUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eS5jcHAgKi87IH07CiAJCTdDNDY5NEQxMUE1MUUz
NjgwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDY5NENFMUE1MUUzNjgwMEFENTg0NSAvKiBXZWJQ
YXN0ZWJvYXJkUHJveHkuaCAqLzsgfTsKLQkJN0M0QUJFRDAxQUE4RTlGMDAwODhBQTM3IC8qIFdl
YkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRBQkVDRTFBQThFOUYwMDA4OEFBMzcgLyogV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uLmNwcCAqLzsgfTsKLQkJN0M0QUJFRDExQUE4RTlGMDAwODhBQTM3
IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0QUJFQ0YxQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbi5oICovOyB9OwotCQk3QzRBQkVENDFBQThGQ0I4MDA4OEFB
MzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRBQkVEMjFBQThGQ0I4MDA4OEFBMzcg
LyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHAgKi87IH07Ci0JCTdDNEFCRUQ1
MUFBOEZDQjgwMDg4QUEzNyAvKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRBQkVEMzFBQThG
Q0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oICovOyB9Owor
CQk3QzRBQkVEMDFBQThFOUYwMDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0QUJF
Q0UxQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmNwcCAqLzsg
fTsKKwkJN0M0QUJFRDExQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRB
QkVDRjFBQThFOUYwMDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3QuaCAqLzsg
fTsKKwkJN0M0QUJFRDQxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVM
aXN0RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzRBQkVEMjFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3RE
YXRhLmNwcCAqLzsgfTsKKwkJN0M0QUJFRDUxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0M0QUJFRDMxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVu
dFJ1bGVMaXN0RGF0YS5oICovOyB9OwogCQk3QzZEMzdGQzE3MkY1NTVGMDA5RDI4NDcgLyogUGFn
ZUJhbm5lck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDNkQzN0ZBMTcyRjU1NUYwMDlEMjg0NyAvKiBQYWdlQmFubmVyTWFjLm1tICovOyB9Owog
CQk3QzZFNzBGQjE4QjJEQzdBMDBGMjRFMkUgLyogV2ViUHJvY2Vzc0NvY29hLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M2RTcwRjkxOEIyRDRBMDAw
RjI0RTJFIC8qIFdlYlByb2Nlc3NDb2NvYS5tbSAqLzsgfTsKIAkJN0M4NUZEN0MxOTM0MTVBODAw
MDE3N0M0IC8qIFdlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODVGRDdCMTkzNDE1QTgwMDAxNzdDNCAvKiBX
ZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmggKi87IH07CkBAIC0xMjY2LDggKzEyNjYsOCBAQAog
CQk3Qzg5RDJBMzFBNjc4ODc1MDAzQTVGREUgLyogV0tVc2VyU2NyaXB0UmVmLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkExMUE2Nzg4NzUw
MDNBNUZERSAvKiBXS1VzZXJTY3JpcHRSZWYuY3BwICovOyB9OwogCQk3Qzg5RDJBNDFBNjc4ODc1
MDAzQTVGREUgLyogV0tVc2VyU2NyaXB0UmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJBMjFBNjc4ODc1MDAzQTVGREUgLyogV0tVc2VyU2Ny
aXB0UmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJN0M4OUQyQTYxQTY3ODlFQTAwM0E1RkRFIC8qIEFQSVVzZXJTY3JpcHQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyQTUxQTY3ODlFQTAw
M0E1RkRFIC8qIEFQSVVzZXJTY3JpcHQuY3BwICovOyB9OwotCQk3Qzg5RDJCMzFBNkIwNjhDMDAz
QTVGREUgLyogQVBJQ29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29u
dGVudEV4dGVuc2lvbi5jcHAgKi87IH07Ci0JCTdDODlEMkI0MUE2QjA2OEMwMDNBNUZERSAvKiBB
UElDb250ZW50RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3Qzg5RDJCMjFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudEV4dGVuc2lv
bi5oICovOyB9OworCQk3Qzg5RDJCMzFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudFJ1bGVM
aXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
ODlEMkIxMUE2QjA2OEMwMDNBNUZERSAvKiBBUElDb250ZW50UnVsZUxpc3QuY3BwICovOyB9Owor
CQk3Qzg5RDJCNDFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudFJ1bGVMaXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCMjFBNkIwNjhD
MDAzQTVGREUgLyogQVBJQ29udGVudFJ1bGVMaXN0LmggKi87IH07CiAJCTdDODlEMkI2MUE2QjBE
RDkwMDNBNUZERSAvKiBXS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkI1MUE2QjBERDkwMDNB
NUZERSAvKiBXS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Qzg5RDJCOTFBNkIwRjJDMDAzQTVG
REUgLyogX1dLVXNlckNvbnRlbnRGaWx0ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCNzFBNkIwRjJDMDAzQTVGREUgLyogX1dLVXNlckNv
bnRlbnRGaWx0ZXIubW0gKi87IH07CiAJCTdDODlEMkJBMUE2QjBGMkMwMDNBNUZERSAvKiBfV0tV
c2VyQ29udGVudEZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0M4OUQyQjgxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEz
MTIsNyArMTMxMiw3IEBACiAJCTdDRTREMjIwMUE0OTE0Q0EwMEM3RjE1MiAvKiBBUElQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDRTREMjFFMUE0OTE0Q0EwMEM3RjE1MiAvKiBBUElQcm9jZXNzUG9vbENvbmZp
Z3VyYXRpb24uaCAqLzsgfTsKIAkJN0NFNEQyMjcxQTQ5MTZDMjAwQzdGMTUyIC8qIFdlYlByb2Nl
c3NQb29sTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDRTREMjI1MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9v
bE1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTdDRTREMjI4MUE0OTE2QzIwMEM3RjE1MiAv
KiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3Q0U0RDIyNjFBNDkxNkMyMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bv
b2xNZXNzYWdlcy5oICovOyB9OwotCQk3Q0VGQTk2MjFBQzA5OTkzMDBCOTEwRkQgLyogQVBJVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFRkE5NjAxQUMwOTk5MzAwQjkxMEZEIC8qIEFQSVVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbSAqLzsgfTsKKwkJN0NFRkE5NjIxQUMwOTk5MzAw
QjkxMEZEIC8qIEFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlQ29jb2EubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0VGQTk2MDFBQzA5OTkzMDBCOTEwRkQg
LyogQVBJQ29udGVudFJ1bGVMaXN0U3RvcmVDb2NvYS5tbSAqLzsgfTsKIAkJN0NGNDdGRjYxNzI3
NUI3MTAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Y0N0ZGNDE3Mjc1QjcxMDA4QUNCOTEgLyog
V0tCdW5kbGVQYWdlQmFubmVyLmNwcCAqLzsgfTsKIAkJN0NGNDdGRjcxNzI3NUI3MTAwOEFDQjkx
IC8qIFdLQnVuZGxlUGFnZUJhbm5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0NGNDdGRjUxNzI3NUI3MTAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJh
bm5lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTdDRjQ3RkZCMTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEg
LyogUGFnZUJhbm5lci5oICovOyB9OwpAQCAtMzQ0MywxMyArMzQ0MywxMyBAQAogCQk1Q0JDOUI4
OTFDNjUyNEE1MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFzay5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0RhdGFUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDQkM5QjhC
MUM2NTI1NzMwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFza0NvY29hLm1tOyBwYXRo
ID0gTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDRDI4NjQ5MUU3MjJGNDQwMDk0RkRDOCAvKiBfV0tVc2Vy
Q29udGVudEZpbHRlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
X1dLVXNlckNvbnRlbnRGaWx0ZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTVDRDI4NjRBMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZW50RXh0ZW5zaW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDRDI4NjRCMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0Nv
bnRlbnRFeHRlbnNpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXS0NvbnRlbnRFeHRlbnNpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVD
RDI4NjRDMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5hbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRlbnRFeHRlbnNpb25JbnRlcm5h
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1Q0QyODY0RDFFNzIyRjQ0MDA5NEZE
QzggLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNUNEMjg2NEUxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0
b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tDb250ZW50
RXh0ZW5zaW9uU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDRDI4NjRG
MUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudEV4dGVuc2lvblN0b3JlSW50
ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUNEMjg2NTAxRTcyMkY0NDAw
OTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvblN0b3JlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNEMjg2NEExRTcyMkY0NDAwOTRGREM4IC8qIFdL
Q29udGVudFJ1bGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29u
dGVudFJ1bGVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDRDI4NjRCMUU3
MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLQ29udGVudFJ1bGVMaXN0Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Q0QyODY0QzFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50UnVs
ZUxpc3RJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRl
bnRSdWxlTGlzdEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDRDI4
NjREMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudFJ1bGVMaXN0U3RvcmUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNEMjg2NEUxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29u
dGVudFJ1bGVMaXN0U3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXS0NvbnRlbnRSdWxlTGlzdFN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1Q0QyODY0RjFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50UnVsZUxpc3RTdG9yZUlu
dGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29udGVudFJ1bGVM
aXN0U3RvcmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0QyODY1
MDFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50UnVsZUxpc3RTdG9yZVByaXZhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tDb250ZW50UnVsZUxpc3RTdG9yZVByaXZh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNFODVCMUYxQzg4RTY0MzAwNzBC
RkNFIC8qIFBpbmdMb2FkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBpbmdM
b2FkLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1Q0ZFQ0IwMzFFMUVEMUM4MDBGODg1MDQgLyogTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlci5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9DdXN0
b21Qcm90b2NvbHMvTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUQ0NDJBNTUxNkQ1ODU2NzAwQUMzMzMxIC8qIFBsdWdpblNlcnZp
Y2UuZW50aXRsZW1lbnRzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBQbHVnaW5TZXJ2aWNlLmVudGl0bGVtZW50czsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1MTcsOCArMzUxNyw4IEBACiAJCTdDMzYxRDc2
MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDMzYxRDc3MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0MzODc0MzMxNzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5uZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZUJhbm5lci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDM0EwNkE1MUFBQjkwM0UwMDlENzRCQSAv
KiBBUElDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJN0MzQTA2QTYxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRl
bnNpb25TdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElDb250ZW50
RXh0ZW5zaW9uU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MzQTA2QTUx
QUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MzQTA2QTYxQUFCOTAzRTAwOUQ3NEJBIC8q
IEFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFQSUNvbnRlbnRSdWxlTGlzdFN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDM0Y4QzhFMTczQUY1MkQwMDdCN0YzOSAvKiBQbHVnaW5JbmZvcm1hdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5JbmZvcm1hdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDM0Y4QzhGMTczQUY1MkQwMDdCN0YzOSAv
KiBQbHVnaW5JbmZvcm1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bHVnaW5JbmZvcm1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQ2OTRD
NzFBNEI0RUEwMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhc3RlYm9hcmRQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTI3
LDEwICszNTI3LDEwIEBACiAJCTdDNDY5NENEMUE1MUUzNjgwMEFENTg0NSAvKiBXZWJQYXN0ZWJv
YXJkUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFz
dGVib2FyZFByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0Njk0Q0Ux
QTUxRTM2ODAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJQYXN0ZWJvYXJkUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0M0Njk0Q0YxQTUxRTM2ODAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94
eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQYXN0ZWJvYXJkUHJveHku
bWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDNEFCRUNFMUFBOEU5
RjAwMDg4QUEzNyAvKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0M0QUJFQ0YxQUE4RTlGMDAwODhBQTM3
IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJN0M0QUJFRDIxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTdDNEFCRUQzMUFBOEZDQjgwMDg4QUEzNyAvKiBXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJN0M0QUJFQ0UxQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvbXBpbGVkQ29u
dGVudFJ1bGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M0QUJFQ0Yx
QUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNEFCRUQyMUFBOEZDQjgwMDg4QUEzNyAvKiBX
ZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M0QUJFRDMxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNv
bXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0M0RUQzMjYxQTMxMTlEOTAwNzlCRDQ5IC8qIEluamVjdGVkQnVuZGxlQ1NT
U3R5bGVEZWNsYXJhdGlvbkhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25IYW5kbGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzRFRDMyNzFBMzExOUQ5MDA3OUJENDkgLyogSW5q
ZWN0ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvbkhhbmRsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzZEMzdGQTE3MkY1NTVGMDA5RDI4NDcg
LyogUGFnZUJhbm5lck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFBhZ2VCYW5uZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTU0
LDggKzM1NTQsOCBAQAogCQk3Qzg5RDJBMTFBNjc4ODc1MDAzQTVGREUgLyogV0tVc2VyU2NyaXB0
UmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLVXNlclNjcmlw
dFJlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODlEMkEyMUE2Nzg4NzUw
MDNBNUZERSAvKiBXS1VzZXJTY3JpcHRSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0tVc2VyU2NyaXB0UmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
ODlEMkE1MUE2Nzg5RUEwMDNBNUZERSAvKiBBUElVc2VyU2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQSVVzZXJTY3JpcHQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk3Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudEV4
dGVuc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElDb250
ZW50RXh0ZW5zaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0M4OUQyQjIx
QTZCMDY4QzAwM0E1RkRFIC8qIEFQSUNvbnRlbnRFeHRlbnNpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQVBJQ29udGVudEV4dGVuc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyogQVBJQ29udGVudFJ1bGVM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQSUNvbnRlbnRS
dWxlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDODlEMkIyMUE2QjA2
OEMwMDNBNUZERSAvKiBBUElDb250ZW50UnVsZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQVBJQ29udGVudFJ1bGVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDODlEMkI1MUE2QjBERDkwMDNBNUZERSAvKiBXS1VzZXJDb250ZW50Q29udHJvbGxl
clByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tVc2VyQ29udGVu
dENvbnRyb2xsZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODlE
MkI3MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1VzZXJDb250ZW50RmlsdGVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzg5RDJCODFBNkIwRjJDMDAzQTVGREUgLyog
X1dLVXNlckNvbnRlbnRGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
X1dLVXNlckNvbnRlbnRGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2
MDIsNyArMzYwMiw3IEBACiAJCTdDRTREMjFFMUE0OTE0Q0EwMEM3RjE1MiAvKiBBUElQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQVBJ
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg7IHBhdGggPSBVSVByb2Nlc3MvQVBJL0FQSVByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTdD
RTREMjI1MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQcm9jZXNzUG9vbE1l
c3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRTREMjI2
MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlByb2Nlc3NQb29sTWVzc2FnZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0NFRkE5NjAxQUMwOTk5MzAwQjkxMEZEIC8qIEFQSVVzZXJD
b250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVDb2NvYS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NFRkE5NjAxQUMwOTk5MzAwQjkxMEZEIC8qIEFQSUNv
bnRlbnRSdWxlTGlzdFN0b3JlQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBBUElDb250ZW50UnVsZUxpc3RTdG9yZUNvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0Y0N0ZGNDE3Mjc1QjcxMDA4QUNCOTEgLyogV0tCdW5kbGVQYWdl
QmFubmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLQnVuZGxl
UGFnZUJhbm5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRjQ3RkY1MTcy
NzVCNzEwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVQYWdlQmFubmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDRjQ3RkY5MTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VCYW5uZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQ5NjYsMTAgKzQ5NjYsMTAgQEAKIAkJCQk1MThEMkNBQjEyRDUxNTNC
MDAzQkI5M0IgLyogV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgKi8sCiAJCQkJNTE4RDJDQUMx
MkQ1MTUzQjAwM0JCOTNCIC8qIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCAqLywKIAkJCQlCQ0Y1
MDcyNjEyNDMyOUFBMDA1OTU1QUUgLyogV2ViQ2VydGlmaWNhdGVJbmZvLmggKi8sCi0JCQkJN0M0
QUJFQ0UxQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAg
Ki8sCi0JCQkJN0M0QUJFQ0YxQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbi5oICovLAotCQkJCTdDNEFCRUQyMUFBOEZDQjgwMDg4QUEzNyAvKiBXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcCAqLywKLQkJCQk3QzRBQkVEMzFBQThGQ0I4MDA4OEFB
MzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oICovLAorCQkJCTdDNEFCRUNF
MUFBOEU5RjAwMDg4QUEzNyAvKiBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5jcHAgKi8sCisJ
CQkJN0M0QUJFQ0YxQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0
LmggKi8sCisJCQkJN0M0QUJFRDIxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVu
dFJ1bGVMaXN0RGF0YS5jcHAgKi8sCisJCQkJN0M0QUJFRDMxQUE4RkNCODAwODhBQTM3IC8qIFdl
YkNvbXBpbGVkQ29udGVudFJ1bGVMaXN0RGF0YS5oICovLAogCQkJCUJDNEE2MjhCMTQ3MzEyQkUw
MDZDNjgxQSAvKiBXZWJDb25uZWN0aW9uLmNwcCAqLywKIAkJCQlCQzRBNjI4QzE0NzMxMkJFMDA2
QzY4MUEgLyogV2ViQ29ubmVjdGlvbi5oICovLAogCQkJCTFBMUZFQzE5MTYyN0IzRUYwMDcwMEY2
RCAvKiBXZWJDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovLApAQCAtNTYxNSw3ICs1NjE1LDcgQEAK
IAkJCQk1Q0IyMzc4QTFERjBERDQzMDAxMTdBQTMgLyogX1dLV2Vic2l0ZVBvbGljaWVzLm1tICov
LAogCQkJCTVDQjIzNzhEMURGMEUwQzIwMDExN0FBMyAvKiBfV0tXZWJzaXRlUG9saWNpZXNJbnRl
cm5hbC5oICovLAogCQkJCUZFRDNDMURBMUI0NDdBRTgwMEUwRUI3RiAvKiBBUElTZXJpYWxpemVk
U2NyaXB0VmFsdWVDb2NvYS5tbSAqLywKLQkJCQk3Q0VGQTk2MDFBQzA5OTkzMDBCOTEwRkQgLyog
QVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUNvY29hLm1tICovLAorCQkJCTdDRUZBOTYwMUFD
MDk5OTMwMEI5MTBGRCAvKiBBUElDb250ZW50UnVsZUxpc3RTdG9yZUNvY29hLm1tICovLAogCQkJ
CTFBMzYzNUFCMUEzMTQ1RTUwMEVENjE5NyAvKiBBUElXZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0g
Ki8sCiAJCQkJMUFGREU2NDMxOTUxMEI1NTAwQzQ4RkZBIC8qIExlZ2FjeUJ1bmRsZUZvckNsYXNz
Lm1tICovLAogCQkJCTM3QzRDMDhCMTgxNEFDNUMwMDM2ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlz
dC5oICovLApAQCAtNTYyNiwxMyArNTYyNiwxMyBAQAogCQkJCTM3QzRDMDg4MTgxNDlGMjMwMDM2
ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1JbnRlcm5hbC5oICovLAogCQkJCTJERkY3QjZF
MURBNENGQUYwMDgxNDYxNCAvKiBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1Qcml2YXRlLmggKi8sCiAJ
CQkJMUE5RjI4MTAxOTU4RjQ3ODAwOENBQzcyIC8qIFdLQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5o
ICovLAotCQkJCTVDRDI4NjRBMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb24u
aCAqLywKLQkJCQk1Q0QyODY0QjFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9u
Lm1tICovLAotCQkJCTVDRDI4NjRDMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNp
b25JbnRlcm5hbC5oICovLAotCQkJCTVDRDI4NjREMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRl
bnRFeHRlbnNpb25TdG9yZS5oICovLAotCQkJCTVDRDI4NjRFMUU3MjJGNDQwMDk0RkRDOCAvKiBX
S0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbSAqLywKLQkJCQk1Q0QyODY0RjFFNzIyRjQ0MDA5NEZE
QzggLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVJbnRlcm5hbC5oICovLAotCQkJCTVDRDI4NjUw
MUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaCAqLywK
KwkJCQk1Q0QyODY0QTFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50UnVsZUxpc3QuaCAqLywK
KwkJCQk1Q0QyODY0QjFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50UnVsZUxpc3QubW0gKi8s
CisJCQkJNUNEMjg2NEMxRTcyMkY0NDAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0SW50ZXJu
YWwuaCAqLywKKwkJCQk1Q0QyODY0RDFFNzIyRjQ0MDA5NEZEQzggLyogV0tDb250ZW50UnVsZUxp
c3RTdG9yZS5oICovLAorCQkJCTVDRDI4NjRFMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0NvbnRlbnRS
dWxlTGlzdFN0b3JlLm1tICovLAorCQkJCTVDRDI4NjRGMUU3MjJGNDQwMDk0RkRDOCAvKiBXS0Nv
bnRlbnRSdWxlTGlzdFN0b3JlSW50ZXJuYWwuaCAqLywKKwkJCQk1Q0QyODY1MDFFNzIyRjQ0MDA5
NEZEQzggLyogV0tDb250ZW50UnVsZUxpc3RTdG9yZVByaXZhdGUuaCAqLywKIAkJCQkxQUY0NTky
RDE5NDY0QjIwMDBGOUQ0QTIgLyogV0tFcnJvci5oICovLAogCQkJCTFBRjQ1OTJDMTk0NjRCMjAw
MEY5RDRBMiAvKiBXS0Vycm9yLm1tICovLAogCQkJCTFBMkQyNTJBMTk0Njg4RkQwMDQ1MzdCMCAv
KiBXS0Vycm9ySW50ZXJuYWwuaCAqLywKQEAgLTY4NTAsMTAgKzY4NTAsMTAgQEAKIAkJCQlCQzEx
MUI0NzExMkY2MTY5MDAzMzdCQUIgLyogbWFjICovLAogCQkJCTk5QzgxRDVCMUMyMEU4MTcwMDVD
NEM4MiAvKiBBUElBdXRvbWF0aW9uQ2xpZW50LmggKi8sCiAJCQkJOTkwRDI4QjMxQzY1MjZENDAw
OTg2OTc3IC8qIEFQSUF1dG9tYXRpb25TZXNzaW9uQ2xpZW50LmggKi8sCi0JCQkJN0M4OUQyQjEx
QTZCMDY4QzAwM0E1RkRFIC8qIEFQSUNvbnRlbnRFeHRlbnNpb24uY3BwICovLAotCQkJCTdDODlE
MkIyMUE2QjA2OEMwMDNBNUZERSAvKiBBUElDb250ZW50RXh0ZW5zaW9uLmggKi8sCi0JCQkJN0Mz
QTA2QTUxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAgKi8s
Ci0JCQkJN0MzQTA2QTYxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5oICovLAorCQkJCTdDODlEMkIxMUE2QjA2OEMwMDNBNUZERSAvKiBBUElDb250ZW50UnVsZUxp
c3QuY3BwICovLAorCQkJCTdDODlEMkIyMUE2QjA2OEMwMDNBNUZERSAvKiBBUElDb250ZW50UnVs
ZUxpc3QuaCAqLywKKwkJCQk3QzNBMDZBNTFBQUI5MDNFMDA5RDc0QkEgLyogQVBJQ29udGVudFJ1
bGVMaXN0U3RvcmUuY3BwICovLAorCQkJCTdDM0EwNkE2MUFBQjkwM0UwMDlENzRCQSAvKiBBUElD
b250ZW50UnVsZUxpc3RTdG9yZS5oICovLAogCQkJCTA3NkU4ODREMUExM0NBREYwMDVFOTBGQyAv
KiBBUElDb250ZXh0TWVudUNsaWVudC5oICovLAogCQkJCTdBODIxRjRGMUUyRjdBNUMwMDYwNDU3
NyAvKiBBUElDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuaCAqLywKIAkJCQk4Mzg5MUI2MjFB
NjhCMzQyMDAzMEYzODYgLyogQVBJRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLywKQEAgLTgx
ODgsOCArODE4OCw4IEBACiAJCQkJOTlDODFENUQxQzIxRjM4QjAwNUM0QzgyIC8qIEFQSUF1dG9t
YXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5MEQyOEMwMUM2NTUzRjEwMDk4Njk3
NyAvKiBBUElBdXRvbWF0aW9uU2Vzc2lvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEz
REQyMDYxMjVFNUEyRjAwNDUxNUU2IC8qIEFQSUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
N0M4OUQyQjQxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSUNvbnRlbnRFeHRlbnNpb24uaCBpbiBIZWFk
ZXJzICovLAotCQkJCTdDM0EwNkE4MUFBQjkwM0UwMDlENzRCQSAvKiBBUElDb250ZW50RXh0ZW5z
aW9uU3RvcmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDODlEMkI0MUE2QjA2OEMwMDNBNUZERSAv
KiBBUElDb250ZW50UnVsZUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDM0EwNkE4MUFBQjkw
M0UwMDlENzRCQSAvKiBBUElDb250ZW50UnVsZUxpc3RTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDc2RTg4NEUxQTEzQ0FERjAwNUU5MEZDIC8qIEFQSUNvbnRleHRNZW51Q2xpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQk3QTgyMUY1MDFFMkY3QTc1MDA2MDQ1NzcgLyogQVBJQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTU3OEI4MzEyMDlFQ0VG
MDBBMzdDNEEgLyogQVBJRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC04NjEwLDggKzg2MTAsOCBA
QAogCQkJCTNGODdCOUJFMTU4OTQwMTkwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTNGODdCOUMwMTU4OTQwRDgwMDkwRkY2MiAvKiBXZWJDb2xvclBpY2tl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzI4RTg2RjExNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNv
bG9yUGlja2VyTWFjLmggaW4gSGVhZGVycyAqLywKLQkJCQk3QzRBQkVEMTFBQThFOUYwMDA4OEFB
MzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk3
QzRBQkVENTFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0
YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0M0QUJFRDExQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNv
bXBpbGVkQ29udGVudFJ1bGVMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzRBQkVENTFBQThG
Q0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzRBNjI5MDE0NzMxMkJFMDA2QzY4MUEgLyogV2ViQ29ubmVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM0QTYyOTIxNDczMTJCRTAwNkM2ODFBIC8qIFdlYkNvbm5lY3Rp
b25DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMUZFQzFEMTYyN0I0NTcwMDcwMEY2RCAv
KiBXZWJDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtODg1NiwxMSArODg1
NiwxMSBAQAogCQkJCUJDQTI4NEQ3MTQ5MkYyQzcwMDFGOTA0MiAvKiBXS0Nvbm5lY3Rpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCUJDNUM3NUM4MTQ5NTREQTYwMEJDNDc3NSAvKiBXS0Nvbm5lY3Rp
b25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0QTYyOTcxNDczMTNBMDAwNkM2ODFB
IC8qIFdLQ29ubmVjdGlvblJlZi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUNEMjg2NTQxRTcyMzVC
MTAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNUNE
Mjg2NTUxRTcyMzVCODAwOTRGREM4IC8qIFdLQ29udGVudEV4dGVuc2lvbkludGVybmFsLmggaW4g
SGVhZGVycyAqLywKLQkJCQk1Q0QyODY1MTFFNzIzNTk5MDA5NEZEQzggLyogV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmUuaCBpbiBIZWFkZXJzICovLAotCQkJCTVDRDI4NjU3MUU3MjM1QzkwMDk0RkRD
OCAvKiBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1Q0QyODY1ODFFNzIzNUQxMDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0QyODY1NDFFNzIzNUIxMDA5NEZEQzggLyogV0tD
b250ZW50UnVsZUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDRDI4NjU1MUU3MjM1QjgwMDk0
RkRDOCAvKiBXS0NvbnRlbnRSdWxlTGlzdEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
Q0QyODY1MTFFNzIzNTk5MDA5NEZEQzggLyogV0tDb250ZW50UnVsZUxpc3RTdG9yZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNUNEMjg2NTcxRTcyMzVDOTAwOTRGREM4IC8qIFdLQ29udGVudFJ1bGVM
aXN0U3RvcmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNEMjg2NTgxRTcyMzVEMTAw
OTRGREM4IC8qIFdLQ29udGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkNCNEU0QzE4QkJFMDQ0MDAwRkNGQzkgLyogV0tDb250ZW50Vmlldy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDQjRFNkMxOEJCRjI2QTAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCOUUyNEIxMTIwRTE1QzAwQTEzN0UwIC8q
IFdLQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzUyLDggKzk3NTIsOCBAQAogCQkJCUEx
ODJENUI0MUJFNkJEMjUwMDg3QTdDQyAvKiBBY2Nlc3NpYmlsaXR5SU9TLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdENzkyRDYxNzY3Q0I2RTAwODgxQ0JFIC8qIEFjdGl2aXR5QXNzZXJ0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDNjQ2OTZGMTFEQkU2MDMwMDY0NTVCMCAvKiBBUElBcnJh
eS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3Qzg5RDJCMzFBNkIwNjhDMDAzQTVGREUgLyogQVBJ
Q29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk3QzNBMDZBNzFBQUI5MDNF
MDA5RDc0QkEgLyogQVBJQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTdDODlEMkIzMUE2QjA2OEMwMDNBNUZERSAvKiBBUElDb250ZW50UnVsZUxpc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJN0MzQTA2QTcxQUFCOTAzRTAwOUQ3NEJBIC8qIEFQSUNvbnRlbnRS
dWxlTGlzdFN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQUIwMzdDMTg1Rjk5RDgwMEVE
RjUwMSAvKiBBUElEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMUVGMTk5MUExRDVCNDIw
MDIzMjAwQSAvKiBBUElEYXRhQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QzFCQTMzRDFB
NEEwRTYwMDA0M0UyNDkgLyogQVBJRGljdGlvbmFyeS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk3
ODAsNyArOTc4MCw3IEBACiAJCQkJQkNFMjMxNUUxMjJDMzBDQTAwRDVDMzVBIC8qIEFQSVVSTFJl
cXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5MEExRDMxMjJERDU1RTAwQ0M4QzUwIC8q
IEFQSVVSTFJlc3BvbnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRDEyNDNBMUU2RTBBQUIw
MDJCMjgyMCAvKiBBUElVUkxTY2hlbWVUYXNrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDRUZB
OTYyMUFDMDk5OTMwMEI5MTBGRCAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlQ29jb2Eu
bW0gaW4gU291cmNlcyAqLywKKwkJCQk3Q0VGQTk2MjFBQzA5OTkzMDBCOTEwRkQgLyogQVBJQ29u
dGVudFJ1bGVMaXN0U3RvcmVDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDODgyREZFMUM3
RTk5QUMwMDZCRjczMSAvKiBBUElVc2VyQ29udGVudFdvcmxkLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDODlEMkE2MUE2Nzg5RUEwMDNBNUZERSAvKiBBUElVc2VyU2NyaXB0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTJEODc4NjIzMUJEQjU4RkYwMEQwMkFCQiAvKiBBUElVc2VyU3R5bGVTaGVl
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTgzLDggKzEwMTgzLDggQEAKIAkJCQkzRjg3QjlC
RDE1ODk0MDEyMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUYwMzY5Nzg4MTVGNEJGMDUwMEMzQTgwRSAvKiBXZWJDb2xvclBpY2tlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3MjhFODZGMjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJN
YWMubW0gaW4gU291cmNlcyAqLywKLQkJCQk3QzRBQkVEMDFBQThFOUYwMDA4OEFBMzcgLyogV2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDNEFCRUQ0
MUFBOEZDQjgwMDg4QUEzNyAvKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTdDNEFCRUQwMUFBOEU5RjAwMDg4QUEzNyAvKiBXZWJDb21waWxl
ZENvbnRlbnRSdWxlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzRBQkVENDFBQThGQ0I4
MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3REYXRhLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDNEE2MjhGMTQ3MzEyQkUwMDZDNjgxQSAvKiBXZWJDb25uZWN0aW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDNEE2MjkxMTQ3MzEyQkUwMDZDNjgxQSAvKiBXZWJDb25uZWN0
aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMUZFQzFDMTYyN0I0NTcwMDcwMEY2
RCAvKiBXZWJDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MTA0NTIsOCArMTA0NTIsOCBAQAogCQkJCUJDNDA3NjI4MTI0RkYwNDAwMDY4RjIwQSAvKiBXS0Nl
cnRpZmljYXRlSW5mb01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQTI4NEQ2MTQ5MkYyQzcw
MDFGOTA0MiAvKiBXS0Nvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzRBNjI5NjE0
NzMxM0EwMDA2QzY4MUEgLyogV0tDb25uZWN0aW9uUmVmLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTVDRDI4NjUyMUU3MjM1QTYwMDk0RkRDOCAvKiBXS0NvbnRlbnRFeHRlbnNpb24ubW0gaW4gU291
cmNlcyAqLywKLQkJCQk1Q0QyODY1NjFFNzIzNUM2MDA5NEZEQzggLyogV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmUubW0gaW4gU291cmNlcyAqLywKKwkJCQk1Q0QyODY1MjFFNzIzNUE2MDA5NEZEQzgg
LyogV0tDb250ZW50UnVsZUxpc3QubW0gaW4gU291cmNlcyAqLywKKwkJCQk1Q0QyODY1NjFFNzIz
NUM2MDA5NEZEQzggLyogV0tDb250ZW50UnVsZUxpc3RTdG9yZS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTBGQ0I0RTREMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZDQjRFNkQxOEJCRjI2QTAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDQjlFMjRDMTEyMEUxNUMwMEExMzdFMCAv
KiBXS0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMTY1MzkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5j
bHVkZSAiRnJhbWVJbmZvRGF0YS5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlU2NyaXB0V29y
bGQuaCIKLSNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRl
ICJXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdC5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKQEAgLTMzOSwyMiAr
MzM5LDIyIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2UKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLXZvaWQgV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyOjphZGRDb250ZW50RXh0ZW5zaW9ucyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFN0
cmluZywgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YT4+JiBjb250ZW50RXh0ZW5zaW9u
cykKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRDb250ZW50UnVsZUxpc3RzKGNv
bnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERh
dGE+PiYgY29udGVudFJ1bGVMaXN0cykKIHsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRlbnRF
eHRlbnNpb24gOiBjb250ZW50RXh0ZW5zaW9ucykgewotICAgICAgICBXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb25EYXRhIGNvbnRlbnRFeHRlbnNpb25EYXRhID0gY29udGVudEV4dGVuc2lvbi5z
ZWNvbmQ7Ci0gICAgICAgIFJlZlB0cjxXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRl
KFdURk1vdmUoY29udGVudEV4dGVuc2lvbkRhdGEpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNv
bnRlbnRSdWxlTGlzdCA6IGNvbnRlbnRSdWxlTGlzdHMpIHsKKyAgICAgICAgV2ViQ29tcGlsZWRD
b250ZW50UnVsZUxpc3REYXRhIGNvbnRlbnRSdWxlTGlzdERhdGEgPSBjb250ZW50UnVsZUxpc3Qu
c2Vjb25kOworICAgICAgICBSZWZQdHI8V2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q+IGNvbXBp
bGVkQ29udGVudFJ1bGVMaXN0ID0gV2ViQ29tcGlsZWRDb250ZW50UnVsZUxpc3Q6OmNyZWF0ZShX
VEZNb3ZlKGNvbnRlbnRSdWxlTGlzdERhdGEpKTsKIAotICAgICAgICBtX2NvbnRlbnRFeHRlbnNp
b25CYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oY29udGVudEV4dGVuc2lvbi5maXJzdCwgV1RG
TW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb24pKTsKKyAgICAgICAgbV9jb250ZW50RXh0ZW5z
aW9uQmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKGNvbnRlbnRSdWxlTGlzdC5maXJzdCwgV1RG
TW92ZShjb21waWxlZENvbnRlbnRSdWxlTGlzdCkpOwogICAgIH0KIH0KIAotdm9pZCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBu
YW1lKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUNvbnRlbnRSdWxlTGlz
dChjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5y
ZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpOwogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKQordm9pZCBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OnJlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHMoKQogewogICAgIG1fY29udGVu
dEV4dGVuc2lvbkJhY2tlbmQucmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjE2NTM5KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBDb21waWxlZENvbnRl
bnRFeHRlbnNpb247CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgSW5qZWN0ZWRCdW5kbGVT
Y3JpcHRXb3JsZDsKLWNsYXNzIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE7CitjbGFz
cyBXZWJDb21waWxlZENvbnRlbnRSdWxlTGlzdERhdGE7CiBjbGFzcyBXZWJVc2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9yUHJveHk7CiAKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlciBm
aW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpVc2VyQ29udGVudFByb3ZpZGVyLCBwcml2YXRlIElQQzo6
TWVzc2FnZVJlY2VpdmVyIHsKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRk
VXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxXZWJVc2VyU3R5bGVTaGVldERhdGE+Jik7CiAg
ICAgdm9pZCBhZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKGNvbnN0IFZlY3RvcjxXZWJTY3Jp
cHRNZXNzYWdlSGFuZGxlckRhdGE+Jik7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
LSAgICB2b2lkIGFkZENvbnRlbnRFeHRlbnNpb25zKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3Ry
aW5nLCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhPj4mKTsKKyAgICB2b2lkIGFkZENv
bnRlbnRSdWxlTGlzdHMoY29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVk
Q29udGVudFJ1bGVMaXN0RGF0YT4+Jik7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTk4LDggKzk4
LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZUFsbFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxl
cnMoY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYpOwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKLSAgICB2b2lkIHJlbW92ZUNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1l
KTsKLSAgICB2b2lkIHJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7CisgICAgdm9pZCByZW1v
dmVDb250ZW50UnVsZUxpc3QoY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIHJlbW92ZUFs
bENvbnRlbnRSdWxlTGlzdHMoKTsKICNlbmRpZgogCiAgICAgdm9pZCBhZGRVc2VyU2NyaXB0SW50
ZXJuYWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVu
dGlmaWVyLCBXZWJDb3JlOjpVc2VyU2NyaXB0JiYpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJV
c2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW4JKHJldmlzaW9uIDIxNjUzOSkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw4IEBAIG1lc3NhZ2Vz
IC0+IFdlYlVzZXJDb250ZW50Q29udHJvbGxlciB7CiAgICAgUmVtb3ZlQWxsVXNlclNjcmlwdE1l
c3NhZ2VIYW5kbGVycyhWZWN0b3I8dWludDY0X3Q+IHdvcmxkSWRlbnRpZmllcnMpOwogCiAjaWYg
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBBZGRDb250ZW50RXh0ZW5zaW9ucyhWZWN0
b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhPj4gY29udGVudEZpbHRlcnMpOwotICAgIFJlbW92ZUNvbnRlbnRFeHRlbnNpb24oU3RyaW5n
IG5hbWUpOwotICAgIFJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7CisgICAgQWRkQ29udGVu
dFJ1bGVMaXN0cyhWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViS2l0OjpXZWJDb21waWxlZENv
bnRlbnRSdWxlTGlzdERhdGE+PiBjb250ZW50RmlsdGVycyk7CisgICAgUmVtb3ZlQ29udGVudFJ1
bGVMaXN0KFN0cmluZyBuYW1lKTsKKyAgICBSZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzKCk7CiAj
ZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAJKHJldmlzaW9uIDIxNjUzOSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc0LDcgKzU3NCw3IEBAIFdl
YlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBXZWJQYWcKICAgICBtX3VzZXJDb250ZW50
Q29udHJvbGxlci0+YWRkVXNlclN0eWxlU2hlZXRzKHBhcmFtZXRlcnMudXNlclN0eWxlU2hlZXRz
KTsKICAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5k
bGVycyhwYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVycyk7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhU
RU5TSU9OUykKLSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkQ29udGVudEV4dGVuc2lv
bnMocGFyYW1ldGVycy5jb250ZW50RXh0ZW5zaW9ucyk7CisgICAgbV91c2VyQ29udGVudENvbnRy
b2xsZXItPmFkZENvbnRlbnRSdWxlTGlzdHMocGFyYW1ldGVycy5jb250ZW50UnVsZUxpc3RzKTsK
ICNlbmRpZgogfQogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMTY3OTYpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxNy0wNS0xMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBXS0NvbnRlbnRFeHRlbnNp
b24gdG8gV0tDb250ZW50UnVsZUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MjA1MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzIxNDEwMDU+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZS5tbToK
KyAgICAgICAgKFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0OjpTZXRVcCk6CisgICAgICAgIChU
RVNUX0YpOgorICAgICAgICAoLVtDb250ZW50UnVsZUxpc3REZWxlZ2F0ZSB3ZWJWaWV3OnJ1bkph
dmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9u
SGFuZGxlcjpdKToKKyAgICAgICAgKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdDo6U2V0VXAp
OiBEZWxldGVkLgorICAgICAgICAoLVtDb250ZW50RXh0ZW5zaW9uRGVsZWdhdGUgd2ViVmlldzpy
dW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6IERlbGV0ZWQuCisKIDIwMTctMDUtMTIgIEh5dW5nd29vayBMZWUgIDxo
eXVuZ3dvb2subGVlQG5hdmVyY29ycC5jb20+CiAKICAgICAgICAgW0dUS10gRml4IGNvbXBpbGUg
d2FybmluZ3MgaW4gUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvV0tDb250ZW50
RXh0ZW5zaW9uU3RvcmUubW0JKHJldmlzaW9uIDIxNjUzOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0MkNvY29hL1dLQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwyNCArMzAsMjQgQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMu
aCIKICNpbXBvcnQgIlRlc3QuaCIKLSNpbXBvcnQgPFdlYktpdC9XS0NvbnRlbnRFeHRlbnNpb24u
aD4KLSNpbXBvcnQgPFdlYktpdC9XS0NvbnRlbnRFeHRlbnNpb25TdG9yZVByaXZhdGUuaD4KKyNp
bXBvcnQgPFdlYktpdC9XS0NvbnRlbnRSdWxlTGlzdC5oPgorI2ltcG9ydCA8V2ViS2l0L1dLQ29u
dGVudFJ1bGVMaXN0U3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAK
LWNsYXNzIFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0
IHsKK2NsYXNzIFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRl
c3QgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCiAgICAgewotICAgICAgICBb
W1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gX3JlbW92ZUFsbENvbnRlbnRF
eHRlbnNpb25zXTsKKyAgICAgICAgW1tXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIGRlZmF1bHRTdG9y
ZV0gX3JlbW92ZUFsbENvbnRlbnRSdWxlTGlzdHNdOwogICAgIH0KIH07CiAKIHN0YXRpYyBOU1N0
cmluZyAqYmFzaWNGaWx0ZXIgPSBAIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKndlYmtpdC5vcmdcIn19XSI7CiAKLVRFU1Rf
RihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIENvbXBpbGUpCitURVNUX0YoV0tDb250ZW50
UnVsZUxpc3RTdG9yZVRlc3QsIENvbXBpbGUpCiB7CiAgICAgX19ibG9jayBib29sIGRvbmVDb21w
aWxpbmcgPSBmYWxzZTsKLSAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9y
ZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIg
ZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihX
S0NvbnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbW1dLQ29u
dGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudFJ1bGVMaXN0Rm9y
SWRlbnRpZmllcjpAIlRlc3RSdWxlTGlzdCIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpiYXNpY0Zp
bHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0ICpmaWx0ZXIsIE5TRXJy
b3IgKmVycm9yKSB7CiAgICAgCiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOwogICAg
ICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CkBAIC02NCwyNiArNjQsMjYgQEAgc3RhdGljIHZvaWQg
Y2hlY2tEb21haW4oTlNFcnJvciAqZXJyb3IpCiAgICAgRVhQRUNUX1NUUkVRKFtbZXJyb3IgZG9t
YWluXSBVVEY4U3RyaW5nXSwgW1dLRXJyb3JEb21haW4gVVRGOFN0cmluZ10pOwogfQogCi1URVNU
X0YoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBJbnZhbGlkRXh0ZW5zaW9uKQorVEVTVF9G
KFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0LCBJbnZhbGlkUnVsZUxpc3QpCiB7CiAgICAgX19i
bG9jayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsKLSAgICBbW1dLQ29udGVudEV4dGVuc2lv
blN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVy
OkAiVGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246aW52YWxpZEZpbHRlciBj
b21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqZmlsdGVyLCBOU0Vycm9yICpl
cnJvcikgeworICAgIFtbV0tDb250ZW50UnVsZUxpc3RTdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBp
bGVDb250ZW50UnVsZUxpc3RGb3JJZGVudGlmaWVyOkAiVGVzdFJ1bGVMaXN0IiBlbmNvZGVkQ29u
dGVudFJ1bGVMaXN0OmludmFsaWRGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRS
dWxlTGlzdCAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgewogICAgIAogICAgICAgICBFWFBFQ1Rf
TlVMTChmaWx0ZXIpOwogICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOwogICAgICAgICBj
aGVja0RvbWFpbihlcnJvcik7Ci0gICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9y
Q29udGVudEV4dGVuc2lvblN0b3JlQ29tcGlsZUZhaWxlZCk7Ci0gICAgICAgIEVYUEVDVF9TVFJF
USgiRXh0ZW5zaW9uIGNvbXBpbGF0aW9uIGZhaWxlZDogRmFpbGVkIHRvIHBhcnNlIHRoZSBKU09O
IFN0cmluZy4iLCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKKyAgICAgICAgRVhQ
RUNUX0VRKGVycm9yLmNvZGUsIFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZUNvbXBpbGVGYWls
ZWQpOworICAgICAgICBFWFBFQ1RfU1RSRVEoIlJ1bGUgbGlzdCBjb21waWxhdGlvbiBmYWlsZWQ6
IEZhaWxlZCB0byBwYXJzZSB0aGUgSlNPTiBTdHJpbmcuIiwgW1tlcnJvciBoZWxwQW5jaG9yXSBV
VEY4U3RyaW5nXSk7CiAKICAgICAgICAgZG9uZUNvbXBpbGluZyA9IHRydWU7CiAgICAgfV07CiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ29tcGlsaW5nKTsKIH0KIAotVEVTVF9G
KFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTG9va3VwKQorVEVTVF9GKFdLQ29udGVudFJ1
bGVMaXN0U3RvcmVUZXN0LCBMb29rdXApCiB7CiAgICAgX19ibG9jayBib29sIGRvbmVDb21waWxp
bmcgPSBmYWxzZTsKLSAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0g
Y29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgZW5j
b2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS0Nv
bnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbW1dLQ29udGVu
dFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRl
bnRpZmllcjpAIlRlc3RSdWxlTGlzdCIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpiYXNpY0ZpbHRl
ciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0ICpmaWx0ZXIsIE5TRXJyb3Ig
KmVycm9yKSB7CiAgICAgCiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOwogICAgICAg
ICBFWFBFQ1RfTlVMTChlcnJvcik7CkBAIC05Myw5ICs5Myw5IEBAIFRFU1RfRihXS0NvbnRlbnRF
eHRlbnNpb25TdG9yZVRlc3QsIExvb2sKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmVDb21waWxpbmcpOwogCiAgICAgX19ibG9jayBib29sIGRvbmVMb29raW5nVXAgPSBmYWxzZTsK
LSAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va1VwQ29udGVu
dEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBjb21wbGV0aW9uSGFuZGxl
cjpeKFdLQ29udGVudEV4dGVuc2lvbiAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIFtb
V0tDb250ZW50UnVsZUxpc3RTdG9yZSBkZWZhdWx0U3RvcmVdIGxvb2tVcENvbnRlbnRSdWxlTGlz
dEZvcklkZW50aWZpZXI6QCJUZXN0UnVsZUxpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250
ZW50UnVsZUxpc3QgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKIAotICAgICAgICBFWFBFQ1Rf
U1RSRVEoZmlsdGVyLmlkZW50aWZpZXIuVVRGOFN0cmluZywgIlRlc3RFeHRlbnNpb24iKTsKKyAg
ICAgICAgRVhQRUNUX1NUUkVRKGZpbHRlci5pZGVudGlmaWVyLlVURjhTdHJpbmcsICJUZXN0UnVs
ZUxpc3QiKTsKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CiAgICAgICAgIEVYUEVD
VF9OVUxMKGVycm9yKTsKIApAQCAtMTA0LDE3ICsxMDQsMTcgQEAgVEVTVF9GKFdLQ29udGVudEV4
dGVuc2lvblN0b3JlVGVzdCwgTG9vawogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZUxvb2tpbmdVcCk7CiB9CiAKLVRFU1RfRihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIEVu
Y29kZWRJZGVudGlmaWVyKQorVEVTVF9GKFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0LCBFbmNv
ZGVkSWRlbnRpZmllcikKIHsKICAgICAvLyBGSVhNRTogVSswMEM0IGNhdXNlcyBwcm9ibGVtcyBo
ZXJlLiBVc2luZyB0aGUgb3V0cHV0IG9mIGVuY29kZUZvckZpbGVOYW1lIHdpdGgKICAgICAvLyB0
aGUgZmlsZXN5c3RlbSBjaGFuZ2VzIGl0IHRvIFUrMDA0MSBmb2xsb3dlZCBieSBVKzAzMDgKICAg
ICBOU1N0cmluZyAqaWRlbnRpZmllciA9IEAiOjslMjUlKzI10Jjwn5iNIjsKICAgICBfX2Jsb2Nr
IGJvb2wgZG9uZSA9IGZhbHNlOwotICAgIFtbV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVs
dFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBl
bmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNpY0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKFdL
Q29udGVudEV4dGVuc2lvbiAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgeworICAgIFtbV0tDb250
ZW50UnVsZUxpc3RTdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250ZW50UnVsZUxpc3RGb3JJ
ZGVudGlmaWVyOmlkZW50aWZpZXIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpiYXNpY0ZpbHRlciBj
b21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0ICpmaWx0ZXIsIE5TRXJyb3IgKmVy
cm9yKSB7CiAKICAgICAgICAgRVhQRUNUX1NUUkVRKGZpbHRlci5pZGVudGlmaWVyLlVURjhTdHJp
bmcsIGlkZW50aWZpZXIuVVRGOFN0cmluZyk7CiAKLSAgICAgICAgW1tXS0NvbnRlbnRFeHRlbnNp
b25TdG9yZSBkZWZhdWx0U3RvcmVdIGdldEF2YWlsYWJsZUNvbnRlbnRFeHRlbnNpb25JZGVudGlm
aWVyczpeKE5TQXJyYXk8TlNTdHJpbmcgKj4gKmlkZW50aWZpZXJzKSB7CisgICAgICAgIFtbV0tD
b250ZW50UnVsZUxpc3RTdG9yZSBkZWZhdWx0U3RvcmVdIGdldEF2YWlsYWJsZUNvbnRlbnRSdWxl
TGlzdElkZW50aWZpZXJzOl4oTlNBcnJheTxOU1N0cmluZyAqPiAqaWRlbnRpZmllcnMpIHsKICAg
ICAgICAgICAgIEVYUEVDVF9FUShpZGVudGlmaWVycy5jb3VudCwgMXUpOwogICAgICAgICAgICAg
RVhQRUNUX0VRKGlkZW50aWZpZXJzWzBdLmxlbmd0aCwgaWRlbnRpZmllci5sZW5ndGgpOwogICAg
ICAgICAgICAgRVhQRUNUX1NUUkVRKGlkZW50aWZpZXJzWzBdLlVURjhTdHJpbmcsIGlkZW50aWZp
ZXIuVVRGOFN0cmluZyk7CkBAIC0xMjUsMjYgKzEyNSwyNiBAQCBURVNUX0YoV0tDb250ZW50RXh0
ZW5zaW9uU3RvcmVUZXN0LCBFbmNvCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
KTsKIH0KIAotVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTm9uRXhpc3RpbmdJ
ZGVudGlmaWVyTG9va3VwKQorVEVTVF9GKFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0LCBOb25F
eGlzdGluZ0lkZW50aWZpZXJMb29rdXApCiB7CiAgICAgX19ibG9jayBib29sIGRvbmVMb29raW5n
VXAgPSBmYWxzZTsKLSAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0g
bG9va1VwQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6QCJEb2VzTm90RXhpc3QiIGNvbXBs
ZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9uICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9y
KSB7CisgICAgW1tXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIGRlZmF1bHRTdG9yZV0gbG9va1VwQ29u
dGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjpAIkRvZXNOb3RFeGlzdCIgY29tcGxldGlvbkhhbmRs
ZXI6XihXS0NvbnRlbnRSdWxlTGlzdCAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikgewogICAgIAog
ICAgICAgICBFWFBFQ1RfTlVMTChmaWx0ZXIpOwogICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZXJy
b3IpOwogICAgICAgICBjaGVja0RvbWFpbihlcnJvcik7Ci0gICAgICAgIEVYUEVDVF9FUShlcnJv
ci5jb2RlLCBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlTG9va1VwRmFpbGVkKTsKLSAgICAg
ICAgRVhQRUNUX1NUUkVRKCJFeHRlbnNpb24gbG9va3VwIGZhaWxlZDogVW5zcGVjaWZpZWQgZXJy
b3IgZHVyaW5nIGxvb2t1cC4iLCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGVycm9yLmNvZGUsIFdLRXJyb3JDb250ZW50UnVsZUxpc3RTdG9yZUxv
b2tVcEZhaWxlZCk7CisgICAgICAgIEVYUEVDVF9TVFJFUSgiUnVsZSBsaXN0IGxvb2t1cCBmYWls
ZWQ6IFVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyBsb29rdXAuIiwgW1tlcnJvciBoZWxwQW5jaG9y
XSBVVEY4U3RyaW5nXSk7CiAgICAgICAgIAogICAgICAgICBkb25lTG9va2luZ1VwID0gdHJ1ZTsK
ICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVMb29raW5nVXApOwog
fQogCi1URVNUX0YoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBWZXJzaW9uTWlzbWF0Y2gp
CitURVNUX0YoV0tDb250ZW50UnVsZUxpc3RTdG9yZVRlc3QsIFZlcnNpb25NaXNtYXRjaCkKIHsK
ICAgICBfX2Jsb2NrIGJvb2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOwotICAgIFtbV0tDb250ZW50
RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29udGVudEV4dGVuc2lvbkZvcklk
ZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIiBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNpY0Zp
bHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqZmlsdGVyLCBOU0Vy
cm9yICplcnJvcikKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0b3JlXSBj
b21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjpAIlRlc3RSdWxlTGlzdCIgZW5jb2Rl
ZENvbnRlbnRSdWxlTGlzdDpiYXNpY0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVu
dFJ1bGVMaXN0ICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKQogICAgIHsKICAgICAgICAgCiAgICAg
ICAgIEVYUEVDVF9OT1RfTlVMTChmaWx0ZXIpOwpAQCAtMTU0LDM0ICsxNTQsMzQgQEAgVEVTVF9G
KFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgVmVycwogICAgIH1dOwogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CiAKLSAgICBbW1dLQ29udGVudEV4dGVu
c2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gX2ludmFsaWRhdGVDb250ZW50RXh0ZW5zaW9uVmVyc2lv
bkZvcklkZW50aWZpZXI6QCJUZXN0RXh0ZW5zaW9uIl07CisgICAgW1tXS0NvbnRlbnRSdWxlTGlz
dFN0b3JlIGRlZmF1bHRTdG9yZV0gX2ludmFsaWRhdGVDb250ZW50UnVsZUxpc3RWZXJzaW9uRm9y
SWRlbnRpZmllcjpAIlRlc3RSdWxlTGlzdCJdOwogICAgIAogICAgIF9fYmxvY2sgYm9vbCBkb25l
TG9va2luZ1VwID0gZmFsc2U7Ci0gICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0
U3RvcmVdIGxvb2tVcENvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lv
biIgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJv
ciAqZXJyb3IpCisgICAgW1tXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIGRlZmF1bHRTdG9yZV0gbG9v
a1VwQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjpAIlRlc3RSdWxlTGlzdCIgY29tcGxldGlv
bkhhbmRsZXI6XihXS0NvbnRlbnRSdWxlTGlzdCAqZmlsdGVyLCBOU0Vycm9yICplcnJvcikKICAg
ICB7CiAgICAgICAgIAogICAgICAgICBFWFBFQ1RfTlVMTChmaWx0ZXIpOwogICAgICAgICBFWFBF
Q1RfTk9UX05VTEwoZXJyb3IpOwogICAgICAgICBjaGVja0RvbWFpbihlcnJvcik7Ci0gICAgICAg
IEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3JlVmVyc2lv
bk1pc21hdGNoKTsKLSAgICAgICAgRVhQRUNUX1NUUkVRKCJFeHRlbnNpb24gbG9va3VwIGZhaWxl
ZDogVmVyc2lvbiBvZiBmaWxlIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gb2YgaW50ZXJwcmV0ZXIu
IiwgW1tlcnJvciBoZWxwQW5jaG9yXSBVVEY4U3RyaW5nXSk7CisgICAgICAgIEVYUEVDVF9FUShl
cnJvci5jb2RlLCBXS0Vycm9yQ29udGVudFJ1bGVMaXN0U3RvcmVWZXJzaW9uTWlzbWF0Y2gpOwor
ICAgICAgICBFWFBFQ1RfU1RSRVEoIlJ1bGUgbGlzdCBsb29rdXAgZmFpbGVkOiBWZXJzaW9uIG9m
IGZpbGUgZG9lcyBub3QgbWF0Y2ggdmVyc2lvbiBvZiBpbnRlcnByZXRlci4iLCBbW2Vycm9yIGhl
bHBBbmNob3JdIFVURjhTdHJpbmddKTsKICAgICAgICAgCiAgICAgICAgIGRvbmVMb29raW5nVXAg
PSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUxvb2tp
bmdVcCk7CiAKICAgICBfX2Jsb2NrIGJvb2wgZG9uZUdldHRpbmdTb3VyY2UgPSBmYWxzZTsKLSAg
ICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gX2dldENvbnRlbnRFeHRl
bnNpb25Tb3VyY2VGb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lvbiIgY29tcGxldGlvbkhhbmRs
ZXI6XihOU1N0cmluZyogc291cmNlKSB7CisgICAgW1tXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIGRl
ZmF1bHRTdG9yZV0gX2dldENvbnRlbnRSdWxlTGlzdFNvdXJjZUZvcklkZW50aWZpZXI6QCJUZXN0
UnVsZUxpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNTdHJpbmcqIHNvdXJjZSkgewogICAgICAg
ICBFWFBFQ1RfTlVMTChzb3VyY2UpOwogICAgICAgICBkb25lR2V0dGluZ1NvdXJjZSA9IHRydWU7
CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lR2V0dGluZ1NvdXJj
ZSk7CiB9CiAKLVRFU1RfRihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIFJlbW92YWwpCitU
RVNUX0YoV0tDb250ZW50UnVsZUxpc3RTdG9yZVRlc3QsIFJlbW92YWwpCiB7CiAgICAgX19ibG9j
ayBib29sIGRvbmVDb21waWxpbmcgPSBmYWxzZTsKLSAgICBbW1dLQ29udGVudEV4dGVuc2lvblN0
b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAi
VGVzdEV4dGVuc2lvbiIgZW5jb2RlZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxl
dGlvbkhhbmRsZXI6XihXS0NvbnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3Ip
IHsKKyAgICBbW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgZGVmYXVsdFN0b3JlXSBjb21waWxlQ29u
dGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjpAIlRlc3RSdWxlTGlzdCIgZW5jb2RlZENvbnRlbnRS
dWxlTGlzdDpiYXNpY0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0
ICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgCiAgICAgICAgIEVYUEVDVF9OT1RfTlVM
TChmaWx0ZXIpOwogICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CkBAIC0xOTEsNyArMTkxLDcg
QEAgVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgUmVtbwogICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7CiAKICAgICBfX2Jsb2NrIGJvb2wgZG9u
ZVJlbW92aW5nID0gZmFsc2U7Ci0gICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0
U3RvcmVdIHJlbW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiVGVzdEV4dGVuc2lv
biIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgeworICAgIFtbV0tDb250ZW50
UnVsZUxpc3RTdG9yZSBkZWZhdWx0U3RvcmVdIHJlbW92ZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50
aWZpZXI6QCJUZXN0UnVsZUxpc3QiIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNFcnJvciAqZXJyb3Ip
IHsKICAgICAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogCiAgICAgICAgIGRvbmVSZW1vdmluZyA9
IHRydWU7CkBAIC0xOTksMjkgKzE5OSwyOSBAQCBURVNUX0YoV0tDb250ZW50RXh0ZW5zaW9uU3Rv
cmVUZXN0LCBSZW1vCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lUmVtb3Zpbmcp
OwogfQogCi1URVNUX0YoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBOb25FeGlzdGluZ0lk
ZW50aWZpZXJSZW1vdmUpCitURVNUX0YoV0tDb250ZW50UnVsZUxpc3RTdG9yZVRlc3QsIE5vbkV4
aXN0aW5nSWRlbnRpZmllclJlbW92ZSkKIHsKICAgICBfX2Jsb2NrIGJvb2wgZG9uZVJlbW92aW5n
ID0gZmFsc2U7Ci0gICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIHJl
bW92ZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRG9lc05vdEV4aXN0IiBjb21wbGV0
aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CisgICAgW1tXS0NvbnRlbnRSdWxlTGlzdFN0
b3JlIGRlZmF1bHRTdG9yZV0gcmVtb3ZlQ29udGVudFJ1bGVMaXN0Rm9ySWRlbnRpZmllcjpAIkRv
ZXNOb3RFeGlzdCIgY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgewogICAgICAg
ICBFWFBFQ1RfTk9UX05VTEwoZXJyb3IpOwogICAgICAgICBjaGVja0RvbWFpbihlcnJvcik7Ci0g
ICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9yQ29udGVudEV4dGVuc2lvblN0b3Jl
UmVtb3ZlRmFpbGVkKTsKLSAgICAgICAgRVhQRUNUX1NUUkVRKCJFeHRlbnNpb24gcmVtb3ZhbCBm
YWlsZWQ6IFVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyByZW1vdmUuIiwgW1tlcnJvciBoZWxwQW5j
aG9yXSBVVEY4U3RyaW5nXSk7CisgICAgICAgIEVYUEVDVF9FUShlcnJvci5jb2RlLCBXS0Vycm9y
Q29udGVudFJ1bGVMaXN0U3RvcmVSZW1vdmVGYWlsZWQpOworICAgICAgICBFWFBFQ1RfU1RSRVEo
IlJ1bGUgbGlzdCByZW1vdmFsIGZhaWxlZDogVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIHJlbW92
ZS4iLCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKIAogICAgICAgICBkb25lUmVt
b3ZpbmcgPSB0cnVlOwogICAgIH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZVJlbW92aW5nKTsKIH0KIAotVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwgTm9u
RGVmYXVsdFN0b3JlKQorVEVTVF9GKFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0LCBOb25EZWZh
dWx0U3RvcmUpCiB7Ci0gICAgTlNVUkwgKnRlbXBEaXIgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRo
OltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpA
IkNvbnRlbnRFeHRlbnNpb25UZXN0Il0gaXNEaXJlY3Rvcnk6WUVTXTsKLSAgICBXS0NvbnRlbnRF
eHRlbnNpb25TdG9yZSAqc3RvcmUgPSBbV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgc3RvcmVXaXRo
VVJMOnRlbXBEaXJdOwotICAgIE5TU3RyaW5nICppZGVudGlmaWVyID0gQCJUZXN0RXh0ZW5zaW9u
IjsKLSAgICBOU1N0cmluZyAqZmlsZU5hbWUgPSBAIkNvbnRlbnRFeHRlbnNpb24tVGVzdEV4dGVu
c2lvbiI7CisgICAgTlNVUkwgKnRlbXBEaXIgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1Rl
bXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNvbnRl
bnRSdWxlTGlzdFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOworICAgIFdLQ29udGVudFJ1bGVMaXN0
U3RvcmUgKnN0b3JlID0gW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUgc3RvcmVXaXRoVVJMOnRlbXBE
aXJdOworICAgIE5TU3RyaW5nICppZGVudGlmaWVyID0gQCJUZXN0UnVsZUxpc3QiOworICAgIE5T
U3RyaW5nICpmaWxlTmFtZSA9IEAiQ29udGVudFJ1bGVMaXN0LVRlc3RSdWxlTGlzdCI7CiAKICAg
ICBfX2Jsb2NrIGJvb2wgZG9uZUdldHRpbmdBdmFpbGFibGVJZGVudGlmaWVycyA9IGZhbHNlOwot
ICAgIFtzdG9yZSBnZXRBdmFpbGFibGVDb250ZW50RXh0ZW5zaW9uSWRlbnRpZmllcnM6XihOU0Fy
cmF5PE5TU3RyaW5nICo+ICppZGVudGlmaWVycykgeworICAgIFtzdG9yZSBnZXRBdmFpbGFibGVD
b250ZW50UnVsZUxpc3RJZGVudGlmaWVyczpeKE5TQXJyYXk8TlNTdHJpbmcgKj4gKmlkZW50aWZp
ZXJzKSB7CiAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChpZGVudGlmaWVycyk7CiAgICAgICAgIEVY
UEVDVF9FUShpZGVudGlmaWVycy5jb3VudCwgMHUpOwogICAgICAgICBkb25lR2V0dGluZ0F2YWls
YWJsZUlkZW50aWZpZXJzID0gdHJ1ZTsKQEAgLTIyOSw3ICsyMjksNyBAQCBURVNUX0YoV0tDb250
ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBOb25ECiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lR2V0dGluZ0F2YWlsYWJsZUlkZW50aWZpZXJzKTsKICAgICAKICAgICBfX2Jsb2NrIGJv
b2wgZG9uZUNvbXBpbGluZyA9IGZhbHNlOwotICAgIFtzdG9yZSBjb21waWxlQ29udGVudEV4dGVu
c2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29udGVudEV4dGVuc2lvbjpiYXNp
Y0ZpbHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudEV4dGVuc2lvbiAqZmlsdGVyLCBO
U0Vycm9yICplcnJvcikgeworICAgIFtzdG9yZSBjb21waWxlQ29udGVudFJ1bGVMaXN0Rm9ySWRl
bnRpZmllcjppZGVudGlmaWVyIGVuY29kZWRDb250ZW50UnVsZUxpc3Q6YmFzaWNGaWx0ZXIgY29t
cGxldGlvbkhhbmRsZXI6XihXS0NvbnRlbnRSdWxlTGlzdCAqZmlsdGVyLCBOU0Vycm9yICplcnJv
cikgewogICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKICAgICAgICAgRVhQRUNUX05V
TEwoZXJyb3IpOwogICAgICAgICBkb25lQ29tcGlsaW5nID0gdHJ1ZTsKQEAgLTIzNywxMCArMjM3
LDEwIEBAIFRFU1RfRihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIE5vbkQKICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVDb21waWxpbmcpOwogCiAgICAgZG9uZUdldHRpbmdB
dmFpbGFibGVJZGVudGlmaWVycyA9IGZhbHNlOwotICAgIFtzdG9yZSBnZXRBdmFpbGFibGVDb250
ZW50RXh0ZW5zaW9uSWRlbnRpZmllcnM6XihOU0FycmF5PE5TU3RyaW5nICo+ICppZGVudGlmaWVy
cykgeworICAgIFtzdG9yZSBnZXRBdmFpbGFibGVDb250ZW50UnVsZUxpc3RJZGVudGlmaWVyczpe
KE5TQXJyYXk8TlNTdHJpbmcgKj4gKmlkZW50aWZpZXJzKSB7CiAgICAgICAgIEVYUEVDVF9OT1Rf
TlVMTChpZGVudGlmaWVycyk7CiAgICAgICAgIEVYUEVDVF9FUShpZGVudGlmaWVycy5jb3VudCwg
MXUpOwotICAgICAgICBFWFBFQ1RfU1RSRVEoaWRlbnRpZmllcnNbMF0uVVRGOFN0cmluZywgIlRl
c3RFeHRlbnNpb24iKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKGlkZW50aWZpZXJzWzBdLlVURjhT
dHJpbmcsICJUZXN0UnVsZUxpc3QiKTsKICAgICAgICAgZG9uZUdldHRpbmdBdmFpbGFibGVJZGVu
dGlmaWVycyA9IHRydWU7CiAgICAgfV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lR2V0dGluZ0F2YWlsYWJsZUlkZW50aWZpZXJzKTsKQEAgLTI1MCw3ICsyNTAsNyBAQCBURVNU
X0YoV0tDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LCBOb25ECiAgICAgRVhQRUNUX0VRKGRhdGEu
bGVuZ3RoLCAyMjh1KTsKICAgICAKICAgICBfX2Jsb2NrIGJvb2wgZG9uZUNoZWNraW5nU291cmNl
ID0gZmFsc2U7Ci0gICAgW3N0b3JlIF9nZXRDb250ZW50RXh0ZW5zaW9uU291cmNlRm9ySWRlbnRp
ZmllcjppZGVudGlmaWVyIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNTdHJpbmcgKnNvdXJjZSkgewor
ICAgIFtzdG9yZSBfZ2V0Q29udGVudFJ1bGVMaXN0U291cmNlRm9ySWRlbnRpZmllcjppZGVudGlm
aWVyIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNTdHJpbmcgKnNvdXJjZSkgewogICAgICAgICBFWFBF
Q1RfTk9UX05VTEwoc291cmNlKTsKICAgICAgICAgRVhQRUNUX1NUUkVRKGJhc2ljRmlsdGVyLlVU
RjhTdHJpbmcsIHNvdXJjZS5VVEY4U3RyaW5nKTsKICAgICAgICAgZG9uZUNoZWNraW5nU291cmNl
ID0gdHJ1ZTsKQEAgLTI1OCw3ICsyNTgsNyBAQCBURVNUX0YoV0tDb250ZW50RXh0ZW5zaW9uU3Rv
cmVUZXN0LCBOb25ECiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lQ2hlY2tpbmdT
b3VyY2UpOwogICAgIAogICAgIF9fYmxvY2sgYm9vbCBkb25lUmVtb3ZpbmcgPSBmYWxzZTsKLSAg
ICBbc3RvcmUgcmVtb3ZlQ29udGVudEV4dGVuc2lvbkZvcklkZW50aWZpZXI6aWRlbnRpZmllciBj
b21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CisgICAgW3N0b3JlIHJlbW92ZUNv
bnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6aWRlbnRpZmllciBjb21wbGV0aW9uSGFuZGxlcjpe
KE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKICAgICAgICAg
ZG9uZVJlbW92aW5nID0gdHJ1ZTsKICAgICB9XTsKQEAgLTI2OCwyMCArMjY4LDIwIEBAIFRFU1Rf
RihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIE5vbkQKICAgICBFWFBFQ1RfTlVMTChkYXRh
QWZ0ZXJSZW1vdmluZyk7CiB9CiAKLVRFU1RfRihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3Qs
IE11bHRpcGxlRXh0ZW5zaW9ucykKK1RFU1RfRihXS0NvbnRlbnRSdWxlTGlzdFN0b3JlVGVzdCwg
TXVsdGlwbGVSdWxlTGlzdHMpCiB7CiAgICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKLSAg
ICBbW1dLQ29udGVudEV4dGVuc2lvblN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRF
eHRlbnNpb25Gb3JJZGVudGlmaWVyOkAiRmlyc3RFeHRlbnNpb24iIGVuY29kZWRDb250ZW50RXh0
ZW5zaW9uOmJhc2ljRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0ZW5zaW9u
ICpmaWx0ZXIsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgW1tXS0NvbnRlbnRSdWxlTGlzdFN0b3Jl
IGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6QCJGaXJz
dFJ1bGVMaXN0IiBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OmJhc2ljRmlsdGVyIGNvbXBsZXRpb25I
YW5kbGVyOl4oV0tDb250ZW50UnVsZUxpc3QgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKICAg
ICAgICAgRVhQRUNUX05PVF9OVUxMKGZpbHRlcik7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9y
KTsKLSAgICAgICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBp
bGVDb250ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlNlY29uZEV4dGVuc2lvbiIgZW5jb2Rl
ZENvbnRlbnRFeHRlbnNpb246YmFzaWNGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihXS0NvbnRl
bnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgW1tXS0NvbnRl
bnRSdWxlTGlzdFN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklk
ZW50aWZpZXI6QCJTZWNvbmRSdWxlTGlzdCIgZW5jb2RlZENvbnRlbnRSdWxlTGlzdDpiYXNpY0Zp
bHRlciBjb21wbGV0aW9uSGFuZGxlcjpeKFdLQ29udGVudFJ1bGVMaXN0ICpmaWx0ZXIsIE5TRXJy
b3IgKmVycm9yKSB7CiAgICAgICAgICAgICBFWFBFQ1RfTk9UX05VTEwoZmlsdGVyKTsKICAgICAg
ICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKLSAgICAgICAgICAgIFtbV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBnZXRBdmFpbGFibGVDb250ZW50RXh0ZW5zaW9uSWRlbnRp
ZmllcnM6XihOU0FycmF5PE5TU3RyaW5nICo+ICppZGVudGlmaWVycykgeworICAgICAgICAgICAg
W1tXS0NvbnRlbnRSdWxlTGlzdFN0b3JlIGRlZmF1bHRTdG9yZV0gZ2V0QXZhaWxhYmxlQ29udGVu
dFJ1bGVMaXN0SWRlbnRpZmllcnM6XihOU0FycmF5PE5TU3RyaW5nICo+ICppZGVudGlmaWVycykg
ewogICAgICAgICAgICAgICAgIEVYUEVDVF9OT1RfTlVMTChpZGVudGlmaWVycyk7CiAgICAgICAg
ICAgICAgICAgRVhQRUNUX0VRKGlkZW50aWZpZXJzLmNvdW50LCAydSk7Ci0gICAgICAgICAgICAg
ICAgRVhQRUNUX1NUUkVRKGlkZW50aWZpZXJzWzBdLlVURjhTdHJpbmcsICJGaXJzdEV4dGVuc2lv
biIpOwotICAgICAgICAgICAgICAgIEVYUEVDVF9TVFJFUShpZGVudGlmaWVyc1sxXS5VVEY4U3Ry
aW5nLCAiU2Vjb25kRXh0ZW5zaW9uIik7CisgICAgICAgICAgICAgICAgRVhQRUNUX1NUUkVRKGlk
ZW50aWZpZXJzWzBdLlVURjhTdHJpbmcsICJGaXJzdFJ1bGVMaXN0Iik7CisgICAgICAgICAgICAg
ICAgRVhQRUNUX1NUUkVRKGlkZW50aWZpZXJzWzFdLlVURjhTdHJpbmcsICJTZWNvbmRSdWxlTGlz
dCIpOwogICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAgICAgfV07CiAgICAg
ICAgIH1dOwpAQCAtMjg5LDI0ICsyODksMjQgQEAgVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0
b3JlVGVzdCwgTXVsdAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CiB9CiAK
LVRFU1RfRihXS0NvbnRlbnRFeHRlbnNpb25TdG9yZVRlc3QsIE5vbkFTQ0lJU291cmNlKQorVEVT
VF9GKFdLQ29udGVudFJ1bGVMaXN0U3RvcmVUZXN0LCBOb25BU0NJSVNvdXJjZSkKIHsKICAgICBz
dGF0aWMgTlNTdHJpbmcgKm5vbkFTQ0lJRmlsdGVyID0gQCJbe1wiYWN0aW9uXCI6e1widHlwZVwi
OlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLip3ZWJraXQub3JnXCJ9
LCBcInVudXNlZFwiOlwiw7DFuOKAmcKpXCJ9XSI7Ci0gICAgTlNVUkwgKnRlbXBEaXIgPSBbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5k
aW5nUGF0aENvbXBvbmVudDpAIkNvbnRlbnRFeHRlbnNpb25UZXN0Il0gaXNEaXJlY3Rvcnk6WUVT
XTsKLSAgICBXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSAqc3RvcmUgPSBbV0tDb250ZW50RXh0ZW5z
aW9uU3RvcmUgc3RvcmVXaXRoVVJMOnRlbXBEaXJdOwotICAgIE5TU3RyaW5nICppZGVudGlmaWVy
ID0gQCJUZXN0RXh0ZW5zaW9uIjsKLSAgICBOU1N0cmluZyAqZmlsZU5hbWUgPSBAIkNvbnRlbnRF
eHRlbnNpb24tVGVzdEV4dGVuc2lvbiI7CisgICAgTlNVUkwgKnRlbXBEaXIgPSBbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDpAIkNvbnRlbnRSdWxlTGlzdFRlc3QiXSBpc0RpcmVjdG9yeTpZRVNdOworICAg
IFdLQ29udGVudFJ1bGVMaXN0U3RvcmUgKnN0b3JlID0gW1dLQ29udGVudFJ1bGVMaXN0U3RvcmUg
c3RvcmVXaXRoVVJMOnRlbXBEaXJdOworICAgIE5TU3RyaW5nICppZGVudGlmaWVyID0gQCJUZXN0
UnVsZUxpc3QiOworICAgIE5TU3RyaW5nICpmaWxlTmFtZSA9IEAiQ29udGVudFJ1bGVMaXN0LVRl
c3RSdWxlTGlzdCI7CiAgICAgCiAgICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKLSAgICBb
c3RvcmUgY29tcGlsZUNvbnRlbnRFeHRlbnNpb25Gb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgZW5j
b2RlZENvbnRlbnRFeHRlbnNpb246bm9uQVNDSUlGaWx0ZXIgY29tcGxldGlvbkhhbmRsZXI6XihX
S0NvbnRlbnRFeHRlbnNpb24gKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBbc3RvcmUg
Y29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50aWZpZXI6aWRlbnRpZmllciBlbmNvZGVkQ29u
dGVudFJ1bGVMaXN0Om5vbkFTQ0lJRmlsdGVyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50
UnVsZUxpc3QgKmZpbHRlciwgTlNFcnJvciAqZXJyb3IpIHsKICAgICAgICAgRVhQRUNUX05PVF9O
VUxMKGZpbHRlcik7CiAgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKIAotICAgICAgICBbc3Rv
cmUgX2dldENvbnRlbnRFeHRlbnNpb25Tb3VyY2VGb3JJZGVudGlmaWVyOmlkZW50aWZpZXIgY29t
cGxldGlvbkhhbmRsZXI6XihOU1N0cmluZyAqc291cmNlKSB7CisgICAgICAgIFtzdG9yZSBfZ2V0
Q29udGVudFJ1bGVMaXN0U291cmNlRm9ySWRlbnRpZmllcjppZGVudGlmaWVyIGNvbXBsZXRpb25I
YW5kbGVyOl4oTlNTdHJpbmcgKnNvdXJjZSkgewogICAgICAgICAgICAgRVhQRUNUX05PVF9OVUxM
KHNvdXJjZSk7CiAgICAgICAgICAgICBFWFBFQ1RfU1RSRVEobm9uQVNDSUlGaWx0ZXIuVVRGOFN0
cmluZywgc291cmNlLlVURjhTdHJpbmcpOwogCi0gICAgICAgICAgICBbc3RvcmUgX3JlbW92ZUFs
bENvbnRlbnRFeHRlbnNpb25zXTsKKyAgICAgICAgICAgIFtzdG9yZSBfcmVtb3ZlQWxsQ29udGVu
dFJ1bGVMaXN0c107CiAgICAgICAgICAgICBOU0RhdGEgKmRhdGFBZnRlclJlbW92aW5nID0gW05T
RGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6W3RlbXBEaXIgVVJMQnlBcHBlbmRpbmdQYXRoQ29t
cG9uZW50OmZpbGVOYW1lXV07CiAgICAgICAgICAgICBFWFBFQ1RfTlVMTChkYXRhQWZ0ZXJSZW1v
dmluZyk7CiAKQEAgLTMxOSwxMCArMzE5LDEwIEBAIFRFU1RfRihXS0NvbnRlbnRFeHRlbnNpb25T
dG9yZVRlc3QsIE5vbkEKIHN0YXRpYyBzaXplX3QgYWxlcnRDb3VudCB7IDAgfTsKIHN0YXRpYyBi
b29sIHJlY2VpdmVkQWxlcnQgeyBmYWxzZSB9OwogCi1AaW50ZXJmYWNlIENvbnRlbnRFeHRlbnNp
b25EZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS1VJRGVsZWdhdGU+CitAaW50ZXJmYWNlIENvbnRlbnRS
dWxlTGlzdERlbGVnYXRlIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0ZT4KIEBlbmQKIAotQGltcGxl
bWVudGF0aW9uIENvbnRlbnRFeHRlbnNpb25EZWxlZ2F0ZQorQGltcGxlbWVudGF0aW9uIENvbnRl
bnRSdWxlTGlzdERlbGVnYXRlCiAKIC0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmll
dyBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2Ug
aW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIKIHsKQEAgLTMzMiw3ICszMzIsNyBAQCAt
ICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuCiAgICAgICAgIEVYUEVDVF9T
VFJFUSgiY29udGVudCBibG9ja2VycyBlbmFibGVkIiwgbWVzc2FnZS5VVEY4U3RyaW5nKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICAvLyBBZnRlciBoYXZpbmcgcmVtb3Zl
ZCB0aGUgY29udGVudCBleHRlbnNpb24uCisgICAgICAgIC8vIEFmdGVyIGhhdmluZyByZW1vdmVk
IHRoZSBjb250ZW50IFJ1bGVMaXN0LgogICAgICAgICBFWFBFQ1RfU1RSRVEoImNvbnRlbnQgYmxv
Y2tlcnMgZGlzYWJsZWQiLCBtZXNzYWdlLlVURjhTdHJpbmcpOwogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgpAQCAtMzQ0LDI3ICszNDQsMjcgQEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZp
ZXcgKil3ZWJWaWV3IHJ1bgogCiBAZW5kCiAKLVRFU1RfRihXS0NvbnRlbnRFeHRlbnNpb25TdG9y
ZVRlc3QsIEFkZFJlbW92ZSkKK1RFU1RfRihXS0NvbnRlbnRSdWxlTGlzdFN0b3JlVGVzdCwgQWRk
UmVtb3ZlKQogewotICAgIFtbV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUgZGVmYXVsdFN0b3JlXSBf
cmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnNdOworICAgIFtbV0tDb250ZW50UnVsZUxpc3RTdG9y
ZSBkZWZhdWx0U3RvcmVdIF9yZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzXTsKIAogICAgIF9fYmxv
Y2sgYm9vbCBkb25lQ29tcGlsaW5nID0gZmFsc2U7CiAgICAgTlNTdHJpbmcqIGNvbnRlbnRCbG9j
a2VyID0gQCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiY3NzLWRpc3BsYXktbm9uZVwiLFwic2Vs
ZWN0b3JcIjpcIi5oaWRkZW5cIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLipcIn19
XSI7Ci0gICAgX19ibG9jayBSZXRhaW5QdHI8V0tDb250ZW50RXh0ZW5zaW9uPiBleHRlbnNpb247
Ci0gICAgW1tXS0NvbnRlbnRFeHRlbnNpb25TdG9yZSBkZWZhdWx0U3RvcmVdIGNvbXBpbGVDb250
ZW50RXh0ZW5zaW9uRm9ySWRlbnRpZmllcjpAIlRlc3RBZGRSZW1vdmUiIGVuY29kZWRDb250ZW50
RXh0ZW5zaW9uOmNvbnRlbnRCbG9ja2VyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50RXh0
ZW5zaW9uICpjb21waWxlZEV4dGVuc2lvbiwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICBfX2Jsb2Nr
IFJldGFpblB0cjxXS0NvbnRlbnRSdWxlTGlzdD4gcnVsZUxpc3Q7CisgICAgW1tXS0NvbnRlbnRS
dWxlTGlzdFN0b3JlIGRlZmF1bHRTdG9yZV0gY29tcGlsZUNvbnRlbnRSdWxlTGlzdEZvcklkZW50
aWZpZXI6QCJUZXN0QWRkUmVtb3ZlIiBlbmNvZGVkQ29udGVudFJ1bGVMaXN0OmNvbnRlbnRCbG9j
a2VyIGNvbXBsZXRpb25IYW5kbGVyOl4oV0tDb250ZW50UnVsZUxpc3QgKmNvbXBpbGVkUnVsZUxp
c3QsIE5TRXJyb3IgKmVycm9yKSB7CiAgICAgICAgIEVYUEVDVF9UUlVFKGVycm9yID09IG5pbCk7
Ci0gICAgICAgIGV4dGVuc2lvbiA9IGNvbXBpbGVkRXh0ZW5zaW9uOworICAgICAgICBydWxlTGlz
dCA9IGNvbXBpbGVkUnVsZUxpc3Q7CiAgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOwogICAg
IH1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUNvbXBpbGluZyk7Ci0gICAg
RVhQRUNUX05PVF9OVUxMKGV4dGVuc2lvbik7CisgICAgRVhQRUNUX05PVF9OVUxMKHJ1bGVMaXN0
KTsKIAogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSk7Ci0gICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29u
dHJvbGxlcl0gYWRkQ29udGVudEV4dGVuc2lvbjpleHRlbnNpb24uZ2V0KCldOworICAgIFtbY29u
ZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZENvbnRlbnRSdWxlTGlzdDpydWxl
TGlzdC5nZXQoKV07CiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMo
W1tDb250ZW50RXh0ZW5zaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIGRlbGVn
YXRlID0gYWRvcHROUyhbW0NvbnRlbnRSdWxlTGlzdERlbGVnYXRlIGFsbG9jXSBpbml0XSk7CiAg
ICAgW3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CiAKICAgICBOU1VSTFJl
cXVlc3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJjb250ZW50QmxvY2tlckNoZWNrIiB3aXRoRXh0
ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07
CkBAIC0zNzMsNyArMzczLDcgQEAgVEVTVF9GKFdLQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwg
QWRkUgogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRBbGVydCk7CiAKLSAgICBbW2NvbmZpZ3VyYXRpb24gdXNl
ckNvbnRlbnRDb250cm9sbGVyXSByZW1vdmVDb250ZW50RXh0ZW5zaW9uOmV4dGVuc2lvbi5nZXQo
KV07CisgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gcmVtb3ZlQ29u
dGVudFJ1bGVMaXN0OnJ1bGVMaXN0LmdldCgpXTsKIAogICAgIHJlY2VpdmVkQWxlcnQgPSBmYWxz
ZTsKICAgICBbd2ViVmlldyByZWxvYWRdOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9fV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlLm1tCShyZXZpc2lvbiAyMTY1MzkpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIFRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlVGVzdCwKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKICAgICAgICAg
Y2hlY2tEb21haW4oZXJyb3IpOwogICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgX1dLVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yQ29tcGlsZUZhaWxlZCk7Ci0gICAgICAgIEVYUEVD
VF9TVFJFUSgiRXh0ZW5zaW9uIGNvbXBpbGF0aW9uIGZhaWxlZDogRmFpbGVkIHRvIHBhcnNlIHRo
ZSBKU09OIFN0cmluZy4iLCBbW2Vycm9yIGhlbHBBbmNob3JdIFVURjhTdHJpbmddKTsKKyAgICAg
ICAgRVhQRUNUX1NUUkVRKCJSdWxlIGxpc3QgY29tcGlsYXRpb24gZmFpbGVkOiBGYWlsZWQgdG8g
cGFyc2UgdGhlIEpTT04gU3RyaW5nLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10p
OwogCiAgICAgICAgIGRvbmVDb21waWxpbmcgPSB0cnVlOwogICAgIH1dOwpAQCAtMTExLDcgKzEx
MSw3IEBAIFRFU1RfRihfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlVGVzdCwKICAgICAgICAg
RVhQRUNUX05PVF9OVUxMKGVycm9yKTsKICAgICAgICAgY2hlY2tEb21haW4oZXJyb3IpOwogICAg
ICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwgX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVy
cm9yTG9va3VwRmFpbGVkKTsKLSAgICAgICAgRVhQRUNUX1NUUkVRKCJFeHRlbnNpb24gbG9va3Vw
IGZhaWxlZDogVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIGxvb2t1cC4iLCBbW2Vycm9yIGhlbHBB
bmNob3JdIFVURjhTdHJpbmddKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJSdWxlIGxpc3QgbG9v
a3VwIGZhaWxlZDogVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIGxvb2t1cC4iLCBbW2Vycm9yIGhl
bHBBbmNob3JdIFVURjhTdHJpbmddKTsKICAgICAgICAgCiAgICAgICAgIGRvbmVMb29raW5nVXAg
PSB0cnVlOwogICAgIH1dOwpAQCAtMTQxLDcgKzE0MSw3IEBAIFRFU1RfRihfV0tVc2VyQ29udGVu
dEV4dGVuc2lvblN0b3JlVGVzdCwKICAgICAgICAgRVhQRUNUX05PVF9OVUxMKGVycm9yKTsKICAg
ICAgICAgY2hlY2tEb21haW4oZXJyb3IpOwogICAgICAgICBFWFBFQ1RfRVEoZXJyb3IuY29kZSwg
X1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZUVycm9yVmVyc2lvbk1pc21hdGNoKTsKLSAgICAg
ICAgRVhQRUNUX1NUUkVRKCJFeHRlbnNpb24gbG9va3VwIGZhaWxlZDogVmVyc2lvbiBvZiBmaWxl
IGRvZXMgbm90IG1hdGNoIHZlcnNpb24gb2YgaW50ZXJwcmV0ZXIuIiwgW1tlcnJvciBoZWxwQW5j
aG9yXSBVVEY4U3RyaW5nXSk7CisgICAgICAgIEVYUEVDVF9TVFJFUSgiUnVsZSBsaXN0IGxvb2t1
cCBmYWlsZWQ6IFZlcnNpb24gb2YgZmlsZSBkb2VzIG5vdCBtYXRjaCB2ZXJzaW9uIG9mIGludGVy
cHJldGVyLiIsIFtbZXJyb3IgaGVscEFuY2hvcl0gVVRGOFN0cmluZ10pOwogICAgICAgICAKICAg
ICAgICAgZG9uZUxvb2tpbmdVcCA9IHRydWU7CiAgICAgfV07CkBAIC0xNzYsNyArMTc2LDcgQEAg
VEVTVF9GKF9XS1VzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmVUZXN0LAogICAgICAgICBFWFBFQ1Rf
Tk9UX05VTEwoZXJyb3IpOwogICAgICAgICBjaGVja0RvbWFpbihlcnJvcik7CiAgICAgICAgIEVY
UEVDVF9FUShlcnJvci5jb2RlLCBfV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlRXJyb3JSZW1v
dmVGYWlsZWQpOwotICAgICAgICBFWFBFQ1RfU1RSRVEoIkV4dGVuc2lvbiByZW1vdmFsIGZhaWxl
ZDogVW5zcGVjaWZpZWQgZXJyb3IgZHVyaW5nIHJlbW92ZS4iLCBbW2Vycm9yIGhlbHBBbmNob3Jd
IFVURjhTdHJpbmddKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKCJSdWxlIGxpc3QgcmVtb3ZhbCBm
YWlsZWQ6IFVuc3BlY2lmaWVkIGVycm9yIGR1cmluZyByZW1vdmUuIiwgW1tlcnJvciBoZWxwQW5j
aG9yXSBVVEY4U3RyaW5nXSk7CiAKICAgICAgICAgZG9uZVJlbW92aW5nID0gdHJ1ZTsKICAgICB9
XTsK
</data>
<flag name="review"
          id="331123"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>