<?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>161749</bug_id>
          
          <creation_ts>2016-09-08 11:56:44 -0700</creation_ts>
          <short_desc>[CSS Parser] Add support for new CSS selector parsing</short_desc>
          <delta_ts>2016-09-22 13:37: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>CSS</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>
          
          <blocked>46591</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1227672</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-09-08 11:56:44 -0700</bug_when>
    <thetext>Add support for new CSS selector parsing to the new parser. This is imported from Blink but heavily modified to work with our existing selector structures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227699</commentid>
    <comment_count>1</comment_count>
      <attachid>288301</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-09-08 12:17:51 -0700</bug_when>
    <thetext>Created attachment 288301
Patch for bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227702</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-08 12:19:26 -0700</bug_when>
    <thetext>Attachment 288301 did not pass style-queue:


ERROR: Source/WebCore/css/parser/CSSParserValues.cpp:400:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSParserValues.cpp:512:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:62:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:68:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:85:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:92:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:114:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:116:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:143:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:154:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:157:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:159:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:218:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:218:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:229:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:274:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:276:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:293:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:466:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:499:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:513:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:524:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:734:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:766:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 25 in 34 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>1227708</commentid>
    <comment_count>3</comment_count>
      <attachid>288304</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-09-08 12:28:13 -0700</bug_when>
    <thetext>Created attachment 288304
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227710</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-08 12:29:46 -0700</bug_when>
    <thetext>Attachment 288304 did not pass style-queue:


ERROR: Source/WebCore/css/parser/CSSSelectorParser.cpp:155:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebCore/css/parser/CSSSelectorParser.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 35 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>1227711</commentid>
    <comment_count>5</comment_count>
      <attachid>288306</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-09-08 12:33:27 -0700</bug_when>
    <thetext>Created attachment 288306
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227734</commentid>
    <comment_count>6</comment_count>
      <attachid>288306</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-09-08 13:24:13 -0700</bug_when>
    <thetext>Comment on attachment 288306
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        [CSS Parser] Add support for new CSS selector parsing
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=161749
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        * CMakeLists.txt:

Maybe add some kind of summary? :)

&gt; Source/WebCore/css/SelectorChecker.cpp:465
&gt;      }
&gt;  
&gt; +
&gt;      ASSERT_NOT_REACHED();

Oops.

&gt; Source/WebCore/css/parser/CSSParserMode.h:57
&gt; +    return mode == HTMLQuirksMode; // || mode == HTMLAttributeMode;

Did you mean to leave this comment?

&gt; Source/WebCore/css/parser/CSSParserMode.h:84
&gt;  inline bool isStrictParserMode(CSSParserMode cssParserMode)
&gt;  {
&gt; -    return cssParserMode == CSSStrictMode || cssParserMode == SVGAttributeMode;
&gt; +    return cssParserMode == UASheetMode || cssParserMode == HTMLStandardMode || cssParserMode == SVGAttributeMode;
&gt;  }

Isn&apos;t this the same as you just added to CSSParser?

&gt; Source/WebCore/css/parser/CSSSelectorParser.cpp:102
&gt; +namespace {

Why do you do this?

&gt; Source/WebCore/css/parser/CSSSelectorParser.cpp:136
&gt; +        return nullptr;
&gt; +
&gt; +
&gt; +    unsigned previousCompoundFlags = 0;

Nit: Double blank lines.

&gt; Source/WebCore/css/parser/CSSSelectorParser.cpp:166
&gt; +namespace {

And this one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227801</commentid>
    <comment_count>7</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-09-08 14:11:15 -0700</bug_when>
    <thetext>Landed in r205660.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288301</attachid>
            <date>2016-09-08 12:17:51 -0700</date>
            <delta_ts>2016-09-08 12:28:13 -0700</delta_ts>
            <desc>Patch for bots</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>94627</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDU1NTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTM1OSw2ICsxMzU5LDcgQEAg
c2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmNwcAog
ICAgIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCiAgICAgY3NzL3BhcnNlci9DU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCisgICAgY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNl
ci5jcHAKICAgICBjc3MvcGFyc2VyL0NTU1Rva2VuaXplci5jcHAKICAgICBjc3MvcGFyc2VyL0NT
U1Rva2VuaXplcklucHV0U3RyZWFtLmNwcAogICAgIGNzcy9wYXJzZXIvTWVkaWFRdWVyeUJsb2Nr
V2F0Y2hlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM3NCw2
ICszMzc0LDggQEAKIAkJOTRERTVDN0UxRDc4Q0IyRTAwMTY0RjJBIC8qIENTU1BhcnNlcklkaW9t
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NERF
NUM3RDFENzhDQjI1MDAxNjRGMkEgLyogQ1NTUGFyc2VySWRpb21zLmNwcCAqLzsgfTsKIAkJOTRE
RTVDODExRDdGM0ExNDAwMTY0RjJBIC8qIENTU0F0UnVsZUlELmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0REU1QzdGMUQ3RjM5RDAwMDE2NEYyQSAv
KiBDU1NBdFJ1bGVJRC5jcHAgKi87IH07CiAJCTk0REU1QzgyMUQ3RjNBMTQwMDE2NEYyQSAvKiBD
U1NBdFJ1bGVJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTRERTVDODAxRDdGMzlEMDAwMTY0RjJBIC8qIENTU0F0UnVsZUlELmggKi87IH07CisJCTk0
REU1QzhEMUQ4MDgwMjcwMDE2NEYyQSAvKiBDU1NTZWxlY3RvclBhcnNlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NERFNUM4QjFEODA4MDE1MDAx
NjRGMkEgLyogQ1NTU2VsZWN0b3JQYXJzZXIuY3BwICovOyB9OworCQk5NERFNUM4RTFEODA4MDI3
MDAxNjRGMkEgLyogQ1NTU2VsZWN0b3JQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0REU1QzhDMUQ4MDgwMTUwMDE2NEYyQSAvKiBDU1NTZWxl
Y3RvclBhcnNlci5oICovOyB9OwogCQk5NkFCQTQyMzE0QkNCODBFMDBENTYyMDQgLyogR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTZBQkE0MjIxNEJDQjgwRTAwRDU2MjA0IC8qIEdyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQ29tbW9uLmNwcCAqLzsgfTsKIAkJOTcwM0UxQkYxNURDNEUzNzAwMUYyNEM4
IC8qIEpTVm9pZENhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3RTlFQzhCMTVEQzQ5MkYwMDRGMkU3MSAvKiBKU1ZvaWRDYWxsYmFjay5j
cHAgKi87IH07CiAJCTk3MDU5OTc3MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzA1OTk3
MzEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2FsbGJhY2suY3BwICovOyB9OwpAQCAtMTA1MjAs
NiArMTA1MjIsOCBAQAogCQk5NERFNUM3RDFENzhDQjI1MDAxNjRGMkEgLyogQ1NTUGFyc2VySWRp
b21zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTU1BhcnNlcklk
aW9tcy5jcHA7IHBhdGggPSBwYXJzZXIvQ1NTUGFyc2VySWRpb21zLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTRERTVDN0YxRDdGMzlEMDAwMTY0RjJBIC8qIENTU0F0UnVsZUlE
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTU0F0UnVsZUlELmNw
cDsgcGF0aCA9IHBhcnNlci9DU1NBdFJ1bGVJRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTk0REU1QzgwMUQ3RjM5RDAwMDE2NEYyQSAvKiBDU1NBdFJ1bGVJRC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDU1NBdFJ1bGVJRC5oOyBwYXRoID0gcGFyc2VyL0NT
U0F0UnVsZUlELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk0REU1QzhCMUQ4MDgw
MTUwMDE2NEYyQSAvKiBDU1NTZWxlY3RvclBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBDU1NTZWxlY3RvclBhcnNlci5jcHA7IHBhdGggPSBwYXJzZXIvQ1NT
U2VsZWN0b3JQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NERFNUM4
QzFEODA4MDE1MDAxNjRGMkEgLyogQ1NTU2VsZWN0b3JQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQ1NTU2VsZWN0b3JQYXJzZXIuaDsgcGF0aCA9IHBhcnNlci9DU1NT
ZWxlY3RvclBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NTBDNEMwMkJF
RDg5MzZGODE4RTJGOTkgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHR3JhcGhpY3NFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTk2QUJBNDIyMTRCQ0I4MEUwMEQ1NjIwNCAvKiBHcmFwaGljc0NvbnRl
eHQzRE9wZW5HTENvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk3MDU5OTczMTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2xpY3lDYWxsYmFjay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODE3NCw2ICsxODE3OCw4IEBACiAJCQkJ
OTQ2RDM3NDIxRDZDRjYzMjAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyLmggKi8sCiAJCQkJ
OTQ5Qzc3MDIxRDZFMzkzNTAwQzBERTRGIC8qIENTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAg
Ki8sCiAJCQkJOTQ5Qzc3MDMxRDZFMzkzNTAwQzBERTRGIC8qIENTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5oICovLAorCQkJCTk0REU1QzhCMUQ4MDgwMTUwMDE2NEYyQSAvKiBDU1NTZWxlY3RvclBh
cnNlci5jcHAgKi8sCisJCQkJOTRERTVDOEMxRDgwODAxNTAwMTY0RjJBIC8qIENTU1NlbGVjdG9y
UGFyc2VyLmggKi8sCiAJCQkJOTQ2RDM3MzQxRDZDREY5ODAwNzcwODRGIC8qIENTU1Rva2VuaXpl
ci5jcHAgKi8sCiAJCQkJOTQ2RDM3MzcxRDZDREY5ODAwNzcwODRGIC8qIENTU1Rva2VuaXplci5o
ICovLAogCQkJCTk0NkQzNzM1MUQ2Q0RGOTgwMDc3MDg0RiAvKiBDU1NUb2tlbml6ZXJJbnB1dFN0
cmVhbS5jcHAgKi8sCkBAIC0yNjYzNCw2ICsyNjY0MCw3IEBACiAJCQkJQjIyMjdBOTQwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR1BvbHlsaW5lRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIy
MjdBOTcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA4OEEwRTBBMTI2RUYxREIwMDk3OEY3QSAvKiBTVkdQcm9wZXJ0eS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJOTRERTVDOEUxRDgwODAyNzAwMTY0RjJBIC8qIENTU1NlbGVjdG9y
UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODFERDQ5QzEzQkExQTYwMDBEQzc2MjcgLyog
U1ZHUHJvcGVydHlJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODhBMEUwQjEyNkVGMURCMDA5
NzhGN0EgLyogU1ZHUHJvcGVydHlUZWFyT2ZmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODhBMEUw
QzEyNkVGMURCMDA5NzhGN0EgLyogU1ZHUHJvcGVydHlUcmFpdHMuaCBpbiBIZWFkZXJzICovLApA
QCAtMjg5MDksNiArMjg5MTYsNyBAQAogCQkJCUJDRTAxMzlBMEMwQkVGMTgwMDQzODYwQSAvKiBK
U1N0eWxlU2hlZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5OEEyN0QwQzBDOTk1MDAwNEJF
QkY3IC8qIEpTU3R5bGVTaGVldEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODRFQkQ4
NDBDQjhDOTc3MDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk5NERFNUM4RDFEODA4MDI3MDAxNjRGMkEgLyogQ1NTU2VsZWN0b3JQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTg0RUJENzgwQ0I4Qzg5MjAwMDc5NjA5IC8qIEpTU3R5bGVTaGVl
dExpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIwMTExMDcwQUI3NzQwNTAwREIw
RTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjREOTEyOTExM0NB
OTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
blBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBs
b2FkVHJpZ2dlcihFeGVjUwogCiBzdGF0aWMgYm9vbCBpc1ZhbGlkU2VsZWN0b3IoY29uc3QgU3Ry
aW5nJiBzZWxlY3RvcikKIHsKLSAgICBDU1NQYXJzZXJDb250ZXh0IGNvbnRleHQoQ1NTUXVpcmtz
TW9kZSk7CisgICAgQ1NTUGFyc2VyQ29udGV4dCBjb250ZXh0KEhUTUxRdWlya3NNb2RlKTsKICAg
ICBDU1NQYXJzZXIgcGFyc2VyKGNvbnRleHQpOwogICAgIENTU1NlbGVjdG9yTGlzdCBzZWxlY3Rv
ckxpc3Q7CiAgICAgcGFyc2VyLnBhcnNlU2VsZWN0b3Ioc2VsZWN0b3IsIHNlbGVjdG9yTGlzdCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcAko
cmV2aXNpb24gMjA1NDk5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0RlZmF1bHRTdHlsZVNo
ZWV0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgc3RhdGljIGNvbnN0IE1l
ZGlhUXVlcnlFdmFsdWF0b3ImIHByaW50RQogCiBzdGF0aWMgU3R5bGVTaGVldENvbnRlbnRzKiBw
YXJzZVVBU2hlZXQoY29uc3QgU3RyaW5nJiBzdHIpCiB7Ci0gICAgU3R5bGVTaGVldENvbnRlbnRz
JiBzaGVldCA9IFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKCkubGVha1JlZigpOyAvLyBsZWFr
IHRoZSBzaGVldCBvbiBwdXJwb3NlCisgICAgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCA9IFN0
eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKENTU1BhcnNlckNvbnRleHQoVUFTaGVldE1vZGUpKS5s
ZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9uIHB1cnBvc2UKICAgICBzaGVldC5wYXJzZVN0
cmluZyhzdHIpOwogICAgIHJldHVybiAmc2hlZXQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2VTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZVNldC5jcHAJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw3ICszMjgsNyBAQCBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjCiB7CiAgICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q1NTRm9udEZhY2U+PiByZXN1bHQ7CiAgICAgYXV0byBzdHls
ZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwotICAgIGF1dG8gcGFyc2VSZXN1
bHQgPSBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5Rm9udCwgZm9udCwg
dHJ1ZSwgQ1NTU3RyaWN0TW9kZSwgbnVsbHB0cik7CisgICAgYXV0byBwYXJzZVJlc3VsdCA9IENT
U1BhcnNlcjo6cGFyc2VWYWx1ZShzdHlsZSwgQ1NTUHJvcGVydHlGb250LCBmb250LCB0cnVlLCBI
VE1MU3RhbmRhcmRNb2RlLCBudWxscHRyKTsKICAgICBpZiAocGFyc2VSZXN1bHQgPT0gQ1NTUGFy
c2VyOjpQYXJzZVJlc3VsdDo6RXJyb3IpIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIu
eS5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCShy
ZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjU2LDcgKzEyNTYsNyBAQCBzcGVjaWZpZXI6CiAgICAgSURTRUwg
ewogICAgICAgICAkJCA9IG5ldyBDU1NQYXJzZXJTZWxlY3RvcjsKICAgICAgICAgJCQtPnNldE1h
dGNoKENTU1NlbGVjdG9yOjpJZCk7Ci0gICAgICAgIGlmIChwYXJzZXItPm1fY29udGV4dC5tb2Rl
ID09IENTU1F1aXJrc01vZGUpCisgICAgICAgIGlmIChwYXJzZXItPm1fY29udGV4dC5tb2RlID09
IEhUTUxRdWlya3NNb2RlKQogICAgICAgICAgICAgJDEuY29udmVydFRvQVNDSUlMb3dlcmNhc2VJ
blBsYWNlKCk7CiAgICAgICAgICQkLT5zZXRWYWx1ZSgkMSk7CiAgICAgfQpAQCAtMTI2Niw3ICsx
MjY2LDcgQEAgc3BlY2lmaWVyOgogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICQkID0gbmV3
IENTU1BhcnNlclNlbGVjdG9yOwogICAgICAgICAgICAgJCQtPnNldE1hdGNoKENTU1NlbGVjdG9y
OjpJZCk7Ci0gICAgICAgICAgICBpZiAocGFyc2VyLT5tX2NvbnRleHQubW9kZSA9PSBDU1NRdWly
a3NNb2RlKQorICAgICAgICAgICAgaWYgKHBhcnNlci0+bV9jb250ZXh0Lm1vZGUgPT0gSFRNTFF1
aXJrc01vZGUpCiAgICAgICAgICAgICAgICAgJDEuY29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBs
YWNlKCk7CiAgICAgICAgICAgICAkJC0+c2V0VmFsdWUoJDEpOwogICAgICAgICB9CkBAIC0xMjgw
LDcgKzEyODAsNyBAQCBjbGFzczoKICAgICAnLicgSURFTlQgewogICAgICAgICAkJCA9IG5ldyBD
U1NQYXJzZXJTZWxlY3RvcjsKICAgICAgICAgJCQtPnNldE1hdGNoKENTU1NlbGVjdG9yOjpDbGFz
cyk7Ci0gICAgICAgIGlmIChwYXJzZXItPm1fY29udGV4dC5tb2RlID09IENTU1F1aXJrc01vZGUp
CisgICAgICAgIGlmIChwYXJzZXItPm1fY29udGV4dC5tb2RlID09IEhUTUxRdWlya3NNb2RlKQog
ICAgICAgICAgICAgJDIuY29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7CiAgICAgICAg
ICQkLT5zZXRWYWx1ZSgkMik7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1Nl
bGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3Iu
Y3BwCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzUsNiArNzM1LDggQEAgU3RyaW5nIENTU1NlbGVjdG9y
OjpzZWxlY3RvclRleHQoY29uc3QgUwogICAgICAgICAgICAgcmV0dXJuIHRhZ0hpc3RvcnktPnNl
bGVjdG9yVGV4dCgiICIgKyBzdHIudG9TdHJpbmcoKSArIHJpZ2h0U2lkZSk7CiAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgogICAgICAgICAgICAgcmV0dXJuIHRhZ0hpc3RvcnktPnNl
bGVjdG9yVGV4dCgiID4gIiArIHN0ci50b1N0cmluZygpICsgcmlnaHRTaWRlKTsKKyAgICAgICAg
Y2FzZSBTaGFkb3dEZWVwOgorICAgICAgICAgICAgcmV0dXJuIHRhZ0hpc3RvcnktPnNlbGVjdG9y
VGV4dCgiIC9kZWVwLyAiICsgc3RyLnRvU3RyaW5nKCkgKyByaWdodFNpZGUpOwogICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpEaXJlY3RBZGphY2VudDoKICAgICAgICAgICAgIHJldHVybiB0YWdI
aXN0b3J5LT5zZWxlY3RvclRleHQoIiArICIgKyBzdHIudG9TdHJpbmcoKSArIHJpZ2h0U2lkZSk7
CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkluZGlyZWN0QWRqYWNlbnQ6CkBAIC03NDUsNiAr
NzQ3LDggQEAgU3RyaW5nIENTU1NlbGVjdG9yOjpzZWxlY3RvclRleHQoY29uc3QgUwogICAgICAg
ICAgICAgRkFMTFRIUk9VR0g7CiAjZW5kaWYKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hh
ZG93RGVzY2VuZGFudDoKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93UHNldWRvOgor
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dTbG90OgogICAgICAgICAgICAgcmV0dXJu
IHRhZ0hpc3RvcnktPnNlbGVjdG9yVGV4dChzdHIudG9TdHJpbmcoKSArIHJpZ2h0U2lkZSk7CiAg
ICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAkocmV2aXNpb24g
MjA1NDk5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDcgKzg3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIERp
cmVjdEFkamFjZW50LAogICAgICAgICAgICAgSW5kaXJlY3RBZGphY2VudCwKICAgICAgICAgICAg
IFN1YlNlbGVjdG9yLAotICAgICAgICAgICAgU2hhZG93RGVzY2VuZGFudCwKKyAgICAgICAgICAg
IFNoYWRvd0Rlc2NlbmRhbnQsIC8vIEZJWE1FLU5FV1BBUlNFUjogUmVtb3ZlIHRoaXMgaW4gZmF2
b3Igb2YgdGhlIG5ldyBzaGFkb3cgdmFsdWVzIGJlbG93LgorICAgICAgICAgICAgU2hhZG93UHNl
dWRvLCAvLyBTcGVjaWFsIGNhc2Ugb2Ygc2hhZG93IERPTSBwc2V1ZG8gZWxlbWVudHMgLyBzaGFk
b3cgcHNldWRvIGVsZW1lbnQKKyAgICAgICAgICAgIFNoYWRvd0RlZXAsIC8vIC9kZWVwLyBjb21i
aW5hdG9yCisgICAgICAgICAgICBTaGFkb3dTbG90IC8vIHNsb3R0ZWQgdG8gPHNsb3Q+IGUKICAg
ICAgICAgfTsKIAogICAgICAgICBlbnVtIFBzZXVkb0NsYXNzVHlwZSB7CkBAIC0yMTcsNiArMjIw
LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIFJpZ2h0Qm90dG9tTWFyZ2lu
Qm94LAogICAgICAgICB9OwogCisgICAgICAgIGVudW0gQXR0cmlidXRlTWF0Y2hUeXBlIHsKKyAg
ICAgICAgICAgIENhc2VTZW5zaXRpdmUsCisgICAgICAgICAgICBDYXNlSW5zZW5zaXRpdmUsCisg
ICAgICAgIH07CisKICAgICAgICAgc3RhdGljIFBzZXVkb0VsZW1lbnRUeXBlIHBhcnNlUHNldWRv
RWxlbWVudFR5cGUoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIHN0YXRpYyBQc2V1ZG9JZCBwc2V1
ZG9JZChQc2V1ZG9FbGVtZW50VHlwZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01D
U1NOYW1lc3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01DU1NO
YW1lc3BhY2UuY3BwCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRE9N
Q1NTTmFtZXNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIGJvb2wg
RE9NQ1NTTmFtZXNwYWNlOjpzdXBwb3J0cyhjb25zdCBTdHIKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgYXV0byBkdW1teVN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRl
KCk7Ci0gICAgcmV0dXJuIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShkdW1teVN0eWxlLCBwcm9wZXJ0
eUlELCBub3JtYWxpemVkVmFsdWUsIGZhbHNlLCBDU1NTdHJpY3RNb2RlLCBudWxscHRyKSAhPSBD
U1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcjsKKyAgICByZXR1cm4gQ1NTUGFyc2VyOjpwYXJz
ZVZhbHVlKGR1bW15U3R5bGUsIHByb3BlcnR5SUQsIG5vcm1hbGl6ZWRWYWx1ZSwgZmFsc2UsIEhU
TUxTdGFuZGFyZE1vZGUsIG51bGxwdHIpICE9IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9y
OwogfQogCiBib29sIERPTUNTU05hbWVzcGFjZTo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBjb25k
aXRpb25UZXh0KQogewotICAgIENTU1BhcnNlckNvbnRleHQgY29udGV4dChDU1NTdHJpY3RNb2Rl
KTsKKyAgICBDU1NQYXJzZXJDb250ZXh0IGNvbnRleHQoSFRNTFN0YW5kYXJkTW9kZSk7CiAgICAg
Q1NTUGFyc2VyIHBhcnNlcihjb250ZXh0KTsKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlU3VwcG9y
dHNDb25kaXRpb24oY29uZGl0aW9uVGV4dCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Rm9udEZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5j
cHAJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBXZWFrUHRyPEZvbnRGYWNlPiBGb250
RmFjZTo6Y3JlYXRlV2Vha1B0CiBSZWZQdHI8Q1NTVmFsdWU+IEZvbnRGYWNlOjpwYXJzZVN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewogICAg
IGF1dG8gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKLSAgICBpZiAo
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKHN0eWxlLCBwcm9wZXJ0eUlELCBzdHJpbmcsIHRydWUsIENT
U1N0cmljdE1vZGUsIG51bGxwdHIpID09IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yKQor
ICAgIGlmIChDU1NQYXJzZXI6OnBhcnNlVmFsdWUoc3R5bGUsIHByb3BlcnR5SUQsIHN0cmluZywg
dHJ1ZSwgSFRNTFN0YW5kYXJkTW9kZSwgbnVsbHB0cikgPT0gQ1NTUGFyc2VyOjpQYXJzZVJlc3Vs
dDo6RXJyb3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBzdHlsZS0+Z2V0
UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKIH0KQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lk
IEZvbnRGYWNlOjpzZXRWYXJpYW50KGNvbnN0IFN0cmluZyYgCiAgICAgfQogCiAgICAgYXV0byBz
dHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwotICAgIGF1dG8gcmVzdWx0
ID0gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCB2
YXJpYW50LCB0cnVlLCBDU1NTdHJpY3RNb2RlLCBudWxscHRyKTsKKyAgICBhdXRvIHJlc3VsdCA9
IENTU1BhcnNlcjo6cGFyc2VWYWx1ZShzdHlsZSwgQ1NTUHJvcGVydHlGb250VmFyaWFudCwgdmFy
aWFudCwgdHJ1ZSwgSFRNTFN0YW5kYXJkTW9kZSwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdCA9
PSBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcikgewogICAgICAgICBlYyA9IFNZTlRBWF9F
UlI7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCShyZXZp
c2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI5LDEzICsxMjksMTMgQEAgT3B0aW9uYWw8TWVkaWFRdWVyeT4gTWVkaWFR
dWVyeVNldDo6aW50ZQogCiBPcHRpb25hbDxNZWRpYVF1ZXJ5PiBNZWRpYVF1ZXJ5U2V0OjppbnRl
cm5hbFBhcnNlKGNvbnN0IFN0cmluZyYgcXVlcnlTdHJpbmcpCiB7Ci0gICAgQ1NTUGFyc2VyIHBh
cnNlcihDU1NTdHJpY3RNb2RlKTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKEhUTUxTdGFuZGFyZE1v
ZGUpOwogICAgIHJldHVybiBpbnRlcm5hbFBhcnNlKHBhcnNlciwgcXVlcnlTdHJpbmcpOwogfQog
CiBib29sIE1lZGlhUXVlcnlTZXQ6OnBhcnNlKGNvbnN0IFN0cmluZyYgbWVkaWFTdHJpbmcpCiB7
Ci0gICAgQ1NTUGFyc2VyIHBhcnNlcihDU1NTdHJpY3RNb2RlKTsKKyAgICBDU1NQYXJzZXIgcGFy
c2VyKEhUTUxTdGFuZGFyZE1vZGUpOwogICAgIAogICAgIFZlY3RvcjxNZWRpYVF1ZXJ5PiByZXN1
bHQ7CiAgICAgVmVjdG9yPFN0cmluZz4gbGlzdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuY3BwCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUyLDggKzQ1MiwxNiBAQCBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoUmVzdWx0IFNlbGVjdG9yQ2hlCiAKICAgICAgICAgICAgIHJl
dHVybiBNYXRjaFJlc3VsdDo6dXBkYXRlV2l0aE1hdGNoVHlwZShyZXN1bHQsIG1hdGNoVHlwZSk7
CiAgICAgICAgIH0KKyAgICAKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dQc2V1ZG86Cisg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVlcDoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpT
aGFkb3dTbG90OgorICAgICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IEhhdmUgdG8gaW1wbGVtZW50
IHRoZXNlLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE1h
dGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogICAgIH0K
IAorCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojpm
YWlscyhNYXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yRmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JGaWx0ZXIuY3BwCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsOCArMTM4
LDE0IEBAIHZvaWQgU2VsZWN0b3JGaWx0ZXI6OmNvbGxlY3RJZGVudGlmaWVySGEKICAgICAgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudDoKICAgICAgICAgICAgIHNraXBPdmVy
U3Vic2VsZWN0b3JzID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpTaGFkb3dTbG90OgorICAgICAgICAgICAgLy8gRGlzYWJsZSBmYXN0UmVqZWN0
U2VsZWN0b3IuCisgICAgICAgICAgICAqaWRlbnRpZmllckhhc2hlcyA9IDA7CisgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6CiAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFk
b3dQc2V1ZG86CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0RlZXA6CiAgICAgICAg
ICAgICBza2lwT3ZlclN1YnNlbGVjdG9ycyA9IGZhbHNlOwogICAgICAgICAgICAgY29sbGVjdERl
c2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoc2VsZWN0b3IsIGhhc2gpOwogICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JQc2V1ZG9DbGFz
c0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAuaW4J
KHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvclBzZXVkb0Ns
YXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI3LDcg
KzI3LDcgQEAgZmlyc3Qtb2YtdHlwZQogZm9jdXMKIGZvY3VzLXdpdGhpbgogaG9yaXpvbnRhbAot
aG9zdAoraG9zdCwgUHNldWRvQ2xhc3NIb3N0LCBQc2V1ZG9FbGVtZW50VW5rbm93bgogaG92ZXIK
IGluLXJhbmdlCiBpbmNyZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvclBz
ZXVkb1R5cGVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JQ
c2V1ZG9UeXBlTWFwLmgJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvclBzZXVkb1R5cGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBz
dHJ1Y3QgUHNldWRvQ2xhc3NPckNvbXBhdGliaWxpdHlQc2V1ZG9FCiB9OwogCiBQc2V1ZG9DbGFz
c09yQ29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQgcGFyc2VQc2V1ZG9DbGFzc0FuZENvbXBhdGli
aWxpdHlFbGVtZW50U3RyaW5nKGNvbnN0IENTU1BhcnNlclN0cmluZyYgcHNldWRvVHlwZVN0cmlu
Zyk7CitQc2V1ZG9DbGFzc09yQ29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQgcGFyc2VQc2V1ZG9D
bGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50U3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcmIHBzZXVk
b1R5cGVTdHJpbmcpOwogQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRUeXBlIHBhcnNlUHNldWRv
RWxlbWVudFN0cmluZyhjb25zdCBTdHJpbmdJbXBsJiBwc2V1ZG9UeXBlU3RyaW5nKTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3Qu
Y3BwCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIGZsb2F0IHBhcnNlU2l6ZXNB
dHRyaWJ1dGUoRG9jdW1lbnQmIGRvY3UKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1
cm4gMDsKICAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwotICAgIGZvciAoYXV0
byYgc291cmNlU2l6ZSA6IENTU1BhcnNlcihDU1NTdHJpY3RNb2RlKS5wYXJzZVNpemVzQXR0cmli
dXRlKHNpemVzQXR0cmlidXRlKSkgeworICAgIGZvciAoYXV0byYgc291cmNlU2l6ZSA6IENTU1Bh
cnNlcihIVE1MU3RhbmRhcmRNb2RlKS5wYXJzZVNpemVzQXR0cmlidXRlKHNpemVzQXR0cmlidXRl
KSkgewogICAgICAgICBpZiAobWF0Y2goc291cmNlU2l6ZS5leHByZXNzaW9uLCBzdHlsZSwgZG9j
dW1lbnQpKQogICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgoc291cmNlU2l6ZS5sZW5n
dGguZ2V0KCksIHN0eWxlLCAqcmVuZGVyZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVByb3BlcnRpZXMuY3BwCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBA
QCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpNdXRhYmxlU3R5bGVQcm9wCiB9CiAKIE11dGFibGVT
dHlsZVByb3BlcnRpZXM6Ok11dGFibGVTdHlsZVByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkq
IHByb3BlcnRpZXMsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IFN0eWxlUHJvcGVydGllcyhDU1NT
dHJpY3RNb2RlKQorICAgIDogU3R5bGVQcm9wZXJ0aWVzKEhUTUxTdGFuZGFyZE1vZGUpCiB7CiAg
ICAgbV9wcm9wZXJ0eVZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUHJvcGVydGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVByb3BlcnRpZXMuaAkocmV2aXNpb24gMjA1NDk5KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUHJvcGVydGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAg
aW5saW5lIGNvbnN0IFN0eWxlUHJvcGVydHlNZXRhZGF0YSogSW1tdQogCiBjbGFzcyBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzIGZpbmFsIDogcHVibGljIFN0eWxlUHJvcGVydGllcyB7CiBwdWJsaWM6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBj
cmVhdGUoQ1NTUGFyc2VyTW9kZSA9IENTU1F1aXJrc01vZGUpOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gY3JlYXRlKENTU1BhcnNlck1vZGUg
PSBIVE1MUXVpcmtzTW9kZSk7CiAgICAgc3RhdGljIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
PiBjcmVhdGUoY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnRpZXMsIHVuc2lnbmVkIGNvdW50KTsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIH5NdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmNwcAkocmV2aXNpb24gMjA1NDk5KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZUltcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDcgKzY2LDcgQEAgdm9pZCBTdHlsZVJ1bGVJbXBvcnQ6OnNldENTU1N0eWxlU2hlZXQoYwog
ICAgIGlmIChtX3N0eWxlU2hlZXQpCiAgICAgICAgIG1fc3R5bGVTaGVldC0+Y2xlYXJPd25lclJ1
bGUoKTsKIAotICAgIENTU1BhcnNlckNvbnRleHQgY29udGV4dCA9IG1fcGFyZW50U3R5bGVTaGVl
dCA/IG1fcGFyZW50U3R5bGVTaGVldC0+cGFyc2VyQ29udGV4dCgpIDogQ1NTU3RyaWN0TW9kZTsK
KyAgICBDU1NQYXJzZXJDb250ZXh0IGNvbnRleHQgPSBtX3BhcmVudFN0eWxlU2hlZXQgPyBtX3Bh
cmVudFN0eWxlU2hlZXQtPnBhcnNlckNvbnRleHQoKSA6IEhUTUxTdGFuZGFyZE1vZGU7CiAgICAg
Y29udGV4dC5jaGFyc2V0ID0gY2hhcnNldDsKICAgICBpZiAoIWJhc2VVUkwuaXNOdWxsKCkpCiAg
ICAgICAgIGNvbnRleHQuYmFzZVVSTCA9IGJhc2VVUkw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAkocmV2aXNpb24gMjA1NDk5KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYg
KzYyLDcgQEAgdW5zaWduZWQgU3R5bGVTaGVldENvbnRlbnRzOjplc3RpbWF0ZWRTaQogU3R5bGVT
aGVldENvbnRlbnRzOjpTdHlsZVNoZWV0Q29udGVudHMoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1
bGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNv
bnRleHQpCiAgICAgOiBtX293bmVyUnVsZShvd25lclJ1bGUpCiAgICAgLCBtX29yaWdpbmFsVVJM
KG9yaWdpbmFsVVJMKQorICAgICwgbV9kZWZhdWx0TmFtZXNwYWNlKHN0YXJBdG9tKQogICAgICwg
bV9sb2FkQ29tcGxldGVkKGZhbHNlKQogICAgICwgbV9pc1VzZXJTdHlsZVNoZWV0KG93bmVyUnVs
ZSAmJiBvd25lclJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSAmJiBvd25lclJ1bGUtPnBhcmVudFN0
eWxlU2hlZXQoKS0+aXNVc2VyU3R5bGVTaGVldCgpKQogICAgICwgbV9oYXNTeW50YWN0aWNhbGx5
VmFsaWRDU1NIZWFkZXIodHJ1ZSkKQEAgLTgyLDYgKzgzLDcgQEAgU3R5bGVTaGVldENvbnRlbnRz
OjpTdHlsZVNoZWV0Q29udGVudHMoYwogICAgICwgbV9pbXBvcnRSdWxlcyhvLm1faW1wb3J0UnVs
ZXMuc2l6ZSgpKQogICAgICwgbV9jaGlsZFJ1bGVzKG8ubV9jaGlsZFJ1bGVzLnNpemUoKSkKICAg
ICAsIG1fbmFtZXNwYWNlcyhvLm1fbmFtZXNwYWNlcykKKyAgICAsIG1fZGVmYXVsdE5hbWVzcGFj
ZShvLm1fZGVmYXVsdE5hbWVzcGFjZSkKICAgICAsIG1fbG9hZENvbXBsZXRlZCh0cnVlKQogICAg
ICwgbV9pc1VzZXJTdHlsZVNoZWV0KG8ubV9pc1VzZXJTdHlsZVNoZWV0KQogICAgICwgbV9oYXNT
eW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIoby5tX2hhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hl
YWRlcikKQEAgLTI2OSwxNSArMjcxLDE4IEBAIHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjp3cmFw
cGVyRGVsZXRlUnUKIAogdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnBhcnNlckFkZE5hbWVzcGFj
ZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCiB7
Ci0gICAgaWYgKHVyaS5pc051bGwoKSB8fCBwcmVmaXguaXNOdWxsKCkpCisgICAgQVNTRVJUKCF1
cmkuaXNOdWxsKCkpOworICAgIGlmIChwcmVmaXguaXNOdWxsKCkpIHsKKyAgICAgICAgbV9kZWZh
dWx0TmFtZXNwYWNlID0gdXJpOwogICAgICAgICByZXR1cm47CisgICAgfQogICAgIFByZWZpeE5h
bWVzcGFjZVVSSU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbmFtZXNwYWNlcy5hZGQocHJlZml4
LCB1cmkpOwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwogICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB1cmk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYg
U3R5bGVTaGVldENvbnRlbnRzOjpkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5n
JiBwcmVmaXgpCitjb25zdCBBdG9taWNTdHJpbmcmIFN0eWxlU2hlZXRDb250ZW50czo6bmFtZXNw
YWNlVVJJRnJvbVByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKIHsKICAgICBQcmVm
aXhOYW1lc3BhY2VVUklNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lc3BhY2VzLmZpbmQo
cHJlZml4KTsKICAgICBpZiAoaXQgPT0gbV9uYW1lc3BhY2VzLmVuZCgpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuaAkocmV2aXNpb24gMjA1NDk5KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw3IEBAIGNsYXNzIFN0eWxlUnVsZUltcG9ydDsKIAogY2xhc3MgU3R5bGVTaGVldENv
bnRlbnRzIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8U3R5bGVTaGVldENvbnRlbnRzPiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHlsZVNoZWV0Q29udGVudHM+IGNyZWF0ZShjb25zdCBD
U1NQYXJzZXJDb250ZXh0JiBjb250ZXh0ID0gQ1NTUGFyc2VyQ29udGV4dChDU1NTdHJpY3RNb2Rl
KSkKKyAgICBzdGF0aWMgUmVmPFN0eWxlU2hlZXRDb250ZW50cz4gY3JlYXRlKGNvbnN0IENTU1Bh
cnNlckNvbnRleHQmIGNvbnRleHQgPSBDU1NQYXJzZXJDb250ZXh0KEhUTUxTdGFuZGFyZE1vZGUp
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVTaGVldENvbnRlbnRz
KDAsIFN0cmluZygpLCBjb250ZXh0KSk7CiAgICAgfQpAQCAtNjAsOCArNjAsOSBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgflN0eWxlU2hlZXRDb250ZW50cygpOwogICAgIAogICAgIGNv
bnN0IENTU1BhcnNlckNvbnRleHQmIHBhcnNlckNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3Bh
cnNlckNvbnRleHQ7IH0KLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGV0ZXJtaW5lTmFtZXNw
YWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KTsKKyAgICAKKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGRlZmF1bHROYW1lc3BhY2UoKSB7IHJldHVybiBtX2RlZmF1bHROYW1lc3BhY2U7IH0K
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSUZyb21QcmVmaXgoY29uc3QgQXRv
bWljU3RyaW5nJiBwcmVmaXgpOwogCiAgICAgdm9pZCBwYXJzZUF1dGhvclN0eWxlU2hlZXQoY29u
c3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCosIGNvbnN0IFNlY3VyaXR5T3JpZ2luKik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKQEAgLTE2MCw2ICsx
NjEsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+IG1fY2hp
bGRSdWxlczsKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBBdG9taWNTdHJpbmc+
IFByZWZpeE5hbWVzcGFjZVVSSU1hcDsKICAgICBQcmVmaXhOYW1lc3BhY2VVUklNYXAgbV9uYW1l
c3BhY2VzOworICAgIEF0b21pY1N0cmluZyBtX2RlZmF1bHROYW1lc3BhY2U7CiAKICAgICBib29s
IG1fbG9hZENvbXBsZXRlZCA6IDE7CiAgICAgYm9vbCBtX2lzVXNlclN0eWxlU2hlZXQgOiAxOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAJKHJldmlzaW9uIDIwNTQ5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgV2ViS2l0Q1NTTWF0cml4OjpzZXRNYXRyaXhWYWx1
ZShjb24KICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBzdHlsZURlY2xhcmF0aW9uID0gTXV0
YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7Ci0gICAgaWYgKENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShzdHlsZURlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSwgc3RyaW5nLCB0cnVl
LCBDU1NTdHJpY3RNb2RlLCBudWxscHRyKSAhPSBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJv
cikgeworICAgIGlmIChDU1NQYXJzZXI6OnBhcnNlVmFsdWUoc3R5bGVEZWNsYXJhdGlvbiwgQ1NT
UHJvcGVydHlUcmFuc2Zvcm0sIHN0cmluZywgdHJ1ZSwgSFRNTFN0YW5kYXJkTW9kZSwgbnVsbHB0
cikgIT0gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3IpIHsKICAgICAgICAgLy8gQ29udmVy
dCB0byBUcmFuc2Zvcm1PcGVyYXRpb25zLiBUaGlzIGNhbiBmYWlsIGlmIGEgcHJvcGVydHkKICAg
ICAgICAgLy8gcmVxdWlyZXMgc3R5bGUgKGkuZS4sIHBhcmFtIHVzZXMgJ2Vtcycgb3IgJ2V4cycp
CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBzdHlsZURlY2xhcmF0aW9uLT5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VHJhbnNmb3JtKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9tYWtlU2VsZWN0b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFw
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlU2VsZWN0b3JQc2V1ZG9D
bGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLnB5CShyZXZpc2lvbiAyMDU0OTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvbWFrZVNlbGVjdG9yUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5
RWxlbWVudE1hcC5weQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBvdXRwdXRfZmls
ZSA9IG9wZW4oJ1NlbGVjdG9yUHNldWRvQ2xhc3NBCiBvdXRwdXRfZmlsZS53cml0ZSgiIiIKICV7
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTk4LDYgKzE5OCwxOSBA
QCBQc2V1ZG9DbGFzc09yQ29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQgCiAgICAgcmV0dXJuIHsg
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVW5rbm93biwgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1l
bnRVbmtub3duIH07CiB9CiAKK1BzZXVkb0NsYXNzT3JDb21wYXRpYmlsaXR5UHNldWRvRWxlbWVu
dCBwYXJzZVBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRTdHJpbmcoY29uc3QgU3Ry
aW5nVmlldyYgcHNldWRvVHlwZVN0cmluZykKK3sKKyAgICBjb25zdCBTZWxlY3RvclBzZXVkb0Ns
YXNzT3JDb21wYXRpYmlsaXR5UHNldWRvRWxlbWVudEVudHJ5KiBlbnRyeTsKKyAgICBpZiAocHNl
dWRvVHlwZVN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgZW50cnkgPSBwYXJzZVBzZXVkb0NsYXNz
QW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRTdHJpbmcocHNldWRvVHlwZVN0cmluZy5jaGFyYWN0ZXJz
OCgpLCBwc2V1ZG9UeXBlU3RyaW5nLmxlbmd0aCgpKTsKKyAgICBlbHNlCisgICAgICAgIGVudHJ5
ID0gcGFyc2VQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50U3RyaW5nKHBzZXVkb1R5
cGVTdHJpbmcuY2hhcmFjdGVyczE2KCksIHBzZXVkb1R5cGVTdHJpbmcubGVuZ3RoKCkpOworCisg
ICAgaWYgKGVudHJ5KQorICAgICAgICByZXR1cm4gZW50cnktPnBzZXVkb1R5cGVzOworICAgIHJl
dHVybiB7IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Vua25vd24sIENTU1NlbGVjdG9yOjpQc2V1
ZG9FbGVtZW50VW5rbm93biB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZiBk
ZWZpbmVkKF9fY2xhbmdfXykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNl
ci5jcHAJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHByaXZhdGU6CiAK
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmIHN0cmljdENTU1BhcnNlckNvbnRleHQoKQogewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDU1NQYXJzZXJDb250ZXh0PiBzdHJpY3RDb250ZXh0KENT
U1N0cmljdE1vZGUpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDU1NQYXJzZXJDb250ZXh0
PiBzdHJpY3RDb250ZXh0KEhUTUxTdGFuZGFyZE1vZGUpOwogICAgIHJldHVybiBzdHJpY3RDb250
ZXh0OwogfQogCkBAIC0yNTQsNyArMjU0LDcgQEAgQ1NTUGFyc2VyQ29udGV4dDo6Q1NTUGFyc2Vy
Q29udGV4dChDU1NQYQogQ1NTUGFyc2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dChEb2N1bWVu
dCYgZG9jdW1lbnQsIGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQog
ICAgIDogYmFzZVVSTChiYXNlVVJMLmlzTnVsbCgpID8gZG9jdW1lbnQuYmFzZVVSTCgpIDogYmFz
ZVVSTCkKICAgICAsIGNoYXJzZXQoY2hhcnNldCkKLSAgICAsIG1vZGUoZG9jdW1lbnQuaW5RdWly
a3NNb2RlKCkgPyBDU1NRdWlya3NNb2RlIDogQ1NTU3RyaWN0TW9kZSkKKyAgICAsIG1vZGUoZG9j
dW1lbnQuaW5RdWlya3NNb2RlKCkgPyBIVE1MUXVpcmtzTW9kZSA6IEhUTUxTdGFuZGFyZE1vZGUp
CiAgICAgLCBpc0hUTUxEb2N1bWVudChkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpKQogI2lmIEVO
QUJMRShDU1NfR1JJRF9MQVlPVVQpCiAgICAgLCBjc3NHcmlkTGF5b3V0RW5hYmxlZChkb2N1bWVu
dC5pc0NTU0dyaWRMYXlvdXRFbmFibGVkKCkpCkBAIC0xMzkyLDcgKzEzOTIsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VDb2xvcihSR0JBMzImIGNvbG9yCiAgICAgaWYgKGZhc3RQYXJzZUNvbG9y
KGNvbG9yLCBzdHJpbmcsIHN0cmljdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgQ1NT
UGFyc2VyIHBhcnNlcihDU1NTdHJpY3RNb2RlKTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKEhUTUxT
dGFuZGFyZE1vZGUpOwogCiAgICAgLy8gSW4gY2FzZSB0aGUgZmFzdC1wYXRoIHBhcnNlciBkaWRu
J3QgdW5kZXJzdGFuZCB0aGUgY29sb3IsIHRyeSB0aGUgZnVsbCBwYXJzZXIuCiAgICAgaWYgKCFw
YXJzZXIucGFyc2VDb2xvcihzdHJpbmcpKQpAQCAtMTcxOSw3ICsxNzE5LDcgQEAgYm9vbCBDU1NQ
YXJzZXI6OnZhbGlkYXRlQ2FsY3VsYXRpb25Vbml0KAogaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpz
aG91bGRBY2NlcHRVbml0TGVzc1ZhbHVlcyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVu
aXRGbGFncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewogICAgIC8vIFFpcmtzIG1v
ZGUgYW5kIHN2ZyBwcmVzZW50YXRpb24gYXR0cmlidXRlcyBhY2NlcHQgdW5pdCBsZXNzIHZhbHVl
cy4KLSAgICByZXR1cm4gKHVuaXRGbGFncyAmIChGTGVuZ3RoIHwgRkFuZ2xlIHwgRlRpbWUpKSAm
JiAoIXZhbHVlLmZWYWx1ZSB8fCBjc3NQYXJzZXJNb2RlID09IENTU1F1aXJrc01vZGUgfHwgY3Nz
UGFyc2VyTW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlKTsKKyAgICByZXR1cm4gKHVuaXRGbGFncyAm
IChGTGVuZ3RoIHwgRkFuZ2xlIHwgRlRpbWUpKSAmJiAoIXZhbHVlLmZWYWx1ZSB8fCBjc3NQYXJz
ZXJNb2RlID09IEhUTUxRdWlya3NNb2RlIHx8IGNzc1BhcnNlck1vZGUgPT0gU1ZHQXR0cmlidXRl
TW9kZSk7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyOjp2YWxpZGF0ZVVuaXQoVmFsdWVXaXRoQ2FsY3Vs
YXRpb24mIHZhbHVlV2l0aENhbGN1bGF0aW9uLCBVbml0cyB1bml0RmxhZ3MsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSkKQEAgLTIzNTYsNyArMjM1Niw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKENTU1Byb3BlcnR5SUQKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykK
ICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxj
dWxhdGlvbiwgRkludGVnZXIsIENTU1F1aXJrc01vZGUpKTsKKyAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRl
Z2VyLCBIVE1MUXVpcmtzTW9kZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJv
cGVydHlPcnBoYW5zOiAvLyA8aW50ZWdlcj4gfCBpbmhlcml0IHwgYXV0byAoV2UndmUgYWRkZWQg
c3VwcG9ydCBmb3IgYXV0byBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCkBAIC0yMzY0LDcg
KzIzNjQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlECiAgICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAm
JiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIsIENT
U1F1aXJrc01vZGUpKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxp
ZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIsIEhUTUxRdWly
a3NNb2RlKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWln
aHQ6CkBAIC0yNDE1LDcgKzI0MTUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQ
cm9wZXJ0eUlECiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NW
YWx1ZVJlc2V0IHx8IGlkID09IENTU1ZhbHVlRG9jdW1lbnQpCiAgICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBG
UGVyY2VudCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKTsKKyAgICAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1i
ZXIgfCBGUGVyY2VudCB8IEZOb25OZWcsIEhUTUxTdGFuZGFyZE1vZGUpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRab29tOgpAQCAtMjU2Nywx
MCArMjU2NywxMCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlECiAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9u
LCBGTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
eEZsZXhHcm91cDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSk7CisgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
SW50ZWdlciB8IEZOb25OZWcsIEhUTUxTdGFuZGFyZE1vZGUpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94T3JkaW5hbEdyb3VwOgotICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBG
Tm9uTmVnLCBDU1NTdHJpY3RNb2RlKSAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZW
YWx1ZTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgSFRNTFN0YW5kYXJkTW9kZSkgJiYgdmFsdWVX
aXRoQ2FsY3VsYXRpb24udmFsdWUoKS5mVmFsdWU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlGaWx0ZXI6CiAjaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKQEAgLTI2MTYs
NyArMjYxNiw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQKICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24s
IEZOdW1iZXIgfCBGTm9uTmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eU9yZGVyOgotICAgICAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBG
SW50ZWdlciwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIsIEhUTUxTdGFuZGFyZE1vZGUpKSB7CiAgICAgICAg
ICAgICAvLyBXZSByZXN0cmljdCB0aGUgc21hbGxlc3QgdmFsdWUgdG8gaW50IG1pbiArIDIgYmVj
YXVzZSB3ZSB1c2UgaW50IG1pbiBhbmQgaW50IG1pbiArIDEgYXMgc3BlY2lhbCB2YWx1ZXMgaW4g
YSBoYXNoIHNldC4KICAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSBzdGQ6Om1heDxkb3VibGU+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgKyAyLCBwYXJzZWREb3VibGUodmFsdWVX
aXRoQ2FsY3VsYXRpb24pKTsKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQb29s
LmNyZWF0ZVZhbHVlKHJlc3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwpAQCAt
Mjg5OCw3ICsyODk4LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJ
RAogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQ2xhbXA6CiAgICAgICAgIC8vIFdoZW4g
c3BlY2lmeWluZyBudW1iZXIgb2YgbGluZXMsIGRvbid0IGFsbG93IDAgYXMgYSB2YWxpZCB2YWx1
ZQogICAgICAgICAvLyBXaGVuIHNwZWNpZnlpbmcgZWl0aGVyIHR5cGUgb2YgdW5pdCwgcmVxdWly
ZSBub24tbmVnYXRpdmUgaW50ZWdlcnMKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYm
ICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFIHx8IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSAm
JiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRlBlcmNlbnQg
fCBGTm9uTmVnLCBDU1NRdWlya3NNb2RlKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFp
ZCAmJiAodmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRSB8fCB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1
ZSkgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZQZXJj
ZW50IHwgRk5vbk5lZywgSFRNTFF1aXJrc01vZGUpKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5B
QkxFKElPU19URVhUX0FVVE9TSVpJTkcpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRT
aXplQWRqdXN0OgpAQCAtMjkwOSw3ICsyOTA5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFs
dWUoQ1NTUHJvcGVydHlJRAogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgbXVsdGlsZW5ndGggY2Fz
ZSB3aGVyZSB3ZSBhbGxvdyByZWxhdGl2ZSB1bml0cy4KLSAgICAgICAgICAgIHZhbGlkUHJpbWl0
aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50
IHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUg
PSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBG
Tm9uTmVnLCBIVE1MU3RhbmRhcmRNb2RlKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAj
ZW5kaWYKQEAgLTI5MjUsMTIgKzI5MjUsMTIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUo
Q1NTUHJvcGVydHlJRAogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0
QmVmb3JlOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdEFmdGVyOgot
ICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAg
aWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgSFRNTFN0YW5kYXJkTW9kZSkpCiAgICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXM6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1
ZU5vTGltaXQgfHwgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8
IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb0xp
bWl0IHx8IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9u
TmVnLCBIVE1MU3RhbmRhcmRNb2RlKSkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTM4NzQsNyArMzg3NCw3IEBAIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXIKICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1
ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CiAgICAgQ1NTVmFsdWVJ
RCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7CiAgICAgLy8gQWx3YXlzIHBh
cnNlIHRoaXMgcHJvcGVydHkgaW4gc3RyaWN0IG1vZGUsIHNpbmNlIGl0IHdvdWxkIGJlIGFtYmln
dW91cyBvdGhlcndpc2Ugd2hlbiB1c2VkIGluIHRoZSAnY29sdW1ucycgc2hvcnRoYW5kIHByb3Bl
cnR5LgotICAgIGlmIChpZCAhPSBDU1NWYWx1ZUF1dG8gJiYgISh2YWxpZGF0ZVVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSAmJiBwYXJz
ZWREb3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKSkKKyAgICBpZiAoaWQgIT0gQ1NTVmFsdWVB
dXRvICYmICEodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5v
bk5lZywgSFRNTFN0YW5kYXJkTW9kZSkgJiYgcGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1bGF0
aW9uKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byBwYXJzZWRWYWx1ZSA9
IHBhcnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKQEAgLTM4ODcs
NyArMzg4Nyw3IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXIKICAg
ICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKSk7CiAgICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZh
bHVlKCkuaWQ7CiAKLSAgICBpZiAoaWQgIT0gQ1NTVmFsdWVBdXRvICYmICF2YWxpZGF0ZVVuaXQo
dmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIsIENTU1F1aXJrc01vZGUpKQor
ICAgIGlmIChpZCAhPSBDU1NWYWx1ZUF1dG8gJiYgIXZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxj
dWxhdGlvbiwgRlBvc2l0aXZlSW50ZWdlciwgSFRNTFF1aXJrc01vZGUpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gcGFyc2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZl
KGlkLCB2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CkBAIC03MjM3LDcgKzcyMzcsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VGb250V2VpZ2h0KGJvb2wgaW1wCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1
ZSk7Ci0gICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIg
fCBGTm9uTmVnLCBDU1NRdWlya3NNb2RlKSkgeworICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgSFRNTFF1aXJrc01vZGUpKSB7CiAg
ICAgICAgIGludCB3ZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZERvdWJsZSh2YWx1ZVdp
dGhDYWxjdWxhdGlvbikpOwogICAgICAgICBpZiAoISh3ZWlnaHQgJSAxMDApICYmIHdlaWdodCA+
PSAxMDAgJiYgd2VpZ2h0IDw9IDkwMCkgewogICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlGb250V2VpZ2h0LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShjcmVhdGVGb250V2VpZ2h0VmFsdWVLZXl3b3JkKHdlaWdodCkpLCBpbXBvcnRhbnQp
OwpAQCAtNzgxMiw5ICs3ODEyLDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3JQYXJhbWV0
ZXJzKENTUwogICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGZpcnN0QXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24oKmFyZ3MtPmN1cnJlbnQoKSk7CiAgICAgVW5pdHMgdW5pdFR5cGUgPSBGVW5rbm93bjsK
ICAgICAvLyBHZXQgdGhlIGZpcnN0IHZhbHVlIGFuZCBpdHMgdHlwZQotICAgIGlmICh2YWxpZGF0
ZVVuaXQoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIsIENTU1N0cmljdE1v
ZGUpKQorICAgIGlmICh2YWxpZGF0ZVVuaXQoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwg
RkludGVnZXIsIEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAgICB1bml0VHlwZSA9IEZJbnRlZ2Vy
OwotICAgIGVsc2UgaWYgKHZhbGlkYXRlVW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9u
LCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgZWxzZSBpZiAodmFsaWRhdGVVbml0KGZp
cnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50LCBIVE1MU3RhbmRhcmRNb2RlKSkK
ICAgICAgICAgdW5pdFR5cGUgPSBGUGVyY2VudDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTc4MjUsNyArNzgyNSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yUGFy
YW1ldGVycyhDU1MKICAgICAgICAgaWYgKG9wZXJhdG9yQXJndW1lbnQudW5pdCAhPSBDU1NQYXJz
ZXJWYWx1ZTo6T3BlcmF0b3IgJiYgb3BlcmF0b3JBcmd1bWVudC5pVmFsdWUgIT0gJywnKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1
bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy0+bmV4dCgpKTsKLSAgICAgICAgaWYgKCF2YWxpZGF0
ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIHVuaXRUeXBlLCBDU1NTdHJpY3RNb2RlKSkK
KyAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIHVuaXRU
eXBlLCBIVE1MU3RhbmRhcmRNb2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgY29sb3JBcnJheVtpXSA9IGNvbG9ySW50RnJvbVZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uKTsKICAgICB9CkBAIC03ODM0LDcgKzc4MzQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VD
b2xvclBhcmFtZXRlcnMoQ1NTCiAgICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0g
Q1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcs
JykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPm5leHQoKSk7Ci0gICAgICAgIGlmICgh
dmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyLCBDU1NTdHJpY3RN
b2RlKSkKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24s
IEZOdW1iZXIsIEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24pOwogICAgICAgICAvLyBDb252ZXJ0IHRoZSBmbG9hdGluZyBwb2ludGVyIG51bWJl
ciBvZiBhbHBoYSB0byBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBbMCwgMjU2KSwKQEAgLTc4NTQs
NyArNzg1NCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGEKICAg
ICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsK
ICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCph
cmdzLT5jdXJyZW50KCkpOwogICAgIC8vIEdldCB0aGUgZmlyc3QgdmFsdWUKLSAgICBpZiAoIXZh
bGlkYXRlVW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyLCBDU1NTdHJp
Y3RNb2RlKSkKKyAgICBpZiAoIXZhbGlkYXRlVW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uLCBGTnVtYmVyLCBIVE1MU3RhbmRhcmRNb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIC8vIG5vcm1hbGl6ZSB0aGUgSHVlIHZhbHVlIGFuZCBjaGFuZ2UgaXQgdG8gYmUgYmV0d2Vl
biAwIGFuZCAxLjAKICAgICBjb2xvckFycmF5WzBdID0gKCgoc3RhdGljX2Nhc3Q8aW50PihwYXJz
ZWREb3VibGUoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpICUgMzYwKSArIDM2MCkgJSAz
NjApIC8gMzYwLjA7CkBAIC03ODYzLDcgKzc4NjMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VI
U0xQYXJhbWV0ZXJzKENTU1BhCiAgICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0g
Q1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcs
JykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPm5leHQoKSk7Ci0gICAgICAgIGlmICgh
dmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCwgQ1NTU3RyaWN0
TW9kZSkpCisgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9u
LCBGUGVyY2VudCwgSFRNTFN0YW5kYXJkTW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGNvbG9yQXJyYXlbaV0gPSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRv
dWJsZT4oMTAwLCBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKSkgLyAxMDAu
MDsgLy8gbmVlZHMgdG8gYmUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLjAKICAgICB9CkBAIC03ODcy
LDcgKzc4NzIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhCiAg
ICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJh
dG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24oKmFyZ3MtPm5leHQoKSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50
V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgaWYgKCF2
YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIsIEhUTUxTdGFuZGFy
ZE1vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjb2xvckFycmF5WzNd
ID0gc3RkOjptYXg8ZG91YmxlPigwLCBzdGQ6Om1pbjxkb3VibGU+KDEsIHBhcnNlZERvdWJsZShh
cmd1bWVudFdpdGhDYWxjdWxhdGlvbikpKTsKICAgICB9CkBAIC04MDc5LDEzICs4MDc5LDEzIEBA
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VTaGEKICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBnb29kLiAgQ29t
bWl0IGl0LgogICAgICAgICAgICAgY29udGV4dC5jb21taXRWYWx1ZSgpOwotICAgICAgICB9IGVs
c2UgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCwgQ1NTU3Ry
aWN0TW9kZSkpIHsKKyAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZMZW5ndGgsIEhUTUxTdGFuZGFyZE1vZGUpKSB7CiAgICAgICAgICAgICAvLyBX
ZSByZXF1aXJlZCBhIGxlbmd0aCBhbmQgZGlkbid0IGdldCBvbmUuIEludmFsaWQuCiAgICAgICAg
ICAgICBpZiAoIWNvbnRleHQuYWxsb3dMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgICAgICAgICAgLy8gQmx1ciByYWRpdXMgbXVzdCBiZSBub24tbmVnYXRp
dmUuCi0gICAgICAgICAgICBpZiAoY29udGV4dC5hbGxvd0JsdXIgJiYgIXZhbGlkYXRlVW5pdCh2
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQor
ICAgICAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dCbHVyICYmICF2YWxpZGF0ZVVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnLCBIVE1MU3RhbmRhcmRNb2RlKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgLy8gQSBsZW5ndGgg
aXMgYWxsb3dlZCBoZXJlLiAgQ29uc3RydWN0IHRoZSB2YWx1ZSBhbmQgYWRkIGl0LgpAQCAtODUz
Myw3ICs4NTMzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2VTbGljZShDUwog
ICAgIHdoaWxlICgodmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSkgewogICAgICAgICBW
YWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwogICAgICAg
ICAvLyBGSVhNRSBjYWxjKCkgaHR0cDovL3dlYmtpdC5vcmcvYi8xNjY2MiA6IGNhbGMgaXMgcGFy
c2VkIGJ1dCB2YWx1ZXMgYXJlIG5vdCBjcmVhdGVkIHlldC4KLSAgICAgICAgaWYgKGNvbnRleHQu
YWxsb3dOdW1iZXIoKSAmJiAhaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbikgJiYg
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcgfCBG
UGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dOdW1i
ZXIoKSAmJiAhaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbikgJiYgdmFsaWRhdGVV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcgfCBGUGVyY2VudCwg
SFRNTFN0YW5kYXJkTW9kZSkpIHsKICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0TnVtYmVyKHZh
bHVlV2l0aENhbGN1bGF0aW9uKTsKICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0LmFsbG93Rmls
bCgpICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUZpbGwpCiAgICAgICAgICAgICBjb250ZXh0LmNv
bW1pdEZpbGwoKTsKQEAgLTg2NDcsNyArODY0Nyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJv
cmRlckltYWdlUXVhZChVbmkKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWU7CiAgICAgd2hpbGUg
KCh2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7CiAgICAgICAgIFZhbHVlV2l0aENh
bGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7Ci0gICAgICAgIGlmIChjb250
ZXh0LmFsbG93TnVtYmVyKCkgJiYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwg
dmFsaWRVbml0cywgQ1NTU3RyaWN0TW9kZSkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQXV0bykp
IHsKKyAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dOdW1iZXIoKSAmJiAodmFsaWRhdGVVbml0KHZh
bHVlV2l0aENhbGN1bGF0aW9uLCB2YWxpZFVuaXRzLCBIVE1MU3RhbmRhcmRNb2RlKSB8fCB2YWx1
ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSkgewogICAgICAgICAgICAgY29udGV4dC5jb21taXROdW1i
ZXIodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICB9IGVsc2UgaWYgKCFpblNob3J0aGFu
ZCgpKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgcGFyc2luZyBhIHNob3J0aGFuZCB0
aGVuIHdlIGFyZSBpbnZhbGlkLgpAQCAtOTA3Nyw3ICs5MDc3LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlRGVwcmVjYXRlZExpbmVhckdyYQogCiAgICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNl
OwogICAgIC8vIExvb2sgZm9yIGFuZ2xlLgotICAgIGlmICh2YWxpZGF0ZVVuaXQoYXJndW1lbnRX
aXRoQ2FsY3VsYXRpb24sIEZBbmdsZSwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICBpZiAodmFsaWRh
dGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIEhUTUxTdGFuZGFyZE1vZGUp
KSB7CiAgICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVl
KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7CiAKICAgICAgICAgYXJncy0+bmV4dCgpOwpAQCAt
OTI2Myw3ICs5MjYzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGluZWFyR3JhZGllbnQoQ1NT
UAogCiAgICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwogICAgIC8vIExvb2sgZm9yIGFuZ2xl
LgotICAgIGlmICh2YWxpZGF0ZVVuaXQoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkFu
Z2xlLCBDU1NTdHJpY3RNb2RlKSkgeworICAgIGlmICh2YWxpZGF0ZVVuaXQoZmlyc3RBcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbiwgRkFuZ2xlLCBIVE1MU3RhbmRhcmRNb2RlKSkgewogICAgICAgICBy
ZXN1bHQtPnNldEFuZ2xlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShmaXJzdEFyZ3VtZW50
V2l0aENhbGN1bGF0aW9uKSk7CiAKICAgICAgICAgYXJncy0+bmV4dCgpOwpAQCAtMTAwNzgsMjEg
KzEwMDc4LDIxIEBAIFJlZlB0cjxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4gQ1NTUGFyc2UKIAog
ICAgICAgICBpZiAoaW5mby50eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0
ZTNEVHJhbnNmb3JtT3BlcmF0aW9uICYmIGFyZ051bWJlciA9PSAzKSB7CiAgICAgICAgICAgICAv
LyA0dGggcGFyYW0gb2Ygcm90YXRlM2QoKSBpcyBhbiBhbmdsZSByYXRoZXIgdGhhbiBhIGJhcmUg
bnVtYmVyLCB2YWxpZGF0ZSBpdCBhcyBzdWNoCi0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5p
dChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAg
ICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUs
IEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICB9IGVsc2UgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpU
cmFuc2xhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbiAmJiBhcmdOdW1iZXIgPT0gMikgewogICAgICAg
ICAgICAgLy8gM3JkIHBhcmFtIG9mIHRyYW5zbGF0ZTNkKCkgY2Fubm90IGJlIGEgcGVyY2VudGFn
ZQotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24s
IEZMZW5ndGgsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQo
YXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgsIEhUTUxTdGFuZGFyZE1vZGUpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2UgaWYgKGluZm8udHlw
ZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0
aW9uICYmICFhcmdOdW1iZXIpIHsKICAgICAgICAgICAgIC8vIDFzdCBwYXJhbSBvZiB0cmFuc2xh
dGVaKCkgY2Fubm90IGJlIGEgcGVyY2VudGFnZQotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVu
aXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgsIENTU1N0cmljdE1vZGUpKQorICAg
ICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGgsIEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICB9IGVsc2UgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbiAmJiAhYXJnTnVtYmVyKSB7CiAgICAgICAg
ICAgICAvLyAxc3QgcGFyYW0gb2YgcGVyc3BlY3RpdmUoKSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZl
IG51bWJlciAoZGVwcmVjYXRlZCkgb3IgbGVuZ3RoLgotICAgICAgICAgICAgaWYgKCF2YWxpZGF0
ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRk5vbk5l
ZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZMZW5ndGggfCBGTm9uTmVnLCBIVE1MU3RhbmRh
cmRNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfSBlbHNl
IGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCB1bml0LCBDU1NTdHJp
Y3RNb2RlKSkKKyAgICAgICAgfSBlbHNlIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uLCB1bml0LCBIVE1MU3RhbmRhcmRNb2RlKSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgICAgIC8vIEFkZCB0aGUgdmFsdWUgdG8gdGhlIGN1cnJlbnQgdHJhbnNm
b3JtIG9wZXJhdGlvbi4KQEAgLTEwMTY3LDcgKzEwMTY3LDcgQEAgUmVmUHRyPFdlYktpdENTU0Zp
bHRlclZhbHVlPiBDU1NQYXJzZXI6OgogCiAgICAgICAgIGlmIChhcmdzLnNpemUoKSkgewogICAg
ICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFy
Z3MuY3VycmVudCgpKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0
aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2Rl
KSkKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9u
LCBGTnVtYmVyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBIVE1MU3RhbmRhcmRNb2RlKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgYXV0byBwcmltaXRpdmVW
YWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlv
bik7CkBAIC0xMDE5MSw3ICsxMDE5MSw3IEBAIFJlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4g
Q1NTUGFyc2VyOjoKIAogICAgICAgICBpZiAoYXJncy5zaXplKCkpIHsKICAgICAgICAgICAgIFZh
bHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQo
KSk7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlv
biwgRk51bWJlciB8IEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIGlmICgh
dmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRlBlcmNlbnQs
IEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpOwpAQCAtMTAyMDUsNyArMTAyMDUsNyBAQCBSZWZQ
dHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6CiAgICAgICAgIAogICAgICAgICBp
ZiAoYXJncy5zaXplKCkpIHsKICAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7Ci0gICAgICAgICAgICBpZiAoIXZh
bGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkFuZ2xlLCBDU1NTdHJpY3RNb2Rl
KSkKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9u
LCBGQW5nbGUsIEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICAKICAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7CkBAIC0xMDIxOSw3
ICsxMDIxOSw3IEBAIFJlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NTUGFyc2VyOjoKICAg
ICAgICAgCiAgICAgICAgIGlmIChhcmdzLnNpemUoKSkgewogICAgICAgICAgICAgVmFsdWVXaXRo
Q2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3VycmVudCgpKTsKLSAg
ICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVu
Z3RoIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBpZiAoIXZhbGlkYXRl
VW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25OZWcsIEhUTUxTdGFu
ZGFyZE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgICAg
ICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbikpOwpAQCAtMTMxMjUsNyArMTMxMjUsNyBAQCBRdWFsaWZpZWROYW1l
IENTU1BhcnNlcjo6ZGV0ZXJtaW5lTmFtZUluCiAKICAgICBpZiAoIW1fc3R5bGVTaGVldCkKICAg
ICAgICAgcmV0dXJuIFF1YWxpZmllZE5hbWUocHJlZml4LCBsb2NhbE5hbWUsIG1fZGVmYXVsdE5h
bWVzcGFjZSk7Ci0gICAgcmV0dXJuIFF1YWxpZmllZE5hbWUocHJlZml4LCBsb2NhbE5hbWUsIG1f
c3R5bGVTaGVldC0+ZGV0ZXJtaW5lTmFtZXNwYWNlKHByZWZpeCkpOworICAgIHJldHVybiBRdWFs
aWZpZWROYW1lKHByZWZpeCwgbG9jYWxOYW1lLCBtX3N0eWxlU2hlZXQtPm5hbWVzcGFjZVVSSUZy
b21QcmVmaXgocHJlZml4KSk7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpyZXdyaXRlU3BlY2lmaWVy
c1dpdGhOYW1lc3BhY2VJZk5lZWRlZChDU1NQYXJzZXJTZWxlY3RvciYgc3BlY2lmaWVycykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkocmV2aXNpb24gMjA1NDk5KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcxLDggKzU3MSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldFN0eWxlU2hlZXQoU3R5
bGVTaGVldENvbnRlbnRzKiBzdHlsZVNoZWV0KSB7IG1fc3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7
IH0KIAotICAgIGlubGluZSBib29sIGluU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dC5tb2RlID09IENTU1N0cmljdE1vZGUgfHwgbV9jb250ZXh0Lm1vZGUgPT0gU1ZHQXR0cmli
dXRlTW9kZTsgfQotICAgIGlubGluZSBib29sIGluUXVpcmtzTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGV4dC5tb2RlID09IENTU1F1aXJrc01vZGU7IH0KKyAgICBpbmxpbmUgYm9vbCBpblN0
cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQubW9kZSA9PSBVQVNoZWV0TW9kZSB8
fCBtX2NvbnRleHQubW9kZSA9PSBIVE1MU3RhbmRhcmRNb2RlIHx8IG1fY29udGV4dC5tb2RlID09
IFNWR0F0dHJpYnV0ZU1vZGU7IH0KKyAgICBpbmxpbmUgYm9vbCBpblF1aXJrc01vZGUoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtzTW9kZTsgfQogICAgIAogICAg
IFVSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyTW9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyTW9kZS5oCShyZXZpc2lvbiAyMDU0OTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlck1vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsMjEgKzM3LDUwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1l
bnQ7CiAKKy8vIE11c3Qgbm90IGdyb3cgYmV5b25kIDMgYml0cywgZHVlIHRvIHBhY2tpbmcgaW4g
U3R5bGVQcm9wZXJ0eVNldC4KIGVudW0gQ1NTUGFyc2VyTW9kZSB7Ci0gICAgQ1NTUXVpcmtzTW9k
ZSwKLSAgICBDU1NTdHJpY3RNb2RlLAotICAgIC8vIFNWRyBzaG91bGQgYWx3YXlzIGJlIGluIHN0
cmljdCBtb2RlLiBGb3IgU1ZHIGF0dHJpYnV0ZXMsIHRoZSBydWxlcyBkaWZmZXIgdG8gc3RyaWN0
IHNvbWV0aW1lcy4KLSAgICBTVkdBdHRyaWJ1dGVNb2RlCisgICAgSFRNTFN0YW5kYXJkTW9kZSwK
KyAgICBIVE1MUXVpcmtzTW9kZSwKKyAgICAvLyBIVE1MIGF0dHJpYnV0ZXMgYXJlIHBhcnNlZCBp
biBxdWlya3MgbW9kZSBidXQgYWxzbyBhbGxvd3MgaW50ZXJuYWwgcHJvcGVydGllcyBhbmQgdmFs
dWVzLgorICAgIEhUTUxBdHRyaWJ1dGVNb2RlLAorICAgIC8vIFNWRyBhdHRyaWJ1dGVzIGFyZSBw
YXJzZWQgaW4gcXVpcmtzIG1vZGUgYnV0IHJ1bGVzIGRpZmZlciBzbGlnaHRseS4KKyAgICBTVkdB
dHRyaWJ1dGVNb2RlLAorICAgIC8vIEB2aWV3cG9ydCBydWxlcyBhcmUgcGFyc2VkIGluIHN0YW5k
YXJkcyBtb2RlIGJ1dCBDU1NPTSBtb2RpZmljYXRpb25zICh2aWEgU3R5bGVQcm9wZXJ0eVNldCkK
KyAgICAvLyBtdXN0IGNhbGwgcGFyc2VWaWV3cG9ydFByb3BlcnRpZXMgc28gbmVlZHMgYSBzcGVj
aWFsIG1vZGUuCisgICAgQ1NTVmlld3BvcnRSdWxlTW9kZSwKKyAgICAvLyBVc2VyIGFnZW50IHN0
eWxlc2hlZXRzIGFyZSBwYXJzZWQgaW4gc3RhbmRhcmRzIG1vZGUgYnV0IGFsc28gYWxsb3dzIGlu
dGVybmFsIHByb3BlcnRpZXMgYW5kIHZhbHVlcy4KKyAgICBVQVNoZWV0TW9kZQogfTsKIAoraW5s
aW5lIGJvb2wgaXNRdWlya3NNb2RlQmVoYXZpb3IoQ1NTUGFyc2VyTW9kZSBtb2RlKQoreworICAg
IHJldHVybiBtb2RlID09IEhUTUxRdWlya3NNb2RlOyAvLyB8fCBtb2RlID09IEhUTUxBdHRyaWJ1
dGVNb2RlOworfQorCitpbmxpbmUgYm9vbCBpc1VBU2hlZXRCZWhhdmlvcihDU1NQYXJzZXJNb2Rl
IG1vZGUpCit7CisgICAgcmV0dXJuIG1vZGUgPT0gVUFTaGVldE1vZGU7Cit9CisKK2lubGluZSBi
b29sIGlzVW5pdExlc3NMZW5ndGhQYXJzaW5nRW5hYmxlZEZvck1vZGUoQ1NTUGFyc2VyTW9kZSBt
b2RlKQoreworICAgIHJldHVybiBtb2RlID09IEhUTUxBdHRyaWJ1dGVNb2RlIHx8IG1vZGUgPT0g
U1ZHQXR0cmlidXRlTW9kZTsKK30KKworaW5saW5lIGJvb2wgaXNDU1NWaWV3cG9ydFBhcnNpbmdF
bmFibGVkRm9yTW9kZShDU1NQYXJzZXJNb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIG1vZGUgPT0g
Q1NTVmlld3BvcnRSdWxlTW9kZTsKK30KKworLy8gRklYTUUtTkVXUEFSU0VSOiBOZXh0IHR3byBm
dW5jdGlvbnMgc2hvdWxkIGJlIHJlbW92ZWQgZXZlbnR1YWxseS4KIGlubGluZSBDU1NQYXJzZXJN
b2RlIHN0cmljdFRvQ1NTUGFyc2VyTW9kZShib29sIGluU3RyaWN0TW9kZSkKIHsKLSAgICByZXR1
cm4gaW5TdHJpY3RNb2RlID8gQ1NTU3RyaWN0TW9kZSA6IENTU1F1aXJrc01vZGU7CisgICAgcmV0
dXJuIGluU3RyaWN0TW9kZSA/IEhUTUxTdGFuZGFyZE1vZGUgOiBIVE1MUXVpcmtzTW9kZTsKIH0K
IAogaW5saW5lIGJvb2wgaXNTdHJpY3RQYXJzZXJNb2RlKENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSkKIHsKLSAgICByZXR1cm4gY3NzUGFyc2VyTW9kZSA9PSBDU1NTdHJpY3RNb2RlIHx8IGNz
c1BhcnNlck1vZGUgPT0gU1ZHQXR0cmlidXRlTW9kZTsKKyAgICByZXR1cm4gY3NzUGFyc2VyTW9k
ZSA9PSBVQVNoZWV0TW9kZSB8fCBjc3NQYXJzZXJNb2RlID09IEhUTUxTdGFuZGFyZE1vZGUgfHwg
Y3NzUGFyc2VyTW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlOwogfQogCiBzdHJ1Y3QgQ1NTUGFyc2Vy
Q29udGV4dCB7CkBAIC02Miw3ICs5MSw3IEBAIHB1YmxpYzoKIAogICAgIFVSTCBiYXNlVVJMOwog
ICAgIFN0cmluZyBjaGFyc2V0OwotICAgIENTU1BhcnNlck1vZGUgbW9kZSB7IENTU1N0cmljdE1v
ZGUgfTsKKyAgICBDU1NQYXJzZXJNb2RlIG1vZGUgeyBIVE1MU3RhbmRhcmRNb2RlIH07CiAgICAg
Ym9vbCBpc0hUTUxEb2N1bWVudCB7IGZhbHNlIH07CiAjaWYgRU5BQkxFKENTU19HUklEX0xBWU9V
VCkKICAgICBib29sIGNzc0dyaWRMYXlvdXRFbmFibGVkIHsgZmFsc2UgfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlclZhbHVlcy5jcHAJKHJldmlzaW9uIDIw
NTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkNTU1BhcnNlclZhbHVl
cy5oIgogCiAjaW5jbHVkZSAiQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIgorI2luY2x1ZGUgIkNT
U1BhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVk
ZSAiQ1NTRnVuY3Rpb25WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCkBAIC0yMTks
NiArMjIwLDI3IEBAIENTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGEKICAg
ICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOwogfQogCitDU1NQYXJzZXJTZWxlY3RvciogQ1NT
UGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRvRWxlbWVudFNlbGVjdG9yRnJvbVN0cmluZ1ZpZXco
U3RyaW5nVmlldyYgcHNldWRvVHlwZVN0cmluZykKK3sKKyAgICBjb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZUluUGxhY2UocHNldWRvVHlwZVN0cmluZyk7CisgICAgQXRvbWljU3RyaW5nIG5hbWUgPSBw
c2V1ZG9UeXBlU3RyaW5nLnRvQXRvbWljU3RyaW5nKCk7CisgICAgCisgICAgQ1NTU2VsZWN0b3I6
OlBzZXVkb0VsZW1lbnRUeXBlIHBzZXVkb1R5cGUgPSBDU1NTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9F
bGVtZW50VHlwZShuYW1lKTsKKyAgICBpZiAocHNldWRvVHlwZSA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRWxlbWVudFVua25vd24pCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIGF1
dG8gc2VsZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPigpOworICAg
IHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVu
dCk7CisgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBzZXVkb0VsZW1lbnRUeXBlKHBzZXVk
b1R5cGUpOworICAgIGlmIChwc2V1ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50
V2ViS2l0Q3VzdG9tTGVnYWN5UHJlZml4ZWQpIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShuYW1lID09ICItd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIiwgIi13ZWJraXQtaW5wdXQtcGxh
Y2Vob2xkZXIgaXMgdGhlIG9ubHkgTGVnYWN5UHJlZml4IHBzZXVkbyB0eXBlLiIpOworICAgICAg
ICBpZiAobmFtZSA9PSAiLXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciIpCisgICAgICAgICAgICBu
YW1lID0gQXRvbWljU3RyaW5nKCJwbGFjZWhvbGRlciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOworICAgIH0KKyAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0VmFsdWUo
bmFtZSk7CisgICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKK30KKwogI2lmIEVOQUJMRShW
SURFT19UUkFDSykKIENTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQ
c2V1ZG9FbGVtZW50Q3VlRnVuY3Rpb25TZWxlY3Rvcihjb25zdCBDU1NQYXJzZXJTdHJpbmcmIGZ1
bmN0aW9uSWRlbnRpZmllciwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rv
cj4+KiBwYXJzZWRTZWxlY3RvclZlY3RvcikKIHsKQEAgLTMwOCw2ICszMzAsMjkgQEAgQ1NTUGFy
c2VyU2VsZWN0b3IqIENTU1BhcnNlclNlbGVjdG9yOjpwYQogICAgIHJldHVybiBudWxscHRyOwog
fQogCitDU1NQYXJzZXJTZWxlY3RvciogQ1NTUGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRvQ2xh
c3NTZWxlY3RvckZyb21TdHJpbmdWaWV3KFN0cmluZ1ZpZXcmIHBzZXVkb1R5cGVTdHJpbmcpCit7
CisgICAgaWYgKHBzZXVkb1R5cGVTdHJpbmcubGVuZ3RoKCkgJiYgcHNldWRvVHlwZVN0cmluZ1tw
c2V1ZG9UeXBlU3RyaW5nLmxlbmd0aCgpIC0gMV0gPT0gJygnKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAKKyAgICBQc2V1ZG9DbGFzc09yQ29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQg
cHNldWRvVHlwZSA9IHBhcnNlUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudFN0cmlu
Zyhwc2V1ZG9UeXBlU3RyaW5nKTsKKyAgICBpZiAocHNldWRvVHlwZS5wc2V1ZG9DbGFzcyAhPSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NVbmtub3duKSB7CisgICAgICAgIGF1dG8gc2VsZWN0b3Ig
PSBzdGQ6Om1ha2VfdW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPigpOworICAgICAgICBzZWxlY3Rv
ci0+bV9zZWxlY3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKTsKKyAgICAg
ICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldFBzZXVkb0NsYXNzVHlwZShwc2V1ZG9UeXBlLnBz
ZXVkb0NsYXNzKTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKKyAgICB9Cisg
ICAgaWYgKHBzZXVkb1R5cGUuY29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQgIT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0VsZW1lbnRVbmtub3duKSB7CisgICAgICAgIGF1dG8gc2VsZWN0b3IgPSBzdGQ6
Om1ha2VfdW5pcXVlPENTU1BhcnNlclNlbGVjdG9yPigpOworICAgICAgICBzZWxlY3Rvci0+bV9z
ZWxlY3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpOworICAgICAgICBz
ZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0UHNldWRvRWxlbWVudFR5cGUocHNldWRvVHlwZS5jb21w
YXRpYmlsaXR5UHNldWRvRWxlbWVudCk7CisgICAgICAgIEF0b21pY1N0cmluZyBuYW1lID0gcHNl
dWRvVHlwZVN0cmluZy50b0F0b21pY1N0cmluZygpOworICAgICAgICBzZWxlY3Rvci0+bV9zZWxl
Y3Rvci0+c2V0VmFsdWUobmFtZSk7CisgICAgICAgIHJldHVybiBzZWxlY3Rvci5yZWxlYXNlKCk7
CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCiBDU1NQYXJzZXJTZWxlY3Rvcjo6Q1NT
UGFyc2VyU2VsZWN0b3IoKQogICAgIDogbV9zZWxlY3RvcihzdGQ6Om1ha2VfdW5pcXVlPENTU1Nl
bGVjdG9yPigpKQogewpAQCAtMzQ5LDcgKzM5NCwxMiBAQCB2b2lkIENTU1BhcnNlclNlbGVjdG9y
OjpzZXRMYW5nQXJndW1lbnRMCiAgICAgICAgIGFyZ3VtZW50TGlzdC0+YXBwZW5kKGxhbmd1YWdl
QXJndW1lbnQpOwogICAgIG1fc2VsZWN0b3ItPnNldExhbmdBcmd1bWVudExpc3QoV1RGTW92ZShh
cmd1bWVudExpc3QpKTsKIH0KLQorICAgIAordm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6c2V0U2Vs
ZWN0b3JMaXN0KHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvckxpc3Q+IHNlbGVjdG9yTGlzdCkK
K3sKKyAgICBtX3NlbGVjdG9yLT5zZXRTZWxlY3Rvckxpc3Qoc3RkOjptb3ZlKHNlbGVjdG9yTGlz
dCkpOworfQorICAgIAogdm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6c2V0UHNldWRvQ2xhc3NWYWx1
ZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHBzZXVkb0NsYXNzU3RyaW5nKQogewogICAgIEFTU0VS
VChtX3NlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyk7CkBAIC00
MjUsNiArNDc1LDE1IEBAIHZvaWQgQ1NTUGFyc2VyU2VsZWN0b3I6OmFwcGVuZFRhZ0hpc3RvcnkK
ICAgICBjYXNlIENTU1BhcnNlclNlbGVjdG9yQ29tYmluYXRvcjo6SW5kaXJlY3RBZGphY2VudDoK
ICAgICAgICAgc2VsZWN0b3JSZWxhdGlvbiA9IENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50
OwogICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1BhcnNlclNlbGVjdG9yQ29tYmluYXRvcjo6
U2hhZG93RGVlcDoKKyAgICAgICAgc2VsZWN0b3JSZWxhdGlvbiA9IENTU1NlbGVjdG9yOjpTaGFk
b3dEZWVwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1BhcnNlclNlbGVjdG9yQ29tYmlu
YXRvcjo6U2hhZG93UHNldWRvOgorICAgICAgICBzZWxlY3RvclJlbGF0aW9uID0gQ1NTU2VsZWN0
b3I6OlNoYWRvd1BzZXVkbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQYXJzZXJTZWxl
Y3RvckNvbWJpbmF0b3I6OlNoYWRvd1Nsb3Q6CisgICAgICAgIHNlbGVjdG9yUmVsYXRpb24gPSBD
U1NTZWxlY3Rvcjo6U2hhZG93U2xvdDsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVuZC0+
c2V0UmVsYXRpb24oc2VsZWN0b3JSZWxhdGlvbik7CiAKQEAgLTQ0Nyw1ICs1MDYsMTcgQEAgdm9p
ZCBDU1NQYXJzZXJTZWxlY3Rvcjo6cHJlcGVuZFRhZ1NlbGVjdAogICAgIG1fc2VsZWN0b3ItPnNl
dFJlbGF0aW9uKENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rvcik7CiB9CiAKK3N0ZDo6dW5pcXVlX3B0
cjxDU1NQYXJzZXJTZWxlY3Rvcj4gQ1NTUGFyc2VyU2VsZWN0b3I6OnJlbGVhc2VUYWdIaXN0b3J5
KCkKK3sKKyAgICBzZXRSZWxhdGlvbihDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpOworICAgIHJl
dHVybiBzdGQ6Om1vdmUobV90YWdIaXN0b3J5KTsKK30KKworLy8gRklYTUUtTkVXUEFSU0VSOiBB
ZGQgc3VwcG9ydCBmb3IgOmhvc3QtY29udGV4dAorYm9vbCBDU1NQYXJzZXJTZWxlY3Rvcjo6aXNI
b3N0UHNldWRvU2VsZWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBwc2V1ZG9DbGFzc1R5cGUo
KSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3N0OworfQorCiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuaAkocmV2aXNpb24gMjA1NDk5
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTkzLDcgKzE5MywxMCBAQCBlbnVtIGNsYXNzIENTU1BhcnNlclNlbGVjdG9y
Q29tYmluYXRvciB7CiAgICAgRGVzY2VuZGFudERvdWJsZUNoaWxkLAogI2VuZGlmCiAgICAgRGly
ZWN0QWRqYWNlbnQsCi0gICAgSW5kaXJlY3RBZGphY2VudAorICAgIEluZGlyZWN0QWRqYWNlbnQs
CisgICAgU2hhZG93UHNldWRvLCAvLyBTcGVjaWFsIGNhc2Ugb2Ygc2hhZG93IERPTSBwc2V1ZG8g
ZWxlbWVudHMgLyBzaGFkb3cgcHNldWRvIGVsZW1lbnQKKyAgICBTaGFkb3dEZWVwLCAvLyAvZGVl
cC8gY29tYmluYXRvcgorICAgIFNoYWRvd1Nsb3QgLy8gc2xvdHRlZCB0byA8c2xvdD4gZQogfTsK
IAogY2xhc3MgQ1NTUGFyc2VyU2VsZWN0b3IgewpAQCAtMjA2LDYgKzIwOSw5IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgQ1NTUGFyc2VyU2VsZWN0b3IqIHBhcnNlUHNldWRvQ2xhc3NIb3N0RnVuY3Rp
b25TZWxlY3Rvcihjb25zdCBDU1NQYXJzZXJTdHJpbmcmIGZ1bmN0aW9uSWRlbnRpZmllciwgQ1NT
UGFyc2VyU2VsZWN0b3IqKTsKICAgICBzdGF0aWMgQ1NTUGFyc2VyU2VsZWN0b3IqIHBhcnNlUHNl
dWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudFNlbGVjdG9yKENTU1BhcnNlclN0cmluZyYg
cHNldWRvVHlwZVN0cmluZyk7CiAKKyAgICBzdGF0aWMgQ1NTUGFyc2VyU2VsZWN0b3IqIHBhcnNl
UHNldWRvQ2xhc3NTZWxlY3RvckZyb21TdHJpbmdWaWV3KFN0cmluZ1ZpZXcmKTsKKyAgICBzdGF0
aWMgQ1NTUGFyc2VyU2VsZWN0b3IqIHBhcnNlUHNldWRvRWxlbWVudFNlbGVjdG9yRnJvbVN0cmlu
Z1ZpZXcoU3RyaW5nVmlldyYpOworICAgIAogICAgIENTU1BhcnNlclNlbGVjdG9yKCk7CiAgICAg
ZXhwbGljaXQgQ1NTUGFyc2VyU2VsZWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIH5D
U1NQYXJzZXJTZWxlY3RvcigpOwpAQCAtMjIwLDggKzIyNiwxMyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRSZWxhdGlvbihDU1NTZWxlY3Rvcjo6UmVsYXRpb24gdmFsdWUpIHsgbV9zZWxlY3Rvci0+
c2V0UmVsYXRpb24odmFsdWUpOyB9CiAgICAgdm9pZCBzZXRGb3JQYWdlKCkgeyBtX3NlbGVjdG9y
LT5zZXRGb3JQYWdlKCk7IH0KIAorICAgIENTU1NlbGVjdG9yOjpNYXRjaCBtYXRjaCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsZWN0b3ItPm1hdGNoKCk7IH0KKyAgICBDU1NTZWxlY3Rvcjo6UHNldWRv
RWxlbWVudFR5cGUgcHNldWRvRWxlbWVudFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9y
LT5wc2V1ZG9FbGVtZW50VHlwZSgpOyB9CisgICAgY29uc3QgQ1NTU2VsZWN0b3JMaXN0KiBzZWxl
Y3Rvckxpc3QoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yLT5zZWxlY3Rvckxpc3QoKTsgfQor
CiAgICAgdm9pZCBhZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+PiYgc2VsZWN0b3JWZWN0b3IpOwogICAgIHZvaWQgc2V0TGFuZ0FyZ3Vt
ZW50TGlzdChjb25zdCBWZWN0b3I8Q1NTUGFyc2VyU3RyaW5nPiYgc3RyaW5nVmVjdG9yKTsKKyAg
ICB2b2lkIHNldFNlbGVjdG9yTGlzdChzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3JMaXN0Pik7
CiAKICAgICB2b2lkIHNldFBzZXVkb0NsYXNzVmFsdWUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBw
c2V1ZG9DbGFzc1N0cmluZyk7CiAgICAgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSBwc2V1
ZG9DbGFzc1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUo
KTsgfQpAQCAtMjM5LDYgKzI1MCwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTaGFkb3dEZXNj
ZW5kYW50KCkgY29uc3Q7CiAgICAgYm9vbCBtYXRjaGVzUHNldWRvRWxlbWVudCgpIGNvbnN0Owog
CisgICAgYm9vbCBpc0hvc3RQc2V1ZG9TZWxlY3RvcigpIGNvbnN0OworCisgICAgLy8gRklYTUUt
TkVXUEFSU0VSOiBNaXNzaW5nICJzaGFkb3ciCisgICAgYm9vbCBuZWVkc0ltcGxpY2l0U2hhZG93
Q29tYmluYXRvckZvck1hdGNoaW5nKCkgY29uc3QgeyByZXR1cm4gcHNldWRvRWxlbWVudFR5cGUo
KSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFdlYktpdEN1c3RvbSB8fCBwc2V1ZG9FbGVt
ZW50VHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50VXNlckFnZW50Q3VzdG9tIHx8
IHBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRD
dXN0b21MZWdhY3lQcmVmaXhlZCB8fCBwc2V1ZG9FbGVtZW50VHlwZSgpID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9FbGVtZW50Q3VlIHx8IHBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6
OlBzZXVkb0VsZW1lbnRTbG90dGVkOyB9CisKICAgICBDU1NQYXJzZXJTZWxlY3RvciogdGFnSGlz
dG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnSGlzdG9yeS5nZXQoKTsgfQogICAgIHZvaWQgc2V0
VGFnSGlzdG9yeShzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9yKSB7
IG1fdGFnSGlzdG9yeSA9IFdURk1vdmUoc2VsZWN0b3IpOyB9CiAgICAgdm9pZCBjbGVhclRhZ0hp
c3RvcnkoKSB7IG1fdGFnSGlzdG9yeS5yZXNldCgpOyB9CkBAIC0yNDYsNiArMjYyLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgYXBwZW5kVGFnSGlzdG9yeShDU1NTZWxlY3Rvcjo6UmVsYXRpb24sIHN0
ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4pOwogICAgIHZvaWQgYXBwZW5kVGFnSGlz
dG9yeShDU1NQYXJzZXJTZWxlY3RvckNvbWJpbmF0b3IsIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJz
ZXJTZWxlY3Rvcj4pOwogICAgIHZvaWQgcHJlcGVuZFRhZ1NlbGVjdG9yKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBib29sIHRhZ0lzRm9yTmFtZXNwYWNlUnVsZSA9IGZhbHNlKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHJlbGVhc2VUYWdIaXN0b3J5KCk7CiAKIHByaXZh
dGU6CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUlNfTEVWRUw0KQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaAkocmV2aXNpb24gMjA1NDk5KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBjb25zdW1lQ1NTV2lk
ZUtleXdvcmQoQ1NTUHJvcGVydHlJRCB1bnJlc29sdmVkUHJvcGVydHksIGJvb2wgaW1wb3J0YW50
KTsKICAgICBjb25zdCBDU1NWYWx1ZSogcGFyc2VTaW5nbGVWYWx1ZShDU1NQcm9wZXJ0eUlELCBD
U1NQcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKIAotICAgIGJvb2wgaW5RdWlya3NN
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0Lm1vZGUgPT0gQ1NTUXVpcmtzTW9kZTsgfQor
ICAgIGJvb2wgaW5RdWlya3NNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0Lm1vZGUgPT0g
SFRNTFF1aXJrc01vZGU7IH0KIAogICAgIGJvb2wgcGFyc2VWaWV3cG9ydERlc2NyaXB0b3IoQ1NT
UHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKICAgICBib29sIHBhcnNlRm9udEZh
Y2VEZXNjcmlwdG9yKENTU1Byb3BlcnR5SUQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NzAgQEAKKy8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
Ky8vIG1ldDoKKy8vCisvLyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1dGlvbi4KKy8vICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8v
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisv
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU1NlbGVjdG9yUGFyc2Vy
LmgiCisKKyNpbmNsdWRlICJDU1NQYXJzZXJNb2RlLmgiCisjaW5jbHVkZSAiQ1NTU2VsZWN0b3JM
aXN0LmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCisjaW5jbHVkZSA8bWVtb3J5
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NTU1NlbGVjdG9yTGlzdCBDU1NTZWxlY3RvclBh
cnNlcjo6cGFyc2VTZWxlY3RvcihDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBjb25zdCBDU1NQ
YXJzZXJDb250ZXh0JiBjb250ZXh0LCBTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxlU2hlZXQpCit7
CisgICAgQ1NTU2VsZWN0b3JQYXJzZXIgcGFyc2VyKGNvbnRleHQsIHN0eWxlU2hlZXQpOworICAg
IHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgQ1NTU2VsZWN0b3JMaXN0IHJlc3VsdCA9
IHBhcnNlci5jb25zdW1lQ29tcGxleFNlbGVjdG9yTGlzdChyYW5nZSk7CisgICAgaWYgKCFyYW5n
ZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gQ1NTU2VsZWN0b3JMaXN0KCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworQ1NTU2VsZWN0b3JQYXJzZXI6OkNTU1NlbGVjdG9yUGFyc2VyKGNvbnN0
IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQsIFN0eWxlU2hlZXRDb250ZW50cyogc3R5bGVTaGVl
dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9zdHlsZVNoZWV0KHN0eWxlU2hl
ZXQpCit7Cit9CisKK0NTU1NlbGVjdG9yTGlzdCBDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZUNv
bXBsZXhTZWxlY3Rvckxpc3QoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+IHNlbGVjdG9yTGlzdDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9yID0gY29uc3VtZUNv
bXBsZXhTZWxlY3RvcihyYW5nZSk7CisgICAgaWYgKCFzZWxlY3RvcikKKyAgICAgICAgcmV0dXJu
IENTU1NlbGVjdG9yTGlzdCgpOworICAgIHNlbGVjdG9yTGlzdC5hcHBlbmQoc3RkOjptb3ZlKHNl
bGVjdG9yKSk7CisgICAgd2hpbGUgKCFyYW5nZS5hdEVuZCgpICYmIHJhbmdlLnBlZWsoKS50eXBl
KCkgPT0gQ29tbWFUb2tlbikgeworICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpOworICAgICAgICBzZWxlY3RvciA9IGNvbnN1bWVDb21wbGV4U2VsZWN0b3IocmFuZ2Up
OworICAgICAgICBpZiAoIXNlbGVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIENTU1NlbGVjdG9y
TGlzdCgpOworICAgICAgICBzZWxlY3Rvckxpc3QuYXBwZW5kKHN0ZDo6bW92ZShzZWxlY3Rvcikp
OworICAgIH0KKworICAgIENTU1NlbGVjdG9yTGlzdCBsaXN0OworICAgIGlmIChtX2ZhaWxlZFBh
cnNpbmcpCisgICAgICAgIHJldHVybiBsaXN0OworICAgIGxpc3QuYWRvcHRTZWxlY3RvclZlY3Rv
cihzZWxlY3Rvckxpc3QpOworICAgIHJldHVybiBsaXN0OworfQorCitDU1NTZWxlY3Rvckxpc3Qg
Q1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVDb21wb3VuZFNlbGVjdG9yTGlzdChDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNl
clNlbGVjdG9yPj4gc2VsZWN0b3JMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJT
ZWxlY3Rvcj4gc2VsZWN0b3IgPSBjb25zdW1lQ29tcG91bmRTZWxlY3RvcihyYW5nZSk7CisgICAg
cmFuZ2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICBpZiAoIXNlbGVjdG9yKQorICAgICAgICBy
ZXR1cm4gQ1NTU2VsZWN0b3JMaXN0KCk7CisgICAgc2VsZWN0b3JMaXN0LmFwcGVuZChzdGQ6Om1v
dmUoc2VsZWN0b3IpKTsKKyAgICB3aGlsZSAoIXJhbmdlLmF0RW5kKCkgJiYgcmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBDb21tYVRva2VuKSB7CisgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCk7CisgICAgICAgIHNlbGVjdG9yID0gY29uc3VtZUNvbXBvdW5kU2VsZWN0b3Io
cmFuZ2UpOworICAgICAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgICAgICBpZiAo
IXNlbGVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIENTU1NlbGVjdG9yTGlzdCgpOworICAgICAg
ICBzZWxlY3Rvckxpc3QuYXBwZW5kKHN0ZDo6bW92ZShzZWxlY3RvcikpOworICAgIH0KKworICAg
IENTU1NlbGVjdG9yTGlzdCBsaXN0OworICAgIGlmIChtX2ZhaWxlZFBhcnNpbmcpCisgICAgICAg
IHJldHVybiBsaXN0OworICAgIGxpc3QuYWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3Rvckxpc3Qp
OworICAgIHJldHVybiBsaXN0OworfQorCituYW1lc3BhY2UgeworCitlbnVtIENvbXBvdW5kU2Vs
ZWN0b3JGbGFncyB7CisgICAgSGFzUHNldWRvRWxlbWVudEZvclJpZ2h0bW9zdENvbXBvdW5kID0g
MSA8PCAwLAorICAgIEhhc0NvbnRlbnRQc2V1ZG9FbGVtZW50ID0gMSA8PCAxCit9OworCit1bnNp
Z25lZCBleHRyYWN0Q29tcG91bmRGbGFncyhjb25zdCBDU1NQYXJzZXJTZWxlY3RvciYgc2ltcGxl
U2VsZWN0b3IsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSkKK3sKKyAgICBpZiAoc2ltcGxlU2Vs
ZWN0b3IubWF0Y2goKSAhPSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBUaGVzZSBkb24ndCBleGlzdCBmb3IgdXMs
IHNvIG1heSBuZWVkIHRvIHJldmlzaXQuCisgICAgLy9pZiAoc2ltcGxlU2VsZWN0b3IucHNldWRv
RWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ29udGVudCkKKyAgICAvLyAgICBy
ZXR1cm4gSGFzQ29udGVudFBzZXVkb0VsZW1lbnQ7CisgICAgLy9pZiAoc2ltcGxlU2VsZWN0b3Iu
cHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvU2hhZG93KQorICAgIC8v
ICAgIHJldHVybiAwOworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYxNzQ3CisgICAgLy8gVGhlIFVBU2hlZXRNb2RlIGNoZWNrIGlzIGEgd29y
ay1hcm91bmQgdG8gYWxsb3cgdGhpcyBzZWxlY3RvciBpbiBtZWRpYUNvbnRyb2xzKE5ldykuY3Nz
OgorICAgIC8vIGlucHV0W3R5cGU9InJhbmdlIiBpXTo6LXdlYmtpdC1tZWRpYS1zbGlkZXItY29u
dGFpbmVyID4gZGl2IHsKKyAgICBpZiAocGFyc2VyTW9kZSA9PSBVQVNoZWV0TW9kZSAmJiBzaW1w
bGVTZWxlY3Rvci5wc2V1ZG9FbGVtZW50VHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVt
ZW50V2ViS2l0Q3VzdG9tKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gSGFzUHNldWRv
RWxlbWVudEZvclJpZ2h0bW9zdENvbXBvdW5kOworfQorCit9IC8vIG5hbWVzcGFjZQorCitzdGQ6
OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1l
Q29tcGxleFNlbGVjdG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHN0ZDo6
dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2VsZWN0b3IgPSBjb25zdW1lQ29tcG91bmRT
ZWxlY3RvcihyYW5nZSk7CisgICAgaWYgKCFzZWxlY3RvcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKworICAgIHVuc2lnbmVkIHByZXZpb3VzQ29tcG91bmRGbGFncyA9IDA7CisKKyAgICBm
b3IgKENTU1BhcnNlclNlbGVjdG9yKiBzaW1wbGUgPSBzZWxlY3Rvci5nZXQoKTsgc2ltcGxlICYm
ICFwcmV2aW91c0NvbXBvdW5kRmxhZ3M7IHNpbXBsZSA9IHNpbXBsZS0+dGFnSGlzdG9yeSgpKQor
ICAgICAgICBwcmV2aW91c0NvbXBvdW5kRmxhZ3MgfD0gZXh0cmFjdENvbXBvdW5kRmxhZ3MoKnNp
bXBsZSwgbV9jb250ZXh0Lm1vZGUpOworCisgICAgd2hpbGUgKENTU1NlbGVjdG9yOjpSZWxhdGlv
biBjb21iaW5hdG9yID0gY29uc3VtZUNvbWJpbmF0b3IocmFuZ2UpKSB7CisgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gbmV4dFNlbGVjdG9yID0gY29uc3VtZUNvbXBv
dW5kU2VsZWN0b3IocmFuZ2UpOworICAgICAgICBpZiAoIW5leHRTZWxlY3RvcikKKyAgICAgICAg
ICAgIHJldHVybiBjb21iaW5hdG9yID09IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50ID8gc3RkOjpt
b3ZlKHNlbGVjdG9yKSA6IG51bGxwdHI7CisgICAgICAgIGlmIChwcmV2aW91c0NvbXBvdW5kRmxh
Z3MgJiBIYXNQc2V1ZG9FbGVtZW50Rm9yUmlnaHRtb3N0Q29tcG91bmQpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgQ1NTUGFyc2VyU2VsZWN0b3IqIGVuZCA9IG5leHRTZWxl
Y3Rvci5nZXQoKTsKKyAgICAgICAgdW5zaWduZWQgY29tcG91bmRGbGFncyA9IGV4dHJhY3RDb21w
b3VuZEZsYWdzKCplbmQsIG1fY29udGV4dC5tb2RlKTsKKyAgICAgICAgd2hpbGUgKGVuZC0+dGFn
SGlzdG9yeSgpKSB7CisgICAgICAgICAgICBlbmQgPSBlbmQtPnRhZ0hpc3RvcnkoKTsKKyAgICAg
ICAgICAgIGNvbXBvdW5kRmxhZ3MgfD0gZXh0cmFjdENvbXBvdW5kRmxhZ3MoKmVuZCwgbV9jb250
ZXh0Lm1vZGUpOworICAgICAgICB9CisgICAgICAgIGVuZC0+c2V0UmVsYXRpb24oY29tYmluYXRv
cik7CisgICAgICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogU2hhZG93IHN0dWZmLgorICAgICAgICAv
L2lmIChwcmV2aW91c0NvbXBvdW5kRmxhZ3MgJiBIYXNDb250ZW50UHNldWRvRWxlbWVudCkKKyAg
ICAgICAgLy8gICAgZW5kLT5zZXRSZWxhdGlvbklzQWZmZWN0ZWRCeVBzZXVkb0NvbnRlbnQoKTsK
KyAgICAgICAgcHJldmlvdXNDb21wb3VuZEZsYWdzID0gY29tcG91bmRGbGFnczsKKyAgICAgICAg
ZW5kLT5zZXRUYWdIaXN0b3J5KHN0ZDo6bW92ZShzZWxlY3RvcikpOworCisgICAgICAgIHNlbGVj
dG9yID0gc3RkOjptb3ZlKG5leHRTZWxlY3Rvcik7CisgICAgfQorCisgICAgcmV0dXJuIHNlbGVj
dG9yOworfQorCituYW1lc3BhY2UgeworCitib29sIGlzU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSBwc2V1ZG8pCit7CisgICAgc3dpdGNoIChwc2V1ZG8p
IHsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0VuYWJsZWQ6CisgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NEaXNhYmxlZDoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0hvdmVyOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQWN0aXZl
OgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG9yaXpvbnRhbDoKKyAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1ZlcnRpY2FsOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzRGVjcmVtZW50OgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
SW5jcmVtZW50OgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzU3RhcnQ6CisgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NFbmQ6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NEb3VibGVCdXR0b246CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NTaW5nbGVCdXR0b246CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NOb0J1dHRv
bjoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Nvcm5lclByZXNlbnQ6CisgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NXaW5kb3dJbmFjdGl2ZToKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworYm9vbCBpc1VzZXJBY3Rpb25Qc2V1ZG9DbGFzcyhDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NU
eXBlIHBzZXVkbykKK3sKKyAgICBzd2l0Y2ggKHBzZXVkbykgeworICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzSG92ZXI6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NG
b2N1czoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FjdGl2ZToKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBpc1BzZXVkb0NsYXNzVmFsaWRBZnRlclBzZXVkb0VsZW1lbnQoQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzVHlwZSBwc2V1ZG9DbGFzcywgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1l
bnRUeXBlIGNvbXBvdW5kUHNldWRvRWxlbWVudCkKK3sKKyAgICBzd2l0Y2ggKGNvbXBvdW5kUHNl
dWRvRWxlbWVudCkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRSZXNpemVy
OgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRTY3JvbGxiYXI6CisgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFNjcm9sbGJhckNvcm5lcjoKKyAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50U2Nyb2xsYmFyQnV0dG9uOgorICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0VsZW1lbnRTY3JvbGxiYXJUaHVtYjoKKyAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9FbGVtZW50U2Nyb2xsYmFyVHJhY2s6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRWxlbWVudFNjcm9sbGJhclRyYWNrUGllY2U6CisgICAgICAgIHJldHVybiBpc1Njcm9sbGJh
clBzZXVkb0NsYXNzKHBzZXVkb0NsYXNzKTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9F
bGVtZW50U2VsZWN0aW9uOgorICAgICAgICByZXR1cm4gcHNldWRvQ2xhc3MgPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzV2luZG93SW5hY3RpdmU7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRWxlbWVudFdlYktpdEN1c3RvbToKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVt
ZW50V2ViS2l0Q3VzdG9tTGVnYWN5UHJlZml4ZWQ6CisgICAgICAgcmV0dXJuIGlzVXNlckFjdGlv
blBzZXVkb0NsYXNzKHBzZXVkb0NsYXNzKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitib29sIGlzU2ltcGxlU2VsZWN0b3JWYWxpZEFmdGVyUHNldWRv
RWxlbWVudChjb25zdCBDU1NQYXJzZXJTZWxlY3RvciYgc2ltcGxlU2VsZWN0b3IsIENTU1NlbGVj
dG9yOjpQc2V1ZG9FbGVtZW50VHlwZSBjb21wb3VuZFBzZXVkb0VsZW1lbnQpCit7CisgICAgaWYg
KGNvbXBvdW5kUHNldWRvRWxlbWVudCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFVua25v
d24pCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogVGhpcyBk
b2Vzbid0IGV4aXN0IGZvciB1cy4KKyAgICAvL2lmIChjb21wb3VuZFBzZXVkb0VsZW1lbnQgPT0g
Q1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDb250ZW50KQorICAgIC8vICAgIHJldHVybiBzaW1w
bGVTZWxlY3Rvci5tYXRjaCgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50OworICAgIGlm
IChzaW1wbGVTZWxlY3Rvci5tYXRjaCgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUgcHNl
dWRvID0gc2ltcGxlU2VsZWN0b3IucHNldWRvQ2xhc3NUeXBlKCk7CisgICAgaWYgKHBzZXVkbyA9
PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NOb3QpIHsKKyAgICAgICAgQVNTRVJUKHNpbXBsZVNl
bGVjdG9yLnNlbGVjdG9yTGlzdCgpKTsKKyAgICAgICAgQVNTRVJUKHNpbXBsZVNlbGVjdG9yLnNl
bGVjdG9yTGlzdCgpLT5maXJzdCgpKTsKKyAgICAgICAgQVNTRVJUKCFzaW1wbGVTZWxlY3Rvci5z
ZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKS0+dGFnSGlzdG9yeSgpKTsKKyAgICAgICAgcHNldWRvID0g
c2ltcGxlU2VsZWN0b3Iuc2VsZWN0b3JMaXN0KCktPmZpcnN0KCktPnBzZXVkb0NsYXNzVHlwZSgp
OworICAgIH0KKyAgICByZXR1cm4gaXNQc2V1ZG9DbGFzc1ZhbGlkQWZ0ZXJQc2V1ZG9FbGVtZW50
KHBzZXVkbywgY29tcG91bmRQc2V1ZG9FbGVtZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwor
c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZWxlY3RvclBhcnNlcjo6Y29u
c3VtZUNvbXBvdW5kU2VsZWN0b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAg
c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBjb21wb3VuZFNlbGVjdG9yOworCisg
ICAgQXRvbWljU3RyaW5nIG5hbWVzcGFjZVByZWZpeDsKKyAgICBBdG9taWNTdHJpbmcgZWxlbWVu
dE5hbWU7CisgICAgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRUeXBlIGNvbXBvdW5kUHNldWRv
RWxlbWVudCA9IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50VW5rbm93bjsKKyAgICBpZiAoIWNv
bnN1bWVOYW1lKHJhbmdlLCBlbGVtZW50TmFtZSwgbmFtZXNwYWNlUHJlZml4KSkgeworICAgICAg
ICBjb21wb3VuZFNlbGVjdG9yID0gY29uc3VtZVNpbXBsZVNlbGVjdG9yKHJhbmdlKTsKKyAgICAg
ICAgaWYgKCFjb21wb3VuZFNlbGVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIGlmIChjb21wb3VuZFNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1
ZG9FbGVtZW50KQorICAgICAgICAgICAgY29tcG91bmRQc2V1ZG9FbGVtZW50ID0gY29tcG91bmRT
ZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKTsKKyAgICB9CisgICAgaWYgKG1fY29udGV4dC5p
c0hUTUxEb2N1bWVudCkKKyAgICAgICAgZWxlbWVudE5hbWUgPSBlbGVtZW50TmFtZS5jb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZSgpOworCisgICAgd2hpbGUgKHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJz
ZXJTZWxlY3Rvcj4gc2ltcGxlU2VsZWN0b3IgPSBjb25zdW1lU2ltcGxlU2VsZWN0b3IocmFuZ2Up
KSB7CisgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYxNzQ3CisgICAgICAgIC8vIFRoZSBVQVNoZWV0TW9kZSBjaGVjayBpcyBhIHdvcmst
YXJvdW5kIHRvIGFsbG93IHRoaXMgc2VsZWN0b3IgaW4gbWVkaWFDb250cm9scyhOZXcpLmNzczoK
KyAgICAgICAgLy8gdmlkZW86Oi13ZWJraXQtbWVkaWEtdGV4dC10cmFjay1yZWdpb24tY29udGFp
bmVyLnNjcm9sbGluZworICAgICAgICBpZiAobV9jb250ZXh0Lm1vZGUgIT0gVUFTaGVldE1vZGUg
JiYgIWlzU2ltcGxlU2VsZWN0b3JWYWxpZEFmdGVyUHNldWRvRWxlbWVudCgqc2ltcGxlU2VsZWN0
b3IuZ2V0KCksIGNvbXBvdW5kUHNldWRvRWxlbWVudCkpIHsKKyAgICAgICAgICAgIG1fZmFpbGVk
UGFyc2luZyA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoc2ltcGxlU2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b0VsZW1lbnQpCisgICAgICAgICAgICBjb21wb3VuZFBzZXVkb0VsZW1lbnQgPSBzaW1wbGVTZWxl
Y3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKTsKKworICAgICAgICBpZiAoY29tcG91bmRTZWxlY3Rv
cikKKyAgICAgICAgICAgIGNvbXBvdW5kU2VsZWN0b3IgPSBhZGRTaW1wbGVTZWxlY3RvclRvQ29t
cG91bmQoc3RkOjptb3ZlKGNvbXBvdW5kU2VsZWN0b3IpLCBzdGQ6Om1vdmUoc2ltcGxlU2VsZWN0
b3IpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcG91bmRTZWxlY3RvciA9IHN0ZDo6
bW92ZShzaW1wbGVTZWxlY3Rvcik7CisgICAgfQorCisgICAgaWYgKCFjb21wb3VuZFNlbGVjdG9y
KSB7CisgICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VVUkkgPSBkZXRlcm1pbmVOYW1lc3Bh
Y2UobmFtZXNwYWNlUHJlZml4KTsKKyAgICAgICAgaWYgKG5hbWVzcGFjZVVSSS5pc051bGwoKSkg
eworICAgICAgICAgICAgbV9mYWlsZWRQYXJzaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisgICAgICAgIGlmIChuYW1lc3BhY2VVUkkgPT0gZGVmYXVs
dE5hbWVzcGFjZSgpKQorICAgICAgICAgICAgbmFtZXNwYWNlUHJlZml4ID0gbnVsbEF0b207Cisg
ICAgICAgIAorICAgICAgICBDU1NQYXJzZXJTZWxlY3RvciogcmF3U2VsZWN0b3IgPSBuZXcgQ1NT
UGFyc2VyU2VsZWN0b3IoUXVhbGlmaWVkTmFtZShuYW1lc3BhY2VQcmVmaXgsIGVsZW1lbnROYW1l
LCBuYW1lc3BhY2VVUkkpKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVj
dG9yPiBzZWxlY3RvciA9IHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4ocmF3U2Vs
ZWN0b3IpOworICAgICAgICByZXR1cm4gc2VsZWN0b3I7CisgICAgfQorICAgIHByZXBlbmRUeXBl
U2VsZWN0b3JJZk5lZWRlZChuYW1lc3BhY2VQcmVmaXgsIGVsZW1lbnROYW1lLCBjb21wb3VuZFNl
bGVjdG9yLmdldCgpKTsKKyAgICByZXR1cm4gc3BsaXRDb21wb3VuZEF0SW1wbGljaXRTaGFkb3dD
cm9zc2luZ0NvbWJpbmF0b3Ioc3RkOjptb3ZlKGNvbXBvdW5kU2VsZWN0b3IpKTsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3Vt
ZVNpbXBsZVNlbGVjdG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGNvbnN0
IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9yOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0g
SGFzaFRva2VuKQorICAgICAgICBzZWxlY3RvciA9IGNvbnN1bWVJZChyYW5nZSk7CisgICAgZWxz
ZSBpZiAodG9rZW4udHlwZSgpID09IERlbGltaXRlclRva2VuICYmIHRva2VuLmRlbGltaXRlcigp
ID09ICcuJykKKyAgICAgICAgc2VsZWN0b3IgPSBjb25zdW1lQ2xhc3MocmFuZ2UpOworICAgIGVs
c2UgaWYgKHRva2VuLnR5cGUoKSA9PSBMZWZ0QnJhY2tldFRva2VuKQorICAgICAgICBzZWxlY3Rv
ciA9IGNvbnN1bWVBdHRyaWJ1dGUocmFuZ2UpOworICAgIGVsc2UgaWYgKHRva2VuLnR5cGUoKSA9
PSBDb2xvblRva2VuKQorICAgICAgICBzZWxlY3RvciA9IGNvbnN1bWVQc2V1ZG8ocmFuZ2UpOwor
ICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFzZWxlY3RvcikKKyAg
ICAgICAgbV9mYWlsZWRQYXJzaW5nID0gdHJ1ZTsKKyAgICByZXR1cm4gc2VsZWN0b3I7Cit9CisK
K2Jvb2wgQ1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVOYW1lKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBBdG9taWNTdHJpbmcmIG5hbWUsIEF0b21pY1N0cmluZyYgbmFtZXNwYWNlUHJlZml4
KQoreworICAgIG5hbWUgPSBudWxsQXRvbTsKKyAgICBuYW1lc3BhY2VQcmVmaXggPSBudWxsQXRv
bTsKKworICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBmaXJzdFRva2VuID0gcmFuZ2UucGVlaygp
OworICAgIGlmIChmaXJzdFRva2VuLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CisgICAgICAgIG5h
bWUgPSBmaXJzdFRva2VuLnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKTsKKyAgICAgICAgcmFuZ2Uu
Y29uc3VtZSgpOworICAgIH0gZWxzZSBpZiAoZmlyc3RUb2tlbi50eXBlKCkgPT0gRGVsaW1pdGVy
VG9rZW4gJiYgZmlyc3RUb2tlbi5kZWxpbWl0ZXIoKSA9PSAnKicpIHsKKyAgICAgICAgbmFtZSA9
IHN0YXJBdG9tOworICAgICAgICByYW5nZS5jb25zdW1lKCk7CisgICAgfSBlbHNlIGlmIChmaXJz
dFRva2VuLnR5cGUoKSA9PSBEZWxpbWl0ZXJUb2tlbiAmJiBmaXJzdFRva2VuLmRlbGltaXRlcigp
ID09ICd8JykgeworICAgICAgICAvLyBUaGlzIGlzIGFuIGVtcHR5IG5hbWVzcGFjZSwgd2hpY2gn
bGwgZ2V0IGFzc2lnbmVkIHRoaXMgdmFsdWUgYmVsb3cKKyAgICAgICAgbmFtZSA9IGVtcHR5QXRv
bTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJhbmdlLnBl
ZWsoKS50eXBlKCkgIT0gRGVsaW1pdGVyVG9rZW4gfHwgcmFuZ2UucGVlaygpLmRlbGltaXRlcigp
ICE9ICd8JykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmFuZ2UuY29uc3VtZSgpOworCisg
ICAgbmFtZXNwYWNlUHJlZml4ID0gbmFtZTsKKyAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgbmFt
ZVRva2VuID0gcmFuZ2UuY29uc3VtZSgpOworICAgIGlmIChuYW1lVG9rZW4udHlwZSgpID09IElk
ZW50VG9rZW4pIHsKKyAgICAgICAgbmFtZSA9IG5hbWVUb2tlbi52YWx1ZSgpLnRvQXRvbWljU3Ry
aW5nKCk7CisgICAgfSBlbHNlIGlmIChuYW1lVG9rZW4udHlwZSgpID09IERlbGltaXRlclRva2Vu
ICYmIG5hbWVUb2tlbi5kZWxpbWl0ZXIoKSA9PSAnKicpCisgICAgICAgIG5hbWUgPSBzdGFyQXRv
bTsKKyAgICBlbHNlIHsKKyAgICAgICAgbmFtZSA9IG51bGxBdG9tOworICAgICAgICBuYW1lc3Bh
Y2VQcmVmaXggPSBudWxsQXRvbTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENT
U1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lSWQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7
CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gSGFzaFRva2VuKTsKKyAgICBpZiAo
cmFuZ2UucGVlaygpLmdldEhhc2hUb2tlblR5cGUoKSAhPSBIYXNoVG9rZW5JZCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBz
ZWxlY3RvciA9IHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4obmV3IENTU1BhcnNl
clNlbGVjdG9yKCkpOworICAgIHNlbGVjdG9yLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6SWQpOwor
ICAgIEF0b21pY1N0cmluZyB2YWx1ZSA9IHJhbmdlLmNvbnN1bWUoKS52YWx1ZSgpLnRvQXRvbWlj
U3RyaW5nKCk7CisgICAgc2VsZWN0b3ItPnNldFZhbHVlKHZhbHVlKTsKKyAgICByZXR1cm4gc2Vs
ZWN0b3I7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gQ1NTU2VsZWN0
b3JQYXJzZXI6OmNvbnN1bWVDbGFzcyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAg
ICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEZWxpbWl0ZXJUb2tlbik7CisgICAgQVNT
RVJUKHJhbmdlLnBlZWsoKS5kZWxpbWl0ZXIoKSA9PSAnLicpOworICAgIHJhbmdlLmNvbnN1bWUo
KTsKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVudFRva2VuKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNl
bGVjdG9yID0gc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPihuZXcgQ1NTUGFyc2Vy
U2VsZWN0b3IoKSk7CisgICAgc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpDbGFzcyk7
CisgICAgQXRvbWljU3RyaW5nIHZhbHVlID0gcmFuZ2UuY29uc3VtZSgpLnZhbHVlKCkudG9BdG9t
aWNTdHJpbmcoKTsKKyAgICBzZWxlY3Rvci0+c2V0VmFsdWUodmFsdWUpOworICAgIHJldHVybiBz
ZWxlY3RvcjsKK30KKworc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZWxl
Y3RvclBhcnNlcjo6Y29uc3VtZUF0dHJpYnV0ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkK
K3sKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBMZWZ0QnJhY2tldFRva2VuKTsK
KyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGJsb2NrID0gcmFuZ2UuY29uc3VtZUJsb2NrKCk7Cisg
ICAgYmxvY2suY29uc3VtZVdoaXRlc3BhY2UoKTsKKworICAgIEF0b21pY1N0cmluZyBuYW1lc3Bh
Y2VQcmVmaXg7CisgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5hbWU7CisgICAgaWYgKCFjb25z
dW1lTmFtZShibG9jaywgYXR0cmlidXRlTmFtZSwgbmFtZXNwYWNlUHJlZml4KSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgYmxvY2suY29uc3VtZVdoaXRlc3BhY2UoKTsKKworICAgIGlm
IChtX2NvbnRleHQuaXNIVE1MRG9jdW1lbnQpCisgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSBhdHRy
aWJ1dGVOYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CisKKyAgICBBdG9taWNTdHJpbmcg
bmFtZXNwYWNlVVJJID0gZGV0ZXJtaW5lTmFtZXNwYWNlKG5hbWVzcGFjZVByZWZpeCk7CisgICAg
aWYgKG5hbWVzcGFjZVVSSS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWUgPSBuYW1lc3BhY2VQcmVmaXguaXNOdWxsKCkK
KyAgICAgICAgPyBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBhdHRyaWJ1dGVOYW1lLCBudWxsQXRv
bSkKKyAgICAgICAgOiBRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwgYXR0cmlidXRlTmFt
ZSwgbmFtZXNwYWNlVVJJKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rv
cj4gc2VsZWN0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+KG5ldyBDU1NQ
YXJzZXJTZWxlY3RvcigpKTsKKworICAgIGlmIChibG9jay5hdEVuZCgpKSB7CisgICAgICAgIHNl
bGVjdG9yLT5zZXRBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSwgQ1NTU2VsZWN0b3I6OkNhc2VTZW5z
aXRpdmUpOworICAgICAgICBzZWxlY3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OlNldCk7Cisg
ICAgICAgIHJldHVybiBzZWxlY3RvcjsKKyAgICB9CisKKyAgICBzZWxlY3Rvci0+c2V0TWF0Y2go
Y29uc3VtZUF0dHJpYnV0ZU1hdGNoKGJsb2NrKSk7CisKKyAgICBjb25zdCBDU1NQYXJzZXJUb2tl
biYgYXR0cmlidXRlVmFsdWUgPSBibG9jay5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwor
ICAgIGlmIChhdHRyaWJ1dGVWYWx1ZS50eXBlKCkgIT0gSWRlbnRUb2tlbiAmJiBhdHRyaWJ1dGVW
YWx1ZS50eXBlKCkgIT0gU3RyaW5nVG9rZW4pCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHNlbGVjdG9yLT5zZXRWYWx1ZShhdHRyaWJ1dGVWYWx1ZS52YWx1ZSgpLnRvQXRvbWljU3RyaW5n
KCkpOworICAgIHNlbGVjdG9yLT5zZXRBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSwgY29uc3VtZUF0
dHJpYnV0ZUZsYWdzKGJsb2NrKSk7CisKKyAgICBpZiAoIWJsb2NrLmF0RW5kKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzZWxlY3RvcjsKK30KKworc3RkOjp1bmlxdWVf
cHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZVBzZXVkbyhD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBDb2xvblRva2VuKTsKKyAgICByYW5nZS5jb25zdW1lKCk7CisKKyAgICBpbnQgY29s
b25zID0gMTsKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBDb2xvblRva2VuKSB7Cisg
ICAgICAgIHJhbmdlLmNvbnN1bWUoKTsKKyAgICAgICAgY29sb25zKys7CisgICAgfQorCisgICAg
Y29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIGlmICh0b2tl
bi50eXBlKCkgIT0gSWRlbnRUb2tlbiAmJiB0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2Vy
U2VsZWN0b3I+IHNlbGVjdG9yOworICAgIFN0cmluZ1ZpZXcgdmFsdWUgPSB0b2tlbi52YWx1ZSgp
OworICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3Mp
CisgICAgICAgIHNlbGVjdG9yID0gc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPihD
U1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9DbGFzc1NlbGVjdG9yRnJvbVN0cmluZ1ZpZXco
dmFsdWUpKTsKKyAgICBlbHNlCisgICAgICAgIHNlbGVjdG9yID0gc3RkOjp1bmlxdWVfcHRyPENT
U1BhcnNlclNlbGVjdG9yPihDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9FbGVtZW50U2Vs
ZWN0b3JGcm9tU3RyaW5nVmlldyh2YWx1ZSkpOworICAgIAorICAgIGlmICghc2VsZWN0b3IgfHwg
KHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50ICYmIG1fZGlz
YWxsb3dQc2V1ZG9FbGVtZW50cykpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYg
KHRva2VuLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CisgICAgICAgIHJhbmdlLmNvbnN1bWUoKTsK
KyAgICAgICAgaWYgKHNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9FbGVtZW50VW5rbm93bikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4gc2VsZWN0b3I7CisgICAgfQorCisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBi
bG9jayA9IHJhbmdlLmNvbnN1bWVCbG9jaygpOworICAgIGJsb2NrLmNvbnN1bWVXaGl0ZXNwYWNl
KCk7CisgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpKSB7
CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NOb3Q6IHsKKyAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBpbm5lclNlbGVjdG9yID0gY29uc3VtZUNvbXBv
dW5kU2VsZWN0b3IoYmxvY2spOworICAgICAgICBibG9jay5jb25zdW1lV2hpdGVzcGFjZSgpOwor
ICAgICAgICBpZiAoIWlubmVyU2VsZWN0b3IgfHwgIWJsb2NrLmF0RW5kKCkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJz
ZXJTZWxlY3Rvcj4+IHNlbGVjdG9yVmVjdG9yOworICAgICAgICBzZWxlY3RvclZlY3Rvci5hcHBl
bmQoc3RkOjptb3ZlKGlubmVyU2VsZWN0b3IpKTsKKyAgICAgICAgc2VsZWN0b3ItPmFkb3B0U2Vs
ZWN0b3JWZWN0b3Ioc2VsZWN0b3JWZWN0b3IpOworICAgICAgICByZXR1cm4gc2VsZWN0b3I7Cisg
ICAgfQorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoQ2hpbGQ6CisgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NOdGhMYXN0Q2hpbGQ6CisgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NOdGhPZlR5cGU6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NOdGhMYXN0T2ZUeXBlOiB7CisgICAgICAgIHN0ZDo6cGFpcjxpbnQsIGludD4gYWI7Cisg
ICAgICAgIGlmICghY29uc3VtZUFOUGx1c0IoYmxvY2ssIGFiKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICBibG9jay5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgICAgICBp
ZiAoIWJsb2NrLmF0RW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
c2VsZWN0b3ItPnNldEFyZ3VtZW50KEF0b21pY1N0cmluZzo6bnVtYmVyKGFiLmZpcnN0ICogYWIu
c2Vjb25kKSk7CisgICAgICAgIHJldHVybiBzZWxlY3RvcjsKKyAgICB9CisgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NMYW5nOiB7CisgICAgICAgIC8vIEZJWE1FOiBDU1MgU2VsZWN0
b3JzIExldmVsIDQgYWxsb3dzIDpsYW5nKCotZm9vKQorICAgICAgICBjb25zdCBDU1NQYXJzZXJU
b2tlbiYgaWRlbnQgPSBibG9jay5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAg
ICBpZiAoaWRlbnQudHlwZSgpICE9IElkZW50VG9rZW4gfHwgIWJsb2NrLmF0RW5kKCkpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgc2VsZWN0b3ItPnNldEFyZ3VtZW50KGlk
ZW50LnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKSk7CisgICAgICAgIHJldHVybiBzZWxlY3RvcjsK
KyAgICB9CisgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBTdXBwb3J0IDpob3N0LWNvbnRleHQKKyAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FueToKKyAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc0hvc3Q6IHsKKyAgICAgICAgRGlzYWxsb3dQc2V1ZG9FbGVtZW50c1Njb3Bl
IHNjb3BlKHRoaXMpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3JMaXN0PiBz
ZWxlY3Rvckxpc3QgPSBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3JMaXN0PihuZXcgQ1NTU2Vs
ZWN0b3JMaXN0KCkpOworICAgICAgICAqc2VsZWN0b3JMaXN0ID0gY29uc3VtZUNvbXBvdW5kU2Vs
ZWN0b3JMaXN0KGJsb2NrKTsKKyAgICAgICAgaWYgKCFzZWxlY3Rvckxpc3QtPmlzVmFsaWQoKSB8
fCAhYmxvY2suYXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBz
ZWxlY3Rvci0+c2V0U2VsZWN0b3JMaXN0KHN0ZDo6bW92ZShzZWxlY3Rvckxpc3QpKTsKKyAgICAg
ICAgcmV0dXJuIHNlbGVjdG9yOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpKSB7Cisg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEN1ZTogeworICAgICAgICBEaXNhbGxv
d1BzZXVkb0VsZW1lbnRzU2NvcGUgc2NvcGUodGhpcyk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxDU1NTZWxlY3Rvckxpc3Q+IHNlbGVjdG9yTGlzdCA9IHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxl
Y3Rvckxpc3Q+KG5ldyBDU1NTZWxlY3Rvckxpc3QoKSk7CisgICAgICAgICpzZWxlY3Rvckxpc3Qg
PSBjb25zdW1lQ29tcG91bmRTZWxlY3Rvckxpc3QoYmxvY2spOworICAgICAgICBpZiAoIXNlbGVj
dG9yTGlzdC0+aXNWYWxpZCgpIHx8ICFibG9jay5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHNlbGVjdG9yLT5zZXRTZWxlY3Rvckxpc3Qoc3RkOjptb3ZlKHNl
bGVjdG9yTGlzdCkpOworICAgICAgICByZXR1cm4gc2VsZWN0b3I7CisgICAgfQorICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRTbG90dGVkOiB7CisgICAgICAgIERpc2FsbG93UHNl
dWRvRWxlbWVudHNTY29wZSBzY29wZSh0aGlzKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q1NTUGFyc2VyU2VsZWN0b3I+IGlubmVyU2VsZWN0b3IgPSBjb25zdW1lQ29tcG91bmRTZWxlY3Rv
cihibG9jayk7CisgICAgICAgIGJsb2NrLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgICAgIGlm
ICghaW5uZXJTZWxlY3RvciB8fCAhYmxvY2suYXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9y
Pj4gc2VsZWN0b3JWZWN0b3I7CisgICAgICAgIHNlbGVjdG9yVmVjdG9yLmFwcGVuZChzdGQ6Om1v
dmUoaW5uZXJTZWxlY3RvcikpOworICAgICAgICBzZWxlY3Rvci0+YWRvcHRTZWxlY3RvclZlY3Rv
cihzZWxlY3RvclZlY3Rvcik7CisgICAgICAgIHJldHVybiBzZWxlY3RvcjsKKyAgICB9CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK0NTU1NlbGVjdG9yOjpSZWxhdGlvbiBDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZUNvbWJp
bmF0b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgQ1NTU2VsZWN0b3I6OlJl
bGF0aW9uIGZhbGxiYWNrUmVzdWx0ID0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOworICAgIHdo
aWxlIChyYW5nZS5wZWVrKCkudHlwZSgpID09IFdoaXRlc3BhY2VUb2tlbikgeworICAgICAgICBy
YW5nZS5jb25zdW1lKCk7CisgICAgICAgIGZhbGxiYWNrUmVzdWx0ID0gQ1NTU2VsZWN0b3I6OkRl
c2NlbmRhbnQ7CisgICAgfQorCisgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gRGVsaW1p
dGVyVG9rZW4pCisgICAgICAgIHJldHVybiBmYWxsYmFja1Jlc3VsdDsKKworICAgIFVDaGFyIGRl
bGltaXRlciA9IHJhbmdlLnBlZWsoKS5kZWxpbWl0ZXIoKTsKKworICAgIGlmIChkZWxpbWl0ZXIg
PT0gJysnIHx8IGRlbGltaXRlciA9PSAnficgfHwgZGVsaW1pdGVyID09ICc+JykgeworICAgICAg
ICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICBpZiAoZGVsaW1p
dGVyID09ICcrJykKKyAgICAgICAgICAgIHJldHVybiBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNl
bnQ7CisgICAgICAgIGlmIChkZWxpbWl0ZXIgPT0gJ34nKQorICAgICAgICAgICAgcmV0dXJuIENT
U1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OworICAgICAgICByZXR1cm4gQ1NTU2VsZWN0b3I6
OkNoaWxkOworICAgIH0KKworICAgIC8vIE1hdGNoIC9kZWVwLworICAgIGlmIChkZWxpbWl0ZXIg
IT0gJy8nKQorICAgICAgICByZXR1cm4gZmFsbGJhY2tSZXN1bHQ7CisgICAgcmFuZ2UuY29uc3Vt
ZSgpOworICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBpZGVudCA9IHJhbmdlLmNvbnN1bWUoKTsK
KyAgICBpZiAoaWRlbnQudHlwZSgpICE9IElkZW50VG9rZW4gfHwgIWVxdWFsSWdub3JpbmdBU0NJ
SUNhc2UoaWRlbnQudmFsdWUoKSwgImRlZXAiKSkKKyAgICAgICAgbV9mYWlsZWRQYXJzaW5nID0g
dHJ1ZTsKKyAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgc2xhc2ggPSByYW5nZS5jb25zdW1lSW5j
bHVkaW5nV2hpdGVzcGFjZSgpOworICAgIGlmIChzbGFzaC50eXBlKCkgIT0gRGVsaW1pdGVyVG9r
ZW4gfHwgc2xhc2guZGVsaW1pdGVyKCkgIT0gJy8nKQorICAgICAgICBtX2ZhaWxlZFBhcnNpbmcg
PSB0cnVlOworICAgIHJldHVybiBDU1NTZWxlY3Rvcjo6U2hhZG93RGVlcDsKK30KKworQ1NTU2Vs
ZWN0b3I6Ok1hdGNoIENTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQXR0cmlidXRlTWF0Y2goQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRv
a2VuID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICBzd2l0Y2ggKHRv
a2VuLnR5cGUoKSkgeworICAgIGNhc2UgSW5jbHVkZU1hdGNoVG9rZW46CisgICAgICAgIHJldHVy
biBDU1NTZWxlY3Rvcjo6TGlzdDsKKyAgICBjYXNlIERhc2hNYXRjaFRva2VuOgorICAgICAgICBy
ZXR1cm4gQ1NTU2VsZWN0b3I6Okh5cGhlbjsKKyAgICBjYXNlIFByZWZpeE1hdGNoVG9rZW46Cisg
ICAgICAgIHJldHVybiBDU1NTZWxlY3Rvcjo6QmVnaW47CisgICAgY2FzZSBTdWZmaXhNYXRjaFRv
a2VuOgorICAgICAgICByZXR1cm4gQ1NTU2VsZWN0b3I6OkVuZDsKKyAgICBjYXNlIFN1YnN0cmlu
Z01hdGNoVG9rZW46CisgICAgICAgIHJldHVybiBDU1NTZWxlY3Rvcjo6Q29udGFpbjsKKyAgICBj
YXNlIERlbGltaXRlclRva2VuOgorICAgICAgICBpZiAodG9rZW4uZGVsaW1pdGVyKCkgPT0gJz0n
KQorICAgICAgICAgICAgcmV0dXJuIENTU1NlbGVjdG9yOjpFeGFjdDsKKyAgICAgICAgRkFMTFRI
Uk9VR0g7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9mYWlsZWRQYXJzaW5nID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIENTU1NlbGVjdG9yOjpFeGFjdDsKKyAgICB9Cit9CisKK0NTU1NlbGVjdG9y
OjpBdHRyaWJ1dGVNYXRjaFR5cGUgQ1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVBdHRyaWJ1dGVG
bGFncyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygp
LnR5cGUoKSAhPSBJZGVudFRva2VuKQorICAgICAgICByZXR1cm4gQ1NTU2VsZWN0b3I6OkNhc2VT
ZW5zaXRpdmU7CisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIGZsYWcgPSByYW5nZS5jb25zdW1l
SW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGZs
YWcudmFsdWUoKSwgImkiKSkKKyAgICAgICAgcmV0dXJuIENTU1NlbGVjdG9yOjpDYXNlSW5zZW5z
aXRpdmU7CisgICAgbV9mYWlsZWRQYXJzaW5nID0gdHJ1ZTsKKyAgICByZXR1cm4gQ1NTU2VsZWN0
b3I6OkNhc2VTZW5zaXRpdmU7Cit9CisKK2Jvb2wgQ1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVB
TlBsdXNCKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBzdGQ6OnBhaXI8aW50LCBpbnQ+JiBy
ZXN1bHQpCit7CisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UuY29uc3Vt
ZSgpOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4gJiYgdG9rZW4ubnVtZXJp
Y1ZhbHVlVHlwZSgpID09IEludGVnZXJWYWx1ZVR5cGUpIHsKKyAgICAgICAgcmVzdWx0ID0gc3Rk
OjptYWtlX3BhaXIoMCwgc3RhdGljX2Nhc3Q8aW50Pih0b2tlbi5udW1lcmljVmFsdWUoKSkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBJZGVu
dFRva2VuKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHRva2VuLnZhbHVl
KCksICJvZGQiKSkgeworICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYWtlX3BhaXIoMiwgMSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZSh0b2tlbi52YWx1ZSgpLCAiZXZlbiIpKSB7CisgICAgICAgICAgICBy
ZXN1bHQgPSBzdGQ6Om1ha2VfcGFpcigyLCAwKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhlICduJyB3aWxsIGVuZCB1cCBhcyBwYXJ0IG9m
IGFuIGlkZW50IG9yIGRpbWVuc2lvbi4gRm9yIGEgdmFsaWQgPGFuK2I+LAorICAgIC8vIHRoaXMg
d2lsbCBzdG9yZSBhIHN0cmluZyBvZiB0aGUgZm9ybSAnbicsICduLScsIG9yICduLTEyMycuCisg
ICAgU3RyaW5nIG5TdHJpbmc7CisKKyAgICBpZiAodG9rZW4udHlwZSgpID09IERlbGltaXRlclRv
a2VuICYmIHRva2VuLmRlbGltaXRlcigpID09ICcrJyAmJiByYW5nZS5wZWVrKCkudHlwZSgpID09
IElkZW50VG9rZW4pIHsKKyAgICAgICAgcmVzdWx0LmZpcnN0ID0gMTsKKyAgICAgICAgblN0cmlu
ZyA9IHJhbmdlLmNvbnN1bWUoKS52YWx1ZSgpLnRvU3RyaW5nKCk7CisgICAgfSBlbHNlIGlmICh0
b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4gJiYgdG9rZW4ubnVtZXJpY1ZhbHVlVHlwZSgp
ID09IEludGVnZXJWYWx1ZVR5cGUpIHsKKyAgICAgICAgcmVzdWx0LmZpcnN0ID0gdG9rZW4ubnVt
ZXJpY1ZhbHVlKCk7CisgICAgICAgIG5TdHJpbmcgPSB0b2tlbi52YWx1ZSgpLnRvU3RyaW5nKCk7
CisgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlKCkgPT0gSWRlbnRUb2tlbikgeworICAgICAgICBp
ZiAodG9rZW4udmFsdWUoKVswXSA9PSAnLScpIHsKKyAgICAgICAgICAgIHJlc3VsdC5maXJzdCA9
IC0xOworICAgICAgICAgICAgblN0cmluZyA9IHRva2VuLnZhbHVlKCkudG9TdHJpbmcoKS5zdWJz
dHJpbmcoMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1bHQuZmlyc3QgPSAx
OworICAgICAgICAgICAgblN0cmluZyA9IHRva2VuLnZhbHVlKCkudG9TdHJpbmcoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisKKyAgICBpZiAo
blN0cmluZy5pc0VtcHR5KCkgfHwgIWlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoblN0cmluZ1sw
XSwgJ24nKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChuU3RyaW5nLmxlbmd0aCgp
ID4gMSAmJiBuU3RyaW5nWzFdICE9ICctJykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKG5TdHJpbmcubGVuZ3RoKCkgPiAyKSB7CisgICAgICAgIGJvb2wgdmFsaWQ7CisgICAgICAg
IHJlc3VsdC5zZWNvbmQgPSBuU3RyaW5nLnN1YnN0cmluZygxKS50b0ludFN0cmljdCgmdmFsaWQp
OworICAgICAgICByZXR1cm4gdmFsaWQ7CisgICAgfQorCisgICAgTnVtZXJpY1NpZ24gc2lnbiA9
IG5TdHJpbmcubGVuZ3RoKCkgPT0gMSA/IE5vU2lnbiA6IE1pbnVzU2lnbjsKKyAgICBpZiAoc2ln
biA9PSBOb1NpZ24gJiYgcmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEZWxpbWl0ZXJUb2tlbikgewor
ICAgICAgICBjaGFyIGRlbGltaXRlclNpZ24gPSByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpLmRlbGltaXRlcigpOworICAgICAgICBpZiAoZGVsaW1pdGVyU2lnbiA9PSAnKycpCisg
ICAgICAgICAgICBzaWduID0gUGx1c1NpZ247CisgICAgICAgIGVsc2UgaWYgKGRlbGltaXRlclNp
Z24gPT0gJy0nKQorICAgICAgICAgICAgc2lnbiA9IE1pbnVzU2lnbjsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzaWduID09IE5vU2ln
biAmJiByYW5nZS5wZWVrKCkudHlwZSgpICE9IE51bWJlclRva2VuKSB7CisgICAgICAgIHJlc3Vs
dC5zZWNvbmQgPSAwOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBD
U1NQYXJzZXJUb2tlbiYgYiA9IHJhbmdlLmNvbnN1bWUoKTsKKyAgICBpZiAoYi50eXBlKCkgIT0g
TnVtYmVyVG9rZW4gfHwgYi5udW1lcmljVmFsdWVUeXBlKCkgIT0gSW50ZWdlclZhbHVlVHlwZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgoYi5udW1lcmljU2lnbigpID09IE5vU2ln
bikgPT0gKHNpZ24gPT0gTm9TaWduKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3Vs
dC5zZWNvbmQgPSBiLm51bWVyaWNWYWx1ZSgpOworICAgIGlmIChzaWduID09IE1pbnVzU2lnbikK
KyAgICAgICAgcmVzdWx0LnNlY29uZCA9IC1yZXN1bHQuc2Vjb25kOworICAgIHJldHVybiB0cnVl
OworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIENTU1NlbGVjdG9yUGFyc2VyOjpkZWZhdWx0TmFt
ZXNwYWNlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJu
IHN0YXJBdG9tOworICAgIHJldHVybiBtX3N0eWxlU2hlZXQtPmRlZmF1bHROYW1lc3BhY2UoKTsK
K30KKworY29uc3QgQXRvbWljU3RyaW5nJiBDU1NTZWxlY3RvclBhcnNlcjo6ZGV0ZXJtaW5lTmFt
ZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQoreworICAgIGlmIChwcmVmaXguaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBkZWZhdWx0TmFtZXNwYWNlKCk7CisgICAgaWYgKHByZWZp
eC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eUF0b207IC8vIE5vIG5hbWVzcGFjZS4g
SWYgYW4gZWxlbWVudC9hdHRyaWJ1dGUgaGFzIGEgbmFtZXNwYWNlLCB3ZSB3b24ndCBtYXRjaCBp
dC4KKyAgICBpZiAocHJlZml4ID09IHN0YXJBdG9tKQorICAgICAgICByZXR1cm4gc3RhckF0b207
IC8vIFdlJ2xsIG1hdGNoIGFueSBuYW1lc3BhY2UuCisgICAgaWYgKCFtX3N0eWxlU2hlZXQpCisg
ICAgICAgIHJldHVybiBudWxsQXRvbTsgLy8gQ2Fubm90IHJlc29sdmUgcHJlZml4IHRvIG5hbWVz
cGFjZSB3aXRob3V0IGEgc3R5bGVzaGVldCwgc3ludGF4IGVycm9yLgorICAgIHJldHVybiBtX3N0
eWxlU2hlZXQtPm5hbWVzcGFjZVVSSUZyb21QcmVmaXgocHJlZml4KTsKK30KKwordm9pZCBDU1NT
ZWxlY3RvclBhcnNlcjo6cHJlcGVuZFR5cGVTZWxlY3RvcklmTmVlZGVkKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZXNwYWNlUHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnROYW1lLCBD
U1NQYXJzZXJTZWxlY3RvciogY29tcG91bmRTZWxlY3RvcikKK3sKKyAgICBpZiAoZWxlbWVudE5h
bWUuaXNOdWxsKCkgJiYgZGVmYXVsdE5hbWVzcGFjZSgpID09IHN0YXJBdG9tICYmICFjb21wb3Vu
ZFNlbGVjdG9yLT5uZWVkc0ltcGxpY2l0U2hhZG93Q29tYmluYXRvckZvck1hdGNoaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEF0b21pY1N0cmluZyBkZXRlcm1pbmVkRWxlbWVudE5hbWUg
PSBlbGVtZW50TmFtZS5pc051bGwoKSA/IHN0YXJBdG9tIDogZWxlbWVudE5hbWU7CisgICAgQXRv
bWljU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGRldGVybWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVm
aXgpOworICAgIGlmIChuYW1lc3BhY2VVUkkuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9mYWlsZWRQ
YXJzaW5nID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBdG9taWNTdHJpbmcg
ZGV0ZXJtaW5lZFByZWZpeCA9IG5hbWVzcGFjZVByZWZpeDsKKyAgICBpZiAobmFtZXNwYWNlVVJJ
ID09IGRlZmF1bHROYW1lc3BhY2UoKSkKKyAgICAgICAgZGV0ZXJtaW5lZFByZWZpeCA9IG51bGxB
dG9tOworICAgIFF1YWxpZmllZE5hbWUgdGFnID0gUXVhbGlmaWVkTmFtZShkZXRlcm1pbmVkUHJl
Zml4LCBkZXRlcm1pbmVkRWxlbWVudE5hbWUsIG5hbWVzcGFjZVVSSSk7CisKKyAgICAvLyAqOmhv
c3QvKjpob3N0LWNvbnRleHQgbmV2ZXIgbWF0Y2hlcywgc28gd2UgY2FuJ3QgZGlzY2FyZCB0aGUg
KiwKKyAgICAvLyBvdGhlcndpc2Ugd2UgY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVu
ICo6aG9zdCBhbmQganVzdCA6aG9zdC4KKyAgICAvLworICAgIC8vIEFsc28sIHNlbGVjdG9ycyB3
aGVyZSB3ZSB1c2UgYSBTaGFkb3dQc2V1ZG8gY29tYmluYXRvciBiZXR3ZWVuIHRoZQorICAgIC8v
IGVsZW1lbnQgYW5kIHRoZSBwc2V1ZG8gZWxlbWVudCBmb3IgbWF0Y2hpbmcgKGN1c3RvbSBwc2V1
ZG8gZWxlbWVudHMsCisgICAgLy8gOjpjdWUsIDo6c2hhZG93KSwgd2UgbmVlZCBhIHVuaXZlcnNh
bCBzZWxlY3RvciB0byBzZXQgdGhlIGNvbWJpbmF0b3IKKyAgICAvLyAocmVsYXRpb24pIG9uIGlu
IHRoZSBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgbm8gc2ltcGxlIHNlbGVjdG9ycyBwcmVjZWRpbmcK
KyAgICAvLyB0aGUgcHNldWRvIGVsZW1lbnQuCisgICAgYm9vbCBleHBsaWNpdEZvckhvc3QgPSBj
b21wb3VuZFNlbGVjdG9yLT5pc0hvc3RQc2V1ZG9TZWxlY3RvcigpICYmICFlbGVtZW50TmFtZS5p
c051bGwoKTsKKyAgICBpZiAodGFnICE9IGFueVFOYW1lKCkgfHwgZXhwbGljaXRGb3JIb3N0IHx8
IGNvbXBvdW5kU2VsZWN0b3ItPm5lZWRzSW1wbGljaXRTaGFkb3dDb21iaW5hdG9yRm9yTWF0Y2hp
bmcoKSkKKyAgICAgICAgY29tcG91bmRTZWxlY3Rvci0+cHJlcGVuZFRhZ1NlbGVjdG9yKHRhZywg
ZGV0ZXJtaW5lZFByZWZpeCA9PSBudWxsQXRvbSAmJiBkZXRlcm1pbmVkRWxlbWVudE5hbWUgPT0g
c3RhckF0b20gJiYgIWV4cGxpY2l0Rm9ySG9zdCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDU1NQ
YXJzZXJTZWxlY3Rvcj4gQ1NTU2VsZWN0b3JQYXJzZXI6OmFkZFNpbXBsZVNlbGVjdG9yVG9Db21w
b3VuZChzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IGNvbXBvdW5kU2VsZWN0b3Is
IHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2ltcGxlU2VsZWN0b3IpCit7Cisg
ICAgY29tcG91bmRTZWxlY3Rvci0+YXBwZW5kVGFnSGlzdG9yeShDU1NTZWxlY3Rvcjo6U3ViU2Vs
ZWN0b3IsIHN0ZDo6bW92ZShzaW1wbGVTZWxlY3RvcikpOworICAgIHJldHVybiBjb21wb3VuZFNl
bGVjdG9yOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1NlbGVj
dG9yUGFyc2VyOjpzcGxpdENvbXBvdW5kQXRJbXBsaWNpdFNoYWRvd0Nyb3NzaW5nQ29tYmluYXRv
cihzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IGNvbXBvdW5kU2VsZWN0b3IpCit7
CisgICAgLy8gVGhlIHRhZ0hpc3RvcnkgaXMgYSBsaW5rZWQgbGlzdCB0aGF0IHN0b3JlcyBjb21i
aW5hdG9yIHNlcGFyYXRlZCBjb21wb3VuZCBzZWxlY3RvcnMKKyAgICAvLyBmcm9tIHJpZ2h0LXRv
LWxlZnQuIFlldCwgd2l0aGluIGEgc2luZ2xlIGNvbXBvdW5kIHNlbGVjdG9yLCBzdG9yZXMgdGhl
IHNpbXBsZSBzZWxlY3RvcnMKKyAgICAvLyBmcm9tIGxlZnQtdG8tcmlnaHQuCisgICAgLy8KKyAg
ICAvLyAiLmEuYiA+IGRpdiNpZCIgaXMgc3RvcmVkIGluIGEgdGFnSGlzdG9yeSBhcyBbZGl2LCAj
aWQsIC5hLCAuYl0sIGVhY2ggZWxlbWVudCBpbiB0aGUKKyAgICAvLyBsaXN0IHN0b3JlZCB3aXRo
IGFuIGFzc29jaWF0ZWQgcmVsYXRpb24gKGNvbWJpbmF0b3Igb3IgU3ViU2VsZWN0b3IpLgorICAg
IC8vCisgICAgLy8gOjpjdWUsIDo6c2hhZG93LCBhbmQgY3VzdG9tIHBzZXVkbyBlbGVtZW50cyBo
YXZlIGFuIGltcGxpY2l0IFNoYWRvd1BzZXVkbyBjb21iaW5hdG9yCisgICAgLy8gdG8gdGhlaXIg
bGVmdCwgd2hpY2ggcmVhbGx5IG1ha2VzIGZvciBhIG5ldyBjb21wb3VuZCBzZWxlY3RvciwgeWV0
IGl0J3MgY29uc3VtZWQgYnkKKyAgICAvLyB0aGUgc2VsZWN0b3IgcGFyc2VyIGFzIGEgc2luZ2xl
IGNvbXBvdW5kIHNlbGVjdG9yLgorICAgIC8vCisgICAgLy8gRXhhbXBsZTogaW5wdXQjeDo6LXdl
YmtpdC1jbGVhci1idXR0b24gLT4gWyA6Oi13ZWJraXQtY2xlYXItYnV0dG9uLCBpbnB1dCwgI3gg
XQorICAgIC8vCisgICAgLy8gTGlrZXdpc2UsIDo6c2xvdHRlZCgpIHBzZXVkbyBlbGVtZW50IGhh
cyBhbiBpbXBsaWNpdCBTaGFkb3dTbG90IGNvbWJpbmF0b3IgdG8gaXRzIGxlZnQKKyAgICAvLyBm
b3IgZmluZGluZyBtYXRjaGluZyBzbG90IGVsZW1lbnQgaW4gb3RoZXIgVHJlZVNjb3BlLgorICAg
IC8vCisgICAgLy8gRXhhbXBsZTogc2xvdFtuYW1lPWZvb106OnNsb3R0ZWQoZGl2KSAtPiBbIDo6
c2xvdHRlZChkaXYpLCBzbG90LCBbbmFtZT1mb29dIF0KKyAgICBDU1NQYXJzZXJTZWxlY3Rvciog
c3BsaXRBZnRlciA9IGNvbXBvdW5kU2VsZWN0b3IuZ2V0KCk7CisKKyAgICB3aGlsZSAoc3BsaXRB
ZnRlci0+dGFnSGlzdG9yeSgpICYmICFzcGxpdEFmdGVyLT50YWdIaXN0b3J5KCktPm5lZWRzSW1w
bGljaXRTaGFkb3dDb21iaW5hdG9yRm9yTWF0Y2hpbmcoKSkKKyAgICAgICAgc3BsaXRBZnRlciA9
IHNwbGl0QWZ0ZXItPnRhZ0hpc3RvcnkoKTsKKworICAgIGlmICghc3BsaXRBZnRlciB8fCAhc3Bs
aXRBZnRlci0+dGFnSGlzdG9yeSgpKQorICAgICAgICByZXR1cm4gY29tcG91bmRTZWxlY3RvcjsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2Vjb25kQ29tcG91bmQg
PSBzcGxpdEFmdGVyLT5yZWxlYXNlVGFnSGlzdG9yeSgpOworICAgIHNlY29uZENvbXBvdW5kLT5h
cHBlbmRUYWdIaXN0b3J5KHNlY29uZENvbXBvdW5kLT5wc2V1ZG9FbGVtZW50VHlwZSgpID09IENT
U1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50U2xvdHRlZCA/IENTU1NlbGVjdG9yOjpTaGFkb3dTbG90
IDogQ1NTU2VsZWN0b3I6OlNoYWRvd1BzZXVkbywgc3RkOjptb3ZlKGNvbXBvdW5kU2VsZWN0b3Ip
KTsKKyAgICByZXR1cm4gc2Vjb25kQ29tcG91bmQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIGJsaW5r
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQ
YXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOCBAQAorLy8gQ29weXJpZ2h0IDIw
MTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgor
Ly8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkNTU1BhcnNlclZhbHVlcy5oIiAvLyBGSVhNRS1ORVdQQVJTRVIgQ2hhbmdlIHdoZW4gQ1NTUGFy
c2VyU2VsZWN0b3IgbW92ZXMgaW50byBpdHMgb3duIGZpbGUuCisjaW5jbHVkZSAiQ1NTUGFyc2Vy
VG9rZW5SYW5nZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdHJ1Y3QgQ1NTUGFyc2VyQ29udGV4dDsKK2NsYXNzIENTU1NlbGVjdG9yTGlzdDsKK2NsYXNz
IFN0eWxlU2hlZXRDb250ZW50czsKKworLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBidWls
ZGluZyBDU1NTZWxlY3RvcnMgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZworLy8gdGhlIGludGVy
bWVkaWF0ZSBDU1NQYXJzZXJTZWxlY3Rvci4KK2NsYXNzIENTU1NlbGVjdG9yUGFyc2VyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgQ1NTU2VsZWN0b3JMaXN0IHBhcnNlU2VsZWN0b3IoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIFN0eWxlU2hlZXRDb250ZW50cyop
OworCisgICAgc3RhdGljIGJvb2wgY29uc3VtZUFOUGx1c0IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IHN0ZDo6cGFpcjxpbnQsIGludD4mKTsKKworcHJpdmF0ZToKKyAgICBDU1NTZWxlY3RvclBhcnNl
cihjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgU3R5bGVTaGVldENvbnRlbnRzKik7CisKKyAgICAv
LyBUaGVzZSB3aWxsIGFsbCBjb25zdW1lIHRyYWlsaW5nIGNvbW1lbnRzIGlmIHN1Y2Nlc3NmdWwK
KworICAgIENTU1NlbGVjdG9yTGlzdCBjb25zdW1lQ29tcGxleFNlbGVjdG9yTGlzdChDU1NQYXJz
ZXJUb2tlblJhbmdlJik7CisgICAgQ1NTU2VsZWN0b3JMaXN0IGNvbnN1bWVDb21wb3VuZFNlbGVj
dG9yTGlzdChDU1NQYXJzZXJUb2tlblJhbmdlJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+IGNvbnN1bWVDb21wbGV4U2VsZWN0b3IoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gY29uc3VtZUNvbXBv
dW5kU2VsZWN0b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworICAgIC8vIFRoaXMgZG9lc24ndCBp
bmNsdWRlIGVsZW1lbnQgbmFtZXMsIHNpbmNlIHRoZXkncmUgaGFuZGxlZCBzcGVjaWFsbHkKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IGNvbnN1bWVTaW1wbGVTZWxlY3Rv
cihDU1NQYXJzZXJUb2tlblJhbmdlJik7CisKKyAgICBib29sIGNvbnN1bWVOYW1lKENTU1BhcnNl
clRva2VuUmFuZ2UmLCBBdG9taWNTdHJpbmcmIG5hbWUsIEF0b21pY1N0cmluZyYgbmFtZXNwYWNl
UHJlZml4KTsKKworICAgIC8vIFRoZXNlIHdpbGwgcmV0dXJuIG51bGxwdHIgd2hlbiB0aGUgc2Vs
ZWN0b3IgaXMgaW52YWxpZAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4g
Y29uc3VtZUlkKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+IGNvbnN1bWVDbGFzcyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CisgICAg
c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBjb25zdW1lUHNldWRvKENTU1BhcnNl
clRva2VuUmFuZ2UmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IGNv
bnN1bWVBdHRyaWJ1dGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworCisgICAgQ1NTU2VsZWN0b3I6
OlJlbGF0aW9uIGNvbnN1bWVDb21iaW5hdG9yKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKKyAgICBD
U1NTZWxlY3Rvcjo6TWF0Y2ggY29uc3VtZUF0dHJpYnV0ZU1hdGNoKENTU1BhcnNlclRva2VuUmFu
Z2UmKTsKKyAgICBDU1NTZWxlY3Rvcjo6QXR0cmlidXRlTWF0Y2hUeXBlIGNvbnN1bWVBdHRyaWJ1
dGVGbGFncyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGRlZmF1bHROYW1lc3BhY2UoKSBjb25zdDsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGRldGVy
bWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCk7CisgICAgdm9pZCBwcmVw
ZW5kVHlwZVNlbGVjdG9ySWZOZWVkZWQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VQcmVm
aXgsIGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudE5hbWUsIENTU1BhcnNlclNlbGVjdG9yKik7
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gYWRkU2ltcGxl
U2VsZWN0b3JUb0NvbXBvdW5kKHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gY29t
cG91bmRTZWxlY3Rvciwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzaW1wbGVT
ZWxlY3Rvcik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4g
c3BsaXRDb21wb3VuZEF0SW1wbGljaXRTaGFkb3dDcm9zc2luZ0NvbWJpbmF0b3Ioc3RkOjp1bmlx
dWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBjb21wb3VuZFNlbGVjdG9yKTsKKworICAgIGNvbnN0
IENTU1BhcnNlckNvbnRleHQmIG1fY29udGV4dDsKKyAgICBSZWZQdHI8U3R5bGVTaGVldENvbnRl
bnRzPiBtX3N0eWxlU2hlZXQ7IC8vIEZJWE1FOiBTaG91bGQgYmUgY29uc3QKKworICAgIGJvb2wg
bV9mYWlsZWRQYXJzaW5nID0gZmFsc2U7CisgICAgYm9vbCBtX2Rpc2FsbG93UHNldWRvRWxlbWVu
dHMgPSBmYWxzZTsKKworICAgIGNsYXNzIERpc2FsbG93UHNldWRvRWxlbWVudHNTY29wZSB7Cisg
ICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERpc2FsbG93UHNldWRvRWxlbWVudHNTY29wZSk7
CisgICAgcHVibGljOgorICAgICAgICBEaXNhbGxvd1BzZXVkb0VsZW1lbnRzU2NvcGUoQ1NTU2Vs
ZWN0b3JQYXJzZXIqIHBhcnNlcikKKyAgICAgICAgICAgIDogbV9wYXJzZXIocGFyc2VyKSwgbV93
YXNEaXNhbGxvd2VkKG1fcGFyc2VyLT5tX2Rpc2FsbG93UHNldWRvRWxlbWVudHMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fcGFyc2VyLT5tX2Rpc2FsbG93UHNldWRvRWxlbWVudHMgPSB0cnVl
OworICAgICAgICB9CisKKyAgICAgICAgfkRpc2FsbG93UHNldWRvRWxlbWVudHNTY29wZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fcGFyc2VyLT5tX2Rpc2FsbG93UHNldWRvRWxlbWVudHMg
PSBtX3dhc0Rpc2FsbG93ZWQ7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIENT
U1NlbGVjdG9yUGFyc2VyKiBtX3BhcnNlcjsKKyAgICAgICAgYm9vbCBtX3dhc0Rpc2FsbG93ZWQ7
CisgICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAkocmV2aXNpb24gMjA1NDk5KQorKysg
U291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MTEsNiArNDExLDkgQEAgc3RhdGljIGlubGluZSBGcmFnbWVudFJlbGF0aW9uIGZyYWdt
ZW50UgogICAgICAgICByZXR1cm4gRnJhZ21lbnRSZWxhdGlvbjo6SW5kaXJlY3RBZGphY2VudDsK
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcjoKICAgICBjYXNlIENTU1NlbGVjdG9y
OjpTaGFkb3dEZXNjZW5kYW50OgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd1BzZXVkbzoK
KyAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZWVwOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlNoYWRvd1Nsb3Q6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5j
cHAJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMxLDcgKzMzMSw3IEBAIHZvaWQgU3R5bGVkRWxlbWVu
dDo6cmVidWlsZFByZXNlbnRhdGlvbkEKICAgICAgICAgc3R5bGUgPSBjYWNoZUl0ZXJhdG9yLT52
YWx1ZS0+dmFsdWU7CiAgICAgICAgIHByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlQ2xlYW5lcigp
LmRpZEhpdFByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlKCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoaXNTVkdFbGVtZW50KCkg
PyBTVkdBdHRyaWJ1dGVNb2RlIDogQ1NTUXVpcmtzTW9kZSk7CisgICAgICAgIHN0eWxlID0gTXV0
YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKGlzU1ZHRWxlbWVudCgpID8gU1ZHQXR0cmlidXRl
TW9kZSA6IEhUTUxRdWlya3NNb2RlKTsKICAgICAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0
dHJpYnV0ZSA6IGF0dHJpYnV0ZXNJdGVyYXRvcigpKQogICAgICAgICAgICAgY29sbGVjdFN0eWxl
Rm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGF0dHJpYnV0ZS5uYW1lKCksIGF0dHJpYnV0ZS52YWx1
ZSgpLCBzdGF0aWNfY2FzdDxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJj4oKnN0eWxlKSk7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1l
czsKIAogaW5saW5lIFNWR0ZvbnRGYWNlRWxlbWVudDo6U1ZHRm9udEZhY2VFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IFNWR0Vs
ZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBtX2ZvbnRGYWNlUnVsZShTdHlsZVJ1bGVG
b250RmFjZTo6Y3JlYXRlKE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZShDU1NTdHJpY3RN
b2RlKSkpCisgICAgLCBtX2ZvbnRGYWNlUnVsZShTdHlsZVJ1bGVGb250RmFjZTo6Y3JlYXRlKE11
dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZShIVE1MU3RhbmRhcmRNb2RlKSkpCiAgICAgLCBt
X2ZvbnRFbGVtZW50KG51bGxwdHIpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoZm9udF9mYWNl
VGFnKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288304</attachid>
            <date>2016-09-08 12:28:13 -0700</date>
            <delta_ts>2016-09-08 12:33:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>101119</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBAQAorMjAxNi0wOS0wOCAgRGF2ZSBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBbQ1NTIFBhcnNlcl0gQWRkIHN1cHBv
cnQgZm9yIG5ldyBDU1Mgc2VsZWN0b3IgcGFyc2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNzQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6aXNWYWxpZFNlbGVjdG9yKToKKyAgICAgICAgKiBjc3MvQ1NTRGVmYXVsdFN0
eWxlU2hlZXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVUFTaGVldCk6CisgICAgICAg
ICogY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNl
U2V0OjptYXRjaGluZ0ZhY2VzKToKKyAgICAgICAgKiBjc3MvQ1NTR3JhbW1hci55LmluOgorICAg
ICAgICAqIGNzcy9DU1NTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rv
cjo6c2VsZWN0b3JUZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuaDoKKyAgICAgICAg
KiBjc3MvRE9NQ1NTTmFtZXNwYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNTU05hbWVz
cGFjZTo6c3VwcG9ydHMpOgorICAgICAgICAqIGNzcy9Gb250RmFjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250RmFjZTo6cGFyc2VTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZh
Y2U6OnNldFZhcmlhbnQpOgorICAgICAgICAqIGNzcy9NZWRpYUxpc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFRdWVyeVNldDo6aW50ZXJuYWxQYXJzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVF1ZXJ5U2V0OjpwYXJzZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkp
OgorICAgICAgICAqIGNzcy9TZWxlY3RvckZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckZpbHRlcjo6Y29sbGVjdElkZW50aWZpZXJIYXNoZXMpOgorICAgICAgICAqIGNzcy9T
ZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAuaW46CisgICAgICAg
ICogY3NzL1NlbGVjdG9yUHNldWRvVHlwZU1hcC5oOgorICAgICAgICAqIGNzcy9Tb3VyY2VTaXpl
TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNpemVzQXR0cmlidXRlKToKKyAgICAg
ICAgKiBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGFibGVT
dHlsZVByb3BlcnRpZXM6Ok11dGFibGVTdHlsZVByb3BlcnRpZXMpOgorICAgICAgICAqIGNzcy9T
dHlsZVByb3BlcnRpZXMuaDoKKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlSW1wb3J0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6c2V0Q1NTU3R5bGVTaGVldCk6CisgICAg
ICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVNoZWV0Q29udGVudHM6OlN0eWxlU2hlZXRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0Q29udGVudHM6OnBhcnNlckFkZE5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVNoZWV0Q29udGVudHM6Om5hbWVzcGFjZVVSSUZyb21QcmVmaXgpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpkZXRlcm1pbmVOYW1lc3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuaDoKKyAgICAgICAgKiBjc3MvV2Vi
S2l0Q1NTTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6c2V0
TWF0cml4VmFsdWUpOgorICAgICAgICAqIGNzcy9tYWtlU2VsZWN0b3JQc2V1ZG9DbGFzc0FuZENv
bXBhdGliaWxpdHlFbGVtZW50TWFwLnB5OgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmljdENTU1BhcnNlckNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpzaG91bGRBY2NlcHRVbml0TGVzc1ZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZUNvbHVtbldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb2x1bW5D
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRm9udFdlaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3JQYXJhbWV0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VIU0xQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZUJvcmRlckltYWdlU2xpY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpwYXJzZUJvcmRlckltYWdlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBh
cnNlRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VMaW5lYXJHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBh
cnNlVHJhbnNmb3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUJ1
aWx0aW5GaWx0ZXJBcmd1bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRl
cm1pbmVOYW1lSW5OYW1lc3BhY2UpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmluU3RyaWN0TW9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OmluUXVpcmtzTW9kZSk6CisgICAgICAgICogY3NzL3BhcnNlci9D
U1NQYXJzZXJNb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjppc1F1aXJrc01vZGVCZWhhdmlvcik6
CisgICAgICAgIChXZWJDb3JlOjppc1VBU2hlZXRCZWhhdmlvcik6CisgICAgICAgIChXZWJDb3Jl
Ojppc1VuaXRMZXNzTGVuZ3RoUGFyc2luZ0VuYWJsZWRGb3JNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OmlzQ1NTVmlld3BvcnRQYXJzaW5nRW5hYmxlZEZvck1vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6c3RyaWN0VG9DU1NQYXJzZXJNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3RyaWN0UGFy
c2VyTW9kZSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRvRWxlbWVudFNlbGVj
dG9yRnJvbVN0cmluZ1ZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyU2VsZWN0b3I6
OnBhcnNlUHNldWRvQ2xhc3NTZWxlY3RvckZyb21TdHJpbmdWaWV3KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlclNlbGVjdG9yOjpzZXRTZWxlY3Rvckxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyU2VsZWN0b3I6OmFwcGVuZFRhZ0hpc3RvcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyU2VsZWN0b3I6OnJlbGVhc2VUYWdIaXN0b3J5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlclNlbGVjdG9yOjppc0hvc3RQc2V1ZG9TZWxlY3Rvcik6CisgICAgICAgICog
Y3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
clNlbGVjdG9yOjptYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJTZWxlY3Rvcjo6
cHNldWRvRWxlbWVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyU2VsZWN0b3I6
OnNlbGVjdG9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJTZWxlY3Rvcjo6bmVl
ZHNJbXBsaWNpdFNoYWRvd0NvbWJpbmF0b3JGb3JNYXRjaGluZyk6CisgICAgICAgICogY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXI6OmluUXVpcmtzTW9kZSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NTZWxlY3RvclBh
cnNlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3JQYXJzZXI6OnBh
cnNlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3JQYXJzZXI6OkNTU1Nl
bGVjdG9yUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yUGFyc2VyOjpjb25z
dW1lQ29tcGxleFNlbGVjdG9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3RvclBh
cnNlcjo6Y29uc3VtZUNvbXBvdW5kU2VsZWN0b3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQ29tcGxleFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQ29tcG91bmRTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZVNpbXBsZVNlbGVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZUlkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVQc2V1ZG8pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVDb21iaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQXR0cmlidXRlTWF0Y2gpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVBdHRyaWJ1dGVGbGFncyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZUFOUGx1c0IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU2VsZWN0b3JQYXJzZXI6OmRlZmF1bHROYW1lc3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU2VsZWN0b3JQYXJzZXI6OmRldGVybWluZU5hbWVzcGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6cHJlcGVuZFR5cGVTZWxlY3RvcklmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yUGFyc2VyOjphZGRTaW1wbGVTZWxlY3RvclRv
Q29tcG91bmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3JQYXJzZXI6OnNwbGl0Q29t
cG91bmRBdEltcGxpY2l0U2hhZG93Q3Jvc3NpbmdDb21iaW5hdG9yKToKKyAgICAgICAgKiBjc3Mv
cGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3JQYXJzZXI6OkRpc2FsbG93UHNldWRvRWxlbWVudHNTY29wZTo6RGlzYWxsb3dQc2V1
ZG9FbGVtZW50c1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yUGFyc2VyOjpE
aXNhbGxvd1BzZXVkb0VsZW1lbnRzU2NvcGU6On5EaXNhbGxvd1BzZXVkb0VsZW1lbnRzU2NvcGUp
OgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OmZyYWdtZW50UmVsYXRpb25Gb3JTZWxlY3RvclJlbGF0aW9u
KToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZWRFbGVtZW50OjpyZWJ1aWxkUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUpOgorICAgICAg
ICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9u
dEZhY2VFbGVtZW50OjpTVkdGb250RmFjZUVsZW1lbnQpOgorCiAyMDE2LTA5LTA4ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBKU01hcC9KU1NldCBvdmVy
IHRvIEF1eGlsaWFyeSBNYXJrZWRTcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDIwNTU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xMzU5LDYgKzEzNTksNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL3Bh
cnNlci9DU1NQYXJzZXJWYWx1ZXMuY3BwCiAgICAgY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ci5jcHAKICAgICBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKKyAgICBj
c3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmNwcAogICAgIGNzcy9wYXJzZXIvQ1NTVG9rZW5p
emVyLmNwcAogICAgIGNzcy9wYXJzZXIvQ1NTVG9rZW5pemVySW5wdXRTdHJlYW0uY3BwCiAgICAg
Y3NzL3BhcnNlci9NZWRpYVF1ZXJ5QmxvY2tXYXRjaGVyLmNwcApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA1
NTUwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0zMzc0LDYgKzMzNzQsOCBAQAogCQk5NERFNUM3RTFENzhDQjJF
MDAxNjRGMkEgLyogQ1NTUGFyc2VySWRpb21zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0REU1QzdEMUQ3OENCMjUwMDE2NEYyQSAvKiBDU1NQYXJz
ZXJJZGlvbXMuY3BwICovOyB9OwogCQk5NERFNUM4MTFEN0YzQTE0MDAxNjRGMkEgLyogQ1NTQXRS
dWxlSUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTRERTVDN0YxRDdGMzlEMDAwMTY0RjJBIC8qIENTU0F0UnVsZUlELmNwcCAqLzsgfTsKIAkJOTRE
RTVDODIxRDdGM0ExNDAwMTY0RjJBIC8qIENTU0F0UnVsZUlELmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NERFNUM4MDFEN0YzOUQwMDAxNjRGMkEgLyog
Q1NTQXRSdWxlSUQuaCAqLzsgfTsKKwkJOTRERTVDOEQxRDgwODAyNzAwMTY0RjJBIC8qIENTU1Nl
bGVjdG9yUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk0REU1QzhCMUQ4MDgwMTUwMDE2NEYyQSAvKiBDU1NTZWxlY3RvclBhcnNlci5jcHAg
Ki87IH07CisJCTk0REU1QzhFMUQ4MDgwMjcwMDE2NEYyQSAvKiBDU1NTZWxlY3RvclBhcnNlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTRERTVDOEMx
RDgwODAxNTAwMTY0RjJBIC8qIENTU1NlbGVjdG9yUGFyc2VyLmggKi87IH07CiAJCTk2QUJBNDIz
MTRCQ0I4MEUwMEQ1NjIwNCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NkFCQTQyMjE0QkNC
ODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwICovOyB9Owog
CQk5NzAzRTFCRjE1REM0RTM3MDAxRjI0QzggLyogSlNWb2lkQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdFOUVDOEIxNURDNDkyRjAw
NEYyRTcxIC8qIEpTVm9pZENhbGxiYWNrLmNwcCAqLzsgfTsKIAkJOTcwNTk5NzcxMDdEOTc1MjAw
QTUwQTdDIC8qIFBvbGljeUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MDU5OTczMTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxs
YmFjay5jcHAgKi87IH07CkBAIC0xMDUyMCw2ICsxMDUyMiw4IEBACiAJCTk0REU1QzdEMUQ3OENC
MjUwMDE2NEYyQSAvKiBDU1NQYXJzZXJJZGlvbXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQ1NTUGFyc2VySWRpb21zLmNwcDsgcGF0aCA9IHBhcnNlci9DU1NQYXJz
ZXJJZGlvbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NERFNUM3RjFEN0Yz
OUQwMDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQ1NTQXRSdWxlSUQuY3BwOyBwYXRoID0gcGFyc2VyL0NTU0F0UnVsZUlELmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTRERTVDODAxRDdGMzlEMDAwMTY0RjJB
IC8qIENTU0F0UnVsZUlELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENTU0F0
UnVsZUlELmg7IHBhdGggPSBwYXJzZXIvQ1NTQXRSdWxlSUQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTRERTVDOEIxRDgwODAxNTAwMTY0RjJBIC8qIENTU1NlbGVjdG9yUGFyc2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTU1NlbGVjdG9yUGFy
c2VyLmNwcDsgcGF0aCA9IHBhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk0REU1QzhDMUQ4MDgwMTUwMDE2NEYyQSAvKiBDU1NTZWxlY3Rv
clBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDU1NTZWxlY3RvclBh
cnNlci5oOyBwYXRoID0gcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTk1MEM0QzAyQkVEODkzNkY4MThFMkY5OSAvKiBKU1NWR0dyYXBoaWNz
RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdHcmFwaGlj
c0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTZBQkE0MjIxNEJDQjgw
RTAwRDU2MjA0IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcwNTk5NzMxMDdEOTc1MjAwQTUw
QTdDIC8qIFBvbGljeUNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBvbGljeUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE4MTc0LDYgKzE4MTc4LDggQEAKIAkJCQk5NDZEMzc0MjFENkNGNjMyMDA3NzA4NEYgLyogQ1NT
UHJvcGVydHlQYXJzZXIuaCAqLywKIAkJCQk5NDlDNzcwMjFENkUzOTM1MDBDMERFNEYgLyogQ1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcCAqLywKIAkJCQk5NDlDNzcwMzFENkUzOTM1MDBDMERF
NEYgLyogQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmggKi8sCisJCQkJOTRERTVDOEIxRDgwODAx
NTAwMTY0RjJBIC8qIENTU1NlbGVjdG9yUGFyc2VyLmNwcCAqLywKKwkJCQk5NERFNUM4QzFEODA4
MDE1MDAxNjRGMkEgLyogQ1NTU2VsZWN0b3JQYXJzZXIuaCAqLywKIAkJCQk5NDZEMzczNDFENkNE
Rjk4MDA3NzA4NEYgLyogQ1NTVG9rZW5pemVyLmNwcCAqLywKIAkJCQk5NDZEMzczNzFENkNERjk4
MDA3NzA4NEYgLyogQ1NTVG9rZW5pemVyLmggKi8sCiAJCQkJOTQ2RDM3MzUxRDZDREY5ODAwNzcw
ODRGIC8qIENTU1Rva2VuaXplcklucHV0U3RyZWFtLmNwcCAqLywKQEAgLTI2NjM0LDYgKzI2NjQw
LDcgQEAKIAkJCQlCMjIyN0E5NDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUG9seWxpbmVFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E5NzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUHJl
c2VydmVBc3BlY3RSYXRpby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEExMjZFRjFEQjAw
OTc4RjdBIC8qIFNWR1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NERFNUM4RTFEODA4
MDI3MDAxNjRGMkEgLyogQ1NTU2VsZWN0b3JQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4
MURENDlDMTNCQTFBNjAwMERDNzYyNyAvKiBTVkdQcm9wZXJ0eUluZm8uaCBpbiBIZWFkZXJzICov
LAogCQkJCTA4OEEwRTBCMTI2RUYxREIwMDk3OEY3QSAvKiBTVkdQcm9wZXJ0eVRlYXJPZmYuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4OEEwRTBDMTI2RUYxREIwMDk3OEY3QSAvKiBTVkdQcm9wZXJ0
eVRyYWl0cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODkwOSw2ICsyODkxNiw3IEBACiAJCQkJQkNF
MDEzOUEwQzBCRUYxODAwNDM4NjBBIC8qIEpTU3R5bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzk4QTI3RDBDMEM5OTUwMDA0QkVCRjcgLyogSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4NEVCRDg0MENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hl
ZXRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk0REU1QzhEMUQ4MDgwMjcwMDE2NEYyQSAv
KiBDU1NTZWxlY3RvclBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODRFQkQ3ODBDQjhD
ODkyMDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMjAxMTEwNzBBQjc3NDA1MDBEQjBFNjggLyogSlNTVkdBRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyNEQ5MTI5MTEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERl
ZkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAko
cmV2aXNpb24gMjA1NDk5KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsxNzcsNyBA
QCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRUcmlnZ2VyKEV4ZWNTCiAKIHN0YXRpYyBib29s
IGlzVmFsaWRTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogewotICAgIENTU1BhcnNl
ckNvbnRleHQgY29udGV4dChDU1NRdWlya3NNb2RlKTsKKyAgICBDU1NQYXJzZXJDb250ZXh0IGNv
bnRleHQoSFRNTFF1aXJrc01vZGUpOwogICAgIENTU1BhcnNlciBwYXJzZXIoY29udGV4dCk7CiAg
ICAgQ1NTU2VsZWN0b3JMaXN0IHNlbGVjdG9yTGlzdDsKICAgICBwYXJzZXIucGFyc2VTZWxlY3Rv
cihzZWxlY3Rvciwgc2VsZWN0b3JMaXN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NE
ZWZhdWx0U3R5bGVTaGVldHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NEZWZhdWx0U3R5bGVTaGVldHMuY3BwCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUs
NyArOTUsNyBAQCBzdGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgcHJpbnRFCiAKIHN0
YXRpYyBTdHlsZVNoZWV0Q29udGVudHMqIHBhcnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikK
IHsKLSAgICBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0ID0gU3R5bGVTaGVldENvbnRlbnRzOjpj
cmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9uIHB1cnBvc2UKKyAgICBTdHls
ZVNoZWV0Q29udGVudHMmIHNoZWV0ID0gU3R5bGVTaGVldENvbnRlbnRzOjpjcmVhdGUoQ1NTUGFy
c2VyQ29udGV4dChVQVNoZWV0TW9kZSkpLmxlYWtSZWYoKTsgLy8gbGVhayB0aGUgc2hlZXQgb24g
cHVycG9zZQogICAgIHNoZWV0LnBhcnNlU3RyaW5nKHN0cik7CiAgICAgcmV0dXJuICZzaGVldDsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcAkocmV2aXNpb24gMjA1
NDk5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzI4LDcgKzMyOCw3IEBAIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENT
U0ZvbnRGYWMKIHsKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFj
ZT4+IHJlc3VsdDsKICAgICBhdXRvIHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3Jl
YXRlKCk7Ci0gICAgYXV0byBwYXJzZVJlc3VsdCA9IENTU1BhcnNlcjo6cGFyc2VWYWx1ZShzdHls
ZSwgQ1NTUHJvcGVydHlGb250LCBmb250LCB0cnVlLCBDU1NTdHJpY3RNb2RlLCBudWxscHRyKTsK
KyAgICBhdXRvIHBhcnNlUmVzdWx0ID0gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHN0eWxlLCBDU1NQ
cm9wZXJ0eUZvbnQsIGZvbnQsIHRydWUsIEhUTUxTdGFuZGFyZE1vZGUsIG51bGxwdHIpOwogICAg
IGlmIChwYXJzZVJlc3VsdCA9PSBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcikgewogICAg
ICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4JKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEyNTYsNyArMTI1Niw3
IEBAIHNwZWNpZmllcjoKICAgICBJRFNFTCB7CiAgICAgICAgICQkID0gbmV3IENTU1BhcnNlclNl
bGVjdG9yOwogICAgICAgICAkJC0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OklkKTsKLSAgICAgICAg
aWYgKHBhcnNlci0+bV9jb250ZXh0Lm1vZGUgPT0gQ1NTUXVpcmtzTW9kZSkKKyAgICAgICAgaWYg
KHBhcnNlci0+bV9jb250ZXh0Lm1vZGUgPT0gSFRNTFF1aXJrc01vZGUpCiAgICAgICAgICAgICAk
MS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoKTsKICAgICAgICAgJCQtPnNldFZhbHVl
KCQxKTsKICAgICB9CkBAIC0xMjY2LDcgKzEyNjYsNyBAQCBzcGVjaWZpZXI6CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgJCQgPSBuZXcgQ1NTUGFyc2VyU2VsZWN0b3I7CiAgICAgICAgICAg
ICAkJC0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OklkKTsKLSAgICAgICAgICAgIGlmIChwYXJzZXIt
Pm1fY29udGV4dC5tb2RlID09IENTU1F1aXJrc01vZGUpCisgICAgICAgICAgICBpZiAocGFyc2Vy
LT5tX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtzTW9kZSkKICAgICAgICAgICAgICAgICAkMS5j
b252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoKTsKICAgICAgICAgICAgICQkLT5zZXRWYWx1
ZSgkMSk7CiAgICAgICAgIH0KQEAgLTEyODAsNyArMTI4MCw3IEBAIGNsYXNzOgogICAgICcuJyBJ
REVOVCB7CiAgICAgICAgICQkID0gbmV3IENTU1BhcnNlclNlbGVjdG9yOwogICAgICAgICAkJC0+
c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OkNsYXNzKTsKLSAgICAgICAgaWYgKHBhcnNlci0+bV9jb250
ZXh0Lm1vZGUgPT0gQ1NTUXVpcmtzTW9kZSkKKyAgICAgICAgaWYgKHBhcnNlci0+bV9jb250ZXh0
Lm1vZGUgPT0gSFRNTFF1aXJrc01vZGUpCiAgICAgICAgICAgICAkMi5jb252ZXJ0VG9BU0NJSUxv
d2VyY2FzZUluUGxhY2UoKTsKICAgICAgICAgJCQtPnNldFZhbHVlKCQyKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczNSw2ICs3
MzUsOCBAQCBTdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dChjb25zdCBTCiAgICAgICAg
ICAgICByZXR1cm4gdGFnSGlzdG9yeS0+c2VsZWN0b3JUZXh0KCIgIiArIHN0ci50b1N0cmluZygp
ICsgcmlnaHRTaWRlKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6CiAgICAgICAg
ICAgICByZXR1cm4gdGFnSGlzdG9yeS0+c2VsZWN0b3JUZXh0KCIgPiAiICsgc3RyLnRvU3RyaW5n
KCkgKyByaWdodFNpZGUpOworICAgICAgICBjYXNlIFNoYWRvd0RlZXA6CisgICAgICAgICAgICBy
ZXR1cm4gdGFnSGlzdG9yeS0+c2VsZWN0b3JUZXh0KCIgL2RlZXAvICIgKyBzdHIudG9TdHJpbmco
KSArIHJpZ2h0U2lkZSk7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50
OgogICAgICAgICAgICAgcmV0dXJuIHRhZ0hpc3RvcnktPnNlbGVjdG9yVGV4dCgiICsgIiArIHN0
ci50b1N0cmluZygpICsgcmlnaHRTaWRlKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SW5k
aXJlY3RBZGphY2VudDoKQEAgLTc0NSw2ICs3NDcsOCBAQCBTdHJpbmcgQ1NTU2VsZWN0b3I6OnNl
bGVjdG9yVGV4dChjb25zdCBTCiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICNlbmRpZgogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZXNjZW5kYW50OgorICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpTaGFkb3dQc2V1ZG86CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRv
d1Nsb3Q6CiAgICAgICAgICAgICByZXR1cm4gdGFnSGlzdG9yeS0+c2VsZWN0b3JUZXh0KHN0ci50
b1N0cmluZygpICsgcmlnaHRTaWRlKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTZWxlY3Rvci5oCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAgICAgRGlyZWN0QWRqYWNlbnQsCiAgICAgICAgICAgICBJbmRp
cmVjdEFkamFjZW50LAogICAgICAgICAgICAgU3ViU2VsZWN0b3IsCi0gICAgICAgICAgICBTaGFk
b3dEZXNjZW5kYW50LAorICAgICAgICAgICAgU2hhZG93RGVzY2VuZGFudCwgLy8gRklYTUUtTkVX
UEFSU0VSOiBSZW1vdmUgdGhpcyBpbiBmYXZvciBvZiB0aGUgbmV3IHNoYWRvdyB2YWx1ZXMgYmVs
b3cuCisgICAgICAgICAgICBTaGFkb3dQc2V1ZG8sIC8vIFNwZWNpYWwgY2FzZSBvZiBzaGFkb3cg
RE9NIHBzZXVkbyBlbGVtZW50cyAvIHNoYWRvdyBwc2V1ZG8gZWxlbWVudAorICAgICAgICAgICAg
U2hhZG93RGVlcCwgLy8gL2RlZXAvIGNvbWJpbmF0b3IKKyAgICAgICAgICAgIFNoYWRvd1Nsb3Qg
Ly8gc2xvdHRlZCB0byA8c2xvdD4gZQogICAgICAgICB9OwogCiAgICAgICAgIGVudW0gUHNldWRv
Q2xhc3NUeXBlIHsKQEAgLTIxNyw2ICsyMjAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgUmlnaHRCb3R0b21NYXJnaW5Cb3gsCiAgICAgICAgIH07CiAKKyAgICAgICAgZW51
bSBBdHRyaWJ1dGVNYXRjaFR5cGUgeworICAgICAgICAgICAgQ2FzZVNlbnNpdGl2ZSwKKyAgICAg
ICAgICAgIENhc2VJbnNlbnNpdGl2ZSwKKyAgICAgICAgfTsKKwogICAgICAgICBzdGF0aWMgUHNl
dWRvRWxlbWVudFR5cGUgcGFyc2VQc2V1ZG9FbGVtZW50VHlwZShjb25zdCBTdHJpbmcmKTsKICAg
ICAgICAgc3RhdGljIFBzZXVkb0lkIHBzZXVkb0lkKFBzZXVkb0VsZW1lbnRUeXBlKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0RPTUNTU05hbWVzcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0RPTUNTU05hbWVzcGFjZS5jcHAJKHJldmlzaW9uIDIwNTQ5OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01DU1NOYW1lc3BhY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OSwxMiArNjksMTIgQEAgYm9vbCBET01DU1NOYW1lc3BhY2U6OnN1cHBvcnRzKGNvbnN0
IFN0cgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvIGR1bW15U3R5bGUgPSBNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKLSAgICByZXR1cm4gQ1NTUGFyc2VyOjpwYXJz
ZVZhbHVlKGR1bW15U3R5bGUsIHByb3BlcnR5SUQsIG5vcm1hbGl6ZWRWYWx1ZSwgZmFsc2UsIENT
U1N0cmljdE1vZGUsIG51bGxwdHIpICE9IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yOwor
ICAgIHJldHVybiBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoZHVtbXlTdHlsZSwgcHJvcGVydHlJRCwg
bm9ybWFsaXplZFZhbHVlLCBmYWxzZSwgSFRNTFN0YW5kYXJkTW9kZSwgbnVsbHB0cikgIT0gQ1NT
UGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3I7CiB9CiAKIGJvb2wgRE9NQ1NTTmFtZXNwYWNlOjpz
dXBwb3J0cyhjb25zdCBTdHJpbmcmIGNvbmRpdGlvblRleHQpCiB7Ci0gICAgQ1NTUGFyc2VyQ29u
dGV4dCBjb250ZXh0KENTU1N0cmljdE1vZGUpOworICAgIENTU1BhcnNlckNvbnRleHQgY29udGV4
dChIVE1MU3RhbmRhcmRNb2RlKTsKICAgICBDU1NQYXJzZXIgcGFyc2VyKGNvbnRleHQpOwogICAg
IHJldHVybiBwYXJzZXIucGFyc2VTdXBwb3J0c0NvbmRpdGlvbihjb25kaXRpb25UZXh0KTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAkocmV2aXNpb24gMjA1NDk5KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3
IEBAIFdlYWtQdHI8Rm9udEZhY2U+IEZvbnRGYWNlOjpjcmVhdGVXZWFrUHQKIFJlZlB0cjxDU1NW
YWx1ZT4gRm9udEZhY2U6OnBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgYXV0byBzdHlsZSA9IE11dGFibGVTdHlsZVByb3Bl
cnRpZXM6OmNyZWF0ZSgpOwotICAgIGlmIChDU1NQYXJzZXI6OnBhcnNlVmFsdWUoc3R5bGUsIHBy
b3BlcnR5SUQsIHN0cmluZywgdHJ1ZSwgQ1NTU3RyaWN0TW9kZSwgbnVsbHB0cikgPT0gQ1NTUGFy
c2VyOjpQYXJzZVJlc3VsdDo6RXJyb3IpCisgICAgaWYgKENTU1BhcnNlcjo6cGFyc2VWYWx1ZShz
dHlsZSwgcHJvcGVydHlJRCwgc3RyaW5nLCB0cnVlLCBIVE1MU3RhbmRhcmRNb2RlLCBudWxscHRy
KSA9PSBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgcmV0dXJuIHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwog
fQpAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgRm9udEZhY2U6OnNldFZhcmlhbnQoY29uc3QgU3Ry
aW5nJiAKICAgICB9CiAKICAgICBhdXRvIHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
Y3JlYXRlKCk7Ci0gICAgYXV0byByZXN1bHQgPSBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoc3R5bGUs
IENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIHZhcmlhbnQsIHRydWUsIENTU1N0cmljdE1vZGUsIG51
bGxwdHIpOworICAgIGF1dG8gcmVzdWx0ID0gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHN0eWxlLCBD
U1NQcm9wZXJ0eUZvbnRWYXJpYW50LCB2YXJpYW50LCB0cnVlLCBIVE1MU3RhbmRhcmRNb2RlLCBu
dWxscHRyKTsKICAgICBpZiAocmVzdWx0ID09IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9y
KSB7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL01lZGlhTGlzdC5jcHAJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9NZWRpYUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTMgKzEyOSwxMyBAQCBP
cHRpb25hbDxNZWRpYVF1ZXJ5PiBNZWRpYVF1ZXJ5U2V0OjppbnRlCiAKIE9wdGlvbmFsPE1lZGlh
UXVlcnk+IE1lZGlhUXVlcnlTZXQ6OmludGVybmFsUGFyc2UoY29uc3QgU3RyaW5nJiBxdWVyeVN0
cmluZykKIHsKLSAgICBDU1NQYXJzZXIgcGFyc2VyKENTU1N0cmljdE1vZGUpOworICAgIENTU1Bh
cnNlciBwYXJzZXIoSFRNTFN0YW5kYXJkTW9kZSk7CiAgICAgcmV0dXJuIGludGVybmFsUGFyc2Uo
cGFyc2VyLCBxdWVyeVN0cmluZyk7CiB9CiAKIGJvb2wgTWVkaWFRdWVyeVNldDo6cGFyc2UoY29u
c3QgU3RyaW5nJiBtZWRpYVN0cmluZykKIHsKLSAgICBDU1NQYXJzZXIgcGFyc2VyKENTU1N0cmlj
dE1vZGUpOworICAgIENTU1BhcnNlciBwYXJzZXIoSFRNTFN0YW5kYXJkTW9kZSk7CiAgICAgCiAg
ICAgVmVjdG9yPE1lZGlhUXVlcnk+IHJlc3VsdDsKICAgICBWZWN0b3I8U3RyaW5nPiBsaXN0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJKHJldmlzaW9uIDIwNTQ5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NTIsOCArNDUyLDE2IEBAIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hSZXN1bHQgU2Vs
ZWN0b3JDaGUKIAogICAgICAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0Ojp1cGRhdGVXaXRoTWF0
Y2hUeXBlKHJlc3VsdCwgbWF0Y2hUeXBlKTsKICAgICAgICAgfQorICAgIAorICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlNoYWRvd1BzZXVkbzoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZWVw
OgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd1Nsb3Q6CisgICAgICAgIC8vIEZJWE1FLU5F
V1BBUlNFUjogSGF2ZSB0byBpbXBsZW1lbnQgdGhlc2UuCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseSk7CiAgICAgfQogCisKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxzKE1hdGNoOjpTZWxlY3RvckZhaWxzQ29tcGxl
dGVseSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckZpbHRlci5jcHAJKHJldmlz
aW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckZpbHRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzOCw4ICsxMzgsMTQgQEAgdm9pZCBTZWxlY3RvckZpbHRlcjo6Y29s
bGVjdElkZW50aWZpZXJIYQogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZXNjZW5k
YW50OgogICAgICAgICAgICAgc2tpcE92ZXJTdWJzZWxlY3RvcnMgPSB0cnVlOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd1Nsb3Q6CisgICAgICAg
ICAgICAvLyBEaXNhYmxlIGZhc3RSZWplY3RTZWxlY3Rvci4KKyAgICAgICAgICAgICppZGVudGlm
aWVySGFzaGVzID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6RGVzY2VuZGFudDoKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6CisgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd1BzZXVkbzoKKyAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6U2hhZG93RGVlcDoKICAgICAgICAgICAgIHNraXBPdmVyU3Vic2VsZWN0b3JzID0gZmFs
c2U7CiAgICAgICAgICAgICBjb2xsZWN0RGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hl
cyhzZWxlY3RvciwgaGFzaCk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yUHNldWRvQ2xhc3NBbmRD
b21wYXRpYmlsaXR5RWxlbWVudE1hcC5pbgkocmV2aXNpb24gMjA1NDk5KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudE1hcC5p
bgkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQCBmaXJzdC1vZi10eXBlCiBmb2N1cwog
Zm9jdXMtd2l0aGluCiBob3Jpem9udGFsCi1ob3N0Citob3N0LCBQc2V1ZG9DbGFzc0hvc3QsIFBz
ZXVkb0VsZW1lbnRVbmtub3duCiBob3ZlcgogaW4tcmFuZ2UKIGluY3JlbWVudApJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yUHNldWRvVHlwZU1hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvclBzZXVkb1R5cGVNYXAuaAkocmV2aXNpb24gMjA1NDk5
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yUHNldWRvVHlwZU1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIHN0cnVjdCBQc2V1ZG9DbGFzc09yQ29tcGF0aWJpbGl0
eVBzZXVkb0UKIH07CiAKIFBzZXVkb0NsYXNzT3JDb21wYXRpYmlsaXR5UHNldWRvRWxlbWVudCBw
YXJzZVBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRTdHJpbmcoY29uc3QgQ1NTUGFy
c2VyU3RyaW5nJiBwc2V1ZG9UeXBlU3RyaW5nKTsKK1BzZXVkb0NsYXNzT3JDb21wYXRpYmlsaXR5
UHNldWRvRWxlbWVudCBwYXJzZVBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRTdHJp
bmcoY29uc3QgU3RyaW5nVmlldyYgcHNldWRvVHlwZVN0cmluZyk7CiBDU1NTZWxlY3Rvcjo6UHNl
dWRvRWxlbWVudFR5cGUgcGFyc2VQc2V1ZG9FbGVtZW50U3RyaW5nKGNvbnN0IFN0cmluZ0ltcGwm
IHBzZXVkb1R5cGVTdHJpbmcpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcg
Kzc0LDcgQEAgZmxvYXQgcGFyc2VTaXplc0F0dHJpYnV0ZShEb2N1bWVudCYgZG9jdQogICAgIGlm
ICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiAwOwogICAgIGF1dG8mIHN0eWxlID0gcmVuZGVy
ZXItPnN0eWxlKCk7Ci0gICAgZm9yIChhdXRvJiBzb3VyY2VTaXplIDogQ1NTUGFyc2VyKENTU1N0
cmljdE1vZGUpLnBhcnNlU2l6ZXNBdHRyaWJ1dGUoc2l6ZXNBdHRyaWJ1dGUpKSB7CisgICAgZm9y
IChhdXRvJiBzb3VyY2VTaXplIDogQ1NTUGFyc2VyKEhUTUxTdGFuZGFyZE1vZGUpLnBhcnNlU2l6
ZXNBdHRyaWJ1dGUoc2l6ZXNBdHRyaWJ1dGUpKSB7CiAgICAgICAgIGlmIChtYXRjaChzb3VyY2VT
aXplLmV4cHJlc3Npb24sIHN0eWxlLCBkb2N1bWVudCkpCiAgICAgICAgICAgICByZXR1cm4gY29t
cHV0ZUxlbmd0aChzb3VyY2VTaXplLmxlbmd0aC5nZXQoKSwgc3R5bGUsICpyZW5kZXJlcik7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAJKHJldmlzaW9u
IDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIE11dGFibGVTdHlsZVByb3BlcnRpZXM6Ok11dGFi
bGVTdHlsZVByb3AKIH0KIAogTXV0YWJsZVN0eWxlUHJvcGVydGllczo6TXV0YWJsZVN0eWxlUHJv
cGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydGllcywgdW5zaWduZWQgbGVuZ3RoKQot
ICAgIDogU3R5bGVQcm9wZXJ0aWVzKENTU1N0cmljdE1vZGUpCisgICAgOiBTdHlsZVByb3BlcnRp
ZXMoSFRNTFN0YW5kYXJkTW9kZSkKIHsKICAgICBtX3Byb3BlcnR5VmVjdG9yLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5oCShyZXZpc2lvbiAy
MDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Niw3ICsxODYsNyBAQCBpbmxpbmUgY29uc3QgU3R5bGVQcm9wZXJ0eU1ldGFk
YXRhKiBJbW11CiAKIGNsYXNzIE11dGFibGVTdHlsZVByb3BlcnRpZXMgZmluYWwgOiBwdWJsaWMg
U3R5bGVQcm9wZXJ0aWVzIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVm
PE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGNyZWF0ZShDU1NQYXJzZXJNb2RlID0gQ1NTUXVpcmtz
TW9kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzPiBjcmVhdGUoQ1NTUGFyc2VyTW9kZSA9IEhUTUxRdWlya3NNb2RlKTsKICAgICBzdGF0aWMg
UmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGNyZWF0ZShjb25zdCBDU1NQcm9wZXJ0eSogcHJv
cGVydGllcywgdW5zaWduZWQgY291bnQpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgfk11dGFibGVT
dHlsZVByb3BlcnRpZXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJbXBv
cnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQu
Y3BwCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlSW1w
b3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFN0eWxlUnVsZUlt
cG9ydDo6c2V0Q1NTU3R5bGVTaGVldChjCiAgICAgaWYgKG1fc3R5bGVTaGVldCkKICAgICAgICAg
bV9zdHlsZVNoZWV0LT5jbGVhck93bmVyUnVsZSgpOwogCi0gICAgQ1NTUGFyc2VyQ29udGV4dCBj
b250ZXh0ID0gbV9wYXJlbnRTdHlsZVNoZWV0ID8gbV9wYXJlbnRTdHlsZVNoZWV0LT5wYXJzZXJD
b250ZXh0KCkgOiBDU1NTdHJpY3RNb2RlOworICAgIENTU1BhcnNlckNvbnRleHQgY29udGV4dCA9
IG1fcGFyZW50U3R5bGVTaGVldCA/IG1fcGFyZW50U3R5bGVTaGVldC0+cGFyc2VyQ29udGV4dCgp
IDogSFRNTFN0YW5kYXJkTW9kZTsKICAgICBjb250ZXh0LmNoYXJzZXQgPSBjaGFyc2V0OwogICAg
IGlmICghYmFzZVVSTC5pc051bGwoKSkKICAgICAgICAgY29udGV4dC5iYXNlVVJMID0gYmFzZVVS
TDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCShyZXZp
c2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCB1bnNpZ25lZCBTdHlsZVNoZWV0Q29u
dGVudHM6OmVzdGltYXRlZFNpCiBTdHlsZVNoZWV0Q29udGVudHM6OlN0eWxlU2hlZXRDb250ZW50
cyhTdHlsZVJ1bGVJbXBvcnQqIG93bmVyUnVsZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwg
Y29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKICAgICA6IG1fb3duZXJSdWxlKG93bmVy
UnVsZSkKICAgICAsIG1fb3JpZ2luYWxVUkwob3JpZ2luYWxVUkwpCisgICAgLCBtX2RlZmF1bHRO
YW1lc3BhY2Uoc3RhckF0b20pCiAgICAgLCBtX2xvYWRDb21wbGV0ZWQoZmFsc2UpCiAgICAgLCBt
X2lzVXNlclN0eWxlU2hlZXQob3duZXJSdWxlICYmIG93bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVl
dCgpICYmIG93bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpLT5pc1VzZXJTdHlsZVNoZWV0KCkp
CiAgICAgLCBtX2hhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcih0cnVlKQpAQCAtODIsNiAr
ODMsNyBAQCBTdHlsZVNoZWV0Q29udGVudHM6OlN0eWxlU2hlZXRDb250ZW50cyhjCiAgICAgLCBt
X2ltcG9ydFJ1bGVzKG8ubV9pbXBvcnRSdWxlcy5zaXplKCkpCiAgICAgLCBtX2NoaWxkUnVsZXMo
by5tX2NoaWxkUnVsZXMuc2l6ZSgpKQogICAgICwgbV9uYW1lc3BhY2VzKG8ubV9uYW1lc3BhY2Vz
KQorICAgICwgbV9kZWZhdWx0TmFtZXNwYWNlKG8ubV9kZWZhdWx0TmFtZXNwYWNlKQogICAgICwg
bV9sb2FkQ29tcGxldGVkKHRydWUpCiAgICAgLCBtX2lzVXNlclN0eWxlU2hlZXQoby5tX2lzVXNl
clN0eWxlU2hlZXQpCiAgICAgLCBtX2hhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcihvLm1f
aGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKQpAQCAtMjY5LDE1ICsyNzEsMTggQEAgdm9p
ZCBTdHlsZVNoZWV0Q29udGVudHM6OndyYXBwZXJEZWxldGVSdQogCiB2b2lkIFN0eWxlU2hlZXRD
b250ZW50czo6cGFyc2VyQWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBj
b25zdCBBdG9taWNTdHJpbmcmIHVyaSkKIHsKLSAgICBpZiAodXJpLmlzTnVsbCgpIHx8IHByZWZp
eC5pc051bGwoKSkKKyAgICBBU1NFUlQoIXVyaS5pc051bGwoKSk7CisgICAgaWYgKHByZWZpeC5p
c051bGwoKSkgeworICAgICAgICBtX2RlZmF1bHROYW1lc3BhY2UgPSB1cmk7CiAgICAgICAgIHJl
dHVybjsKKyAgICB9CiAgICAgUHJlZml4TmFtZXNwYWNlVVJJTWFwOjpBZGRSZXN1bHQgcmVzdWx0
ID0gbV9uYW1lc3BhY2VzLmFkZChwcmVmaXgsIHVyaSk7CiAgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KQogICAgICAgICByZXR1cm47CiAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHVyaTsK
IH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTdHlsZVNoZWV0Q29udGVudHM6OmRldGVybWluZU5h
bWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKK2NvbnN0IEF0b21pY1N0cmluZyYg
U3R5bGVTaGVldENvbnRlbnRzOjpuYW1lc3BhY2VVUklGcm9tUHJlZml4KGNvbnN0IEF0b21pY1N0
cmluZyYgcHJlZml4KQogewogICAgIFByZWZpeE5hbWVzcGFjZVVSSU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX25hbWVzcGFjZXMuZmluZChwcmVmaXgpOwogICAgIGlmIChpdCA9PSBtX25hbWVz
cGFjZXMuZW5kKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5o
CShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRl
bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgU3R5bGVSdWxlSW1w
b3J0OwogCiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHMgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRl
ZDxTdHlsZVNoZWV0Q29udGVudHM+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0eWxlU2hl
ZXRDb250ZW50cz4gY3JlYXRlKGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQgPSBDU1NQ
YXJzZXJDb250ZXh0KENTU1N0cmljdE1vZGUpKQorICAgIHN0YXRpYyBSZWY8U3R5bGVTaGVldENv
bnRlbnRzPiBjcmVhdGUoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCA9IENTU1BhcnNl
ckNvbnRleHQoSFRNTFN0YW5kYXJkTW9kZSkpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTdHlsZVNoZWV0Q29udGVudHMoMCwgU3RyaW5nKCksIGNvbnRleHQpKTsKICAgICB9
CkBAIC02MCw4ICs2MCw5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB+U3R5bGVTaGVl
dENvbnRlbnRzKCk7CiAgICAgCiAgICAgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgcGFyc2VyQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VyQ29udGV4dDsgfQotCi0gICAgY29uc3QgQXRv
bWljU3RyaW5nJiBkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgp
OworICAgIAorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGVmYXVsdE5hbWVzcGFjZSgpIHsgcmV0
dXJuIG1fZGVmYXVsdE5hbWVzcGFjZTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNw
YWNlVVJJRnJvbVByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCk7CiAKICAgICB2b2lk
IHBhcnNlQXV0aG9yU3R5bGVTaGVldChjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0KiwgY29uc3Qg
U2VjdXJpdHlPcmlnaW4qKTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHBhcnNlU3RyaW5nKGNv
bnN0IFN0cmluZyYpOwpAQCAtMTYwLDYgKzE2MSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJl
ZlB0cjxTdHlsZVJ1bGVCYXNlPj4gbV9jaGlsZFJ1bGVzOwogICAgIHR5cGVkZWYgSGFzaE1hcDxB
dG9taWNTdHJpbmcsIEF0b21pY1N0cmluZz4gUHJlZml4TmFtZXNwYWNlVVJJTWFwOwogICAgIFBy
ZWZpeE5hbWVzcGFjZVVSSU1hcCBtX25hbWVzcGFjZXM7CisgICAgQXRvbWljU3RyaW5nIG1fZGVm
YXVsdE5hbWVzcGFjZTsKIAogICAgIGJvb2wgbV9sb2FkQ29tcGxldGVkIDogMTsKICAgICBib29s
IG1faXNVc2VyU3R5bGVTaGVldCA6IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0
Q1NTTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NT
TWF0cml4LmNwcAkocmV2aXNpb24gMjA1NDk5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktp
dENTU01hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBXZWJL
aXRDU1NNYXRyaXg6OnNldE1hdHJpeFZhbHVlKGNvbgogICAgICAgICByZXR1cm47CiAKICAgICBh
dXRvIHN0eWxlRGVjbGFyYXRpb24gPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsK
LSAgICBpZiAoQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHN0eWxlRGVjbGFyYXRpb24sIENTU1Byb3Bl
cnR5VHJhbnNmb3JtLCBzdHJpbmcsIHRydWUsIENTU1N0cmljdE1vZGUsIG51bGxwdHIpICE9IENT
U1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yKSB7CisgICAgaWYgKENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShzdHlsZURlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSwgc3RyaW5nLCB0cnVl
LCBIVE1MU3RhbmRhcmRNb2RlLCBudWxscHRyKSAhPSBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpF
cnJvcikgewogICAgICAgICAvLyBDb252ZXJ0IHRvIFRyYW5zZm9ybU9wZXJhdGlvbnMuIFRoaXMg
Y2FuIGZhaWwgaWYgYSBwcm9wZXJ0eQogICAgICAgICAvLyByZXF1aXJlcyBzdHlsZSAoaS5lLiwg
cGFyYW0gdXNlcyAnZW1zJyBvciAnZXhzJykKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZSA9IHN0eWxlRGVjbGFyYXRpb24tPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUcmFu
c2Zvcm0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL21ha2VTZWxlY3RvclBzZXVkb0NsYXNz
QW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL21ha2VTZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAu
cHkJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlU2VsZWN0b3JQ
c2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC02Miw3ICs2Miw3IEBAIG91dHB1dF9maWxlID0gb3BlbignU2VsZWN0b3JQc2V1ZG9DbGFzc0EK
IG91dHB1dF9maWxlLndyaXRlKCIiIgogJXsKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xOTgsNiArMTk4LDE5IEBAIFBzZXVkb0NsYXNzT3JDb21wYXRpYmlsaXR5UHNl
dWRvRWxlbWVudCAKICAgICByZXR1cm4geyBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NVbmtub3du
LCBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFVua25vd24gfTsKIH0KIAorUHNldWRvQ2xhc3NP
ckNvbXBhdGliaWxpdHlQc2V1ZG9FbGVtZW50IHBhcnNlUHNldWRvQ2xhc3NBbmRDb21wYXRpYmls
aXR5RWxlbWVudFN0cmluZyhjb25zdCBTdHJpbmdWaWV3JiBwc2V1ZG9UeXBlU3RyaW5nKQorewor
ICAgIGNvbnN0IFNlbGVjdG9yUHNldWRvQ2xhc3NPckNvbXBhdGliaWxpdHlQc2V1ZG9FbGVtZW50
RW50cnkqIGVudHJ5OworICAgIGlmIChwc2V1ZG9UeXBlU3RyaW5nLmlzOEJpdCgpKQorICAgICAg
ICBlbnRyeSA9IHBhcnNlUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudFN0cmluZyhw
c2V1ZG9UeXBlU3RyaW5nLmNoYXJhY3RlcnM4KCksIHBzZXVkb1R5cGVTdHJpbmcubGVuZ3RoKCkp
OworICAgIGVsc2UKKyAgICAgICAgZW50cnkgPSBwYXJzZVBzZXVkb0NsYXNzQW5kQ29tcGF0aWJp
bGl0eUVsZW1lbnRTdHJpbmcocHNldWRvVHlwZVN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgcHNldWRv
VHlwZVN0cmluZy5sZW5ndGgoKSk7CisKKyAgICBpZiAoZW50cnkpCisgICAgICAgIHJldHVybiBl
bnRyeS0+cHNldWRvVHlwZXM7CisgICAgcmV0dXJuIHsgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
VW5rbm93biwgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRVbmtub3duIH07Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmIGRlZmluZWQoX19jbGFuZ19fKQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1NDk5KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzIsNyArMjMyLDcgQEAgcHJpdmF0ZToKIAogY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgc3RyaWN0
Q1NTUGFyc2VyQ29udGV4dCgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENTU1BhcnNl
ckNvbnRleHQ+IHN0cmljdENvbnRleHQoQ1NTU3RyaWN0TW9kZSk7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPENTU1BhcnNlckNvbnRleHQ+IHN0cmljdENvbnRleHQoSFRNTFN0YW5kYXJkTW9k
ZSk7CiAgICAgcmV0dXJuIHN0cmljdENvbnRleHQ7CiB9CiAKQEAgLTI1NCw3ICsyNTQsNyBAQCBD
U1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KENTU1BhCiBDU1NQYXJzZXJDb250ZXh0
OjpDU1NQYXJzZXJDb250ZXh0KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgVVJMJiBiYXNlVVJM
LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiAgICAgOiBiYXNlVVJMKGJhc2VVUkwuaXNOdWxsKCkg
PyBkb2N1bWVudC5iYXNlVVJMKCkgOiBiYXNlVVJMKQogICAgICwgY2hhcnNldChjaGFyc2V0KQot
ICAgICwgbW9kZShkb2N1bWVudC5pblF1aXJrc01vZGUoKSA/IENTU1F1aXJrc01vZGUgOiBDU1NT
dHJpY3RNb2RlKQorICAgICwgbW9kZShkb2N1bWVudC5pblF1aXJrc01vZGUoKSA/IEhUTUxRdWly
a3NNb2RlIDogSFRNTFN0YW5kYXJkTW9kZSkKICAgICAsIGlzSFRNTERvY3VtZW50KGRvY3VtZW50
LmlzSFRNTERvY3VtZW50KCkpCiAjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKICAgICAsIGNz
c0dyaWRMYXlvdXRFbmFibGVkKGRvY3VtZW50LmlzQ1NTR3JpZExheW91dEVuYWJsZWQoKSkKQEAg
LTEzOTIsNyArMTM5Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKFJHQkEzMiYgY29s
b3IKICAgICBpZiAoZmFzdFBhcnNlQ29sb3IoY29sb3IsIHN0cmluZywgc3RyaWN0KSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBDU1NQYXJzZXIgcGFyc2VyKENTU1N0cmljdE1vZGUpOwor
ICAgIENTU1BhcnNlciBwYXJzZXIoSFRNTFN0YW5kYXJkTW9kZSk7CiAKICAgICAvLyBJbiBjYXNl
IHRoZSBmYXN0LXBhdGggcGFyc2VyIGRpZG4ndCB1bmRlcnN0YW5kIHRoZSBjb2xvciwgdHJ5IHRo
ZSBmdWxsIHBhcnNlci4KICAgICBpZiAoIXBhcnNlci5wYXJzZUNvbG9yKHN0cmluZykpCkBAIC0x
NzE5LDcgKzE3MTksNyBAQCBib29sIENTU1BhcnNlcjo6dmFsaWRhdGVDYWxjdWxhdGlvblVuaXQo
CiBpbmxpbmUgYm9vbCBDU1NQYXJzZXI6OnNob3VsZEFjY2VwdFVuaXRMZXNzVmFsdWVzKENTU1Bh
cnNlclZhbHVlJiB2YWx1ZSwgVW5pdHMgdW5pdEZsYWdzLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUpCiB7CiAgICAgLy8gUWlya3MgbW9kZSBhbmQgc3ZnIHByZXNlbnRhdGlvbiBhdHRyaWJ1
dGVzIGFjY2VwdCB1bml0IGxlc3MgdmFsdWVzLgotICAgIHJldHVybiAodW5pdEZsYWdzICYgKEZM
ZW5ndGggfCBGQW5nbGUgfCBGVGltZSkpICYmICghdmFsdWUuZlZhbHVlIHx8IGNzc1BhcnNlck1v
ZGUgPT0gQ1NTUXVpcmtzTW9kZSB8fCBjc3NQYXJzZXJNb2RlID09IFNWR0F0dHJpYnV0ZU1vZGUp
OworICAgIHJldHVybiAodW5pdEZsYWdzICYgKEZMZW5ndGggfCBGQW5nbGUgfCBGVGltZSkpICYm
ICghdmFsdWUuZlZhbHVlIHx8IGNzc1BhcnNlck1vZGUgPT0gSFRNTFF1aXJrc01vZGUgfHwgY3Nz
UGFyc2VyTW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlKTsKIH0KIAogYm9vbCBDU1NQYXJzZXI6OnZh
bGlkYXRlVW5pdChWYWx1ZVdpdGhDYWxjdWxhdGlvbiYgdmFsdWVXaXRoQ2FsY3VsYXRpb24sIFVu
aXRzIHVuaXRGbGFncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQpAQCAtMjM1Niw3ICsy
MzU2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRAogICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0
cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYg
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciwgQ1NTUXVpcmtzTW9k
ZSkpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIsIEhUTUxRdWlya3NNb2RlKSk7CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eU9ycGhhbnM6IC8vIDxpbnRlZ2VyPiB8IGlu
aGVyaXQgfCBhdXRvIChXZSd2ZSBhZGRlZCBzdXBwb3J0IGZvciBhdXRvIGZvciBiYWNrd2FyZHMg
Y29tcGF0aWJpbGl0eSkKQEAgLTIzNjQsNyArMjM2NCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVZhbHVlKENTU1Byb3BlcnR5SUQKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykKICAg
ICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRlBvc2l0aXZlSW50ZWdlciwgQ1NTUXVpcmtzTW9kZSkpOworICAgICAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwg
RlBvc2l0aXZlSW50ZWdlciwgSFRNTFF1aXJrc01vZGUpKTsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIENTU1Byb3BlcnR5TGluZUhlaWdodDoKQEAgLTI0MTUsNyArMjQxNSw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQKICAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlTm9ybWFsIHx8IGlkID09IENTU1ZhbHVlUmVzZXQgfHwgaWQgPT0gQ1NTVmFsdWVEb2N1
bWVudCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9k
ZSkpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2
YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZQZXJjZW50IHwgRk5vbk5lZywgSFRNTFN0
YW5kYXJkTW9kZSkpOwogICAgICAgICBicmVhazsKICAgICAKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dFpvb206CkBAIC0yNTY3LDEwICsyNTY3LDEwIEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKENTU1Byb3BlcnR5SUQKICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0
ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RmxleEdyb3VwOgotICAgICAgICB2YWxpZFByaW1p
dGl2ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9u
TmVnLCBDU1NTdHJpY3RNb2RlKTsKKyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVu
aXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgSFRNTFN0YW5kYXJk
TW9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hPcmRp
bmFsR3JvdXA6Ci0gICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpICYmIHZhbHVl
V2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlOworICAgICAgICB2YWxpZFByaW1pdGl2ZSA9
IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBI
VE1MU3RhbmRhcmRNb2RlKSAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZpbHRlcjoKICNpZiBFTkFCTEUo
RklMVEVSU19MRVZFTF8yKQpAQCAtMjYxNiw3ICsyNjE2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlVmFsdWUoQ1NTUHJvcGVydHlJRAogICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkYXRl
VW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciB8IEZOb25OZWcpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5T3JkZXI6Ci0gICAgICAgIGlmICh2YWxpZGF0ZVVu
aXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyLCBDU1NTdHJpY3RNb2RlKSkgeworICAg
ICAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciwgSFRN
TFN0YW5kYXJkTW9kZSkpIHsKICAgICAgICAgICAgIC8vIFdlIHJlc3RyaWN0IHRoZSBzbWFsbGVz
dCB2YWx1ZSB0byBpbnQgbWluICsgMiBiZWNhdXNlIHdlIHVzZSBpbnQgbWluIGFuZCBpbnQgbWlu
ICsgMSBhcyBzcGVjaWFsIHZhbHVlcyBpbiBhIGhhc2ggc2V0LgogICAgICAgICAgICAgZG91Ymxl
IHJlc3VsdCA9IHN0ZDo6bWF4PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4o
KSArIDIsIHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikpOwogICAgICAgICAgICAg
cGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2wuY3JlYXRlVmFsdWUocmVzdWx0LCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUik7CkBAIC0yODk4LDcgKzI4OTgsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlECiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExp
bmVDbGFtcDoKICAgICAgICAgLy8gV2hlbiBzcGVjaWZ5aW5nIG51bWJlciBvZiBsaW5lcywgZG9u
J3QgYWxsb3cgMCBhcyBhIHZhbGlkIHZhbHVlCiAgICAgICAgIC8vIFdoZW4gc3BlY2lmeWluZyBl
aXRoZXIgdHlwZSBvZiB1bml0LCByZXF1aXJlIG5vbi1uZWdhdGl2ZSBpbnRlZ2VycwotICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgKHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCku
dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgfHwgdmFsdWVXaXRoQ2Fs
Y3VsYXRpb24udmFsdWUoKS5mVmFsdWUpICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRkludGVnZXIgfCBGUGVyY2VudCB8IEZOb25OZWcsIENTU1F1aXJrc01vZGUpKTsKKyAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmICh2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1
ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFIHx8IHZhbHVlV2l0
aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZJbnRlZ2VyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBIVE1MUXVpcmtzTW9kZSkp
OwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklORykKICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6CkBAIC0yOTA5LDcgKzI5MDksNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlECiAgICAgICAgICAgICB2
YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gRklY
TUU6IEhhbmRsZSBtdWx0aWxlbmd0aCBjYXNlIHdoZXJlIHdlIGFsbG93IHJlbGF0aXZlIHVuaXRz
LgotICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1
ZVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSk7Cisg
ICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRhdGVVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCBGUGVyY2VudCB8IEZOb25OZWcsIEhUTUxTdGFuZGFyZE1vZGUpKTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICNlbmRpZgpAQCAtMjkyNSwxMiArMjkyNSwxMiBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlECiAKICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRCZWZvcmU6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEh5cGhlbmF0ZUxpbWl0QWZ0ZXI6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8g
fHwgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcs
IENTU1N0cmljdE1vZGUpKQorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlk
YXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBIVE1MU3Rh
bmRhcmRNb2RlKSkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lczoK
LSAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9MaW1pdCB8fCB2YWxpZGF0ZVVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAg
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vTGltaXQgfHwgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcsIEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAg
ICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKIApAQCAtMzg3NCw3
ICszODc0LDcgQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcgogICAg
IFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+
Y3VycmVudCgpKTsKICAgICBDU1NWYWx1ZUlEIGlkID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFs
dWUoKS5pZDsKICAgICAvLyBBbHdheXMgcGFyc2UgdGhpcyBwcm9wZXJ0eSBpbiBzdHJpY3QgbW9k
ZSwgc2luY2UgaXQgd291bGQgYmUgYW1iaWd1b3VzIG90aGVyd2lzZSB3aGVuIHVzZWQgaW4gdGhl
ICdjb2x1bW5zJyBzaG9ydGhhbmQgcHJvcGVydHkuCi0gICAgaWYgKGlkICE9IENTU1ZhbHVlQXV0
byAmJiAhKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25O
ZWcsIENTU1N0cmljdE1vZGUpICYmIHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhDYWxjdWxhdGlvbikp
KQorICAgIGlmIChpZCAhPSBDU1NWYWx1ZUF1dG8gJiYgISh2YWxpZGF0ZVVuaXQodmFsdWVXaXRo
Q2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnLCBIVE1MU3RhbmRhcmRNb2RlKSAmJiBwYXJz
ZWREb3VibGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBhdXRvIHBhcnNlZFZhbHVlID0gcGFyc2VWYWxpZFByaW1pdGl2ZShpZCwgdmFsdWVX
aXRoQ2FsY3VsYXRpb24pOwpAQCAtMzg4Nyw3ICszODg3LDcgQEAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcgogICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0
aENhbGN1bGF0aW9uKCptX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKICAgICBDU1NWYWx1ZUlEIGlk
ID0gdmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS5pZDsKIAotICAgIGlmIChpZCAhPSBDU1NW
YWx1ZUF1dG8gJiYgIXZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBvc2l0aXZl
SW50ZWdlciwgQ1NTUXVpcmtzTW9kZSkpCisgICAgaWYgKGlkICE9IENTU1ZhbHVlQXV0byAmJiAh
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGUG9zaXRpdmVJbnRlZ2VyLCBIVE1M
UXVpcmtzTW9kZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byBwYXJzZWRW
YWx1ZSA9IHBhcnNlVmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKQEAg
LTcyMzcsNyArNzIzNyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRXZWlnaHQoYm9vbCBp
bXAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIFZhbHVlV2l0aENhbGN1bGF0aW9u
IHZhbHVlV2l0aENhbGN1bGF0aW9uKHZhbHVlKTsKLSAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVl
V2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcsIENTU1F1aXJrc01vZGUpKSB7Cisg
ICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9u
TmVnLCBIVE1MUXVpcmtzTW9kZSkpIHsKICAgICAgICAgaW50IHdlaWdodCA9IHN0YXRpY19jYXN0
PGludD4ocGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSk7CiAgICAgICAgIGlmICgh
KHdlaWdodCAlIDEwMCkgJiYgd2VpZ2h0ID49IDEwMCAmJiB3ZWlnaHQgPD0gOTAwKSB7CiAgICAg
ICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGNyZWF0ZUZvbnRXZWlnaHRWYWx1ZUtl
eXdvcmQod2VpZ2h0KSksIGltcG9ydGFudCk7CkBAIC03ODEyLDkgKzc4MTIsOSBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VDb2xvclBhcmFtZXRlcnMoQ1NTCiAgICAgVmFsdWVXaXRoQ2FsY3VsYXRp
b24gZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy0+Y3VycmVudCgpKTsKICAgICBV
bml0cyB1bml0VHlwZSA9IEZVbmtub3duOwogICAgIC8vIEdldCB0aGUgZmlyc3QgdmFsdWUgYW5k
IGl0cyB0eXBlCi0gICAgaWYgKHZhbGlkYXRlVW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uLCBGSW50ZWdlciwgQ1NTU3RyaWN0TW9kZSkpCisgICAgaWYgKHZhbGlkYXRlVW5pdChmaXJz
dEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciwgSFRNTFN0YW5kYXJkTW9kZSkpCiAg
ICAgICAgIHVuaXRUeXBlID0gRkludGVnZXI7Ci0gICAgZWxzZSBpZiAodmFsaWRhdGVVbml0KGZp
cnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKKyAg
ICBlbHNlIGlmICh2YWxpZGF0ZVVuaXQoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRlBl
cmNlbnQsIEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAgICB1bml0VHlwZSA9IEZQZXJjZW50Owog
ICAgIGVsc2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzgyNSw3ICs3ODI1LDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlQ29sb3JQYXJhbWV0ZXJzKENTUwogICAgICAgICBpZiAob3BlcmF0
b3JBcmd1bWVudC51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiBvcGVyYXRvckFy
Z3VtZW50LmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLT5uZXh0
KCkpOwotICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwg
dW5pdFR5cGUsIENTU1N0cmljdE1vZGUpKQorICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1
bWVudFdpdGhDYWxjdWxhdGlvbiwgdW5pdFR5cGUsIEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjb2xvckFycmF5W2ldID0gY29sb3JJbnRGcm9t
VmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pOwogICAgIH0KQEAgLTc4MzQsNyArNzgzNCw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yUGFyYW1ldGVycyhDU1MKICAgICAgICAgaWYg
KG9wZXJhdG9yQXJndW1lbnQudW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgb3Bl
cmF0b3JBcmd1bWVudC5pVmFsdWUgIT0gJywnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJn
cy0+bmV4dCgpKTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24sIEZOdW1iZXIsIENTU1N0cmljdE1vZGUpKQorICAgICAgICBpZiAoIXZhbGlkYXRlVW5p
dChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51bWJlciwgSFRNTFN0YW5kYXJkTW9kZSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHBh
cnNlZERvdWJsZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7CiAgICAgICAgIC8vIENvbnZlcnQg
dGhlIGZsb2F0aW5nIHBvaW50ZXIgbnVtYmVyIG9mIGFscGhhIHRvIGFuIGludGVnZXIgaW4gdGhl
IHJhbmdlIFswLCAyNTYpLApAQCAtNzg1NCw3ICs3ODU0LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlSFNMUGFyYW1ldGVycyhDU1NQYQogICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IHZh
bHVlLmZ1bmN0aW9uLT5hcmdzLmdldCgpOwogICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGZpcnN0
QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPmN1cnJlbnQoKSk7CiAgICAgLy8gR2V0IHRo
ZSBmaXJzdCB2YWx1ZQotICAgIGlmICghdmFsaWRhdGVVbml0KGZpcnN0QXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24sIEZOdW1iZXIsIENTU1N0cmljdE1vZGUpKQorICAgIGlmICghdmFsaWRhdGVVbml0
KGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIsIEhUTUxTdGFuZGFyZE1vZGUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gbm9ybWFsaXplIHRoZSBIdWUgdmFsdWUg
YW5kIGNoYW5nZSBpdCB0byBiZSBiZXR3ZWVuIDAgYW5kIDEuMAogICAgIGNvbG9yQXJyYXlbMF0g
PSAoKChzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZERvdWJsZShmaXJzdEFyZ3VtZW50V2l0aENhbGN1
bGF0aW9uKSkgJSAzNjApICsgMzYwKSAlIDM2MCkgLyAzNjAuMDsKQEAgLTc4NjMsNyArNzg2Myw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGEKICAgICAgICAgaWYg
KG9wZXJhdG9yQXJndW1lbnQudW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgb3Bl
cmF0b3JBcmd1bWVudC5pVmFsdWUgIT0gJywnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJn
cy0+bmV4dCgpKTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24sIEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVVu
aXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50LCBIVE1MU3RhbmRhcmRNb2RlKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY29sb3JBcnJheVtpXSA9IHN0ZDo6
bWF4PGRvdWJsZT4oMCwgc3RkOjptaW48ZG91YmxlPigxMDAsIHBhcnNlZERvdWJsZShhcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbikpKSAvIDEwMC4wOyAvLyBuZWVkcyB0byBiZSB2YWx1ZSBiZXR3ZWVu
IDAgYW5kIDEuMAogICAgIH0KQEAgLTc4NzIsNyArNzg3Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGEKICAgICAgICAgaWYgKG9wZXJhdG9yQXJndW1lbnQudW5p
dCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgb3BlcmF0b3JBcmd1bWVudC5pVmFsdWUg
IT0gJywnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBWYWx1ZVdpdGhDYWxj
dWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy0+bmV4dCgpKTsKLSAgICAgICAg
aWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIsIENTU1N0
cmljdE1vZGUpKQorICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxh
dGlvbiwgRk51bWJlciwgSFRNTFN0YW5kYXJkTW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGNvbG9yQXJyYXlbM10gPSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWlu
PGRvdWJsZT4oMSwgcGFyc2VkRG91YmxlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSkpOwogICAg
IH0KQEAgLTgwNzksMTMgKzgwNzksMTMgQEAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2Vy
OjpwYXJzZVNoYQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAg
Ly8gVGhlIHZhbHVlIGlzIGdvb2QuICBDb21taXQgaXQuCiAgICAgICAgICAgICBjb250ZXh0LmNv
bW1pdFZhbHVlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENh
bGN1bGF0aW9uLCBGTGVuZ3RoLCBDU1NTdHJpY3RNb2RlKSkgeworICAgICAgICB9IGVsc2UgaWYg
KHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCwgSFRNTFN0YW5kYXJk
TW9kZSkpIHsKICAgICAgICAgICAgIC8vIFdlIHJlcXVpcmVkIGEgbGVuZ3RoIGFuZCBkaWRuJ3Qg
Z2V0IG9uZS4gSW52YWxpZC4KICAgICAgICAgICAgIGlmICghY29udGV4dC5hbGxvd0xlbmd0aCgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgICAgICAvLyBCbHVy
IHJhZGl1cyBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4KLSAgICAgICAgICAgIGlmIChjb250ZXh0LmFs
bG93Qmx1ciAmJiAhdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwg
Rk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBpZiAoY29udGV4dC5hbGxvd0Js
dXIgJiYgIXZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25O
ZWcsIEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgICAgICAgICAvLyBBIGxlbmd0aCBpcyBhbGxvd2VkIGhlcmUuICBDb25zdHJ1Y3QgdGhl
IHZhbHVlIGFuZCBhZGQgaXQuCkBAIC04NTMzLDcgKzg1MzMsNyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VCb3JkZXJJbWFnZVNsaWNlKENTCiAgICAgd2hpbGUgKCh2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCkpKSB7CiAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIHZhbHVlV2l0aENh
bGN1bGF0aW9uKCp2YWx1ZSk7CiAgICAgICAgIC8vIEZJWE1FIGNhbGMoKSBodHRwOi8vd2Via2l0
Lm9yZy9iLzE2NjYyIDogY2FsYyBpcyBwYXJzZWQgYnV0IHZhbHVlcyBhcmUgbm90IGNyZWF0ZWQg
eWV0LgotICAgICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYmICFpc0NhbGN1bGF0aW9u
KHZhbHVlV2l0aENhbGN1bGF0aW9uKSAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZJbnRlZ2VyIHwgRk5vbk5lZyB8IEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkgeworICAg
ICAgICBpZiAoY29udGV4dC5hbGxvd051bWJlcigpICYmICFpc0NhbGN1bGF0aW9uKHZhbHVlV2l0
aENhbGN1bGF0aW9uKSAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRl
Z2VyIHwgRk5vbk5lZyB8IEZQZXJjZW50LCBIVE1MU3RhbmRhcmRNb2RlKSkgewogICAgICAgICAg
ICAgY29udGV4dC5jb21taXROdW1iZXIodmFsdWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICB9
IGVsc2UgaWYgKGNvbnRleHQuYWxsb3dGaWxsKCkgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlRmls
bCkKICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0RmlsbCgpOwpAQCAtODY0Nyw3ICs4NjQ3LDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2VRdWFkKFVuaQogICAgIENTU1BhcnNl
clZhbHVlKiB2YWx1ZTsKICAgICB3aGlsZSAoKHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSkpIHsKICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gdmFsdWVXaXRoQ2FsY3VsYXRpb24o
KnZhbHVlKTsKLSAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dOdW1iZXIoKSAmJiAodmFsaWRhdGVV
bml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCB2YWxpZFVuaXRzLCBDU1NTdHJpY3RNb2RlKSB8fCB2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSkgeworICAgICAgICBpZiAoY29udGV4dC5hbGxvd051
bWJlcigpICYmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIHZhbGlkVW5pdHMs
IEhUTUxTdGFuZGFyZE1vZGUpIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8pKSB7CiAgICAg
ICAgICAgICBjb250ZXh0LmNvbW1pdE51bWJlcih2YWx1ZVdpdGhDYWxjdWxhdGlvbik7CiAgICAg
ICAgIH0gZWxzZSBpZiAoIWluU2hvcnRoYW5kKCkpIHsKICAgICAgICAgICAgIC8vIElmIHdlJ3Jl
IG5vdCBwYXJzaW5nIGEgc2hvcnRoYW5kIHRoZW4gd2UgYXJlIGludmFsaWQuCkBAIC05MDc3LDcg
KzkwNzcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkTGluZWFyR3JhCiAKICAg
ICBib29sIGV4cGVjdENvbW1hID0gZmFsc2U7CiAgICAgLy8gTG9vayBmb3IgYW5nbGUuCi0gICAg
aWYgKHZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkFuZ2xlLCBDU1NTdHJp
Y3RNb2RlKSkgeworICAgIGlmICh2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24s
IEZBbmdsZSwgSFRNTFN0YW5kYXJkTW9kZSkpIHsKICAgICAgICAgcmVzdWx0LT5zZXRBbmdsZShj
cmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKIAog
ICAgICAgICBhcmdzLT5uZXh0KCk7CkBAIC05MjYzLDcgKzkyNjMsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VMaW5lYXJHcmFkaWVudChDU1NQCiAKICAgICBib29sIGV4cGVjdENvbW1hID0gZmFs
c2U7CiAgICAgLy8gTG9vayBmb3IgYW5nbGUuCi0gICAgaWYgKHZhbGlkYXRlVW5pdChmaXJzdEFy
Z3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKSB7CisgICAgaWYg
KHZhbGlkYXRlVW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIEhUTUxT
dGFuZGFyZE1vZGUpKSB7CiAgICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKTsKIAogICAgICAgICBh
cmdzLT5uZXh0KCk7CkBAIC0xMDA3OCwyMSArMTAwNzgsMjEgQEAgUmVmUHRyPFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlPiBDU1NQYXJzZQogCiAgICAgICAgIGlmIChpbmZvLnR5cGUoKSA9PSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlM0RUcmFuc2Zvcm1PcGVyYXRpb24gJiYgYXJnTnVt
YmVyID09IDMpIHsKICAgICAgICAgICAgIC8vIDR0aCBwYXJhbSBvZiByb3RhdGUzZCgpIGlzIGFu
IGFuZ2xlIHJhdGhlciB0aGFuIGEgYmFyZSBudW1iZXIsIHZhbGlkYXRlIGl0IGFzIHN1Y2gKLSAg
ICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5n
bGUsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24sIEZBbmdsZSwgSFRNTFN0YW5kYXJkTW9kZSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5mby50eXBlKCkgPT0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uICYm
IGFyZ051bWJlciA9PSAyKSB7CiAgICAgICAgICAgICAvLyAzcmQgcGFyYW0gb2YgdHJhbnNsYXRl
M2QoKSBjYW5ub3QgYmUgYSBwZXJjZW50YWdlCi0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5p
dChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9kZSkpCisgICAg
ICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0
aCwgSFRNTFN0YW5kYXJkTW9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgIH0gZWxzZSBpZiAoaW5mby50eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb24gJiYgIWFyZ051bWJlcikgewogICAgICAgICAg
ICAgLy8gMXN0IHBhcmFtIG9mIHRyYW5zbGF0ZVooKSBjYW5ub3QgYmUgYSBwZXJjZW50YWdlCi0g
ICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxl
bmd0aCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1
bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCwgSFRNTFN0YW5kYXJkTW9kZSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5mby50eXBlKCkg
PT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9u
ICYmICFhcmdOdW1iZXIpIHsKICAgICAgICAgICAgIC8vIDFzdCBwYXJhbSBvZiBwZXJzcGVjdGl2
ZSgpIG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyIChkZXByZWNhdGVkKSBvciBsZW5ndGgu
Ci0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwg
Rk51bWJlciB8IEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAg
IGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRkxl
bmd0aCB8IEZOb25OZWcsIEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICB9IGVsc2UgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRo
Q2FsY3VsYXRpb24sIHVuaXQsIENTU1N0cmljdE1vZGUpKQorICAgICAgICB9IGVsc2UgaWYgKCF2
YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIHVuaXQsIEhUTUxTdGFuZGFyZE1v
ZGUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgLy8gQWRkIHRoZSB2
YWx1ZSB0byB0aGUgY3VycmVudCB0cmFuc2Zvcm0gb3BlcmF0aW9uLgpAQCAtMTAxNjcsNyArMTAx
NjcsNyBAQCBSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6CiAKICAgICAg
ICAgaWYgKGFyZ3Muc2l6ZSgpKSB7CiAgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBh
cmd1bWVudFdpdGhDYWxjdWxhdGlvbigqYXJncy5jdXJyZW50KCkpOwotICAgICAgICAgICAgaWYg
KCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2Vu
dCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVu
aXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25OZWcs
IEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgICAgICAgICBhdXRvIHByaW1pdGl2ZVZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1Zh
bHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsKQEAgLTEwMTkxLDcgKzEwMTkxLDcgQEAgUmVm
UHRyPFdlYktpdENTU0ZpbHRlclZhbHVlPiBDU1NQYXJzZXI6OgogCiAgICAgICAgIGlmIChhcmdz
LnNpemUoKSkgewogICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRo
Q2FsY3VsYXRpb24oKmFyZ3MuY3VycmVudCgpKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVV
bml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRlBlcmNlbnQsIENTU1N0cmlj
dE1vZGUpKQorICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3Vs
YXRpb24sIEZOdW1iZXIgfCBGUGVyY2VudCwgSFRNTFN0YW5kYXJkTW9kZSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQo
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7CkBA
IC0xMDIwNSw3ICsxMDIwNSw3IEBAIFJlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NTUGFy
c2VyOjoKICAgICAgICAgCiAgICAgICAgIGlmIChhcmdzLnNpemUoKSkgewogICAgICAgICAgICAg
VmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3VycmVu
dCgpKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uLCBGQW5nbGUsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVu
aXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZBbmdsZSwgSFRNTFN0YW5kYXJkTW9kZSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIAogICAgICAgICAgICAgZmls
dGVyVmFsdWUtPmFwcGVuZChjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJndW1lbnRXaXRo
Q2FsY3VsYXRpb24pKTsKQEAgLTEwMjE5LDcgKzEwMjE5LDcgQEAgUmVmUHRyPFdlYktpdENTU0Zp
bHRlclZhbHVlPiBDU1NQYXJzZXI6OgogICAgICAgICAKICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgp
KSB7CiAgICAgICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdpdGhDYWxjdWxh
dGlvbigqYXJncy5jdXJyZW50KCkpOwotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkK
KyAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBG
TGVuZ3RoIHwgRk5vbk5lZywgSFRNTFN0YW5kYXJkTW9kZSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7CkBAIC0xMzEyNSw3
ICsxMzEyNSw3IEBAIFF1YWxpZmllZE5hbWUgQ1NTUGFyc2VyOjpkZXRlcm1pbmVOYW1lSW4KIAog
ICAgIGlmICghbV9zdHlsZVNoZWV0KQogICAgICAgICByZXR1cm4gUXVhbGlmaWVkTmFtZShwcmVm
aXgsIGxvY2FsTmFtZSwgbV9kZWZhdWx0TmFtZXNwYWNlKTsKLSAgICByZXR1cm4gUXVhbGlmaWVk
TmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgbV9zdHlsZVNoZWV0LT5kZXRlcm1pbmVOYW1lc3BhY2Uo
cHJlZml4KSk7CisgICAgcmV0dXJuIFF1YWxpZmllZE5hbWUocHJlZml4LCBsb2NhbE5hbWUsIG1f
c3R5bGVTaGVldC0+bmFtZXNwYWNlVVJJRnJvbVByZWZpeChwcmVmaXgpKTsKIH0KIAogdm9pZCBD
U1NQYXJzZXI6OnJld3JpdGVTcGVjaWZpZXJzV2l0aE5hbWVzcGFjZUlmTmVlZGVkKENTU1BhcnNl
clNlbGVjdG9yJiBzcGVjaWZpZXJzKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlci5oCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NzEsOCArNTcxLDggQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgc2V0U3R5bGVTaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxlU2hlZXQpIHsg
bV9zdHlsZVNoZWV0ID0gc3R5bGVTaGVldDsgfQogCi0gICAgaW5saW5lIGJvb2wgaW5TdHJpY3RN
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0Lm1vZGUgPT0gQ1NTU3RyaWN0TW9kZSB8fCBt
X2NvbnRleHQubW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlOyB9Ci0gICAgaW5saW5lIGJvb2wgaW5R
dWlya3NNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0Lm1vZGUgPT0gQ1NTUXVpcmtzTW9k
ZTsgfQorICAgIGlubGluZSBib29sIGluU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dC5tb2RlID09IFVBU2hlZXRNb2RlIHx8IG1fY29udGV4dC5tb2RlID09IEhUTUxTdGFuZGFy
ZE1vZGUgfHwgbV9jb250ZXh0Lm1vZGUgPT0gU1ZHQXR0cmlidXRlTW9kZTsgfQorICAgIGlubGlu
ZSBib29sIGluUXVpcmtzTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5tb2RlID09IEhU
TUxRdWlya3NNb2RlOyB9CiAgICAgCiAgICAgVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYg
dXJsKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJN
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJN
b2RlLmgJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywyMSArMzcsNTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKIAorLy8gTXVzdCBub3QgZ3JvdyBiZXlvbmQg
MyBiaXRzLCBkdWUgdG8gcGFja2luZyBpbiBTdHlsZVByb3BlcnR5U2V0LgogZW51bSBDU1NQYXJz
ZXJNb2RlIHsKLSAgICBDU1NRdWlya3NNb2RlLAotICAgIENTU1N0cmljdE1vZGUsCi0gICAgLy8g
U1ZHIHNob3VsZCBhbHdheXMgYmUgaW4gc3RyaWN0IG1vZGUuIEZvciBTVkcgYXR0cmlidXRlcywg
dGhlIHJ1bGVzIGRpZmZlciB0byBzdHJpY3Qgc29tZXRpbWVzLgotICAgIFNWR0F0dHJpYnV0ZU1v
ZGUKKyAgICBIVE1MU3RhbmRhcmRNb2RlLAorICAgIEhUTUxRdWlya3NNb2RlLAorICAgIC8vIEhU
TUwgYXR0cmlidXRlcyBhcmUgcGFyc2VkIGluIHF1aXJrcyBtb2RlIGJ1dCBhbHNvIGFsbG93cyBp
bnRlcm5hbCBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXMuCisgICAgSFRNTEF0dHJpYnV0ZU1vZGUsCisg
ICAgLy8gU1ZHIGF0dHJpYnV0ZXMgYXJlIHBhcnNlZCBpbiBxdWlya3MgbW9kZSBidXQgcnVsZXMg
ZGlmZmVyIHNsaWdodGx5LgorICAgIFNWR0F0dHJpYnV0ZU1vZGUsCisgICAgLy8gQHZpZXdwb3J0
IHJ1bGVzIGFyZSBwYXJzZWQgaW4gc3RhbmRhcmRzIG1vZGUgYnV0IENTU09NIG1vZGlmaWNhdGlv
bnMgKHZpYSBTdHlsZVByb3BlcnR5U2V0KQorICAgIC8vIG11c3QgY2FsbCBwYXJzZVZpZXdwb3J0
UHJvcGVydGllcyBzbyBuZWVkcyBhIHNwZWNpYWwgbW9kZS4KKyAgICBDU1NWaWV3cG9ydFJ1bGVN
b2RlLAorICAgIC8vIFVzZXIgYWdlbnQgc3R5bGVzaGVldHMgYXJlIHBhcnNlZCBpbiBzdGFuZGFy
ZHMgbW9kZSBidXQgYWxzbyBhbGxvd3MgaW50ZXJuYWwgcHJvcGVydGllcyBhbmQgdmFsdWVzLgor
ICAgIFVBU2hlZXRNb2RlCiB9OwogCitpbmxpbmUgYm9vbCBpc1F1aXJrc01vZGVCZWhhdmlvcihD
U1NQYXJzZXJNb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIG1vZGUgPT0gSFRNTFF1aXJrc01vZGU7
IC8vIHx8IG1vZGUgPT0gSFRNTEF0dHJpYnV0ZU1vZGU7Cit9CisKK2lubGluZSBib29sIGlzVUFT
aGVldEJlaGF2aW9yKENTU1BhcnNlck1vZGUgbW9kZSkKK3sKKyAgICByZXR1cm4gbW9kZSA9PSBV
QVNoZWV0TW9kZTsKK30KKworaW5saW5lIGJvb2wgaXNVbml0TGVzc0xlbmd0aFBhcnNpbmdFbmFi
bGVkRm9yTW9kZShDU1NQYXJzZXJNb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIG1vZGUgPT0gSFRN
TEF0dHJpYnV0ZU1vZGUgfHwgbW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlOworfQorCitpbmxpbmUg
Ym9vbCBpc0NTU1ZpZXdwb3J0UGFyc2luZ0VuYWJsZWRGb3JNb2RlKENTU1BhcnNlck1vZGUgbW9k
ZSkKK3sKKyAgICByZXR1cm4gbW9kZSA9PSBDU1NWaWV3cG9ydFJ1bGVNb2RlOworfQorCisvLyBG
SVhNRS1ORVdQQVJTRVI6IE5leHQgdHdvIGZ1bmN0aW9ucyBzaG91bGQgYmUgcmVtb3ZlZCBldmVu
dHVhbGx5LgogaW5saW5lIENTU1BhcnNlck1vZGUgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGJvb2wg
aW5TdHJpY3RNb2RlKQogewotICAgIHJldHVybiBpblN0cmljdE1vZGUgPyBDU1NTdHJpY3RNb2Rl
IDogQ1NTUXVpcmtzTW9kZTsKKyAgICByZXR1cm4gaW5TdHJpY3RNb2RlID8gSFRNTFN0YW5kYXJk
TW9kZSA6IEhUTUxRdWlya3NNb2RlOwogfQogCiBpbmxpbmUgYm9vbCBpc1N0cmljdFBhcnNlck1v
ZGUoQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewotICAgIHJldHVybiBjc3NQYXJzZXJN
b2RlID09IENTU1N0cmljdE1vZGUgfHwgY3NzUGFyc2VyTW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2Rl
OworICAgIHJldHVybiBjc3NQYXJzZXJNb2RlID09IFVBU2hlZXRNb2RlIHx8IGNzc1BhcnNlck1v
ZGUgPT0gSFRNTFN0YW5kYXJkTW9kZSB8fCBjc3NQYXJzZXJNb2RlID09IFNWR0F0dHJpYnV0ZU1v
ZGU7CiB9CiAKIHN0cnVjdCBDU1NQYXJzZXJDb250ZXh0IHsKQEAgLTYyLDcgKzkxLDcgQEAgcHVi
bGljOgogCiAgICAgVVJMIGJhc2VVUkw7CiAgICAgU3RyaW5nIGNoYXJzZXQ7Ci0gICAgQ1NTUGFy
c2VyTW9kZSBtb2RlIHsgQ1NTU3RyaWN0TW9kZSB9OworICAgIENTU1BhcnNlck1vZGUgbW9kZSB7
IEhUTUxTdGFuZGFyZE1vZGUgfTsKICAgICBib29sIGlzSFRNTERvY3VtZW50IHsgZmFsc2UgfTsK
ICNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQogICAgIGJvb2wgY3NzR3JpZExheW91dEVuYWJs
ZWQgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJW
YWx1ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyVmFsdWVzLmNwcAkocmV2aXNpb24gMjA1NDk5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQYXJzZXJWYWx1ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBA
CiAjaW5jbHVkZSAiQ1NTUGFyc2VyVmFsdWVzLmgiCiAKICNpbmNsdWRlICJDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiQ1NT
UHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NGdW5jdGlvblZhbHVlLmgiCiAjaW5jbHVk
ZSAiQ1NTU2VsZWN0b3IuaCIKQEAgLTIxOSw2ICsyMjAsMjcgQEAgQ1NTUGFyc2VyU2VsZWN0b3Iq
IENTU1BhcnNlclNlbGVjdG9yOjpwYQogICAgIHJldHVybiBzZWxlY3Rvci5yZWxlYXNlKCk7CiB9
CiAKK0NTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9FbGVt
ZW50U2VsZWN0b3JGcm9tU3RyaW5nVmlldyhTdHJpbmdWaWV3JiBwc2V1ZG9UeXBlU3RyaW5nKQor
eworICAgIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZShwc2V1ZG9UeXBlU3RyaW5nKTsK
KyAgICBBdG9taWNTdHJpbmcgbmFtZSA9IHBzZXVkb1R5cGVTdHJpbmcudG9BdG9taWNTdHJpbmco
KTsKKyAgICAKKyAgICBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFR5cGUgcHNldWRvVHlwZSA9
IENTU1NlbGVjdG9yOjpwYXJzZVBzZXVkb0VsZW1lbnRUeXBlKG5hbWUpOworICAgIGlmIChwc2V1
ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50VW5rbm93bikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byBzZWxlY3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8
Q1NTUGFyc2VyU2VsZWN0b3I+KCk7CisgICAgc2VsZWN0b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNo
KENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KTsKKyAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+
c2V0UHNldWRvRWxlbWVudFR5cGUocHNldWRvVHlwZSk7CisgICAgaWYgKHBzZXVkb1R5cGUgPT0g
Q1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRDdXN0b21MZWdhY3lQcmVmaXhlZCkgewor
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG5hbWUgPT0gIi13ZWJraXQtaW5wdXQtcGxhY2Vo
b2xkZXIiLCAiLXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciBpcyB0aGUgb25seSBMZWdhY3lQcmVm
aXggcHNldWRvIHR5cGUuIik7CisgICAgICAgIGlmIChuYW1lID09ICItd2Via2l0LWlucHV0LXBs
YWNlaG9sZGVyIikKKyAgICAgICAgICAgIG5hbWUgPSBBdG9taWNTdHJpbmcoInBsYWNlaG9sZGVy
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgfQorICAgIHNlbGVj
dG9yLT5tX3NlbGVjdG9yLT5zZXRWYWx1ZShuYW1lKTsKKyAgICByZXR1cm4gc2VsZWN0b3IucmVs
ZWFzZSgpOworfQorCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogQ1NTUGFyc2VyU2VsZWN0b3Iq
IENTU1BhcnNlclNlbGVjdG9yOjpwYXJzZVBzZXVkb0VsZW1lbnRDdWVGdW5jdGlvblNlbGVjdG9y
KGNvbnN0IENTU1BhcnNlclN0cmluZyYgZnVuY3Rpb25JZGVudGlmaWVyLCBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4qIHBhcnNlZFNlbGVjdG9yVmVjdG9yKQogewpA
QCAtMzA4LDYgKzMzMCwyOSBAQCBDU1NQYXJzZXJTZWxlY3RvciogQ1NTUGFyc2VyU2VsZWN0b3I6
OnBhCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK0NTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJz
ZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9DbGFzc1NlbGVjdG9yRnJvbVN0cmluZ1ZpZXcoU3RyaW5n
VmlldyYgcHNldWRvVHlwZVN0cmluZykKK3sKKyAgICBpZiAocHNldWRvVHlwZVN0cmluZy5sZW5n
dGgoKSAmJiBwc2V1ZG9UeXBlU3RyaW5nW3BzZXVkb1R5cGVTdHJpbmcubGVuZ3RoKCkgLSAxXSA9
PSAnKCcpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIFBzZXVkb0NsYXNzT3JD
b21wYXRpYmlsaXR5UHNldWRvRWxlbWVudCBwc2V1ZG9UeXBlID0gcGFyc2VQc2V1ZG9DbGFzc0Fu
ZENvbXBhdGliaWxpdHlFbGVtZW50U3RyaW5nKHBzZXVkb1R5cGVTdHJpbmcpOworICAgIGlmIChw
c2V1ZG9UeXBlLnBzZXVkb0NsYXNzICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Vua25vd24p
IHsKKyAgICAgICAgYXV0byBzZWxlY3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2Vs
ZWN0b3I+KCk7CisgICAgICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRNYXRjaChDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3MpOworICAgICAgICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0UHNl
dWRvQ2xhc3NUeXBlKHBzZXVkb1R5cGUucHNldWRvQ2xhc3MpOworICAgICAgICByZXR1cm4gc2Vs
ZWN0b3IucmVsZWFzZSgpOworICAgIH0KKyAgICBpZiAocHNldWRvVHlwZS5jb21wYXRpYmlsaXR5
UHNldWRvRWxlbWVudCAhPSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFVua25vd24pIHsKKyAg
ICAgICAgYXV0byBzZWxlY3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+
KCk7CisgICAgICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6
UHNldWRvRWxlbWVudCk7CisgICAgICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRQc2V1ZG9F
bGVtZW50VHlwZShwc2V1ZG9UeXBlLmNvbXBhdGliaWxpdHlQc2V1ZG9FbGVtZW50KTsKKyAgICAg
ICAgQXRvbWljU3RyaW5nIG5hbWUgPSBwc2V1ZG9UeXBlU3RyaW5nLnRvQXRvbWljU3RyaW5nKCk7
CisgICAgICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRWYWx1ZShuYW1lKTsKKyAgICAgICAg
cmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKIENTU1BhcnNlclNlbGVjdG9yOjpDU1NQYXJzZXJTZWxlY3RvcigpCiAgICAgOiBtX3NlbGVj
dG9yKHN0ZDo6bWFrZV91bmlxdWU8Q1NTU2VsZWN0b3I+KCkpCiB7CkBAIC0zNDksNyArMzk0LDEy
IEBAIHZvaWQgQ1NTUGFyc2VyU2VsZWN0b3I6OnNldExhbmdBcmd1bWVudEwKICAgICAgICAgYXJn
dW1lbnRMaXN0LT5hcHBlbmQobGFuZ3VhZ2VBcmd1bWVudCk7CiAgICAgbV9zZWxlY3Rvci0+c2V0
TGFuZ0FyZ3VtZW50TGlzdChXVEZNb3ZlKGFyZ3VtZW50TGlzdCkpOwogfQotCisgICAgCit2b2lk
IENTU1BhcnNlclNlbGVjdG9yOjpzZXRTZWxlY3Rvckxpc3Qoc3RkOjp1bmlxdWVfcHRyPENTU1Nl
bGVjdG9yTGlzdD4gc2VsZWN0b3JMaXN0KQoreworICAgIG1fc2VsZWN0b3ItPnNldFNlbGVjdG9y
TGlzdChXVEZNb3ZlKHNlbGVjdG9yTGlzdCkpOworfQorICAgIAogdm9pZCBDU1NQYXJzZXJTZWxl
Y3Rvcjo6c2V0UHNldWRvQ2xhc3NWYWx1ZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHBzZXVkb0Ns
YXNzU3RyaW5nKQogewogICAgIEFTU0VSVChtX3NlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzcyk7CkBAIC00MjUsNiArNDc1LDE1IEBAIHZvaWQgQ1NTUGFyc2VyU2Vs
ZWN0b3I6OmFwcGVuZFRhZ0hpc3RvcnkKICAgICBjYXNlIENTU1BhcnNlclNlbGVjdG9yQ29tYmlu
YXRvcjo6SW5kaXJlY3RBZGphY2VudDoKICAgICAgICAgc2VsZWN0b3JSZWxhdGlvbiA9IENTU1Nl
bGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OwogICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1Bh
cnNlclNlbGVjdG9yQ29tYmluYXRvcjo6U2hhZG93RGVlcDoKKyAgICAgICAgc2VsZWN0b3JSZWxh
dGlvbiA9IENTU1NlbGVjdG9yOjpTaGFkb3dEZWVwOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENTU1BhcnNlclNlbGVjdG9yQ29tYmluYXRvcjo6U2hhZG93UHNldWRvOgorICAgICAgICBzZWxl
Y3RvclJlbGF0aW9uID0gQ1NTU2VsZWN0b3I6OlNoYWRvd1BzZXVkbzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDU1NQYXJzZXJTZWxlY3RvckNvbWJpbmF0b3I6OlNoYWRvd1Nsb3Q6CisgICAg
ICAgIHNlbGVjdG9yUmVsYXRpb24gPSBDU1NTZWxlY3Rvcjo6U2hhZG93U2xvdDsKKyAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGVuZC0+c2V0UmVsYXRpb24oc2VsZWN0b3JSZWxhdGlvbik7CiAK
QEAgLTQ0Nyw1ICs1MDYsMTcgQEAgdm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6cHJlcGVuZFRhZ1Nl
bGVjdAogICAgIG1fc2VsZWN0b3ItPnNldFJlbGF0aW9uKENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rv
cik7CiB9CiAKK3N0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gQ1NTUGFyc2VyU2Vs
ZWN0b3I6OnJlbGVhc2VUYWdIaXN0b3J5KCkKK3sKKyAgICBzZXRSZWxhdGlvbihDU1NTZWxlY3Rv
cjo6U3ViU2VsZWN0b3IpOworICAgIHJldHVybiBXVEZNb3ZlKG1fdGFnSGlzdG9yeSk7Cit9CisK
Ky8vIEZJWE1FLU5FV1BBUlNFUjogQWRkIHN1cHBvcnQgZm9yIDpob3N0LWNvbnRleHQKK2Jvb2wg
Q1NTUGFyc2VyU2VsZWN0b3I6OmlzSG9zdFBzZXVkb1NlbGVjdG9yKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gcHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG9zdDsK
K30KKwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlclZhbHVl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVmFs
dWVzLmgJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyVmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw3ICsxOTMsMTAgQEAgZW51bSBj
bGFzcyBDU1NQYXJzZXJTZWxlY3RvckNvbWJpbmF0b3IgewogICAgIERlc2NlbmRhbnREb3VibGVD
aGlsZCwKICNlbmRpZgogICAgIERpcmVjdEFkamFjZW50LAotICAgIEluZGlyZWN0QWRqYWNlbnQK
KyAgICBJbmRpcmVjdEFkamFjZW50LAorICAgIFNoYWRvd1BzZXVkbywgLy8gU3BlY2lhbCBjYXNl
IG9mIHNoYWRvdyBET00gcHNldWRvIGVsZW1lbnRzIC8gc2hhZG93IHBzZXVkbyBlbGVtZW50Cisg
ICAgU2hhZG93RGVlcCwgLy8gL2RlZXAvIGNvbWJpbmF0b3IKKyAgICBTaGFkb3dTbG90IC8vIHNs
b3R0ZWQgdG8gPHNsb3Q+IGUKIH07CiAKIGNsYXNzIENTU1BhcnNlclNlbGVjdG9yIHsKQEAgLTIw
Niw2ICsyMDksOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENTU1BhcnNlclNlbGVjdG9yKiBwYXJz
ZVBzZXVkb0NsYXNzSG9zdEZ1bmN0aW9uU2VsZWN0b3IoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBm
dW5jdGlvbklkZW50aWZpZXIsIENTU1BhcnNlclNlbGVjdG9yKik7CiAgICAgc3RhdGljIENTU1Bh
cnNlclNlbGVjdG9yKiBwYXJzZVBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRTZWxl
Y3RvcihDU1NQYXJzZXJTdHJpbmcmIHBzZXVkb1R5cGVTdHJpbmcpOwogCisgICAgc3RhdGljIENT
U1BhcnNlclNlbGVjdG9yKiBwYXJzZVBzZXVkb0NsYXNzU2VsZWN0b3JGcm9tU3RyaW5nVmlldyhT
dHJpbmdWaWV3Jik7CisgICAgc3RhdGljIENTU1BhcnNlclNlbGVjdG9yKiBwYXJzZVBzZXVkb0Vs
ZW1lbnRTZWxlY3RvckZyb21TdHJpbmdWaWV3KFN0cmluZ1ZpZXcmKTsKKyAgICAKICAgICBDU1NQ
YXJzZXJTZWxlY3RvcigpOwogICAgIGV4cGxpY2l0IENTU1BhcnNlclNlbGVjdG9yKGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKICAgICB+Q1NTUGFyc2VyU2VsZWN0b3IoKTsKQEAgLTIyMCw4ICsyMjYs
MTMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmVsYXRpb24oQ1NTU2VsZWN0b3I6OlJlbGF0aW9u
IHZhbHVlKSB7IG1fc2VsZWN0b3ItPnNldFJlbGF0aW9uKHZhbHVlKTsgfQogICAgIHZvaWQgc2V0
Rm9yUGFnZSgpIHsgbV9zZWxlY3Rvci0+c2V0Rm9yUGFnZSgpOyB9CiAKKyAgICBDU1NTZWxlY3Rv
cjo6TWF0Y2ggbWF0Y2goKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yLT5tYXRjaCgpOyB9Cisg
ICAgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRUeXBlIHBzZXVkb0VsZW1lbnRUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9zZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKTsgfQorICAgIGNvbnN0
IENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rv
ci0+c2VsZWN0b3JMaXN0KCk7IH0KKwogICAgIHZvaWQgYWRvcHRTZWxlY3RvclZlY3RvcihWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4mIHNlbGVjdG9yVmVjdG9yKTsK
ICAgICB2b2lkIHNldExhbmdBcmd1bWVudExpc3QoY29uc3QgVmVjdG9yPENTU1BhcnNlclN0cmlu
Zz4mIHN0cmluZ1ZlY3Rvcik7CisgICAgdm9pZCBzZXRTZWxlY3Rvckxpc3Qoc3RkOjp1bmlxdWVf
cHRyPENTU1NlbGVjdG9yTGlzdD4pOwogCiAgICAgdm9pZCBzZXRQc2V1ZG9DbGFzc1ZhbHVlKGNv
bnN0IENTU1BhcnNlclN0cmluZyYgcHNldWRvQ2xhc3NTdHJpbmcpOwogICAgIENTU1NlbGVjdG9y
OjpQc2V1ZG9DbGFzc1R5cGUgcHNldWRvQ2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxl
Y3Rvci0+cHNldWRvQ2xhc3NUeXBlKCk7IH0KQEAgLTIzOSw2ICsyNTAsMTEgQEAgcHVibGljOgog
ICAgIGJvb2wgaGFzU2hhZG93RGVzY2VuZGFudCgpIGNvbnN0OwogICAgIGJvb2wgbWF0Y2hlc1Bz
ZXVkb0VsZW1lbnQoKSBjb25zdDsKIAorICAgIGJvb2wgaXNIb3N0UHNldWRvU2VsZWN0b3IoKSBj
b25zdDsKKworICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogTWlzc2luZyAic2hhZG93IgorICAgIGJv
b2wgbmVlZHNJbXBsaWNpdFNoYWRvd0NvbWJpbmF0b3JGb3JNYXRjaGluZygpIGNvbnN0IHsgcmV0
dXJuIHBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJL
aXRDdXN0b20gfHwgcHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxl
bWVudFVzZXJBZ2VudEN1c3RvbSB8fCBwc2V1ZG9FbGVtZW50VHlwZSgpID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9FbGVtZW50V2ViS2l0Q3VzdG9tTGVnYWN5UHJlZml4ZWQgfHwgcHNldWRvRWxlbWVu
dFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudEN1ZSB8fCBwc2V1ZG9FbGVtZW50
VHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50U2xvdHRlZDsgfQorCiAgICAgQ1NT
UGFyc2VyU2VsZWN0b3IqIHRhZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3RhZ0hpc3Rvcnku
Z2V0KCk7IH0KICAgICB2b2lkIHNldFRhZ0hpc3Rvcnkoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNl
clNlbGVjdG9yPiBzZWxlY3RvcikgeyBtX3RhZ0hpc3RvcnkgPSBXVEZNb3ZlKHNlbGVjdG9yKTsg
fQogICAgIHZvaWQgY2xlYXJUYWdIaXN0b3J5KCkgeyBtX3RhZ0hpc3RvcnkucmVzZXQoKTsgfQpA
QCAtMjQ2LDYgKzI2Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZFRhZ0hpc3RvcnkoQ1NT
U2VsZWN0b3I6OlJlbGF0aW9uLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+KTsK
ICAgICB2b2lkIGFwcGVuZFRhZ0hpc3RvcnkoQ1NTUGFyc2VyU2VsZWN0b3JDb21iaW5hdG9yLCBz
dGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+KTsKICAgICB2b2lkIHByZXBlbmRUYWdT
ZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgYm9vbCB0YWdJc0Zvck5hbWVzcGFjZVJ1bGUg
PSBmYWxzZSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiByZWxlYXNl
VGFnSGlzdG9yeSgpOwogCiBwcml2YXRlOgogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JTX0xFVkVM
NCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
LmgJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgY29uc3VtZUNTU1dpZGVLZXl3b3JkKENTU1Byb3BlcnR5SUQgdW5yZXNvbHZlZFBy
b3BlcnR5LCBib29sIGltcG9ydGFudCk7CiAgICAgY29uc3QgQ1NTVmFsdWUqIHBhcnNlU2luZ2xl
VmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTUHJvcGVydHlJRCA9IENTU1Byb3BlcnR5SW52YWxpZCk7
CiAKLSAgICBib29sIGluUXVpcmtzTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5tb2Rl
ID09IENTU1F1aXJrc01vZGU7IH0KKyAgICBib29sIGluUXVpcmtzTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dC5tb2RlID09IEhUTUxRdWlya3NNb2RlOyB9CiAKICAgICBib29sIHBhcnNl
Vmlld3BvcnREZXNjcmlwdG9yKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCk7
CiAgICAgYm9vbCBwYXJzZUZvbnRGYWNlRGVzY3JpcHRvcihDU1NQcm9wZXJ0eUlEKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcxIEBACisvLyBDb3B5cmlnaHQgMjAx
NCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisv
LyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDU1NTZWxlY3RvclBhcnNlci5oIgorCisjaW5jbHVkZSAiQ1NTUGFyc2VyTW9kZS5oIgor
I2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50
cy5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDU1NTZWxl
Y3Rvckxpc3QgQ1NTU2VsZWN0b3JQYXJzZXI6OnBhcnNlU2VsZWN0b3IoQ1NTUGFyc2VyVG9rZW5S
YW5nZSByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwgU3R5bGVTaGVldENv
bnRlbnRzKiBzdHlsZVNoZWV0KQoreworICAgIENTU1NlbGVjdG9yUGFyc2VyIHBhcnNlcihjb250
ZXh0LCBzdHlsZVNoZWV0KTsKKyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgIENT
U1NlbGVjdG9yTGlzdCByZXN1bHQgPSBwYXJzZXIuY29uc3VtZUNvbXBsZXhTZWxlY3Rvckxpc3Qo
cmFuZ2UpOworICAgIGlmICghcmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIENTU1NlbGVj
dG9yTGlzdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0NTU1NlbGVjdG9yUGFyc2VyOjpD
U1NTZWxlY3RvclBhcnNlcihjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBTdHlsZVNo
ZWV0Q29udGVudHMqIHN0eWxlU2hlZXQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAs
IG1fc3R5bGVTaGVldChzdHlsZVNoZWV0KQoreworfQorCitDU1NTZWxlY3Rvckxpc3QgQ1NTU2Vs
ZWN0b3JQYXJzZXI6OmNvbnN1bWVDb21wbGV4U2VsZWN0b3JMaXN0KENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQoreworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0
b3I+PiBzZWxlY3Rvckxpc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9y
PiBzZWxlY3RvciA9IGNvbnN1bWVDb21wbGV4U2VsZWN0b3IocmFuZ2UpOworICAgIGlmICghc2Vs
ZWN0b3IpCisgICAgICAgIHJldHVybiBDU1NTZWxlY3Rvckxpc3QoKTsKKyAgICBzZWxlY3Rvckxp
c3QuYXBwZW5kKFdURk1vdmUoc2VsZWN0b3IpKTsKKyAgICB3aGlsZSAoIXJhbmdlLmF0RW5kKCkg
JiYgcmFuZ2UucGVlaygpLnR5cGUoKSA9PSBDb21tYVRva2VuKSB7CisgICAgICAgIHJhbmdlLmNv
bnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgIHNlbGVjdG9yID0gY29uc3VtZUNv
bXBsZXhTZWxlY3RvcihyYW5nZSk7CisgICAgICAgIGlmICghc2VsZWN0b3IpCisgICAgICAgICAg
ICByZXR1cm4gQ1NTU2VsZWN0b3JMaXN0KCk7CisgICAgICAgIHNlbGVjdG9yTGlzdC5hcHBlbmQo
V1RGTW92ZShzZWxlY3RvcikpOworICAgIH0KKworICAgIENTU1NlbGVjdG9yTGlzdCBsaXN0Owor
ICAgIGlmIChtX2ZhaWxlZFBhcnNpbmcpCisgICAgICAgIHJldHVybiBsaXN0OworICAgIGxpc3Qu
YWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3Rvckxpc3QpOworICAgIHJldHVybiBsaXN0OworfQor
CitDU1NTZWxlY3Rvckxpc3QgQ1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVDb21wb3VuZFNlbGVj
dG9yTGlzdChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4gc2VsZWN0b3JMaXN0OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2VsZWN0b3IgPSBjb25zdW1lQ29tcG91bmRTZWxl
Y3RvcihyYW5nZSk7CisgICAgcmFuZ2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICBpZiAoIXNl
bGVjdG9yKQorICAgICAgICByZXR1cm4gQ1NTU2VsZWN0b3JMaXN0KCk7CisgICAgc2VsZWN0b3JM
aXN0LmFwcGVuZChXVEZNb3ZlKHNlbGVjdG9yKSk7CisgICAgd2hpbGUgKCFyYW5nZS5hdEVuZCgp
ICYmIHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gQ29tbWFUb2tlbikgeworICAgICAgICByYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICBzZWxlY3RvciA9IGNvbnN1bWVD
b21wb3VuZFNlbGVjdG9yKHJhbmdlKTsKKyAgICAgICAgcmFuZ2UuY29uc3VtZVdoaXRlc3BhY2Uo
KTsKKyAgICAgICAgaWYgKCFzZWxlY3RvcikKKyAgICAgICAgICAgIHJldHVybiBDU1NTZWxlY3Rv
ckxpc3QoKTsKKyAgICAgICAgc2VsZWN0b3JMaXN0LmFwcGVuZChXVEZNb3ZlKHNlbGVjdG9yKSk7
CisgICAgfQorCisgICAgQ1NTU2VsZWN0b3JMaXN0IGxpc3Q7CisgICAgaWYgKG1fZmFpbGVkUGFy
c2luZykKKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgbGlzdC5hZG9wdFNlbGVjdG9yVmVjdG9y
KHNlbGVjdG9yTGlzdCk7CisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK25hbWVzcGFjZSB7CisKK2Vu
dW0gQ29tcG91bmRTZWxlY3RvckZsYWdzIHsKKyAgICBIYXNQc2V1ZG9FbGVtZW50Rm9yUmlnaHRt
b3N0Q29tcG91bmQgPSAxIDw8IDAsCisgICAgSGFzQ29udGVudFBzZXVkb0VsZW1lbnQgPSAxIDw8
IDEKK307CisKK3Vuc2lnbmVkIGV4dHJhY3RDb21wb3VuZEZsYWdzKGNvbnN0IENTU1BhcnNlclNl
bGVjdG9yJiBzaW1wbGVTZWxlY3RvciwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlKQoreworICAg
IGlmIChzaW1wbGVTZWxlY3Rvci5tYXRjaCgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IFRoZXNlIGRvbid0
IGV4aXN0IGZvciB1cywgc28gbWF5IG5lZWQgdG8gcmV2aXNpdC4KKyAgICAvLyBpZiAoc2ltcGxl
U2VsZWN0b3IucHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ29udGVu
dCkKKyAgICAvLyAgICByZXR1cm4gSGFzQ29udGVudFBzZXVkb0VsZW1lbnQ7CisgICAgLy8gaWYg
KHNpbXBsZVNlbGVjdG9yLnBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b1NoYWRvdykKKyAgICAvLyAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNzQ3CisgICAgLy8gVGhlIFVBU2hlZXRN
b2RlIGNoZWNrIGlzIGEgd29yay1hcm91bmQgdG8gYWxsb3cgdGhpcyBzZWxlY3RvciBpbiBtZWRp
YUNvbnRyb2xzKE5ldykuY3NzOgorICAgIC8vIGlucHV0W3R5cGU9InJhbmdlIiBpXTo6LXdlYmtp
dC1tZWRpYS1zbGlkZXItY29udGFpbmVyID4gZGl2IHsKKyAgICBpZiAocGFyc2VyTW9kZSA9PSBV
QVNoZWV0TW9kZSAmJiBzaW1wbGVTZWxlY3Rvci5wc2V1ZG9FbGVtZW50VHlwZSgpID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9FbGVtZW50V2ViS2l0Q3VzdG9tKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gSGFzUHNldWRvRWxlbWVudEZvclJpZ2h0bW9zdENvbXBvdW5kOworfQorCit9IC8v
IG5hbWVzcGFjZQorCitzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1NlbGVj
dG9yUGFyc2VyOjpjb25zdW1lQ29tcGxleFNlbGVjdG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2VsZWN0b3Ig
PSBjb25zdW1lQ29tcG91bmRTZWxlY3RvcihyYW5nZSk7CisgICAgaWYgKCFzZWxlY3RvcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKworICAgIHVuc2lnbmVkIHByZXZpb3VzQ29tcG91bmRG
bGFncyA9IDA7CisKKyAgICBmb3IgKENTU1BhcnNlclNlbGVjdG9yKiBzaW1wbGUgPSBzZWxlY3Rv
ci5nZXQoKTsgc2ltcGxlICYmICFwcmV2aW91c0NvbXBvdW5kRmxhZ3M7IHNpbXBsZSA9IHNpbXBs
ZS0+dGFnSGlzdG9yeSgpKQorICAgICAgICBwcmV2aW91c0NvbXBvdW5kRmxhZ3MgfD0gZXh0cmFj
dENvbXBvdW5kRmxhZ3MoKnNpbXBsZSwgbV9jb250ZXh0Lm1vZGUpOworCisgICAgd2hpbGUgKENT
U1NlbGVjdG9yOjpSZWxhdGlvbiBjb21iaW5hdG9yID0gY29uc3VtZUNvbWJpbmF0b3IocmFuZ2Up
KSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gbmV4dFNlbGVj
dG9yID0gY29uc3VtZUNvbXBvdW5kU2VsZWN0b3IocmFuZ2UpOworICAgICAgICBpZiAoIW5leHRT
ZWxlY3RvcikKKyAgICAgICAgICAgIHJldHVybiBjb21iaW5hdG9yID09IENTU1NlbGVjdG9yOjpE
ZXNjZW5kYW50ID8gV1RGTW92ZShzZWxlY3RvcikgOiBudWxscHRyOworICAgICAgICBpZiAocHJl
dmlvdXNDb21wb3VuZEZsYWdzICYgSGFzUHNldWRvRWxlbWVudEZvclJpZ2h0bW9zdENvbXBvdW5k
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIENTU1BhcnNlclNlbGVjdG9y
KiBlbmQgPSBuZXh0U2VsZWN0b3IuZ2V0KCk7CisgICAgICAgIHVuc2lnbmVkIGNvbXBvdW5kRmxh
Z3MgPSBleHRyYWN0Q29tcG91bmRGbGFncygqZW5kLCBtX2NvbnRleHQubW9kZSk7CisgICAgICAg
IHdoaWxlIChlbmQtPnRhZ0hpc3RvcnkoKSkgeworICAgICAgICAgICAgZW5kID0gZW5kLT50YWdI
aXN0b3J5KCk7CisgICAgICAgICAgICBjb21wb3VuZEZsYWdzIHw9IGV4dHJhY3RDb21wb3VuZEZs
YWdzKCplbmQsIG1fY29udGV4dC5tb2RlKTsKKyAgICAgICAgfQorICAgICAgICBlbmQtPnNldFJl
bGF0aW9uKGNvbWJpbmF0b3IpOworICAgICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IFNoYWRvdyBz
dHVmZi4KKyAgICAgICAgLy9pZiAocHJldmlvdXNDb21wb3VuZEZsYWdzICYgSGFzQ29udGVudFBz
ZXVkb0VsZW1lbnQpCisgICAgICAgIC8vICAgIGVuZC0+c2V0UmVsYXRpb25Jc0FmZmVjdGVkQnlQ
c2V1ZG9Db250ZW50KCk7CisgICAgICAgIHByZXZpb3VzQ29tcG91bmRGbGFncyA9IGNvbXBvdW5k
RmxhZ3M7CisgICAgICAgIGVuZC0+c2V0VGFnSGlzdG9yeShXVEZNb3ZlKHNlbGVjdG9yKSk7CisK
KyAgICAgICAgc2VsZWN0b3IgPSBXVEZNb3ZlKG5leHRTZWxlY3Rvcik7CisgICAgfQorCisgICAg
cmV0dXJuIHNlbGVjdG9yOworfQorCituYW1lc3BhY2UgeworCitib29sIGlzU2Nyb2xsYmFyUHNl
dWRvQ2xhc3MoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSBwc2V1ZG8pCit7CisgICAgc3dp
dGNoIChwc2V1ZG8pIHsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0VuYWJsZWQ6
CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NEaXNhYmxlZDoKKyAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVyOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzQWN0aXZlOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG9yaXpvbnRh
bDoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1ZlcnRpY2FsOgorICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRGVjcmVtZW50OgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzSW5jcmVtZW50OgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
U3RhcnQ6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NFbmQ6CisgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NEb3VibGVCdXR0b246CisgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NTaW5nbGVCdXR0b246CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NOb0J1dHRvbjoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Nvcm5lclBy
ZXNlbnQ6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NXaW5kb3dJbmFjdGl2ZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworYm9vbCBpc1VzZXJBY3Rpb25Qc2V1ZG9DbGFzcyhDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NUeXBlIHBzZXVkbykKK3sKKyAgICBzd2l0Y2ggKHBzZXVkbykgeworICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG92ZXI6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NGb2N1czoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FjdGl2
ZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworYm9vbCBpc1BzZXVkb0NsYXNzVmFsaWRBZnRlclBzZXVkb0VsZW1l
bnQoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSBwc2V1ZG9DbGFzcywgQ1NTU2VsZWN0b3I6
OlBzZXVkb0VsZW1lbnRUeXBlIGNvbXBvdW5kUHNldWRvRWxlbWVudCkKK3sKKyAgICBzd2l0Y2gg
KGNvbXBvdW5kUHNldWRvRWxlbWVudCkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Vs
ZW1lbnRSZXNpemVyOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRTY3JvbGxi
YXI6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFNjcm9sbGJhckNvcm5lcjoK
KyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50U2Nyb2xsYmFyQnV0dG9uOgorICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRTY3JvbGxiYXJUaHVtYjoKKyAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50U2Nyb2xsYmFyVHJhY2s6CisgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRWxlbWVudFNjcm9sbGJhclRyYWNrUGllY2U6CisgICAgICAgIHJldHVy
biBpc1Njcm9sbGJhclBzZXVkb0NsYXNzKHBzZXVkb0NsYXNzKTsKKyAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9FbGVtZW50U2VsZWN0aW9uOgorICAgICAgICByZXR1cm4gcHNldWRvQ2xhc3Mg
PT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzV2luZG93SW5hY3RpdmU7CisgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRWxlbWVudFdlYktpdEN1c3RvbToKKyAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9FbGVtZW50V2ViS2l0Q3VzdG9tTGVnYWN5UHJlZml4ZWQ6CisgICAgICAgIHJldHVy
biBpc1VzZXJBY3Rpb25Qc2V1ZG9DbGFzcyhwc2V1ZG9DbGFzcyk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBpc1NpbXBsZVNlbGVjdG9yVmFs
aWRBZnRlclBzZXVkb0VsZW1lbnQoY29uc3QgQ1NTUGFyc2VyU2VsZWN0b3ImIHNpbXBsZVNlbGVj
dG9yLCBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFR5cGUgY29tcG91bmRQc2V1ZG9FbGVtZW50
KQoreworICAgIGlmIChjb21wb3VuZFBzZXVkb0VsZW1lbnQgPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b0VsZW1lbnRVbmtub3duKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBGSVhNRS1ORVdQ
QVJTRVI6IFRoaXMgZG9lc24ndCBleGlzdCBmb3IgdXMuCisgICAgLy8gaWYgKGNvbXBvdW5kUHNl
dWRvRWxlbWVudCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudENvbnRlbnQpCisgICAgLy8g
ICAgcmV0dXJuIHNpbXBsZVNlbGVjdG9yLm1hdGNoKCkgIT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0Vs
ZW1lbnQ7CisgICAgaWYgKHNpbXBsZVNlbGVjdG9yLm1hdGNoKCkgIT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzVHlwZSBwc2V1ZG8gPSBzaW1wbGVTZWxlY3Rvci5wc2V1ZG9DbGFzc1R5cGUoKTsKKyAg
ICBpZiAocHNldWRvID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc05vdCkgeworICAgICAgICBB
U1NFUlQoc2ltcGxlU2VsZWN0b3Iuc2VsZWN0b3JMaXN0KCkpOworICAgICAgICBBU1NFUlQoc2lt
cGxlU2VsZWN0b3Iuc2VsZWN0b3JMaXN0KCktPmZpcnN0KCkpOworICAgICAgICBBU1NFUlQoIXNp
bXBsZVNlbGVjdG9yLnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpLT50YWdIaXN0b3J5KCkpOworICAg
ICAgICBwc2V1ZG8gPSBzaW1wbGVTZWxlY3Rvci5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKS0+cHNl
dWRvQ2xhc3NUeXBlKCk7CisgICAgfQorICAgIHJldHVybiBpc1BzZXVkb0NsYXNzVmFsaWRBZnRl
clBzZXVkb0VsZW1lbnQocHNldWRvLCBjb21wb3VuZFBzZXVkb0VsZW1lbnQpOworfQorCit9IC8v
IG5hbWVzcGFjZQorCitzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1NlbGVj
dG9yUGFyc2VyOjpjb25zdW1lQ29tcG91bmRTZWxlY3RvcihDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IGNvbXBvdW5k
U2VsZWN0b3I7CisKKyAgICBBdG9taWNTdHJpbmcgbmFtZXNwYWNlUHJlZml4OworICAgIEF0b21p
Y1N0cmluZyBlbGVtZW50TmFtZTsKKyAgICBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFR5cGUg
Y29tcG91bmRQc2V1ZG9FbGVtZW50ID0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRVbmtub3du
OworICAgIGlmICghY29uc3VtZU5hbWUocmFuZ2UsIGVsZW1lbnROYW1lLCBuYW1lc3BhY2VQcmVm
aXgpKSB7CisgICAgICAgIGNvbXBvdW5kU2VsZWN0b3IgPSBjb25zdW1lU2ltcGxlU2VsZWN0b3Io
cmFuZ2UpOworICAgICAgICBpZiAoIWNvbXBvdW5kU2VsZWN0b3IpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgaWYgKGNvbXBvdW5kU2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpCisgICAgICAgICAgICBjb21wb3VuZFBzZXVkb0VsZW1l
bnQgPSBjb21wb3VuZFNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpOworICAgIH0KKyAgICBp
ZiAobV9jb250ZXh0LmlzSFRNTERvY3VtZW50KQorICAgICAgICBlbGVtZW50TmFtZSA9IGVsZW1l
bnROYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CisKKyAgICB3aGlsZSAoc3RkOjp1bmlx
dWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzaW1wbGVTZWxlY3RvciA9IGNvbnN1bWVTaW1wbGVT
ZWxlY3RvcihyYW5nZSkpIHsKKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE3NDcKKyAgICAgICAgLy8gVGhlIFVBU2hlZXRNb2RlIGNo
ZWNrIGlzIGEgd29yay1hcm91bmQgdG8gYWxsb3cgdGhpcyBzZWxlY3RvciBpbiBtZWRpYUNvbnRy
b2xzKE5ldykuY3NzOgorICAgICAgICAvLyB2aWRlbzo6LXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNr
LXJlZ2lvbi1jb250YWluZXIuc2Nyb2xsaW5nCisgICAgICAgIGlmIChtX2NvbnRleHQubW9kZSAh
PSBVQVNoZWV0TW9kZSAmJiAhaXNTaW1wbGVTZWxlY3RvclZhbGlkQWZ0ZXJQc2V1ZG9FbGVtZW50
KCpzaW1wbGVTZWxlY3Rvci5nZXQoKSwgY29tcG91bmRQc2V1ZG9FbGVtZW50KSkgeworICAgICAg
ICAgICAgbV9mYWlsZWRQYXJzaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICB9CisgICAgICAgIGlmIChzaW1wbGVTZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkKKyAgICAgICAgICAgIGNvbXBvdW5kUHNldWRvRWxlbWVu
dCA9IHNpbXBsZVNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpOworCisgICAgICAgIGlmIChj
b21wb3VuZFNlbGVjdG9yKQorICAgICAgICAgICAgY29tcG91bmRTZWxlY3RvciA9IGFkZFNpbXBs
ZVNlbGVjdG9yVG9Db21wb3VuZChXVEZNb3ZlKGNvbXBvdW5kU2VsZWN0b3IpLCBXVEZNb3ZlKHNp
bXBsZVNlbGVjdG9yKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBvdW5kU2VsZWN0
b3IgPSBXVEZNb3ZlKHNpbXBsZVNlbGVjdG9yKTsKKyAgICB9CisKKyAgICBpZiAoIWNvbXBvdW5k
U2VsZWN0b3IpIHsKKyAgICAgICAgQXRvbWljU3RyaW5nIG5hbWVzcGFjZVVSSSA9IGRldGVybWlu
ZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVmaXgpOworICAgICAgICBpZiAobmFtZXNwYWNlVVJJLmlz
TnVsbCgpKSB7CisgICAgICAgICAgICBtX2ZhaWxlZFBhcnNpbmcgPSB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5hbWVzcGFjZVVSSSA9
PSBkZWZhdWx0TmFtZXNwYWNlKCkpCisgICAgICAgICAgICBuYW1lc3BhY2VQcmVmaXggPSBudWxs
QXRvbTsKKyAgICAgICAgCisgICAgICAgIENTU1BhcnNlclNlbGVjdG9yKiByYXdTZWxlY3RvciA9
IG5ldyBDU1NQYXJzZXJTZWxlY3RvcihRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwgZWxl
bWVudE5hbWUsIG5hbWVzcGFjZVVSSSkpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFy
c2VyU2VsZWN0b3I+IHNlbGVjdG9yID0gc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9y
PihyYXdTZWxlY3Rvcik7CisgICAgICAgIHJldHVybiBzZWxlY3RvcjsKKyAgICB9CisgICAgcHJl
cGVuZFR5cGVTZWxlY3RvcklmTmVlZGVkKG5hbWVzcGFjZVByZWZpeCwgZWxlbWVudE5hbWUsIGNv
bXBvdW5kU2VsZWN0b3IuZ2V0KCkpOworICAgIHJldHVybiBzcGxpdENvbXBvdW5kQXRJbXBsaWNp
dFNoYWRvd0Nyb3NzaW5nQ29tYmluYXRvcihXVEZNb3ZlKGNvbXBvdW5kU2VsZWN0b3IpKTsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZWxlY3RvclBhcnNlcjo6
Y29uc3VtZVNpbXBsZVNlbGVjdG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAg
IGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9yOworICAgIGlmICh0b2tlbi50eXBl
KCkgPT0gSGFzaFRva2VuKQorICAgICAgICBzZWxlY3RvciA9IGNvbnN1bWVJZChyYW5nZSk7Cisg
ICAgZWxzZSBpZiAodG9rZW4udHlwZSgpID09IERlbGltaXRlclRva2VuICYmIHRva2VuLmRlbGlt
aXRlcigpID09ICcuJykKKyAgICAgICAgc2VsZWN0b3IgPSBjb25zdW1lQ2xhc3MocmFuZ2UpOwor
ICAgIGVsc2UgaWYgKHRva2VuLnR5cGUoKSA9PSBMZWZ0QnJhY2tldFRva2VuKQorICAgICAgICBz
ZWxlY3RvciA9IGNvbnN1bWVBdHRyaWJ1dGUocmFuZ2UpOworICAgIGVsc2UgaWYgKHRva2VuLnR5
cGUoKSA9PSBDb2xvblRva2VuKQorICAgICAgICBzZWxlY3RvciA9IGNvbnN1bWVQc2V1ZG8ocmFu
Z2UpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFzZWxlY3Rv
cikKKyAgICAgICAgbV9mYWlsZWRQYXJzaW5nID0gdHJ1ZTsKKyAgICByZXR1cm4gc2VsZWN0b3I7
Cit9CisKK2Jvb2wgQ1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVOYW1lKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBBdG9taWNTdHJpbmcmIG5hbWUsIEF0b21pY1N0cmluZyYgbmFtZXNwYWNl
UHJlZml4KQoreworICAgIG5hbWUgPSBudWxsQXRvbTsKKyAgICBuYW1lc3BhY2VQcmVmaXggPSBu
dWxsQXRvbTsKKworICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBmaXJzdFRva2VuID0gcmFuZ2Uu
cGVlaygpOworICAgIGlmIChmaXJzdFRva2VuLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CisgICAg
ICAgIG5hbWUgPSBmaXJzdFRva2VuLnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKTsKKyAgICAgICAg
cmFuZ2UuY29uc3VtZSgpOworICAgIH0gZWxzZSBpZiAoZmlyc3RUb2tlbi50eXBlKCkgPT0gRGVs
aW1pdGVyVG9rZW4gJiYgZmlyc3RUb2tlbi5kZWxpbWl0ZXIoKSA9PSAnKicpIHsKKyAgICAgICAg
bmFtZSA9IHN0YXJBdG9tOworICAgICAgICByYW5nZS5jb25zdW1lKCk7CisgICAgfSBlbHNlIGlm
IChmaXJzdFRva2VuLnR5cGUoKSA9PSBEZWxpbWl0ZXJUb2tlbiAmJiBmaXJzdFRva2VuLmRlbGlt
aXRlcigpID09ICd8JykgeworICAgICAgICAvLyBUaGlzIGlzIGFuIGVtcHR5IG5hbWVzcGFjZSwg
d2hpY2gnbGwgZ2V0IGFzc2lnbmVkIHRoaXMgdmFsdWUgYmVsb3cKKyAgICAgICAgbmFtZSA9IGVt
cHR5QXRvbTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJh
bmdlLnBlZWsoKS50eXBlKCkgIT0gRGVsaW1pdGVyVG9rZW4gfHwgcmFuZ2UucGVlaygpLmRlbGlt
aXRlcigpICE9ICd8JykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmFuZ2UuY29uc3VtZSgp
OworCisgICAgbmFtZXNwYWNlUHJlZml4ID0gbmFtZTsKKyAgICBjb25zdCBDU1NQYXJzZXJUb2tl
biYgbmFtZVRva2VuID0gcmFuZ2UuY29uc3VtZSgpOworICAgIGlmIChuYW1lVG9rZW4udHlwZSgp
ID09IElkZW50VG9rZW4pIHsKKyAgICAgICAgbmFtZSA9IG5hbWVUb2tlbi52YWx1ZSgpLnRvQXRv
bWljU3RyaW5nKCk7CisgICAgfSBlbHNlIGlmIChuYW1lVG9rZW4udHlwZSgpID09IERlbGltaXRl
clRva2VuICYmIG5hbWVUb2tlbi5kZWxpbWl0ZXIoKSA9PSAnKicpCisgICAgICAgIG5hbWUgPSBz
dGFyQXRvbTsKKyAgICBlbHNlIHsKKyAgICAgICAgbmFtZSA9IG51bGxBdG9tOworICAgICAgICBu
YW1lc3BhY2VQcmVmaXggPSBudWxsQXRvbTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0
b3I+IENTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lSWQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCit7CisgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gSGFzaFRva2VuKTsKKyAg
ICBpZiAocmFuZ2UucGVlaygpLmdldEhhc2hUb2tlblR5cGUoKSAhPSBIYXNoVG9rZW5JZCkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVj
dG9yPiBzZWxlY3RvciA9IHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4obmV3IENT
U1BhcnNlclNlbGVjdG9yKCkpOworICAgIHNlbGVjdG9yLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6
SWQpOworICAgIEF0b21pY1N0cmluZyB2YWx1ZSA9IHJhbmdlLmNvbnN1bWUoKS52YWx1ZSgpLnRv
QXRvbWljU3RyaW5nKCk7CisgICAgc2VsZWN0b3ItPnNldFZhbHVlKHZhbHVlKTsKKyAgICByZXR1
cm4gc2VsZWN0b3I7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gQ1NT
U2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVDbGFzcyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkK
K3sKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEZWxpbWl0ZXJUb2tlbik7Cisg
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS5kZWxpbWl0ZXIoKSA9PSAnLicpOworICAgIHJhbmdlLmNv
bnN1bWUoKTsKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVudFRva2VuKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0
b3I+IHNlbGVjdG9yID0gc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPihuZXcgQ1NT
UGFyc2VyU2VsZWN0b3IoKSk7CisgICAgc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpD
bGFzcyk7CisgICAgQXRvbWljU3RyaW5nIHZhbHVlID0gcmFuZ2UuY29uc3VtZSgpLnZhbHVlKCku
dG9BdG9taWNTdHJpbmcoKTsKKyAgICBzZWxlY3Rvci0+c2V0VmFsdWUodmFsdWUpOworICAgIHJl
dHVybiBzZWxlY3RvcjsKK30KKworc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBD
U1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZUF0dHJpYnV0ZShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKK3sKKyAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBMZWZ0QnJhY2tldFRv
a2VuKTsKKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGJsb2NrID0gcmFuZ2UuY29uc3VtZUJsb2Nr
KCk7CisgICAgYmxvY2suY29uc3VtZVdoaXRlc3BhY2UoKTsKKworICAgIEF0b21pY1N0cmluZyBu
YW1lc3BhY2VQcmVmaXg7CisgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5hbWU7CisgICAgaWYg
KCFjb25zdW1lTmFtZShibG9jaywgYXR0cmlidXRlTmFtZSwgbmFtZXNwYWNlUHJlZml4KSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYmxvY2suY29uc3VtZVdoaXRlc3BhY2UoKTsKKwor
ICAgIGlmIChtX2NvbnRleHQuaXNIVE1MRG9jdW1lbnQpCisgICAgICAgIGF0dHJpYnV0ZU5hbWUg
PSBhdHRyaWJ1dGVOYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CisKKyAgICBBdG9taWNT
dHJpbmcgbmFtZXNwYWNlVVJJID0gZGV0ZXJtaW5lTmFtZXNwYWNlKG5hbWVzcGFjZVByZWZpeCk7
CisgICAgaWYgKG5hbWVzcGFjZVVSSS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBRdWFsaWZpZWROYW1lIHF1YWxpZmllZE5hbWUgPSBuYW1lc3BhY2VQcmVmaXguaXNO
dWxsKCkKKyAgICAgICAgPyBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBhdHRyaWJ1dGVOYW1lLCBu
dWxsQXRvbSkKKyAgICAgICAgOiBRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwgYXR0cmli
dXRlTmFtZSwgbmFtZXNwYWNlVVJJKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJT
ZWxlY3Rvcj4gc2VsZWN0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+KG5l
dyBDU1NQYXJzZXJTZWxlY3RvcigpKTsKKworICAgIGlmIChibG9jay5hdEVuZCgpKSB7CisgICAg
ICAgIHNlbGVjdG9yLT5zZXRBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSwgQ1NTU2VsZWN0b3I6OkNh
c2VTZW5zaXRpdmUpOworICAgICAgICBzZWxlY3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OlNl
dCk7CisgICAgICAgIHJldHVybiBzZWxlY3RvcjsKKyAgICB9CisKKyAgICBzZWxlY3Rvci0+c2V0
TWF0Y2goY29uc3VtZUF0dHJpYnV0ZU1hdGNoKGJsb2NrKSk7CisKKyAgICBjb25zdCBDU1NQYXJz
ZXJUb2tlbiYgYXR0cmlidXRlVmFsdWUgPSBibG9jay5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpOworICAgIGlmIChhdHRyaWJ1dGVWYWx1ZS50eXBlKCkgIT0gSWRlbnRUb2tlbiAmJiBhdHRy
aWJ1dGVWYWx1ZS50eXBlKCkgIT0gU3RyaW5nVG9rZW4pCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHNlbGVjdG9yLT5zZXRWYWx1ZShhdHRyaWJ1dGVWYWx1ZS52YWx1ZSgpLnRvQXRvbWlj
U3RyaW5nKCkpOworICAgIHNlbGVjdG9yLT5zZXRBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSwgY29u
c3VtZUF0dHJpYnV0ZUZsYWdzKGJsb2NrKSk7CisKKyAgICBpZiAoIWJsb2NrLmF0RW5kKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBzZWxlY3RvcjsKK30KKworc3RkOjp1
bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZVBz
ZXVkbyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBBU1NFUlQocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBDb2xvblRva2VuKTsKKyAgICByYW5nZS5jb25zdW1lKCk7CisKKyAgICBp
bnQgY29sb25zID0gMTsKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBDb2xvblRva2Vu
KSB7CisgICAgICAgIHJhbmdlLmNvbnN1bWUoKTsKKyAgICAgICAgY29sb25zKys7CisgICAgfQor
CisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIGlm
ICh0b2tlbi50eXBlKCkgIT0gSWRlbnRUb2tlbiAmJiB0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25U
b2tlbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9yOworICAgIFN0cmluZ1ZpZXcgdmFsdWUgPSB0b2tlbi52
YWx1ZSgpOworICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3MpCisgICAgICAgIHNlbGVjdG9yID0gc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVj
dG9yPihDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9DbGFzc1NlbGVjdG9yRnJvbVN0cmlu
Z1ZpZXcodmFsdWUpKTsKKyAgICBlbHNlCisgICAgICAgIHNlbGVjdG9yID0gc3RkOjp1bmlxdWVf
cHRyPENTU1BhcnNlclNlbGVjdG9yPihDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9FbGVt
ZW50U2VsZWN0b3JGcm9tU3RyaW5nVmlldyh2YWx1ZSkpOworICAgIAorICAgIGlmICghc2VsZWN0
b3IgfHwgKHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50ICYm
IG1fZGlzYWxsb3dQc2V1ZG9FbGVtZW50cykpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgaWYgKHRva2VuLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CisgICAgICAgIHJhbmdlLmNvbnN1
bWUoKTsKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9FbGVtZW50VW5rbm93bikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4gc2VsZWN0b3I7CisgICAgfQorCisgICAgQ1NTUGFyc2VyVG9rZW5S
YW5nZSBibG9jayA9IHJhbmdlLmNvbnN1bWVCbG9jaygpOworICAgIGJsb2NrLmNvbnN1bWVXaGl0
ZXNwYWNlKCk7CisgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlw
ZSgpKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NOb3Q6IHsKKyAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBpbm5lclNlbGVjdG9yID0gY29uc3Vt
ZUNvbXBvdW5kU2VsZWN0b3IoYmxvY2spOworICAgICAgICBibG9jay5jb25zdW1lV2hpdGVzcGFj
ZSgpOworICAgICAgICBpZiAoIWlubmVyU2VsZWN0b3IgfHwgIWJsb2NrLmF0RW5kKCkpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxD
U1NQYXJzZXJTZWxlY3Rvcj4+IHNlbGVjdG9yVmVjdG9yOworICAgICAgICBzZWxlY3RvclZlY3Rv
ci5hcHBlbmQoV1RGTW92ZShpbm5lclNlbGVjdG9yKSk7CisgICAgICAgIHNlbGVjdG9yLT5hZG9w
dFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdG9y
OworICAgIH0KKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc050aENoaWxkOgorICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoTGFzdENoaWxkOgorICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoT2ZUeXBlOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzTnRoTGFzdE9mVHlwZTogeworICAgICAgICBzdGQ6OnBhaXI8aW50LCBpbnQ+IGFi
OworICAgICAgICBpZiAoIWNvbnN1bWVBTlBsdXNCKGJsb2NrLCBhYikpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgYmxvY2suY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICAg
ICAgaWYgKCFibG9jay5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHNlbGVjdG9yLT5zZXRBcmd1bWVudChBdG9taWNTdHJpbmc6Om51bWJlcihhYi5maXJzdCAq
IGFiLnNlY29uZCkpOworICAgICAgICByZXR1cm4gc2VsZWN0b3I7CisgICAgfQorICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGFuZzogeworICAgICAgICAvLyBGSVhNRTogQ1NTIFNl
bGVjdG9ycyBMZXZlbCA0IGFsbG93cyA6bGFuZygqLWZvbykKKyAgICAgICAgY29uc3QgQ1NTUGFy
c2VyVG9rZW4mIGlkZW50ID0gYmxvY2suY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAg
ICAgICAgaWYgKGlkZW50LnR5cGUoKSAhPSBJZGVudFRva2VuIHx8ICFibG9jay5hdEVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHNlbGVjdG9yLT5zZXRBcmd1bWVu
dChpZGVudC52YWx1ZSgpLnRvQXRvbWljU3RyaW5nKCkpOworICAgICAgICByZXR1cm4gc2VsZWN0
b3I7CisgICAgfQorICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogU3VwcG9ydCA6aG9zdC1jb250ZXh0
CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnk6CisgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NIb3N0OiB7CisgICAgICAgIERpc2FsbG93UHNldWRvRWxlbWVudHNT
Y29wZSBzY29wZSh0aGlzKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENTU1NlbGVjdG9yTGlz
dD4gc2VsZWN0b3JMaXN0ID0gc3RkOjp1bmlxdWVfcHRyPENTU1NlbGVjdG9yTGlzdD4obmV3IENT
U1NlbGVjdG9yTGlzdCgpKTsKKyAgICAgICAgKnNlbGVjdG9yTGlzdCA9IGNvbnN1bWVDb21wb3Vu
ZFNlbGVjdG9yTGlzdChibG9jayk7CisgICAgICAgIGlmICghc2VsZWN0b3JMaXN0LT5pc1ZhbGlk
KCkgfHwgIWJsb2NrLmF0RW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgc2VsZWN0b3ItPnNldFNlbGVjdG9yTGlzdChXVEZNb3ZlKHNlbGVjdG9yTGlzdCkpOworICAg
ICAgICByZXR1cm4gc2VsZWN0b3I7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpIHsK
KyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50Q3VlOiB7CisgICAgICAgIERpc2Fs
bG93UHNldWRvRWxlbWVudHNTY29wZSBzY29wZSh0aGlzKTsKKyAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPENTU1NlbGVjdG9yTGlzdD4gc2VsZWN0b3JMaXN0ID0gc3RkOjp1bmlxdWVfcHRyPENTU1Nl
bGVjdG9yTGlzdD4obmV3IENTU1NlbGVjdG9yTGlzdCgpKTsKKyAgICAgICAgKnNlbGVjdG9yTGlz
dCA9IGNvbnN1bWVDb21wb3VuZFNlbGVjdG9yTGlzdChibG9jayk7CisgICAgICAgIGlmICghc2Vs
ZWN0b3JMaXN0LT5pc1ZhbGlkKCkgfHwgIWJsb2NrLmF0RW5kKCkpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgc2VsZWN0b3ItPnNldFNlbGVjdG9yTGlzdChXVEZNb3ZlKHNl
bGVjdG9yTGlzdCkpOworICAgICAgICByZXR1cm4gc2VsZWN0b3I7CisgICAgfQorICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRTbG90dGVkOiB7CisgICAgICAgIERpc2FsbG93UHNl
dWRvRWxlbWVudHNTY29wZSBzY29wZSh0aGlzKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q1NTUGFyc2VyU2VsZWN0b3I+IGlubmVyU2VsZWN0b3IgPSBjb25zdW1lQ29tcG91bmRTZWxlY3Rv
cihibG9jayk7CisgICAgICAgIGJsb2NrLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgICAgIGlm
ICghaW5uZXJTZWxlY3RvciB8fCAhYmxvY2suYXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9y
Pj4gc2VsZWN0b3JWZWN0b3I7CisgICAgICAgIHNlbGVjdG9yVmVjdG9yLmFwcGVuZChXVEZNb3Zl
KGlubmVyU2VsZWN0b3IpKTsKKyAgICAgICAgc2VsZWN0b3ItPmFkb3B0U2VsZWN0b3JWZWN0b3Io
c2VsZWN0b3JWZWN0b3IpOworICAgICAgICByZXR1cm4gc2VsZWN0b3I7CisgICAgfQorICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQor
CitDU1NTZWxlY3Rvcjo6UmVsYXRpb24gQ1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVDb21iaW5h
dG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIENTU1NlbGVjdG9yOjpSZWxh
dGlvbiBmYWxsYmFja1Jlc3VsdCA9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcjsKKyAgICB3aGls
ZSAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBXaGl0ZXNwYWNlVG9rZW4pIHsKKyAgICAgICAgcmFu
Z2UuY29uc3VtZSgpOworICAgICAgICBmYWxsYmFja1Jlc3VsdCA9IENTU1NlbGVjdG9yOjpEZXNj
ZW5kYW50OworICAgIH0KKworICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IERlbGltaXRl
clRva2VuKQorICAgICAgICByZXR1cm4gZmFsbGJhY2tSZXN1bHQ7CisKKyAgICBVQ2hhciBkZWxp
bWl0ZXIgPSByYW5nZS5wZWVrKCkuZGVsaW1pdGVyKCk7CisKKyAgICBpZiAoZGVsaW1pdGVyID09
ICcrJyB8fCBkZWxpbWl0ZXIgPT0gJ34nIHx8IGRlbGltaXRlciA9PSAnPicpIHsKKyAgICAgICAg
cmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgaWYgKGRlbGltaXRl
ciA9PSAnKycpCisgICAgICAgICAgICByZXR1cm4gQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50
OworICAgICAgICBpZiAoZGVsaW1pdGVyID09ICd+JykKKyAgICAgICAgICAgIHJldHVybiBDU1NT
ZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDsKKyAgICAgICAgcmV0dXJuIENTU1NlbGVjdG9yOjpD
aGlsZDsKKyAgICB9CisKKyAgICAvLyBNYXRjaCAvZGVlcC8KKyAgICBpZiAoZGVsaW1pdGVyICE9
ICcvJykKKyAgICAgICAgcmV0dXJuIGZhbGxiYWNrUmVzdWx0OworICAgIHJhbmdlLmNvbnN1bWUo
KTsKKyAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgaWRlbnQgPSByYW5nZS5jb25zdW1lKCk7Cisg
ICAgaWYgKGlkZW50LnR5cGUoKSAhPSBJZGVudFRva2VuIHx8ICFlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGlkZW50LnZhbHVlKCksICJkZWVwIikpCisgICAgICAgIG1fZmFpbGVkUGFyc2luZyA9IHRy
dWU7CisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHNsYXNoID0gcmFuZ2UuY29uc3VtZUluY2x1
ZGluZ1doaXRlc3BhY2UoKTsKKyAgICBpZiAoc2xhc2gudHlwZSgpICE9IERlbGltaXRlclRva2Vu
IHx8IHNsYXNoLmRlbGltaXRlcigpICE9ICcvJykKKyAgICAgICAgbV9mYWlsZWRQYXJzaW5nID0g
dHJ1ZTsKKyAgICByZXR1cm4gQ1NTU2VsZWN0b3I6OlNoYWRvd0RlZXA7Cit9CisKK0NTU1NlbGVj
dG9yOjpNYXRjaCBDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZUF0dHJpYnV0ZU1hdGNoKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tl
biA9IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgc3dpdGNoICh0b2tl
bi50eXBlKCkpIHsKKyAgICBjYXNlIEluY2x1ZGVNYXRjaFRva2VuOgorICAgICAgICByZXR1cm4g
Q1NTU2VsZWN0b3I6Okxpc3Q7CisgICAgY2FzZSBEYXNoTWF0Y2hUb2tlbjoKKyAgICAgICAgcmV0
dXJuIENTU1NlbGVjdG9yOjpIeXBoZW47CisgICAgY2FzZSBQcmVmaXhNYXRjaFRva2VuOgorICAg
ICAgICByZXR1cm4gQ1NTU2VsZWN0b3I6OkJlZ2luOworICAgIGNhc2UgU3VmZml4TWF0Y2hUb2tl
bjoKKyAgICAgICAgcmV0dXJuIENTU1NlbGVjdG9yOjpFbmQ7CisgICAgY2FzZSBTdWJzdHJpbmdN
YXRjaFRva2VuOgorICAgICAgICByZXR1cm4gQ1NTU2VsZWN0b3I6OkNvbnRhaW47CisgICAgY2Fz
ZSBEZWxpbWl0ZXJUb2tlbjoKKyAgICAgICAgaWYgKHRva2VuLmRlbGltaXRlcigpID09ICc9JykK
KyAgICAgICAgICAgIHJldHVybiBDU1NTZWxlY3Rvcjo6RXhhY3Q7CisgICAgICAgIEZBTExUSFJP
VUdIOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fZmFpbGVkUGFyc2luZyA9IHRydWU7CisgICAg
ICAgIHJldHVybiBDU1NTZWxlY3Rvcjo6RXhhY3Q7CisgICAgfQorfQorCitDU1NTZWxlY3Rvcjo6
QXR0cmlidXRlTWF0Y2hUeXBlIENTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQXR0cmlidXRlRmxh
Z3MoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgaWYgKHJhbmdlLnBlZWsoKS50
eXBlKCkgIT0gSWRlbnRUb2tlbikKKyAgICAgICAgcmV0dXJuIENTU1NlbGVjdG9yOjpDYXNlU2Vu
c2l0aXZlOworICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBmbGFnID0gcmFuZ2UuY29uc3VtZUlu
Y2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShmbGFn
LnZhbHVlKCksICJpIikpCisgICAgICAgIHJldHVybiBDU1NTZWxlY3Rvcjo6Q2FzZUluc2Vuc2l0
aXZlOworICAgIG1fZmFpbGVkUGFyc2luZyA9IHRydWU7CisgICAgcmV0dXJuIENTU1NlbGVjdG9y
OjpDYXNlU2Vuc2l0aXZlOworfQorCitib29sIENTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQU5Q
bHVzQihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgc3RkOjpwYWlyPGludCwgaW50PiYgcmVz
dWx0KQoreworICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLmNvbnN1bWUo
KTsKKyAgICBpZiAodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuICYmIHRva2VuLm51bWVyaWNW
YWx1ZVR5cGUoKSA9PSBJbnRlZ2VyVmFsdWVUeXBlKSB7CisgICAgICAgIHJlc3VsdCA9IHN0ZDo6
bWFrZV9wYWlyKDAsIHN0YXRpY19jYXN0PGludD4odG9rZW4ubnVtZXJpY1ZhbHVlKCkpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh0b2tlbi50eXBlKCkgPT0gSWRlbnRU
b2tlbikgeworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh0b2tlbi52YWx1ZSgp
LCAib2RkIikpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWFrZV9wYWlyKDIsIDEpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UodG9rZW4udmFsdWUoKSwgImV2ZW4iKSkgeworICAgICAgICAgICAgcmVz
dWx0ID0gc3RkOjptYWtlX3BhaXIoMiwgMCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZSAnbicgd2lsbCBlbmQgdXAgYXMgcGFydCBvZiBh
biBpZGVudCBvciBkaW1lbnNpb24uIEZvciBhIHZhbGlkIDxhbitiPiwKKyAgICAvLyB0aGlzIHdp
bGwgc3RvcmUgYSBzdHJpbmcgb2YgdGhlIGZvcm0gJ24nLCAnbi0nLCBvciAnbi0xMjMnLgorICAg
IFN0cmluZyBuU3RyaW5nOworCisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBEZWxpbWl0ZXJUb2tl
biAmJiB0b2tlbi5kZWxpbWl0ZXIoKSA9PSAnKycgJiYgcmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJ
ZGVudFRva2VuKSB7CisgICAgICAgIHJlc3VsdC5maXJzdCA9IDE7CisgICAgICAgIG5TdHJpbmcg
PSByYW5nZS5jb25zdW1lKCkudmFsdWUoKS50b1N0cmluZygpOworICAgIH0gZWxzZSBpZiAodG9r
ZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuICYmIHRva2VuLm51bWVyaWNWYWx1ZVR5cGUoKSA9
PSBJbnRlZ2VyVmFsdWVUeXBlKSB7CisgICAgICAgIHJlc3VsdC5maXJzdCA9IHRva2VuLm51bWVy
aWNWYWx1ZSgpOworICAgICAgICBuU3RyaW5nID0gdG9rZW4udmFsdWUoKS50b1N0cmluZygpOwor
ICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSgpID09IElkZW50VG9rZW4pIHsKKyAgICAgICAgaWYg
KHRva2VuLnZhbHVlKClbMF0gPT0gJy0nKSB7CisgICAgICAgICAgICByZXN1bHQuZmlyc3QgPSAt
MTsKKyAgICAgICAgICAgIG5TdHJpbmcgPSB0b2tlbi52YWx1ZSgpLnRvU3RyaW5nKCkuc3Vic3Ry
aW5nKDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzdWx0LmZpcnN0ID0gMTsK
KyAgICAgICAgICAgIG5TdHJpbmcgPSB0b2tlbi52YWx1ZSgpLnRvU3RyaW5nKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworCisgICAgaWYgKG5T
dHJpbmcuaXNFbXB0eSgpIHx8ICFpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKG5TdHJpbmdbMF0s
ICduJykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoblN0cmluZy5sZW5ndGgoKSA+
IDEgJiYgblN0cmluZ1sxXSAhPSAnLScpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChuU3RyaW5nLmxlbmd0aCgpID4gMikgeworICAgICAgICBib29sIHZhbGlkOworICAgICAgICBy
ZXN1bHQuc2Vjb25kID0gblN0cmluZy5zdWJzdHJpbmcoMSkudG9JbnRTdHJpY3QoJnZhbGlkKTsK
KyAgICAgICAgcmV0dXJuIHZhbGlkOworICAgIH0KKworICAgIE51bWVyaWNTaWduIHNpZ24gPSBu
U3RyaW5nLmxlbmd0aCgpID09IDEgPyBOb1NpZ24gOiBNaW51c1NpZ247CisgICAgaWYgKHNpZ24g
PT0gTm9TaWduICYmIHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGVsaW1pdGVyVG9rZW4pIHsKKyAg
ICAgICAgY2hhciBkZWxpbWl0ZXJTaWduID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3Bh
Y2UoKS5kZWxpbWl0ZXIoKTsKKyAgICAgICAgaWYgKGRlbGltaXRlclNpZ24gPT0gJysnKQorICAg
ICAgICAgICAgc2lnbiA9IFBsdXNTaWduOworICAgICAgICBlbHNlIGlmIChkZWxpbWl0ZXJTaWdu
ID09ICctJykKKyAgICAgICAgICAgIHNpZ24gPSBNaW51c1NpZ247CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2lnbiA9PSBOb1NpZ24g
JiYgcmFuZ2UucGVlaygpLnR5cGUoKSAhPSBOdW1iZXJUb2tlbikgeworICAgICAgICByZXN1bHQu
c2Vjb25kID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY29uc3QgQ1NT
UGFyc2VyVG9rZW4mIGIgPSByYW5nZS5jb25zdW1lKCk7CisgICAgaWYgKGIudHlwZSgpICE9IE51
bWJlclRva2VuIHx8IGIubnVtZXJpY1ZhbHVlVHlwZSgpICE9IEludGVnZXJWYWx1ZVR5cGUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKGIubnVtZXJpY1NpZ24oKSA9PSBOb1NpZ24p
ID09IChzaWduID09IE5vU2lnbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQu
c2Vjb25kID0gYi5udW1lcmljVmFsdWUoKTsKKyAgICBpZiAoc2lnbiA9PSBNaW51c1NpZ24pCisg
ICAgICAgIHJlc3VsdC5zZWNvbmQgPSAtcmVzdWx0LnNlY29uZDsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworY29uc3QgQXRvbWljU3RyaW5nJiBDU1NTZWxlY3RvclBhcnNlcjo6ZGVmYXVsdE5hbWVz
cGFjZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3N0eWxlU2hlZXQpCisgICAgICAgIHJldHVybiBz
dGFyQXRvbTsKKyAgICByZXR1cm4gbV9zdHlsZVNoZWV0LT5kZWZhdWx0TmFtZXNwYWNlKCk7Cit9
CisKK2NvbnN0IEF0b21pY1N0cmluZyYgQ1NTU2VsZWN0b3JQYXJzZXI6OmRldGVybWluZU5hbWVz
cGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKK3sKKyAgICBpZiAocHJlZml4LmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gZGVmYXVsdE5hbWVzcGFjZSgpOworICAgIGlmIChwcmVmaXgu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZW1wdHlBdG9tOyAvLyBObyBuYW1lc3BhY2UuIElm
IGFuIGVsZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5hbWVzcGFjZSwgd2Ugd29uJ3QgbWF0Y2ggaXQu
CisgICAgaWYgKHByZWZpeCA9PSBzdGFyQXRvbSkKKyAgICAgICAgcmV0dXJuIHN0YXJBdG9tOyAv
LyBXZSdsbCBtYXRjaCBhbnkgbmFtZXNwYWNlLgorICAgIGlmICghbV9zdHlsZVNoZWV0KQorICAg
ICAgICByZXR1cm4gbnVsbEF0b207IC8vIENhbm5vdCByZXNvbHZlIHByZWZpeCB0byBuYW1lc3Bh
Y2Ugd2l0aG91dCBhIHN0eWxlc2hlZXQsIHN5bnRheCBlcnJvci4KKyAgICByZXR1cm4gbV9zdHls
ZVNoZWV0LT5uYW1lc3BhY2VVUklGcm9tUHJlZml4KHByZWZpeCk7Cit9CisKK3ZvaWQgQ1NTU2Vs
ZWN0b3JQYXJzZXI6OnByZXBlbmRUeXBlU2VsZWN0b3JJZk5lZWRlZChjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWVzcGFjZVByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50TmFtZSwgQ1NT
UGFyc2VyU2VsZWN0b3IqIGNvbXBvdW5kU2VsZWN0b3IpCit7CisgICAgaWYgKGVsZW1lbnROYW1l
LmlzTnVsbCgpICYmIGRlZmF1bHROYW1lc3BhY2UoKSA9PSBzdGFyQXRvbSAmJiAhY29tcG91bmRT
ZWxlY3Rvci0+bmVlZHNJbXBsaWNpdFNoYWRvd0NvbWJpbmF0b3JGb3JNYXRjaGluZygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBdG9taWNTdHJpbmcgZGV0ZXJtaW5lZEVsZW1lbnROYW1lID0g
ZWxlbWVudE5hbWUuaXNOdWxsKCkgPyBzdGFyQXRvbSA6IGVsZW1lbnROYW1lOworICAgIEF0b21p
Y1N0cmluZyBuYW1lc3BhY2VVUkkgPSBkZXRlcm1pbmVOYW1lc3BhY2UobmFtZXNwYWNlUHJlZml4
KTsKKyAgICBpZiAobmFtZXNwYWNlVVJJLmlzTnVsbCgpKSB7CisgICAgICAgIG1fZmFpbGVkUGFy
c2luZyA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQXRvbWljU3RyaW5nIGRl
dGVybWluZWRQcmVmaXggPSBuYW1lc3BhY2VQcmVmaXg7CisgICAgaWYgKG5hbWVzcGFjZVVSSSA9
PSBkZWZhdWx0TmFtZXNwYWNlKCkpCisgICAgICAgIGRldGVybWluZWRQcmVmaXggPSBudWxsQXRv
bTsKKyAgICBRdWFsaWZpZWROYW1lIHRhZyA9IFF1YWxpZmllZE5hbWUoZGV0ZXJtaW5lZFByZWZp
eCwgZGV0ZXJtaW5lZEVsZW1lbnROYW1lLCBuYW1lc3BhY2VVUkkpOworCisgICAgLy8gKjpob3N0
Lyo6aG9zdC1jb250ZXh0IG5ldmVyIG1hdGNoZXMsIHNvIHdlIGNhbid0IGRpc2NhcmQgdGhlICos
CisgICAgLy8gb3RoZXJ3aXNlIHdlIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAq
Omhvc3QgYW5kIGp1c3QgOmhvc3QuCisgICAgLy8KKyAgICAvLyBBbHNvLCBzZWxlY3RvcnMgd2hl
cmUgd2UgdXNlIGEgU2hhZG93UHNldWRvIGNvbWJpbmF0b3IgYmV0d2VlbiB0aGUKKyAgICAvLyBl
bGVtZW50IGFuZCB0aGUgcHNldWRvIGVsZW1lbnQgZm9yIG1hdGNoaW5nIChjdXN0b20gcHNldWRv
IGVsZW1lbnRzLAorICAgIC8vIDo6Y3VlLCA6OnNoYWRvdyksIHdlIG5lZWQgYSB1bml2ZXJzYWwg
c2VsZWN0b3IgdG8gc2V0IHRoZSBjb21iaW5hdG9yCisgICAgLy8gKHJlbGF0aW9uKSBvbiBpbiB0
aGUgY2FzZXMgd2hlcmUgdGhlcmUgYXJlIG5vIHNpbXBsZSBzZWxlY3RvcnMgcHJlY2VkaW5nCisg
ICAgLy8gdGhlIHBzZXVkbyBlbGVtZW50LgorICAgIGJvb2wgZXhwbGljaXRGb3JIb3N0ID0gY29t
cG91bmRTZWxlY3Rvci0+aXNIb3N0UHNldWRvU2VsZWN0b3IoKSAmJiAhZWxlbWVudE5hbWUuaXNO
dWxsKCk7CisgICAgaWYgKHRhZyAhPSBhbnlRTmFtZSgpIHx8IGV4cGxpY2l0Rm9ySG9zdCB8fCBj
b21wb3VuZFNlbGVjdG9yLT5uZWVkc0ltcGxpY2l0U2hhZG93Q29tYmluYXRvckZvck1hdGNoaW5n
KCkpCisgICAgICAgIGNvbXBvdW5kU2VsZWN0b3ItPnByZXBlbmRUYWdTZWxlY3Rvcih0YWcsIGRl
dGVybWluZWRQcmVmaXggPT0gbnVsbEF0b20gJiYgZGV0ZXJtaW5lZEVsZW1lbnROYW1lID09IHN0
YXJBdG9tICYmICFleHBsaWNpdEZvckhvc3QpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFy
c2VyU2VsZWN0b3I+IENTU1NlbGVjdG9yUGFyc2VyOjphZGRTaW1wbGVTZWxlY3RvclRvQ29tcG91
bmQoc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBjb21wb3VuZFNlbGVjdG9yLCBz
dGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNpbXBsZVNlbGVjdG9yKQoreworICAg
IGNvbXBvdW5kU2VsZWN0b3ItPmFwcGVuZFRhZ0hpc3RvcnkoQ1NTU2VsZWN0b3I6OlN1YlNlbGVj
dG9yLCBXVEZNb3ZlKHNpbXBsZVNlbGVjdG9yKSk7CisgICAgcmV0dXJuIGNvbXBvdW5kU2VsZWN0
b3I7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gQ1NTU2VsZWN0b3JQ
YXJzZXI6OnNwbGl0Q29tcG91bmRBdEltcGxpY2l0U2hhZG93Q3Jvc3NpbmdDb21iaW5hdG9yKHN0
ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gY29tcG91bmRTZWxlY3RvcikKK3sKKyAg
ICAvLyBUaGUgdGFnSGlzdG9yeSBpcyBhIGxpbmtlZCBsaXN0IHRoYXQgc3RvcmVzIGNvbWJpbmF0
b3Igc2VwYXJhdGVkIGNvbXBvdW5kIHNlbGVjdG9ycworICAgIC8vIGZyb20gcmlnaHQtdG8tbGVm
dC4gWWV0LCB3aXRoaW4gYSBzaW5nbGUgY29tcG91bmQgc2VsZWN0b3IsIHN0b3JlcyB0aGUgc2lt
cGxlIHNlbGVjdG9ycworICAgIC8vIGZyb20gbGVmdC10by1yaWdodC4KKyAgICAvLworICAgIC8v
ICIuYS5iID4gZGl2I2lkIiBpcyBzdG9yZWQgaW4gYSB0YWdIaXN0b3J5IGFzIFtkaXYsICNpZCwg
LmEsIC5iXSwgZWFjaCBlbGVtZW50IGluIHRoZQorICAgIC8vIGxpc3Qgc3RvcmVkIHdpdGggYW4g
YXNzb2NpYXRlZCByZWxhdGlvbiAoY29tYmluYXRvciBvciBTdWJTZWxlY3RvcikuCisgICAgLy8K
KyAgICAvLyA6OmN1ZSwgOjpzaGFkb3csIGFuZCBjdXN0b20gcHNldWRvIGVsZW1lbnRzIGhhdmUg
YW4gaW1wbGljaXQgU2hhZG93UHNldWRvIGNvbWJpbmF0b3IKKyAgICAvLyB0byB0aGVpciBsZWZ0
LCB3aGljaCByZWFsbHkgbWFrZXMgZm9yIGEgbmV3IGNvbXBvdW5kIHNlbGVjdG9yLCB5ZXQgaXQn
cyBjb25zdW1lZCBieQorICAgIC8vIHRoZSBzZWxlY3RvciBwYXJzZXIgYXMgYSBzaW5nbGUgY29t
cG91bmQgc2VsZWN0b3IuCisgICAgLy8KKyAgICAvLyBFeGFtcGxlOiBpbnB1dCN4Ojotd2Via2l0
LWNsZWFyLWJ1dHRvbiAtPiBbIDo6LXdlYmtpdC1jbGVhci1idXR0b24sIGlucHV0LCAjeCBdCisg
ICAgLy8KKyAgICAvLyBMaWtld2lzZSwgOjpzbG90dGVkKCkgcHNldWRvIGVsZW1lbnQgaGFzIGFu
IGltcGxpY2l0IFNoYWRvd1Nsb3QgY29tYmluYXRvciB0byBpdHMgbGVmdAorICAgIC8vIGZvciBm
aW5kaW5nIG1hdGNoaW5nIHNsb3QgZWxlbWVudCBpbiBvdGhlciBUcmVlU2NvcGUuCisgICAgLy8K
KyAgICAvLyBFeGFtcGxlOiBzbG90W25hbWU9Zm9vXTo6c2xvdHRlZChkaXYpIC0+IFsgOjpzbG90
dGVkKGRpdiksIHNsb3QsIFtuYW1lPWZvb10gXQorICAgIENTU1BhcnNlclNlbGVjdG9yKiBzcGxp
dEFmdGVyID0gY29tcG91bmRTZWxlY3Rvci5nZXQoKTsKKworICAgIHdoaWxlIChzcGxpdEFmdGVy
LT50YWdIaXN0b3J5KCkgJiYgIXNwbGl0QWZ0ZXItPnRhZ0hpc3RvcnkoKS0+bmVlZHNJbXBsaWNp
dFNoYWRvd0NvbWJpbmF0b3JGb3JNYXRjaGluZygpKQorICAgICAgICBzcGxpdEFmdGVyID0gc3Bs
aXRBZnRlci0+dGFnSGlzdG9yeSgpOworCisgICAgaWYgKCFzcGxpdEFmdGVyIHx8ICFzcGxpdEFm
dGVyLT50YWdIaXN0b3J5KCkpCisgICAgICAgIHJldHVybiBjb21wb3VuZFNlbGVjdG9yOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzZWNvbmRDb21wb3VuZCA9IHNw
bGl0QWZ0ZXItPnJlbGVhc2VUYWdIaXN0b3J5KCk7CisgICAgc2Vjb25kQ29tcG91bmQtPmFwcGVu
ZFRhZ0hpc3Rvcnkoc2Vjb25kQ29tcG91bmQtPnBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0VsZW1lbnRTbG90dGVkID8gQ1NTU2VsZWN0b3I6OlNoYWRvd1Nsb3QgOiBD
U1NTZWxlY3Rvcjo6U2hhZG93UHNldWRvLCBXVEZNb3ZlKGNvbXBvdW5kU2VsZWN0b3IpKTsKKyAg
ICByZXR1cm4gc2Vjb25kQ29tcG91bmQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIGJsaW5rCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOCBAQAorLy8gQ29weXJpZ2h0IDIwMTQgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorLy8gZGlzdHJpYnV0aW9uLgorLy8gICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisv
LyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNTU1Bh
cnNlclZhbHVlcy5oIiAvLyBGSVhNRS1ORVdQQVJTRVIgQ2hhbmdlIHdoZW4gQ1NTUGFyc2VyU2Vs
ZWN0b3IgbW92ZXMgaW50byBpdHMgb3duIGZpbGUuCisjaW5jbHVkZSAiQ1NTUGFyc2VyVG9rZW5S
YW5nZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1
Y3QgQ1NTUGFyc2VyQ29udGV4dDsKK2NsYXNzIENTU1NlbGVjdG9yTGlzdDsKK2NsYXNzIFN0eWxl
U2hlZXRDb250ZW50czsKKworLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBidWlsZGluZyBD
U1NTZWxlY3RvcnMgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZworLy8gdGhlIGludGVybWVkaWF0
ZSBDU1NQYXJzZXJTZWxlY3Rvci4KK2NsYXNzIENTU1NlbGVjdG9yUGFyc2VyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgQ1NTU2VsZWN0b3JMaXN0IHBhcnNlU2VsZWN0b3IoQ1NTUGFyc2VyVG9rZW5S
YW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIFN0eWxlU2hlZXRDb250ZW50cyopOworCisg
ICAgc3RhdGljIGJvb2wgY29uc3VtZUFOUGx1c0IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIHN0ZDo6
cGFpcjxpbnQsIGludD4mKTsKKworcHJpdmF0ZToKKyAgICBDU1NTZWxlY3RvclBhcnNlcihjb25z
dCBDU1NQYXJzZXJDb250ZXh0JiwgU3R5bGVTaGVldENvbnRlbnRzKik7CisKKyAgICAvLyBUaGVz
ZSB3aWxsIGFsbCBjb25zdW1lIHRyYWlsaW5nIGNvbW1lbnRzIGlmIHN1Y2Nlc3NmdWwKKworICAg
IENTU1NlbGVjdG9yTGlzdCBjb25zdW1lQ29tcGxleFNlbGVjdG9yTGlzdChDU1NQYXJzZXJUb2tl
blJhbmdlJik7CisgICAgQ1NTU2VsZWN0b3JMaXN0IGNvbnN1bWVDb21wb3VuZFNlbGVjdG9yTGlz
dChDU1NQYXJzZXJUb2tlblJhbmdlJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2Vy
U2VsZWN0b3I+IGNvbnN1bWVDb21wbGV4U2VsZWN0b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gY29uc3VtZUNvbXBvdW5kU2Vs
ZWN0b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworICAgIC8vIFRoaXMgZG9lc24ndCBpbmNsdWRl
IGVsZW1lbnQgbmFtZXMsIHNpbmNlIHRoZXkncmUgaGFuZGxlZCBzcGVjaWFsbHkKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IGNvbnN1bWVTaW1wbGVTZWxlY3RvcihDU1NQ
YXJzZXJUb2tlblJhbmdlJik7CisKKyAgICBib29sIGNvbnN1bWVOYW1lKENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBBdG9taWNTdHJpbmcmIG5hbWUsIEF0b21pY1N0cmluZyYgbmFtZXNwYWNlUHJlZml4
KTsKKworICAgIC8vIFRoZXNlIHdpbGwgcmV0dXJuIG51bGxwdHIgd2hlbiB0aGUgc2VsZWN0b3Ig
aXMgaW52YWxpZAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gY29uc3Vt
ZUlkKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2Vy
U2VsZWN0b3I+IGNvbnN1bWVDbGFzcyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CisgICAgc3RkOjp1
bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBjb25zdW1lUHNldWRvKENTU1BhcnNlclRva2Vu
UmFuZ2UmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IGNvbnN1bWVB
dHRyaWJ1dGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworCisgICAgQ1NTU2VsZWN0b3I6OlJlbGF0
aW9uIGNvbnN1bWVDb21iaW5hdG9yKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKKyAgICBDU1NTZWxl
Y3Rvcjo6TWF0Y2ggY29uc3VtZUF0dHJpYnV0ZU1hdGNoKENTU1BhcnNlclRva2VuUmFuZ2UmKTsK
KyAgICBDU1NTZWxlY3Rvcjo6QXR0cmlidXRlTWF0Y2hUeXBlIGNvbnN1bWVBdHRyaWJ1dGVGbGFn
cyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGRlZmF1
bHROYW1lc3BhY2UoKSBjb25zdDsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGRldGVybWluZU5h
bWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCk7CisgICAgdm9pZCBwcmVwZW5kVHlw
ZVNlbGVjdG9ySWZOZWVkZWQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VQcmVmaXgsIGNv
bnN0IEF0b21pY1N0cmluZyYgZWxlbWVudE5hbWUsIENTU1BhcnNlclNlbGVjdG9yKik7CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gYWRkU2ltcGxlU2VsZWN0
b3JUb0NvbXBvdW5kKHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gY29tcG91bmRT
ZWxlY3Rvciwgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzaW1wbGVTZWxlY3Rv
cik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc3BsaXRD
b21wb3VuZEF0SW1wbGljaXRTaGFkb3dDcm9zc2luZ0NvbWJpbmF0b3Ioc3RkOjp1bmlxdWVfcHRy
PENTU1BhcnNlclNlbGVjdG9yPiBjb21wb3VuZFNlbGVjdG9yKTsKKworICAgIGNvbnN0IENTU1Bh
cnNlckNvbnRleHQmIG1fY29udGV4dDsKKyAgICBSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiBt
X3N0eWxlU2hlZXQ7IC8vIEZJWE1FOiBTaG91bGQgYmUgY29uc3QKKworICAgIGJvb2wgbV9mYWls
ZWRQYXJzaW5nID0gZmFsc2U7CisgICAgYm9vbCBtX2Rpc2FsbG93UHNldWRvRWxlbWVudHMgPSBm
YWxzZTsKKworICAgIGNsYXNzIERpc2FsbG93UHNldWRvRWxlbWVudHNTY29wZSB7CisgICAgICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKERpc2FsbG93UHNldWRvRWxlbWVudHNTY29wZSk7CisgICAg
cHVibGljOgorICAgICAgICBEaXNhbGxvd1BzZXVkb0VsZW1lbnRzU2NvcGUoQ1NTU2VsZWN0b3JQ
YXJzZXIqIHBhcnNlcikKKyAgICAgICAgICAgIDogbV9wYXJzZXIocGFyc2VyKSwgbV93YXNEaXNh
bGxvd2VkKG1fcGFyc2VyLT5tX2Rpc2FsbG93UHNldWRvRWxlbWVudHMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fcGFyc2VyLT5tX2Rpc2FsbG93UHNldWRvRWxlbWVudHMgPSB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgfkRpc2FsbG93UHNldWRvRWxlbWVudHNTY29wZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fcGFyc2VyLT5tX2Rpc2FsbG93UHNldWRvRWxlbWVudHMgPSBtX3dh
c0Rpc2FsbG93ZWQ7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIENTU1NlbGVj
dG9yUGFyc2VyKiBtX3BhcnNlcjsKKyAgICAgICAgYm9vbCBtX3dhc0Rpc2FsbG93ZWQ7CisgICAg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAkocmV2aXNpb24gMjA1NDk5KQorKysgU291cmNl
L1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MTEsNiArNDExLDkgQEAgc3RhdGljIGlubGluZSBGcmFnbWVudFJlbGF0aW9uIGZyYWdtZW50Ugog
ICAgICAgICByZXR1cm4gRnJhZ21lbnRSZWxhdGlvbjo6SW5kaXJlY3RBZGphY2VudDsKICAgICBj
YXNlIENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcjoKICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFk
b3dEZXNjZW5kYW50OgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd1BzZXVkbzoKKyAgICBj
YXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZWVwOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRv
d1Nsb3Q6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMxLDcgKzMzMSw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6cmVi
dWlsZFByZXNlbnRhdGlvbkEKICAgICAgICAgc3R5bGUgPSBjYWNoZUl0ZXJhdG9yLT52YWx1ZS0+
dmFsdWU7CiAgICAgICAgIHByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlQ2xlYW5lcigpLmRpZEhp
dFByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R5
bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoaXNTVkdFbGVtZW50KCkgPyBTVkdB
dHRyaWJ1dGVNb2RlIDogQ1NTUXVpcmtzTW9kZSk7CisgICAgICAgIHN0eWxlID0gTXV0YWJsZVN0
eWxlUHJvcGVydGllczo6Y3JlYXRlKGlzU1ZHRWxlbWVudCgpID8gU1ZHQXR0cmlidXRlTW9kZSA6
IEhUTUxRdWlya3NNb2RlKTsKICAgICAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0
ZSA6IGF0dHJpYnV0ZXNJdGVyYXRvcigpKQogICAgICAgICAgICAgY29sbGVjdFN0eWxlRm9yUHJl
c2VudGF0aW9uQXR0cmlidXRlKGF0dHJpYnV0ZS5uYW1lKCksIGF0dHJpYnV0ZS52YWx1ZSgpLCBz
dGF0aWNfY2FzdDxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJj4oKnN0eWxlKSk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIw
NTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKIAog
aW5saW5lIFNWR0ZvbnRGYWNlRWxlbWVudDo6U1ZHRm9udEZhY2VFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bWVudCkKICAgICA6IFNWR0VsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpCi0gICAgLCBtX2ZvbnRGYWNlUnVsZShTdHlsZVJ1bGVGb250RmFj
ZTo6Y3JlYXRlKE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZShDU1NTdHJpY3RNb2RlKSkp
CisgICAgLCBtX2ZvbnRGYWNlUnVsZShTdHlsZVJ1bGVGb250RmFjZTo6Y3JlYXRlKE11dGFibGVT
dHlsZVByb3BlcnRpZXM6OmNyZWF0ZShIVE1MU3RhbmRhcmRNb2RlKSkpCiAgICAgLCBtX2ZvbnRF
bGVtZW50KG51bGxwdHIpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoZm9udF9mYWNlVGFnKSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288306</attachid>
            <date>2016-09-08 12:33:27 -0700</date>
            <delta_ts>2016-09-08 13:24:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>101562</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBAQAorMjAxNi0wOS0wOCAgRGF2ZSBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBbQ1NTIFBhcnNlcl0gQWRkIHN1cHBv
cnQgZm9yIG5ldyBDU1Mgc2VsZWN0b3IgcGFyc2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNzQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6aXNWYWxpZFNlbGVjdG9yKToKKyAgICAgICAgKiBjc3MvQ1NTRGVmYXVsdFN0
eWxlU2hlZXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVUFTaGVldCk6CisgICAgICAg
ICogY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNl
U2V0OjptYXRjaGluZ0ZhY2VzKToKKyAgICAgICAgKiBjc3MvQ1NTR3JhbW1hci55LmluOgorICAg
ICAgICAqIGNzcy9DU1NTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rv
cjo6c2VsZWN0b3JUZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuaDoKKyAgICAgICAg
KiBjc3MvRE9NQ1NTTmFtZXNwYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNTU05hbWVz
cGFjZTo6c3VwcG9ydHMpOgorICAgICAgICAqIGNzcy9Gb250RmFjZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250RmFjZTo6cGFyc2VTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZh
Y2U6OnNldFZhcmlhbnQpOgorICAgICAgICAqIGNzcy9NZWRpYUxpc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFRdWVyeVNldDo6aW50ZXJuYWxQYXJzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVF1ZXJ5U2V0OjpwYXJzZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkp
OgorICAgICAgICAqIGNzcy9TZWxlY3RvckZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckZpbHRlcjo6Y29sbGVjdElkZW50aWZpZXJIYXNoZXMpOgorICAgICAgICAqIGNzcy9T
ZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAuaW46CisgICAgICAg
ICogY3NzL1NlbGVjdG9yUHNldWRvVHlwZU1hcC5oOgorICAgICAgICAqIGNzcy9Tb3VyY2VTaXpl
TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNpemVzQXR0cmlidXRlKToKKyAgICAg
ICAgKiBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11dGFibGVT
dHlsZVByb3BlcnRpZXM6Ok11dGFibGVTdHlsZVByb3BlcnRpZXMpOgorICAgICAgICAqIGNzcy9T
dHlsZVByb3BlcnRpZXMuaDoKKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlSW1wb3J0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6c2V0Q1NTU3R5bGVTaGVldCk6CisgICAg
ICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVNoZWV0Q29udGVudHM6OlN0eWxlU2hlZXRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVNoZWV0Q29udGVudHM6OnBhcnNlckFkZE5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVNoZWV0Q29udGVudHM6Om5hbWVzcGFjZVVSSUZyb21QcmVmaXgpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpkZXRlcm1pbmVOYW1lc3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuaDoKKyAgICAgICAgKiBjc3MvV2Vi
S2l0Q1NTTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6c2V0
TWF0cml4VmFsdWUpOgorICAgICAgICAqIGNzcy9tYWtlU2VsZWN0b3JQc2V1ZG9DbGFzc0FuZENv
bXBhdGliaWxpdHlFbGVtZW50TWFwLnB5OgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmljdENTU1BhcnNlckNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpzaG91bGRBY2NlcHRVbml0TGVzc1ZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZUNvbHVtbldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb2x1bW5D
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRm9udFdlaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3JQYXJhbWV0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VIU0xQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZUJvcmRlckltYWdlU2xpY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpwYXJzZUJvcmRlckltYWdlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBh
cnNlRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VMaW5lYXJHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBh
cnNlVHJhbnNmb3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUJ1
aWx0aW5GaWx0ZXJBcmd1bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRl
cm1pbmVOYW1lSW5OYW1lc3BhY2UpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmluU3RyaWN0TW9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OmluUXVpcmtzTW9kZSk6CisgICAgICAgICogY3NzL3BhcnNlci9D
U1NQYXJzZXJNb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjppc1F1aXJrc01vZGVCZWhhdmlvcik6
CisgICAgICAgIChXZWJDb3JlOjppc1VBU2hlZXRCZWhhdmlvcik6CisgICAgICAgIChXZWJDb3Jl
Ojppc1VuaXRMZXNzTGVuZ3RoUGFyc2luZ0VuYWJsZWRGb3JNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OmlzQ1NTVmlld3BvcnRQYXJzaW5nRW5hYmxlZEZvck1vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6c3RyaWN0VG9DU1NQYXJzZXJNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3RyaWN0UGFy
c2VyTW9kZSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyU2VsZWN0b3I6OnBhcnNlUHNldWRvRWxlbWVudFNlbGVj
dG9yRnJvbVN0cmluZ1ZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyU2VsZWN0b3I6
OnBhcnNlUHNldWRvQ2xhc3NTZWxlY3RvckZyb21TdHJpbmdWaWV3KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlclNlbGVjdG9yOjpzZXRTZWxlY3Rvckxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyU2VsZWN0b3I6OmFwcGVuZFRhZ0hpc3RvcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyU2VsZWN0b3I6OnJlbGVhc2VUYWdIaXN0b3J5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlclNlbGVjdG9yOjppc0hvc3RQc2V1ZG9TZWxlY3Rvcik6CisgICAgICAgICog
Y3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
clNlbGVjdG9yOjptYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJTZWxlY3Rvcjo6
cHNldWRvRWxlbWVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyU2VsZWN0b3I6
OnNlbGVjdG9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJTZWxlY3Rvcjo6bmVl
ZHNJbXBsaWNpdFNoYWRvd0NvbWJpbmF0b3JGb3JNYXRjaGluZyk6CisgICAgICAgICogY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXI6OmluUXVpcmtzTW9kZSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NTZWxlY3RvclBh
cnNlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3JQYXJzZXI6OnBh
cnNlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3JQYXJzZXI6OkNTU1Nl
bGVjdG9yUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yUGFyc2VyOjpjb25z
dW1lQ29tcGxleFNlbGVjdG9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3RvclBh
cnNlcjo6Y29uc3VtZUNvbXBvdW5kU2VsZWN0b3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQ29tcGxleFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQ29tcG91bmRTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZVNpbXBsZVNlbGVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZUlkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVQc2V1ZG8pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVDb21iaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQXR0cmlidXRlTWF0Y2gpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVBdHRyaWJ1dGVGbGFncyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZUFOUGx1c0IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU2VsZWN0b3JQYXJzZXI6OmRlZmF1bHROYW1lc3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU2VsZWN0b3JQYXJzZXI6OmRldGVybWluZU5hbWVzcGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6cHJlcGVuZFR5cGVTZWxlY3RvcklmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yUGFyc2VyOjphZGRTaW1wbGVTZWxlY3RvclRv
Q29tcG91bmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3JQYXJzZXI6OnNwbGl0Q29t
cG91bmRBdEltcGxpY2l0U2hhZG93Q3Jvc3NpbmdDb21iaW5hdG9yKToKKyAgICAgICAgKiBjc3Mv
cGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3JQYXJzZXI6OkRpc2FsbG93UHNldWRvRWxlbWVudHNTY29wZTo6RGlzYWxsb3dQc2V1
ZG9FbGVtZW50c1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yUGFyc2VyOjpE
aXNhbGxvd1BzZXVkb0VsZW1lbnRzU2NvcGU6On5EaXNhbGxvd1BzZXVkb0VsZW1lbnRzU2NvcGUp
OgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OmZyYWdtZW50UmVsYXRpb25Gb3JTZWxlY3RvclJlbGF0aW9u
KToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZWRFbGVtZW50OjpyZWJ1aWxkUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUpOgorICAgICAg
ICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9u
dEZhY2VFbGVtZW50OjpTVkdGb250RmFjZUVsZW1lbnQpOgorCiAyMDE2LTA5LTA4ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBKU01hcC9KU1NldCBvdmVy
IHRvIEF1eGlsaWFyeSBNYXJrZWRTcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDIwNTU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xMzU5LDYgKzEzNTksNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL3Bh
cnNlci9DU1NQYXJzZXJWYWx1ZXMuY3BwCiAgICAgY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ci5jcHAKICAgICBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKKyAgICBj
c3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmNwcAogICAgIGNzcy9wYXJzZXIvQ1NTVG9rZW5p
emVyLmNwcAogICAgIGNzcy9wYXJzZXIvQ1NTVG9rZW5pemVySW5wdXRTdHJlYW0uY3BwCiAgICAg
Y3NzL3BhcnNlci9NZWRpYVF1ZXJ5QmxvY2tXYXRjaGVyLmNwcApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA1
NTUwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0zMzc0LDYgKzMzNzQsOCBAQAogCQk5NERFNUM3RTFENzhDQjJF
MDAxNjRGMkEgLyogQ1NTUGFyc2VySWRpb21zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk0REU1QzdEMUQ3OENCMjUwMDE2NEYyQSAvKiBDU1NQYXJz
ZXJJZGlvbXMuY3BwICovOyB9OwogCQk5NERFNUM4MTFEN0YzQTE0MDAxNjRGMkEgLyogQ1NTQXRS
dWxlSUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTRERTVDN0YxRDdGMzlEMDAwMTY0RjJBIC8qIENTU0F0UnVsZUlELmNwcCAqLzsgfTsKIAkJOTRE
RTVDODIxRDdGM0ExNDAwMTY0RjJBIC8qIENTU0F0UnVsZUlELmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NERFNUM4MDFEN0YzOUQwMDAxNjRGMkEgLyog
Q1NTQXRSdWxlSUQuaCAqLzsgfTsKKwkJOTRERTVDOEQxRDgwODAyNzAwMTY0RjJBIC8qIENTU1Nl
bGVjdG9yUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk0REU1QzhCMUQ4MDgwMTUwMDE2NEYyQSAvKiBDU1NTZWxlY3RvclBhcnNlci5jcHAg
Ki87IH07CisJCTk0REU1QzhFMUQ4MDgwMjcwMDE2NEYyQSAvKiBDU1NTZWxlY3RvclBhcnNlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTRERTVDOEMx
RDgwODAxNTAwMTY0RjJBIC8qIENTU1NlbGVjdG9yUGFyc2VyLmggKi87IH07CiAJCTk2QUJBNDIz
MTRCQ0I4MEUwMEQ1NjIwNCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NkFCQTQyMjE0QkNC
ODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwICovOyB9Owog
CQk5NzAzRTFCRjE1REM0RTM3MDAxRjI0QzggLyogSlNWb2lkQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdFOUVDOEIxNURDNDkyRjAw
NEYyRTcxIC8qIEpTVm9pZENhbGxiYWNrLmNwcCAqLzsgfTsKIAkJOTcwNTk5NzcxMDdEOTc1MjAw
QTUwQTdDIC8qIFBvbGljeUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MDU5OTczMTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxs
YmFjay5jcHAgKi87IH07CkBAIC0xMDUyMCw2ICsxMDUyMiw4IEBACiAJCTk0REU1QzdEMUQ3OENC
MjUwMDE2NEYyQSAvKiBDU1NQYXJzZXJJZGlvbXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQ1NTUGFyc2VySWRpb21zLmNwcDsgcGF0aCA9IHBhcnNlci9DU1NQYXJz
ZXJJZGlvbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NERFNUM3RjFEN0Yz
OUQwMDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQ1NTQXRSdWxlSUQuY3BwOyBwYXRoID0gcGFyc2VyL0NTU0F0UnVsZUlELmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTRERTVDODAxRDdGMzlEMDAwMTY0RjJB
IC8qIENTU0F0UnVsZUlELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENTU0F0
UnVsZUlELmg7IHBhdGggPSBwYXJzZXIvQ1NTQXRSdWxlSUQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTRERTVDOEIxRDgwODAxNTAwMTY0RjJBIC8qIENTU1NlbGVjdG9yUGFyc2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTU1NlbGVjdG9yUGFy
c2VyLmNwcDsgcGF0aCA9IHBhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk0REU1QzhDMUQ4MDgwMTUwMDE2NEYyQSAvKiBDU1NTZWxlY3Rv
clBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDU1NTZWxlY3RvclBh
cnNlci5oOyBwYXRoID0gcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTk1MEM0QzAyQkVEODkzNkY4MThFMkY5OSAvKiBKU1NWR0dyYXBoaWNz
RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdHcmFwaGlj
c0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTZBQkE0MjIxNEJDQjgw
RTAwRDU2MjA0IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcwNTk5NzMxMDdEOTc1MjAwQTUw
QTdDIC8qIFBvbGljeUNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBvbGljeUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE4MTc0LDYgKzE4MTc4LDggQEAKIAkJCQk5NDZEMzc0MjFENkNGNjMyMDA3NzA4NEYgLyogQ1NT
UHJvcGVydHlQYXJzZXIuaCAqLywKIAkJCQk5NDlDNzcwMjFENkUzOTM1MDBDMERFNEYgLyogQ1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcCAqLywKIAkJCQk5NDlDNzcwMzFENkUzOTM1MDBDMERF
NEYgLyogQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmggKi8sCisJCQkJOTRERTVDOEIxRDgwODAx
NTAwMTY0RjJBIC8qIENTU1NlbGVjdG9yUGFyc2VyLmNwcCAqLywKKwkJCQk5NERFNUM4QzFEODA4
MDE1MDAxNjRGMkEgLyogQ1NTU2VsZWN0b3JQYXJzZXIuaCAqLywKIAkJCQk5NDZEMzczNDFENkNE
Rjk4MDA3NzA4NEYgLyogQ1NTVG9rZW5pemVyLmNwcCAqLywKIAkJCQk5NDZEMzczNzFENkNERjk4
MDA3NzA4NEYgLyogQ1NTVG9rZW5pemVyLmggKi8sCiAJCQkJOTQ2RDM3MzUxRDZDREY5ODAwNzcw
ODRGIC8qIENTU1Rva2VuaXplcklucHV0U3RyZWFtLmNwcCAqLywKQEAgLTI2NjM0LDYgKzI2NjQw
LDcgQEAKIAkJCQlCMjIyN0E5NDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUG9seWxpbmVFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E5NzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUHJl
c2VydmVBc3BlY3RSYXRpby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEExMjZFRjFEQjAw
OTc4RjdBIC8qIFNWR1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NERFNUM4RTFEODA4
MDI3MDAxNjRGMkEgLyogQ1NTU2VsZWN0b3JQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4
MURENDlDMTNCQTFBNjAwMERDNzYyNyAvKiBTVkdQcm9wZXJ0eUluZm8uaCBpbiBIZWFkZXJzICov
LAogCQkJCTA4OEEwRTBCMTI2RUYxREIwMDk3OEY3QSAvKiBTVkdQcm9wZXJ0eVRlYXJPZmYuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4OEEwRTBDMTI2RUYxREIwMDk3OEY3QSAvKiBTVkdQcm9wZXJ0
eVRyYWl0cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODkwOSw2ICsyODkxNiw3IEBACiAJCQkJQkNF
MDEzOUEwQzBCRUYxODAwNDM4NjBBIC8qIEpTU3R5bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzk4QTI3RDBDMEM5OTUwMDA0QkVCRjcgLyogSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4NEVCRDg0MENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hl
ZXRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk0REU1QzhEMUQ4MDgwMjcwMDE2NEYyQSAv
KiBDU1NTZWxlY3RvclBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODRFQkQ3ODBDQjhD
ODkyMDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCMjAxMTEwNzBBQjc3NDA1MDBEQjBFNjggLyogSlNTVkdBRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyNEQ5MTI5MTEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERl
ZkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAko
cmV2aXNpb24gMjA1NDk5KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsxNzcsNyBA
QCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRUcmlnZ2VyKEV4ZWNTCiAKIHN0YXRpYyBib29s
IGlzVmFsaWRTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogewotICAgIENTU1BhcnNl
ckNvbnRleHQgY29udGV4dChDU1NRdWlya3NNb2RlKTsKKyAgICBDU1NQYXJzZXJDb250ZXh0IGNv
bnRleHQoSFRNTFF1aXJrc01vZGUpOwogICAgIENTU1BhcnNlciBwYXJzZXIoY29udGV4dCk7CiAg
ICAgQ1NTU2VsZWN0b3JMaXN0IHNlbGVjdG9yTGlzdDsKICAgICBwYXJzZXIucGFyc2VTZWxlY3Rv
cihzZWxlY3Rvciwgc2VsZWN0b3JMaXN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NE
ZWZhdWx0U3R5bGVTaGVldHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NEZWZhdWx0U3R5bGVTaGVldHMuY3BwCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUs
NyArOTUsNyBAQCBzdGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgcHJpbnRFCiAKIHN0
YXRpYyBTdHlsZVNoZWV0Q29udGVudHMqIHBhcnNlVUFTaGVldChjb25zdCBTdHJpbmcmIHN0cikK
IHsKLSAgICBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0ID0gU3R5bGVTaGVldENvbnRlbnRzOjpj
cmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9uIHB1cnBvc2UKKyAgICBTdHls
ZVNoZWV0Q29udGVudHMmIHNoZWV0ID0gU3R5bGVTaGVldENvbnRlbnRzOjpjcmVhdGUoQ1NTUGFy
c2VyQ29udGV4dChVQVNoZWV0TW9kZSkpLmxlYWtSZWYoKTsgLy8gbGVhayB0aGUgc2hlZXQgb24g
cHVycG9zZQogICAgIHNoZWV0LnBhcnNlU3RyaW5nKHN0cik7CiAgICAgcmV0dXJuICZzaGVldDsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcAkocmV2aXNpb24gMjA1
NDk5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzI4LDcgKzMyOCw3IEBAIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENT
U0ZvbnRGYWMKIHsKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFj
ZT4+IHJlc3VsdDsKICAgICBhdXRvIHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3Jl
YXRlKCk7Ci0gICAgYXV0byBwYXJzZVJlc3VsdCA9IENTU1BhcnNlcjo6cGFyc2VWYWx1ZShzdHls
ZSwgQ1NTUHJvcGVydHlGb250LCBmb250LCB0cnVlLCBDU1NTdHJpY3RNb2RlLCBudWxscHRyKTsK
KyAgICBhdXRvIHBhcnNlUmVzdWx0ID0gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHN0eWxlLCBDU1NQ
cm9wZXJ0eUZvbnQsIGZvbnQsIHRydWUsIEhUTUxTdGFuZGFyZE1vZGUsIG51bGxwdHIpOwogICAg
IGlmIChwYXJzZVJlc3VsdCA9PSBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcikgewogICAg
ICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4JKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEyNTYsNyArMTI1Niw3
IEBAIHNwZWNpZmllcjoKICAgICBJRFNFTCB7CiAgICAgICAgICQkID0gbmV3IENTU1BhcnNlclNl
bGVjdG9yOwogICAgICAgICAkJC0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OklkKTsKLSAgICAgICAg
aWYgKHBhcnNlci0+bV9jb250ZXh0Lm1vZGUgPT0gQ1NTUXVpcmtzTW9kZSkKKyAgICAgICAgaWYg
KHBhcnNlci0+bV9jb250ZXh0Lm1vZGUgPT0gSFRNTFF1aXJrc01vZGUpCiAgICAgICAgICAgICAk
MS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoKTsKICAgICAgICAgJCQtPnNldFZhbHVl
KCQxKTsKICAgICB9CkBAIC0xMjY2LDcgKzEyNjYsNyBAQCBzcGVjaWZpZXI6CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgJCQgPSBuZXcgQ1NTUGFyc2VyU2VsZWN0b3I7CiAgICAgICAgICAg
ICAkJC0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OklkKTsKLSAgICAgICAgICAgIGlmIChwYXJzZXIt
Pm1fY29udGV4dC5tb2RlID09IENTU1F1aXJrc01vZGUpCisgICAgICAgICAgICBpZiAocGFyc2Vy
LT5tX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtzTW9kZSkKICAgICAgICAgICAgICAgICAkMS5j
b252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoKTsKICAgICAgICAgICAgICQkLT5zZXRWYWx1
ZSgkMSk7CiAgICAgICAgIH0KQEAgLTEyODAsNyArMTI4MCw3IEBAIGNsYXNzOgogICAgICcuJyBJ
REVOVCB7CiAgICAgICAgICQkID0gbmV3IENTU1BhcnNlclNlbGVjdG9yOwogICAgICAgICAkJC0+
c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OkNsYXNzKTsKLSAgICAgICAgaWYgKHBhcnNlci0+bV9jb250
ZXh0Lm1vZGUgPT0gQ1NTUXVpcmtzTW9kZSkKKyAgICAgICAgaWYgKHBhcnNlci0+bV9jb250ZXh0
Lm1vZGUgPT0gSFRNTFF1aXJrc01vZGUpCiAgICAgICAgICAgICAkMi5jb252ZXJ0VG9BU0NJSUxv
d2VyY2FzZUluUGxhY2UoKTsKICAgICAgICAgJCQtPnNldFZhbHVlKCQyKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczNSw2ICs3
MzUsOCBAQCBTdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dChjb25zdCBTCiAgICAgICAg
ICAgICByZXR1cm4gdGFnSGlzdG9yeS0+c2VsZWN0b3JUZXh0KCIgIiArIHN0ci50b1N0cmluZygp
ICsgcmlnaHRTaWRlKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6CiAgICAgICAg
ICAgICByZXR1cm4gdGFnSGlzdG9yeS0+c2VsZWN0b3JUZXh0KCIgPiAiICsgc3RyLnRvU3RyaW5n
KCkgKyByaWdodFNpZGUpOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZWVwOgor
ICAgICAgICAgICAgcmV0dXJuIHRhZ0hpc3RvcnktPnNlbGVjdG9yVGV4dCgiIC9kZWVwLyAiICsg
c3RyLnRvU3RyaW5nKCkgKyByaWdodFNpZGUpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpE
aXJlY3RBZGphY2VudDoKICAgICAgICAgICAgIHJldHVybiB0YWdIaXN0b3J5LT5zZWxlY3RvclRl
eHQoIiArICIgKyBzdHIudG9TdHJpbmcoKSArIHJpZ2h0U2lkZSk7CiAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OkluZGlyZWN0QWRqYWNlbnQ6CkBAIC03NDUsNiArNzQ3LDggQEAgU3RyaW5nIENT
U1NlbGVjdG9yOjpzZWxlY3RvclRleHQoY29uc3QgUwogICAgICAgICAgICAgRkFMTFRIUk9VR0g7
CiAjZW5kaWYKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudDoKKyAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93UHNldWRvOgorICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpTaGFkb3dTbG90OgogICAgICAgICAgICAgcmV0dXJuIHRhZ0hpc3RvcnktPnNlbGVj
dG9yVGV4dChzdHIudG9TdHJpbmcoKSArIHJpZ2h0U2lkZSk7CiAgICAgICAgIH0KICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAkocmV2aXNpb24gMjA1NDk5KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIERpcmVjdEFkamFjZW50LAogICAg
ICAgICAgICAgSW5kaXJlY3RBZGphY2VudCwKICAgICAgICAgICAgIFN1YlNlbGVjdG9yLAotICAg
ICAgICAgICAgU2hhZG93RGVzY2VuZGFudCwKKyAgICAgICAgICAgIFNoYWRvd0Rlc2NlbmRhbnQs
IC8vIEZJWE1FLU5FV1BBUlNFUjogUmVtb3ZlIHRoaXMgaW4gZmF2b3Igb2YgdGhlIG5ldyBzaGFk
b3cgdmFsdWVzIGJlbG93LgorICAgICAgICAgICAgU2hhZG93UHNldWRvLCAvLyBTcGVjaWFsIGNh
c2Ugb2Ygc2hhZG93IERPTSBwc2V1ZG8gZWxlbWVudHMgLyBzaGFkb3cgcHNldWRvIGVsZW1lbnQK
KyAgICAgICAgICAgIFNoYWRvd0RlZXAsIC8vIC9kZWVwLyBjb21iaW5hdG9yCisgICAgICAgICAg
ICBTaGFkb3dTbG90IC8vIHNsb3R0ZWQgdG8gPHNsb3Q+IGUKICAgICAgICAgfTsKIAogICAgICAg
ICBlbnVtIFBzZXVkb0NsYXNzVHlwZSB7CkBAIC0yMTcsNiArMjIwLDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgICAgIFJpZ2h0Qm90dG9tTWFyZ2luQm94LAogICAgICAgICB9Owog
CisgICAgICAgIGVudW0gQXR0cmlidXRlTWF0Y2hUeXBlIHsKKyAgICAgICAgICAgIENhc2VTZW5z
aXRpdmUsCisgICAgICAgICAgICBDYXNlSW5zZW5zaXRpdmUsCisgICAgICAgIH07CisKICAgICAg
ICAgc3RhdGljIFBzZXVkb0VsZW1lbnRUeXBlIHBhcnNlUHNldWRvRWxlbWVudFR5cGUoY29uc3Qg
U3RyaW5nJik7CiAgICAgICAgIHN0YXRpYyBQc2V1ZG9JZCBwc2V1ZG9JZChQc2V1ZG9FbGVtZW50
VHlwZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01DU1NOYW1lc3BhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01DU1NOYW1lc3BhY2UuY3BwCShyZXZp
c2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTTmFtZXNwYWNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjksMTIgKzY5LDEyIEBAIGJvb2wgRE9NQ1NTTmFtZXNwYWNlOjpz
dXBwb3J0cyhjb25zdCBTdHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBkdW1t
eVN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7Ci0gICAgcmV0dXJuIENT
U1BhcnNlcjo6cGFyc2VWYWx1ZShkdW1teVN0eWxlLCBwcm9wZXJ0eUlELCBub3JtYWxpemVkVmFs
dWUsIGZhbHNlLCBDU1NTdHJpY3RNb2RlLCBudWxscHRyKSAhPSBDU1NQYXJzZXI6OlBhcnNlUmVz
dWx0OjpFcnJvcjsKKyAgICByZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGR1bW15U3R5bGUs
IHByb3BlcnR5SUQsIG5vcm1hbGl6ZWRWYWx1ZSwgZmFsc2UsIEhUTUxTdGFuZGFyZE1vZGUsIG51
bGxwdHIpICE9IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yOwogfQogCiBib29sIERPTUNT
U05hbWVzcGFjZTo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBjb25kaXRpb25UZXh0KQogewotICAg
IENTU1BhcnNlckNvbnRleHQgY29udGV4dChDU1NTdHJpY3RNb2RlKTsKKyAgICBDU1NQYXJzZXJD
b250ZXh0IGNvbnRleHQoSFRNTFN0YW5kYXJkTW9kZSk7CiAgICAgQ1NTUGFyc2VyIHBhcnNlcihj
b250ZXh0KTsKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlU3VwcG9ydHNDb25kaXRpb24oY29uZGl0
aW9uVGV4dCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAJKHJldmlzaW9uIDIwNTQ5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMCw3ICsxMzAsNyBAQCBXZWFrUHRyPEZvbnRGYWNlPiBGb250RmFjZTo6Y3JlYXRlV2Vha1B0
CiBSZWZQdHI8Q1NTVmFsdWU+IEZvbnRGYWNlOjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0
cmluZywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogewogICAgIGF1dG8gc3R5bGUgPSBNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKLSAgICBpZiAoQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKHN0eWxlLCBwcm9wZXJ0eUlELCBzdHJpbmcsIHRydWUsIENTU1N0cmljdE1vZGUsIG51bGxw
dHIpID09IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OkVycm9yKQorICAgIGlmIChDU1NQYXJzZXI6
OnBhcnNlVmFsdWUoc3R5bGUsIHByb3BlcnR5SUQsIHN0cmluZywgdHJ1ZSwgSFRNTFN0YW5kYXJk
TW9kZSwgbnVsbHB0cikgPT0gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3IpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShw
cm9wZXJ0eUlEKTsKIH0KQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIEZvbnRGYWNlOjpzZXRWYXJp
YW50KGNvbnN0IFN0cmluZyYgCiAgICAgfQogCiAgICAgYXV0byBzdHlsZSA9IE11dGFibGVTdHls
ZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwotICAgIGF1dG8gcmVzdWx0ID0gQ1NTUGFyc2VyOjpwYXJz
ZVZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCB2YXJpYW50LCB0cnVlLCBDU1NT
dHJpY3RNb2RlLCBudWxscHRyKTsKKyAgICBhdXRvIHJlc3VsdCA9IENTU1BhcnNlcjo6cGFyc2VW
YWx1ZShzdHlsZSwgQ1NTUHJvcGVydHlGb250VmFyaWFudCwgdmFyaWFudCwgdHJ1ZSwgSFRNTFN0
YW5kYXJkTW9kZSwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdCA9PSBDU1NQYXJzZXI6OlBhcnNl
UmVzdWx0OjpFcnJvcikgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCShyZXZpc2lvbiAyMDU0OTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDEz
ICsxMjksMTMgQEAgT3B0aW9uYWw8TWVkaWFRdWVyeT4gTWVkaWFRdWVyeVNldDo6aW50ZQogCiBP
cHRpb25hbDxNZWRpYVF1ZXJ5PiBNZWRpYVF1ZXJ5U2V0OjppbnRlcm5hbFBhcnNlKGNvbnN0IFN0
cmluZyYgcXVlcnlTdHJpbmcpCiB7Ci0gICAgQ1NTUGFyc2VyIHBhcnNlcihDU1NTdHJpY3RNb2Rl
KTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKEhUTUxTdGFuZGFyZE1vZGUpOwogICAgIHJldHVybiBp
bnRlcm5hbFBhcnNlKHBhcnNlciwgcXVlcnlTdHJpbmcpOwogfQogCiBib29sIE1lZGlhUXVlcnlT
ZXQ6OnBhcnNlKGNvbnN0IFN0cmluZyYgbWVkaWFTdHJpbmcpCiB7Ci0gICAgQ1NTUGFyc2VyIHBh
cnNlcihDU1NTdHJpY3RNb2RlKTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKEhUTUxTdGFuZGFyZE1v
ZGUpOwogICAgIAogICAgIFZlY3RvcjxNZWRpYVF1ZXJ5PiByZXN1bHQ7CiAgICAgVmVjdG9yPFN0
cmluZz4gbGlzdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCShy
ZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUyLDggKzQ1MiwxNiBAQCBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoUmVzdWx0IFNlbGVjdG9yQ2hlCiAKICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6
dXBkYXRlV2l0aE1hdGNoVHlwZShyZXN1bHQsIG1hdGNoVHlwZSk7CiAgICAgICAgIH0KKyAgICAK
KyAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dQc2V1ZG86CisgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6U2hhZG93RGVlcDoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dTbG90OgorICAgICAg
ICAvLyBGSVhNRS1ORVdQQVJTRVI6IEhhdmUgdG8gaW1wbGVtZW50IHRoZXNlLgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhN
YXRjaDo6U2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkpOwogICAgIH0KIAorCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlscyhNYXRjaDo6U2VsZWN0
b3JGYWlsc0NvbXBsZXRlbHkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
RmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0
ZXIuY3BwCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JG
aWx0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsOCArMTM4LDE0IEBAIHZvaWQgU2VsZWN0
b3JGaWx0ZXI6OmNvbGxlY3RJZGVudGlmaWVySGEKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
U2hhZG93RGVzY2VuZGFudDoKICAgICAgICAgICAgIHNraXBPdmVyU3Vic2VsZWN0b3JzID0gdHJ1
ZTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dT
bG90OgorICAgICAgICAgICAgLy8gRGlzYWJsZSBmYXN0UmVqZWN0U2VsZWN0b3IuCisgICAgICAg
ICAgICAqaWRlbnRpZmllckhhc2hlcyA9IDA7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OkNoaWxkOgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dQc2V1ZG86CisgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0RlZXA6CiAgICAgICAgICAgICBza2lwT3ZlclN1YnNl
bGVjdG9ycyA9IGZhbHNlOwogICAgICAgICAgICAgY29sbGVjdERlc2NlbmRhbnRTZWxlY3Rvcklk
ZW50aWZpZXJIYXNoZXMoc2VsZWN0b3IsIGhhc2gpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlF
bGVtZW50TWFwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvclBz
ZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRNYXAuaW4JKHJldmlzaW9uIDIwNTQ5OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0
eUVsZW1lbnRNYXAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAgZmlyc3Qtb2Yt
dHlwZQogZm9jdXMKIGZvY3VzLXdpdGhpbgogaG9yaXpvbnRhbAotaG9zdAoraG9zdCwgUHNldWRv
Q2xhc3NIb3N0LCBQc2V1ZG9FbGVtZW50VW5rbm93bgogaG92ZXIKIGluLXJhbmdlCiBpbmNyZW1l
bnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvclBzZXVkb1R5cGVNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JQc2V1ZG9UeXBlTWFwLmgJKHJl
dmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvclBzZXVkb1R5cGVN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBzdHJ1Y3QgUHNldWRvQ2xhc3NP
ckNvbXBhdGliaWxpdHlQc2V1ZG9FCiB9OwogCiBQc2V1ZG9DbGFzc09yQ29tcGF0aWJpbGl0eVBz
ZXVkb0VsZW1lbnQgcGFyc2VQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50U3RyaW5n
KGNvbnN0IENTU1BhcnNlclN0cmluZyYgcHNldWRvVHlwZVN0cmluZyk7CitQc2V1ZG9DbGFzc09y
Q29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQgcGFyc2VQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxp
dHlFbGVtZW50U3RyaW5nKGNvbnN0IFN0cmluZ1ZpZXcmIHBzZXVkb1R5cGVTdHJpbmcpOwogQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRUeXBlIHBhcnNlUHNldWRvRWxlbWVudFN0cmluZyhjb25z
dCBTdHJpbmdJbXBsJiBwc2V1ZG9UeXBlU3RyaW5nKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwCShyZXZpc2lvbiAyMDU0
OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NCw3ICs3NCw3IEBAIGZsb2F0IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoRG9jdW1lbnQm
IGRvY3UKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gMDsKICAgICBhdXRvJiBz
dHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwotICAgIGZvciAoYXV0byYgc291cmNlU2l6ZSA6IENT
U1BhcnNlcihDU1NTdHJpY3RNb2RlKS5wYXJzZVNpemVzQXR0cmlidXRlKHNpemVzQXR0cmlidXRl
KSkgeworICAgIGZvciAoYXV0byYgc291cmNlU2l6ZSA6IENTU1BhcnNlcihIVE1MU3RhbmRhcmRN
b2RlKS5wYXJzZVNpemVzQXR0cmlidXRlKHNpemVzQXR0cmlidXRlKSkgewogICAgICAgICBpZiAo
bWF0Y2goc291cmNlU2l6ZS5leHByZXNzaW9uLCBzdHlsZSwgZG9jdW1lbnQpKQogICAgICAgICAg
ICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgoc291cmNlU2l6ZS5sZW5ndGguZ2V0KCksIHN0eWxlLCAq
cmVuZGVyZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMu
Y3BwCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzOjpNdXRhYmxlU3R5bGVQcm9wCiB9CiAKIE11dGFibGVTdHlsZVByb3BlcnRpZXM6Ok11
dGFibGVTdHlsZVByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnRpZXMsIHVuc2ln
bmVkIGxlbmd0aCkKLSAgICA6IFN0eWxlUHJvcGVydGllcyhDU1NTdHJpY3RNb2RlKQorICAgIDog
U3R5bGVQcm9wZXJ0aWVzKEhUTUxTdGFuZGFyZE1vZGUpCiB7CiAgICAgbV9wcm9wZXJ0eVZlY3Rv
ci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVy
dGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMu
aAkocmV2aXNpb24gMjA1NDk5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGll
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOSArMTM0LDkgQEAgcHJvdGVjdGVkOgogICAgIGlu
dCBmaW5kUHJvcGVydHlJbmRleChDU1NQcm9wZXJ0eUlEKSBjb25zdDsKICAgICBpbnQgZmluZEN1
c3RvbVByb3BlcnR5SW5kZXgoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAg
IAotICAgIHVuc2lnbmVkIG1fY3NzUGFyc2VyTW9kZSA6IDI7CisgICAgdW5zaWduZWQgbV9jc3NQ
YXJzZXJNb2RlIDogMzsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1faXNNdXRhYmxlIDogMTsKLSAg
ICB1bnNpZ25lZCBtX2FycmF5U2l6ZSA6IDI5OworICAgIHVuc2lnbmVkIG1fYXJyYXlTaXplIDog
Mjg7CiAgICAgCiBwcml2YXRlOgogICAgIFN0cmluZyBnZXRTaG9ydGhhbmRWYWx1ZShjb25zdCBT
dHlsZVByb3BlcnR5U2hvcnRoYW5kJikgY29uc3Q7CkBAIC0xODYsNyArMTg2LDcgQEAgaW5saW5l
IGNvbnN0IFN0eWxlUHJvcGVydHlNZXRhZGF0YSogSW1tdQogCiBjbGFzcyBNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzIGZpbmFsIDogcHVibGljIFN0eWxlUHJvcGVydGllcyB7CiBwdWJsaWM6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBjcmVhdGUo
Q1NTUGFyc2VyTW9kZSA9IENTU1F1aXJrc01vZGUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gY3JlYXRlKENTU1BhcnNlck1vZGUgPSBIVE1M
UXVpcmtzTW9kZSk7CiAgICAgc3RhdGljIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBjcmVh
dGUoY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnRpZXMsIHVuc2lnbmVkIGNvdW50KTsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIH5NdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmNwcAkocmV2aXNpb24gMjA1NDk5KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUnVsZUltcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcg
KzY2LDcgQEAgdm9pZCBTdHlsZVJ1bGVJbXBvcnQ6OnNldENTU1N0eWxlU2hlZXQoYwogICAgIGlm
IChtX3N0eWxlU2hlZXQpCiAgICAgICAgIG1fc3R5bGVTaGVldC0+Y2xlYXJPd25lclJ1bGUoKTsK
IAotICAgIENTU1BhcnNlckNvbnRleHQgY29udGV4dCA9IG1fcGFyZW50U3R5bGVTaGVldCA/IG1f
cGFyZW50U3R5bGVTaGVldC0+cGFyc2VyQ29udGV4dCgpIDogQ1NTU3RyaWN0TW9kZTsKKyAgICBD
U1NQYXJzZXJDb250ZXh0IGNvbnRleHQgPSBtX3BhcmVudFN0eWxlU2hlZXQgPyBtX3BhcmVudFN0
eWxlU2hlZXQtPnBhcnNlckNvbnRleHQoKSA6IEhUTUxTdGFuZGFyZE1vZGU7CiAgICAgY29udGV4
dC5jaGFyc2V0ID0gY2hhcnNldDsKICAgICBpZiAoIWJhc2VVUkwuaXNOdWxsKCkpCiAgICAgICAg
IGNvbnRleHQuYmFzZVVSTCA9IGJhc2VVUkw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVTaGVldENvbnRlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVTaGVldENvbnRlbnRzLmNwcAkocmV2aXNpb24gMjA1NDk5KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcg
QEAgdW5zaWduZWQgU3R5bGVTaGVldENvbnRlbnRzOjplc3RpbWF0ZWRTaQogU3R5bGVTaGVldENv
bnRlbnRzOjpTdHlsZVNoZWV0Q29udGVudHMoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNv
bnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQp
CiAgICAgOiBtX293bmVyUnVsZShvd25lclJ1bGUpCiAgICAgLCBtX29yaWdpbmFsVVJMKG9yaWdp
bmFsVVJMKQorICAgICwgbV9kZWZhdWx0TmFtZXNwYWNlKHN0YXJBdG9tKQogICAgICwgbV9sb2Fk
Q29tcGxldGVkKGZhbHNlKQogICAgICwgbV9pc1VzZXJTdHlsZVNoZWV0KG93bmVyUnVsZSAmJiBv
d25lclJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSAmJiBvd25lclJ1bGUtPnBhcmVudFN0eWxlU2hl
ZXQoKS0+aXNVc2VyU3R5bGVTaGVldCgpKQogICAgICwgbV9oYXNTeW50YWN0aWNhbGx5VmFsaWRD
U1NIZWFkZXIodHJ1ZSkKQEAgLTgyLDYgKzgzLDcgQEAgU3R5bGVTaGVldENvbnRlbnRzOjpTdHls
ZVNoZWV0Q29udGVudHMoYwogICAgICwgbV9pbXBvcnRSdWxlcyhvLm1faW1wb3J0UnVsZXMuc2l6
ZSgpKQogICAgICwgbV9jaGlsZFJ1bGVzKG8ubV9jaGlsZFJ1bGVzLnNpemUoKSkKICAgICAsIG1f
bmFtZXNwYWNlcyhvLm1fbmFtZXNwYWNlcykKKyAgICAsIG1fZGVmYXVsdE5hbWVzcGFjZShvLm1f
ZGVmYXVsdE5hbWVzcGFjZSkKICAgICAsIG1fbG9hZENvbXBsZXRlZCh0cnVlKQogICAgICwgbV9p
c1VzZXJTdHlsZVNoZWV0KG8ubV9pc1VzZXJTdHlsZVNoZWV0KQogICAgICwgbV9oYXNTeW50YWN0
aWNhbGx5VmFsaWRDU1NIZWFkZXIoby5tX2hhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcikK
QEAgLTI2OSwxNSArMjcxLDE4IEBAIHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjp3cmFwcGVyRGVs
ZXRlUnUKIAogdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnBhcnNlckFkZE5hbWVzcGFjZShjb25z
dCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCiB7Ci0gICAg
aWYgKHVyaS5pc051bGwoKSB8fCBwcmVmaXguaXNOdWxsKCkpCisgICAgQVNTRVJUKCF1cmkuaXNO
dWxsKCkpOworICAgIGlmIChwcmVmaXguaXNOdWxsKCkpIHsKKyAgICAgICAgbV9kZWZhdWx0TmFt
ZXNwYWNlID0gdXJpOwogICAgICAgICByZXR1cm47CisgICAgfQogICAgIFByZWZpeE5hbWVzcGFj
ZVVSSU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fbmFtZXNwYWNlcy5hZGQocHJlZml4LCB1cmkp
OwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgcmV0dXJuOwogICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSB1cmk7CiB9CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgU3R5bGVT
aGVldENvbnRlbnRzOjpkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVm
aXgpCitjb25zdCBBdG9taWNTdHJpbmcmIFN0eWxlU2hlZXRDb250ZW50czo6bmFtZXNwYWNlVVJJ
RnJvbVByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKIHsKICAgICBQcmVmaXhOYW1l
c3BhY2VVUklNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lc3BhY2VzLmZpbmQocHJlZml4
KTsKICAgICBpZiAoaXQgPT0gbV9uYW1lc3BhY2VzLmVuZCgpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuaAkocmV2aXNpb24gMjA1NDk5KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0
NCw3IEBAIGNsYXNzIFN0eWxlUnVsZUltcG9ydDsKIAogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRz
IGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8U3R5bGVTaGVldENvbnRlbnRzPiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxTdHlsZVNoZWV0Q29udGVudHM+IGNyZWF0ZShjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBjb250ZXh0ID0gQ1NTUGFyc2VyQ29udGV4dChDU1NTdHJpY3RNb2RlKSkKKyAg
ICBzdGF0aWMgUmVmPFN0eWxlU2hlZXRDb250ZW50cz4gY3JlYXRlKGNvbnN0IENTU1BhcnNlckNv
bnRleHQmIGNvbnRleHQgPSBDU1NQYXJzZXJDb250ZXh0KEhUTUxTdGFuZGFyZE1vZGUpKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3R5bGVTaGVldENvbnRlbnRzKDAsIFN0
cmluZygpLCBjb250ZXh0KSk7CiAgICAgfQpAQCAtNjAsOCArNjAsOSBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgflN0eWxlU2hlZXRDb250ZW50cygpOwogICAgIAogICAgIGNvbnN0IENT
U1BhcnNlckNvbnRleHQmIHBhcnNlckNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3BhcnNlckNv
bnRleHQ7IH0KLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGV0ZXJtaW5lTmFtZXNwYWNlKGNv
bnN0IEF0b21pY1N0cmluZyYgcHJlZml4KTsKKyAgICAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGRlZmF1bHROYW1lc3BhY2UoKSB7IHJldHVybiBtX2RlZmF1bHROYW1lc3BhY2U7IH0KKyAgICBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSUZyb21QcmVmaXgoY29uc3QgQXRvbWljU3Ry
aW5nJiBwcmVmaXgpOwogCiAgICAgdm9pZCBwYXJzZUF1dGhvclN0eWxlU2hlZXQoY29uc3QgQ2Fj
aGVkQ1NTU3R5bGVTaGVldCosIGNvbnN0IFNlY3VyaXR5T3JpZ2luKik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgYm9vbCBwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKQEAgLTE2MCw2ICsxNjEsNyBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+IG1fY2hpbGRSdWxl
czsKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBBdG9taWNTdHJpbmc+IFByZWZp
eE5hbWVzcGFjZVVSSU1hcDsKICAgICBQcmVmaXhOYW1lc3BhY2VVUklNYXAgbV9uYW1lc3BhY2Vz
OworICAgIEF0b21pY1N0cmluZyBtX2RlZmF1bHROYW1lc3BhY2U7CiAKICAgICBib29sIG1fbG9h
ZENvbXBsZXRlZCA6IDE7CiAgICAgYm9vbCBtX2lzVXNlclN0eWxlU2hlZXQgOiAxOwpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAJKHJldmlzaW9uIDIwNTQ5OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1Nyw3IEBAIHZvaWQgV2ViS2l0Q1NTTWF0cml4OjpzZXRNYXRyaXhWYWx1ZShjb24K
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBzdHlsZURlY2xhcmF0aW9uID0gTXV0YWJsZVN0
eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7Ci0gICAgaWYgKENTU1BhcnNlcjo6cGFyc2VWYWx1ZShz
dHlsZURlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSwgc3RyaW5nLCB0cnVlLCBDU1NT
dHJpY3RNb2RlLCBudWxscHRyKSAhPSBDU1NQYXJzZXI6OlBhcnNlUmVzdWx0OjpFcnJvcikgewor
ICAgIGlmIChDU1NQYXJzZXI6OnBhcnNlVmFsdWUoc3R5bGVEZWNsYXJhdGlvbiwgQ1NTUHJvcGVy
dHlUcmFuc2Zvcm0sIHN0cmluZywgdHJ1ZSwgSFRNTFN0YW5kYXJkTW9kZSwgbnVsbHB0cikgIT0g
Q1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6RXJyb3IpIHsKICAgICAgICAgLy8gQ29udmVydCB0byBU
cmFuc2Zvcm1PcGVyYXRpb25zLiBUaGlzIGNhbiBmYWlsIGlmIGEgcHJvcGVydHkKICAgICAgICAg
Ly8gcmVxdWlyZXMgc3R5bGUgKGkuZS4sIHBhcmFtIHVzZXMgJ2Vtcycgb3IgJ2V4cycpCiAgICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5VHJhbnNmb3JtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9tYWtlU2VsZWN0b3JQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlU2VsZWN0b3JQc2V1ZG9DbGFzc0Fu
ZENvbXBhdGliaWxpdHlFbGVtZW50TWFwLnB5CShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvbWFrZVNlbGVjdG9yUHNldWRvQ2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVu
dE1hcC5weQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBvdXRwdXRfZmlsZSA9IG9w
ZW4oJ1NlbGVjdG9yUHNldWRvQ2xhc3NBCiBvdXRwdXRfZmlsZS53cml0ZSgiIiIKICV7CiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTk4LDYgKzE5OCwxOSBAQCBQc2V1
ZG9DbGFzc09yQ29tcGF0aWJpbGl0eVBzZXVkb0VsZW1lbnQgCiAgICAgcmV0dXJuIHsgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzVW5rbm93biwgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRVbmtu
b3duIH07CiB9CiAKK1BzZXVkb0NsYXNzT3JDb21wYXRpYmlsaXR5UHNldWRvRWxlbWVudCBwYXJz
ZVBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1lbnRTdHJpbmcoY29uc3QgU3RyaW5nVmll
dyYgcHNldWRvVHlwZVN0cmluZykKK3sKKyAgICBjb25zdCBTZWxlY3RvclBzZXVkb0NsYXNzT3JD
b21wYXRpYmlsaXR5UHNldWRvRWxlbWVudEVudHJ5KiBlbnRyeTsKKyAgICBpZiAocHNldWRvVHlw
ZVN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgZW50cnkgPSBwYXJzZVBzZXVkb0NsYXNzQW5kQ29t
cGF0aWJpbGl0eUVsZW1lbnRTdHJpbmcocHNldWRvVHlwZVN0cmluZy5jaGFyYWN0ZXJzOCgpLCBw
c2V1ZG9UeXBlU3RyaW5nLmxlbmd0aCgpKTsKKyAgICBlbHNlCisgICAgICAgIGVudHJ5ID0gcGFy
c2VQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50U3RyaW5nKHBzZXVkb1R5cGVTdHJp
bmcuY2hhcmFjdGVyczE2KCksIHBzZXVkb1R5cGVTdHJpbmcubGVuZ3RoKCkpOworCisgICAgaWYg
KGVudHJ5KQorICAgICAgICByZXR1cm4gZW50cnktPnBzZXVkb1R5cGVzOworICAgIHJldHVybiB7
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Vua25vd24sIENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVt
ZW50VW5rbm93biB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZiBkZWZpbmVk
KF9fY2xhbmdfXykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAJ
KHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHByaXZhdGU6CiAKIGNvbnN0
IENTU1BhcnNlckNvbnRleHQmIHN0cmljdENTU1BhcnNlckNvbnRleHQoKQogewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxDU1NQYXJzZXJDb250ZXh0PiBzdHJpY3RDb250ZXh0KENTU1N0cmlj
dE1vZGUpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDU1NQYXJzZXJDb250ZXh0PiBzdHJp
Y3RDb250ZXh0KEhUTUxTdGFuZGFyZE1vZGUpOwogICAgIHJldHVybiBzdHJpY3RDb250ZXh0Owog
fQogCkBAIC0yNTQsNyArMjU0LDcgQEAgQ1NTUGFyc2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4
dChDU1NQYQogQ1NTUGFyc2VyQ29udGV4dDo6Q1NTUGFyc2VyQ29udGV4dChEb2N1bWVudCYgZG9j
dW1lbnQsIGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQogICAgIDog
YmFzZVVSTChiYXNlVVJMLmlzTnVsbCgpID8gZG9jdW1lbnQuYmFzZVVSTCgpIDogYmFzZVVSTCkK
ICAgICAsIGNoYXJzZXQoY2hhcnNldCkKLSAgICAsIG1vZGUoZG9jdW1lbnQuaW5RdWlya3NNb2Rl
KCkgPyBDU1NRdWlya3NNb2RlIDogQ1NTU3RyaWN0TW9kZSkKKyAgICAsIG1vZGUoZG9jdW1lbnQu
aW5RdWlya3NNb2RlKCkgPyBIVE1MUXVpcmtzTW9kZSA6IEhUTUxTdGFuZGFyZE1vZGUpCiAgICAg
LCBpc0hUTUxEb2N1bWVudChkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpKQogI2lmIEVOQUJMRShD
U1NfR1JJRF9MQVlPVVQpCiAgICAgLCBjc3NHcmlkTGF5b3V0RW5hYmxlZChkb2N1bWVudC5pc0NT
U0dyaWRMYXlvdXRFbmFibGVkKCkpCkBAIC0xMzkyLDcgKzEzOTIsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VDb2xvcihSR0JBMzImIGNvbG9yCiAgICAgaWYgKGZhc3RQYXJzZUNvbG9yKGNvbG9y
LCBzdHJpbmcsIHN0cmljdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgQ1NTUGFyc2Vy
IHBhcnNlcihDU1NTdHJpY3RNb2RlKTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKEhUTUxTdGFuZGFy
ZE1vZGUpOwogCiAgICAgLy8gSW4gY2FzZSB0aGUgZmFzdC1wYXRoIHBhcnNlciBkaWRuJ3QgdW5k
ZXJzdGFuZCB0aGUgY29sb3IsIHRyeSB0aGUgZnVsbCBwYXJzZXIuCiAgICAgaWYgKCFwYXJzZXIu
cGFyc2VDb2xvcihzdHJpbmcpKQpAQCAtMTcxOSw3ICsxNzE5LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnZhbGlkYXRlQ2FsY3VsYXRpb25Vbml0KAogaW5saW5lIGJvb2wgQ1NTUGFyc2VyOjpzaG91bGRB
Y2NlcHRVbml0TGVzc1ZhbHVlcyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFVuaXRzIHVuaXRGbGFn
cywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewogICAgIC8vIFFpcmtzIG1vZGUgYW5k
IHN2ZyBwcmVzZW50YXRpb24gYXR0cmlidXRlcyBhY2NlcHQgdW5pdCBsZXNzIHZhbHVlcy4KLSAg
ICByZXR1cm4gKHVuaXRGbGFncyAmIChGTGVuZ3RoIHwgRkFuZ2xlIHwgRlRpbWUpKSAmJiAoIXZh
bHVlLmZWYWx1ZSB8fCBjc3NQYXJzZXJNb2RlID09IENTU1F1aXJrc01vZGUgfHwgY3NzUGFyc2Vy
TW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlKTsKKyAgICByZXR1cm4gKHVuaXRGbGFncyAmIChGTGVu
Z3RoIHwgRkFuZ2xlIHwgRlRpbWUpKSAmJiAoIXZhbHVlLmZWYWx1ZSB8fCBjc3NQYXJzZXJNb2Rl
ID09IEhUTUxRdWlya3NNb2RlIHx8IGNzc1BhcnNlck1vZGUgPT0gU1ZHQXR0cmlidXRlTW9kZSk7
CiB9CiAKIGJvb2wgQ1NTUGFyc2VyOjp2YWxpZGF0ZVVuaXQoVmFsdWVXaXRoQ2FsY3VsYXRpb24m
IHZhbHVlV2l0aENhbGN1bGF0aW9uLCBVbml0cyB1bml0RmxhZ3MsIENTU1BhcnNlck1vZGUgY3Nz
UGFyc2VyTW9kZSkKQEAgLTIzNTYsNyArMjM1Niw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKENTU1Byb3BlcnR5SUQKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0bykKICAgICAg
ICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRkludGVnZXIsIENTU1F1aXJrc01vZGUpKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyLCBI
VE1MUXVpcmtzTW9kZSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlP
cnBoYW5zOiAvLyA8aW50ZWdlcj4gfCBpbmhlcml0IHwgYXV0byAoV2UndmUgYWRkZWQgc3VwcG9y
dCBmb3IgYXV0byBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCkBAIC0yMzY0LDcgKzIzNjQs
NyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlECiAgICAgICAgIGlm
IChpZCA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxp
ZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIsIENTU1F1aXJr
c01vZGUpKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZGF0ZVVu
aXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIsIEhUTUxRdWlya3NNb2Rl
KSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6CkBA
IC0yNDE1LDcgKzI0MTUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0
eUlECiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1ZVJl
c2V0IHx8IGlkID09IENTU1ZhbHVlRG9jdW1lbnQpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFp
ZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGUGVyY2Vu
dCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKTsKKyAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gKCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBG
UGVyY2VudCB8IEZOb25OZWcsIEhUTUxTdGFuZGFyZE1vZGUpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRab29tOgpAQCAtMjU2NywxMCArMjU2
NywxMCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlECiAgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTnVt
YmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZsZXhH
cm91cDoKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgQ1NTU3RyaWN0TW9kZSk7CisgICAgICAgIHZh
bGlkUHJpbWl0aXZlID0gdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdl
ciB8IEZOb25OZWcsIEhUTUxTdGFuZGFyZE1vZGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm94T3JkaW5hbEdyb3VwOgotICAgICAgICB2YWxpZFByaW1pdGl2
ZSA9IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVn
LCBDU1NTdHJpY3RNb2RlKSAmJiB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZTsK
KyAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgSFRNTFN0YW5kYXJkTW9kZSkgJiYgdmFsdWVXaXRoQ2Fs
Y3VsYXRpb24udmFsdWUoKS5mVmFsdWU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJv
cGVydHlGaWx0ZXI6CiAjaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKQEAgLTI2MTYsNyArMjYx
Niw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQKICAgICAgICAg
dmFsaWRQcmltaXRpdmUgPSB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZOdW1i
ZXIgfCBGTm9uTmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eU9yZGVy
OgotICAgICAgICBpZiAodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdl
ciwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICAgICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhD
YWxjdWxhdGlvbiwgRkludGVnZXIsIEhUTUxTdGFuZGFyZE1vZGUpKSB7CiAgICAgICAgICAgICAv
LyBXZSByZXN0cmljdCB0aGUgc21hbGxlc3QgdmFsdWUgdG8gaW50IG1pbiArIDIgYmVjYXVzZSB3
ZSB1c2UgaW50IG1pbiBhbmQgaW50IG1pbiArIDEgYXMgc3BlY2lhbCB2YWx1ZXMgaW4gYSBoYXNo
IHNldC4KICAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSBzdGQ6Om1heDxkb3VibGU+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgKyAyLCBwYXJzZWREb3VibGUodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24pKTsKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQb29sLmNyZWF0
ZVZhbHVlKHJlc3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwpAQCAtMjg5OCw3
ICsyODk4LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRAogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQ2xhbXA6CiAgICAgICAgIC8vIFdoZW4gc3BlY2lm
eWluZyBudW1iZXIgb2YgbGluZXMsIGRvbid0IGFsbG93IDAgYXMgYSB2YWxpZCB2YWx1ZQogICAg
ICAgICAvLyBXaGVuIHNwZWNpZnlpbmcgZWl0aGVyIHR5cGUgb2YgdW5pdCwgcmVxdWlyZSBub24t
bmVnYXRpdmUgaW50ZWdlcnMKLSAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmICh2YWx1
ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
RVJDRU5UQUdFIHx8IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuZlZhbHVlKSAmJiB2YWxp
ZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJbnRlZ2VyIHwgRlBlcmNlbnQgfCBGTm9u
TmVnLCBDU1NRdWlya3NNb2RlKSk7CisgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiAo
dmFsdWVXaXRoQ2FsY3VsYXRpb24udmFsdWUoKS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSB8fCB2YWx1ZVdpdGhDYWxjdWxhdGlvbi52YWx1ZSgpLmZWYWx1ZSkgJiYg
dmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZQZXJjZW50IHwg
Rk5vbk5lZywgSFRNTFF1aXJrc01vZGUpKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKElP
U19URVhUX0FVVE9TSVpJTkcpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTaXplQWRq
dXN0OgpAQCAtMjkwOSw3ICsyOTA5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NT
UHJvcGVydHlJRAogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgbXVsdGlsZW5ndGggY2FzZSB3aGVy
ZSB3ZSBhbGxvdyByZWxhdGl2ZSB1bml0cy4KLSAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0g
KCFpZCAmJiB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50IHwgRk5v
bk5lZywgQ1NTU3RyaWN0TW9kZSkpOworICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlk
ICYmIHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRlBlcmNlbnQgfCBGTm9uTmVn
LCBIVE1MU3RhbmRhcmRNb2RlKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAjZW5kaWYK
QEAgLTI5MjUsMTIgKzI5MjUsMTIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJv
cGVydHlJRAogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0QmVmb3Jl
OgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdEFmdGVyOgotICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxh
dGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgaWYgKGlk
ID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRpb24sIEZJ
bnRlZ2VyIHwgRk5vbk5lZywgSFRNTFN0YW5kYXJkTW9kZSkpCiAgICAgICAgICAgICB2YWxpZFBy
aW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEh5cGhlbmF0ZUxpbWl0TGluZXM6Ci0gICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vTGlt
aXQgfHwgdmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25O
ZWcsIENTU1N0cmljdE1vZGUpKQorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb0xpbWl0IHx8
IHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9uTmVnLCBI
VE1MU3RhbmRhcmRNb2RlKSkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAg
ICAgICAgYnJlYWs7CiAKQEAgLTM4NzQsNyArMzg3NCw3IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXIKICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhD
YWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CiAgICAgQ1NTVmFsdWVJRCBpZCA9
IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCkuaWQ7CiAgICAgLy8gQWx3YXlzIHBhcnNlIHRo
aXMgcHJvcGVydHkgaW4gc3RyaWN0IG1vZGUsIHNpbmNlIGl0IHdvdWxkIGJlIGFtYmlndW91cyBv
dGhlcndpc2Ugd2hlbiB1c2VkIGluIHRoZSAnY29sdW1ucycgc2hvcnRoYW5kIHByb3BlcnR5Lgot
ICAgIGlmIChpZCAhPSBDU1NWYWx1ZUF1dG8gJiYgISh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSAmJiBwYXJzZWREb3Vi
bGUodmFsdWVXaXRoQ2FsY3VsYXRpb24pKSkKKyAgICBpZiAoaWQgIT0gQ1NTVmFsdWVBdXRvICYm
ICEodmFsaWRhdGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwgRk5vbk5lZywg
SFRNTFN0YW5kYXJkTW9kZSkgJiYgcGFyc2VkRG91YmxlKHZhbHVlV2l0aENhbGN1bGF0aW9uKSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byBwYXJzZWRWYWx1ZSA9IHBhcnNl
VmFsaWRQcmltaXRpdmUoaWQsIHZhbHVlV2l0aENhbGN1bGF0aW9uKTsKQEAgLTM4ODcsNyArMzg4
Nyw3IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXIKICAgICBWYWx1
ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqbV92YWx1ZUxpc3QtPmN1cnJl
bnQoKSk7CiAgICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlV2l0aENhbGN1bGF0aW9uLnZhbHVlKCku
aWQ7CiAKLSAgICBpZiAoaWQgIT0gQ1NTVmFsdWVBdXRvICYmICF2YWxpZGF0ZVVuaXQodmFsdWVX
aXRoQ2FsY3VsYXRpb24sIEZQb3NpdGl2ZUludGVnZXIsIENTU1F1aXJrc01vZGUpKQorICAgIGlm
IChpZCAhPSBDU1NWYWx1ZUF1dG8gJiYgIXZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlv
biwgRlBvc2l0aXZlSW50ZWdlciwgSFRNTFF1aXJrc01vZGUpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIGF1dG8gcGFyc2VkVmFsdWUgPSBwYXJzZVZhbGlkUHJpbWl0aXZlKGlkLCB2
YWx1ZVdpdGhDYWxjdWxhdGlvbik7CkBAIC03MjM3LDcgKzcyMzcsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VGb250V2VpZ2h0KGJvb2wgaW1wCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbih2YWx1ZSk7Ci0g
ICAgaWYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIgfCBGTm9u
TmVnLCBDU1NRdWlya3NNb2RlKSkgeworICAgIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZJbnRlZ2VyIHwgRk5vbk5lZywgSFRNTFF1aXJrc01vZGUpKSB7CiAgICAgICAg
IGludCB3ZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZERvdWJsZSh2YWx1ZVdpdGhDYWxj
dWxhdGlvbikpOwogICAgICAgICBpZiAoISh3ZWlnaHQgJSAxMDApICYmIHdlaWdodCA+PSAxMDAg
JiYgd2VpZ2h0IDw9IDkwMCkgewogICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlG
b250V2VpZ2h0LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShjcmVhdGVGb250V2VpZ2h0VmFsdWVLZXl3b3JkKHdlaWdodCkpLCBpbXBvcnRhbnQpOwpAQCAt
NzgxMiw5ICs3ODEyLDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3JQYXJhbWV0ZXJzKENT
UwogICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGZpcnN0QXJndW1lbnRXaXRoQ2FsY3VsYXRpb24o
KmFyZ3MtPmN1cnJlbnQoKSk7CiAgICAgVW5pdHMgdW5pdFR5cGUgPSBGVW5rbm93bjsKICAgICAv
LyBHZXQgdGhlIGZpcnN0IHZhbHVlIGFuZCBpdHMgdHlwZQotICAgIGlmICh2YWxpZGF0ZVVuaXQo
Zmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkludGVnZXIsIENTU1N0cmljdE1vZGUpKQor
ICAgIGlmICh2YWxpZGF0ZVVuaXQoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkludGVn
ZXIsIEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAgICB1bml0VHlwZSA9IEZJbnRlZ2VyOwotICAg
IGVsc2UgaWYgKHZhbGlkYXRlVW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGUGVy
Y2VudCwgQ1NTU3RyaWN0TW9kZSkpCisgICAgZWxzZSBpZiAodmFsaWRhdGVVbml0KGZpcnN0QXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZQZXJjZW50LCBIVE1MU3RhbmRhcmRNb2RlKSkKICAgICAg
ICAgdW5pdFR5cGUgPSBGUGVyY2VudDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTc4MjUsNyArNzgyNSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yUGFyYW1ldGVy
cyhDU1MKICAgICAgICAgaWYgKG9wZXJhdG9yQXJndW1lbnQudW5pdCAhPSBDU1NQYXJzZXJWYWx1
ZTo6T3BlcmF0b3IgJiYgb3BlcmF0b3JBcmd1bWVudC5pVmFsdWUgIT0gJywnKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBWYWx1ZVdpdGhDYWxjdWxhdGlvbiBhcmd1bWVudFdp
dGhDYWxjdWxhdGlvbigqYXJncy0+bmV4dCgpKTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQo
YXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIHVuaXRUeXBlLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAg
ICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIHVuaXRUeXBlLCBI
VE1MU3RhbmRhcmRNb2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY29s
b3JBcnJheVtpXSA9IGNvbG9ySW50RnJvbVZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKTsK
ICAgICB9CkBAIC03ODM0LDcgKzc4MzQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvclBh
cmFtZXRlcnMoQ1NTCiAgICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFy
c2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPm5leHQoKSk7Ci0gICAgICAgIGlmICghdmFsaWRh
dGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkK
KyAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1i
ZXIsIEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBkb3VibGUgZG91YmxlVmFsdWUgPSBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRp
b24pOwogICAgICAgICAvLyBDb252ZXJ0IHRoZSBmbG9hdGluZyBwb2ludGVyIG51bWJlciBvZiBh
bHBoYSB0byBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBbMCwgMjU2KSwKQEAgLTc4NTQsNyArNzg1
NCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGEKICAgICBDU1NQ
YXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS5mdW5jdGlvbi0+YXJncy5nZXQoKTsKICAgICBW
YWx1ZVdpdGhDYWxjdWxhdGlvbiBmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLT5j
dXJyZW50KCkpOwogICAgIC8vIEdldCB0aGUgZmlyc3QgdmFsdWUKLSAgICBpZiAoIXZhbGlkYXRl
VW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2Rl
KSkKKyAgICBpZiAoIXZhbGlkYXRlVW5pdChmaXJzdEFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBG
TnVtYmVyLCBIVE1MU3RhbmRhcmRNb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8v
IG5vcm1hbGl6ZSB0aGUgSHVlIHZhbHVlIGFuZCBjaGFuZ2UgaXQgdG8gYmUgYmV0d2VlbiAwIGFu
ZCAxLjAKICAgICBjb2xvckFycmF5WzBdID0gKCgoc3RhdGljX2Nhc3Q8aW50PihwYXJzZWREb3Vi
bGUoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbikpICUgMzYwKSArIDM2MCkgJSAzNjApIC8g
MzYwLjA7CkBAIC03ODYzLDcgKzc4NjMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VIU0xQYXJh
bWV0ZXJzKENTU1BhCiAgICAgICAgIGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFy
c2VyVmFsdWU6Ok9wZXJhdG9yICYmIG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MtPm5leHQoKSk7Ci0gICAgICAgIGlmICghdmFsaWRh
dGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGUGVyY2VudCwgQ1NTU3RyaWN0TW9kZSkp
CisgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGUGVy
Y2VudCwgSFRNTFN0YW5kYXJkTW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGNvbG9yQXJyYXlbaV0gPSBzdGQ6Om1heDxkb3VibGU+KDAsIHN0ZDo6bWluPGRvdWJsZT4o
MTAwLCBwYXJzZWREb3VibGUoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24pKSkgLyAxMDAuMDsgLy8g
bmVlZHMgdG8gYmUgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLjAKICAgICB9CkBAIC03ODcyLDcgKzc4
NzIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhCiAgICAgICAg
IGlmIChvcGVyYXRvckFyZ3VtZW50LnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYm
IG9wZXJhdG9yQXJndW1lbnQuaVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24o
KmFyZ3MtPm5leHQoKSk7Ci0gICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uLCBGTnVtYmVyLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgaWYgKCF2YWxpZGF0
ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIsIEhUTUxTdGFuZGFyZE1vZGUp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjb2xvckFycmF5WzNdID0gc3Rk
OjptYXg8ZG91YmxlPigwLCBzdGQ6Om1pbjxkb3VibGU+KDEsIHBhcnNlZERvdWJsZShhcmd1bWVu
dFdpdGhDYWxjdWxhdGlvbikpKTsKICAgICB9CkBAIC04MDc5LDEzICs4MDc5LDEzIEBAIFJlZlB0
cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VTaGEKICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBnb29kLiAgQ29tbWl0IGl0
LgogICAgICAgICAgICAgY29udGV4dC5jb21taXRWYWx1ZSgpOwotICAgICAgICB9IGVsc2UgaWYg
KHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCwgQ1NTU3RyaWN0TW9k
ZSkpIHsKKyAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2FsY3VsYXRp
b24sIEZMZW5ndGgsIEhUTUxTdGFuZGFyZE1vZGUpKSB7CiAgICAgICAgICAgICAvLyBXZSByZXF1
aXJlZCBhIGxlbmd0aCBhbmQgZGlkbid0IGdldCBvbmUuIEludmFsaWQuCiAgICAgICAgICAgICBp
ZiAoIWNvbnRleHQuYWxsb3dMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgICAgICAgICAgLy8gQmx1ciByYWRpdXMgbXVzdCBiZSBub24tbmVnYXRpdmUuCi0g
ICAgICAgICAgICBpZiAoY29udGV4dC5hbGxvd0JsdXIgJiYgIXZhbGlkYXRlVW5pdCh2YWx1ZVdp
dGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25OZWcsIENTU1N0cmljdE1vZGUpKQorICAgICAg
ICAgICAgaWYgKGNvbnRleHQuYWxsb3dCbHVyICYmICF2YWxpZGF0ZVVuaXQodmFsdWVXaXRoQ2Fs
Y3VsYXRpb24sIEZMZW5ndGggfCBGTm9uTmVnLCBIVE1MU3RhbmRhcmRNb2RlKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgLy8gQSBsZW5ndGggaXMgYWxs
b3dlZCBoZXJlLiAgQ29uc3RydWN0IHRoZSB2YWx1ZSBhbmQgYWRkIGl0LgpAQCAtODUzMyw3ICs4
NTMzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2VTbGljZShDUwogICAgIHdo
aWxlICgodmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSkgewogICAgICAgICBWYWx1ZVdp
dGhDYWxjdWxhdGlvbiB2YWx1ZVdpdGhDYWxjdWxhdGlvbigqdmFsdWUpOwogICAgICAgICAvLyBG
SVhNRSBjYWxjKCkgaHR0cDovL3dlYmtpdC5vcmcvYi8xNjY2MiA6IGNhbGMgaXMgcGFyc2VkIGJ1
dCB2YWx1ZXMgYXJlIG5vdCBjcmVhdGVkIHlldC4KLSAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dO
dW1iZXIoKSAmJiAhaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbikgJiYgdmFsaWRh
dGVVbml0KHZhbHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcgfCBGUGVyY2Vu
dCwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICAgICAgaWYgKGNvbnRleHQuYWxsb3dOdW1iZXIoKSAm
JiAhaXNDYWxjdWxhdGlvbih2YWx1ZVdpdGhDYWxjdWxhdGlvbikgJiYgdmFsaWRhdGVVbml0KHZh
bHVlV2l0aENhbGN1bGF0aW9uLCBGSW50ZWdlciB8IEZOb25OZWcgfCBGUGVyY2VudCwgSFRNTFN0
YW5kYXJkTW9kZSkpIHsKICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0TnVtYmVyKHZhbHVlV2l0
aENhbGN1bGF0aW9uKTsKICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0LmFsbG93RmlsbCgpICYm
IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUZpbGwpCiAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEZp
bGwoKTsKQEAgLTg2NDcsNyArODY0Nyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlcklt
YWdlUXVhZChVbmkKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWU7CiAgICAgd2hpbGUgKCh2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpKSB7CiAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0
aW9uIHZhbHVlV2l0aENhbGN1bGF0aW9uKCp2YWx1ZSk7Ci0gICAgICAgIGlmIChjb250ZXh0LmFs
bG93TnVtYmVyKCkgJiYgKHZhbGlkYXRlVW5pdCh2YWx1ZVdpdGhDYWxjdWxhdGlvbiwgdmFsaWRV
bml0cywgQ1NTU3RyaWN0TW9kZSkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQXV0bykpIHsKKyAg
ICAgICAgaWYgKGNvbnRleHQuYWxsb3dOdW1iZXIoKSAmJiAodmFsaWRhdGVVbml0KHZhbHVlV2l0
aENhbGN1bGF0aW9uLCB2YWxpZFVuaXRzLCBIVE1MU3RhbmRhcmRNb2RlKSB8fCB2YWx1ZS0+aWQg
PT0gQ1NTVmFsdWVBdXRvKSkgewogICAgICAgICAgICAgY29udGV4dC5jb21taXROdW1iZXIodmFs
dWVXaXRoQ2FsY3VsYXRpb24pOwogICAgICAgICB9IGVsc2UgaWYgKCFpblNob3J0aGFuZCgpKSB7
CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgcGFyc2luZyBhIHNob3J0aGFuZCB0aGVuIHdl
IGFyZSBpbnZhbGlkLgpAQCAtOTA3Nyw3ICs5MDc3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
RGVwcmVjYXRlZExpbmVhckdyYQogCiAgICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwogICAg
IC8vIExvb2sgZm9yIGFuZ2xlLgotICAgIGlmICh2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2Fs
Y3VsYXRpb24sIEZBbmdsZSwgQ1NTU3RyaWN0TW9kZSkpIHsKKyAgICBpZiAodmFsaWRhdGVVbml0
KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIEhUTUxTdGFuZGFyZE1vZGUpKSB7CiAg
ICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZ3Vt
ZW50V2l0aENhbGN1bGF0aW9uKSk7CiAKICAgICAgICAgYXJncy0+bmV4dCgpOwpAQCAtOTI2Myw3
ICs5MjYzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGluZWFyR3JhZGllbnQoQ1NTUAogCiAg
ICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwogICAgIC8vIExvb2sgZm9yIGFuZ2xlLgotICAg
IGlmICh2YWxpZGF0ZVVuaXQoZmlyc3RBcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkFuZ2xlLCBD
U1NTdHJpY3RNb2RlKSkgeworICAgIGlmICh2YWxpZGF0ZVVuaXQoZmlyc3RBcmd1bWVudFdpdGhD
YWxjdWxhdGlvbiwgRkFuZ2xlLCBIVE1MU3RhbmRhcmRNb2RlKSkgewogICAgICAgICByZXN1bHQt
PnNldEFuZ2xlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShmaXJzdEFyZ3VtZW50V2l0aENh
bGN1bGF0aW9uKSk7CiAKICAgICAgICAgYXJncy0+bmV4dCgpOwpAQCAtMTAwNzgsMjEgKzEwMDc4
LDIxIEBAIFJlZlB0cjxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4gQ1NTUGFyc2UKIAogICAgICAg
ICBpZiAoaW5mby50eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJh
bnNmb3JtT3BlcmF0aW9uICYmIGFyZ051bWJlciA9PSAzKSB7CiAgICAgICAgICAgICAvLyA0dGgg
cGFyYW0gb2Ygcm90YXRlM2QoKSBpcyBhbiBhbmdsZSByYXRoZXIgdGhhbiBhIGJhcmUgbnVtYmVy
LCB2YWxpZGF0ZSBpdCBhcyBzdWNoCi0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1
bWVudFdpdGhDYWxjdWxhdGlvbiwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAg
IGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5nbGUsIEhUTUxT
dGFuZGFyZE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9
IGVsc2UgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xh
dGUzRFRyYW5zZm9ybU9wZXJhdGlvbiAmJiBhcmdOdW1iZXIgPT0gMikgewogICAgICAgICAgICAg
Ly8gM3JkIHBhcmFtIG9mIHRyYW5zbGF0ZTNkKCkgY2Fubm90IGJlIGEgcGVyY2VudGFnZQotICAg
ICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5n
dGgsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1l
bnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgsIEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2UgaWYgKGluZm8udHlwZSgpID09
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uICYm
ICFhcmdOdW1iZXIpIHsKICAgICAgICAgICAgIC8vIDFzdCBwYXJhbSBvZiB0cmFuc2xhdGVaKCkg
Y2Fubm90IGJlIGEgcGVyY2VudGFnZQotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJn
dW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgsIENTU1N0cmljdE1vZGUpKQorICAgICAgICAg
ICAgaWYgKCF2YWxpZGF0ZVVuaXQoYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZMZW5ndGgsIEhU
TUxTdGFuZGFyZE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICB9IGVsc2UgaWYgKGluZm8udHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpQZXJz
cGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbiAmJiAhYXJnTnVtYmVyKSB7CiAgICAgICAgICAgICAv
LyAxc3QgcGFyYW0gb2YgcGVyc3BlY3RpdmUoKSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJl
ciAoZGVwcmVjYXRlZCkgb3IgbGVuZ3RoLgotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVVuaXQo
YXJndW1lbnRXaXRoQ2FsY3VsYXRpb24sIEZOdW1iZXIgfCBGTGVuZ3RoIHwgRk5vbk5lZywgQ1NT
U3RyaWN0TW9kZSkpCisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhD
YWxjdWxhdGlvbiwgRk51bWJlciB8IEZMZW5ndGggfCBGTm9uTmVnLCBIVE1MU3RhbmRhcmRNb2Rl
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfSBlbHNlIGlmICgh
dmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCB1bml0LCBDU1NTdHJpY3RNb2Rl
KSkKKyAgICAgICAgfSBlbHNlIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0
aW9uLCB1bml0LCBIVE1MU3RhbmRhcmRNb2RlKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgICAgIC8vIEFkZCB0aGUgdmFsdWUgdG8gdGhlIGN1cnJlbnQgdHJhbnNmb3JtIG9w
ZXJhdGlvbi4KQEAgLTEwMTY3LDcgKzEwMTY3LDcgQEAgUmVmUHRyPFdlYktpdENTU0ZpbHRlclZh
bHVlPiBDU1NQYXJzZXI6OgogCiAgICAgICAgIGlmIChhcmdzLnNpemUoKSkgewogICAgICAgICAg
ICAgVmFsdWVXaXRoQ2FsY3VsYXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3Vy
cmVudCgpKTsKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1
bGF0aW9uLCBGTnVtYmVyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBDU1NTdHJpY3RNb2RlKSkKKyAg
ICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVt
YmVyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBIVE1MU3RhbmRhcmRNb2RlKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgYXV0byBwcmltaXRpdmVWYWx1ZSA9
IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhDYWxjdWxhdGlvbik7CkBA
IC0xMDE5MSw3ICsxMDE5MSw3IEBAIFJlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NTUGFy
c2VyOjoKIAogICAgICAgICBpZiAoYXJncy5zaXplKCkpIHsKICAgICAgICAgICAgIFZhbHVlV2l0
aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7Ci0g
ICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRk51
bWJlciB8IEZQZXJjZW50LCBDU1NTdHJpY3RNb2RlKSkKKyAgICAgICAgICAgIGlmICghdmFsaWRh
dGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTnVtYmVyIHwgRlBlcmNlbnQsIEhUTUxT
dGFuZGFyZE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAg
ICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1
bWVudFdpdGhDYWxjdWxhdGlvbikpOwpAQCAtMTAyMDUsNyArMTAyMDUsNyBAQCBSZWZQdHI8V2Vi
S2l0Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6CiAgICAgICAgIAogICAgICAgICBpZiAoYXJn
cy5zaXplKCkpIHsKICAgICAgICAgICAgIFZhbHVlV2l0aENhbGN1bGF0aW9uIGFyZ3VtZW50V2l0
aENhbGN1bGF0aW9uKCphcmdzLmN1cnJlbnQoKSk7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkYXRl
VW5pdChhcmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkFuZ2xlLCBDU1NTdHJpY3RNb2RlKSkKKyAg
ICAgICAgICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGQW5n
bGUsIEhUTUxTdGFuZGFyZE1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICAKICAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uKSk7CkBAIC0xMDIxOSw3ICsxMDIx
OSw3IEBAIFJlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NTUGFyc2VyOjoKICAgICAgICAg
CiAgICAgICAgIGlmIChhcmdzLnNpemUoKSkgewogICAgICAgICAgICAgVmFsdWVXaXRoQ2FsY3Vs
YXRpb24gYXJndW1lbnRXaXRoQ2FsY3VsYXRpb24oKmFyZ3MuY3VycmVudCgpKTsKLSAgICAgICAg
ICAgIGlmICghdmFsaWRhdGVVbml0KGFyZ3VtZW50V2l0aENhbGN1bGF0aW9uLCBGTGVuZ3RoIHwg
Rk5vbk5lZywgQ1NTU3RyaWN0TW9kZSkpCisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlVW5pdChh
cmd1bWVudFdpdGhDYWxjdWxhdGlvbiwgRkxlbmd0aCB8IEZOb25OZWcsIEhUTUxTdGFuZGFyZE1v
ZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgICAgICBmaWx0
ZXJWYWx1ZS0+YXBwZW5kKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmd1bWVudFdpdGhD
YWxjdWxhdGlvbikpOwpAQCAtMTMxMjUsNyArMTMxMjUsNyBAQCBRdWFsaWZpZWROYW1lIENTU1Bh
cnNlcjo6ZGV0ZXJtaW5lTmFtZUluCiAKICAgICBpZiAoIW1fc3R5bGVTaGVldCkKICAgICAgICAg
cmV0dXJuIFF1YWxpZmllZE5hbWUocHJlZml4LCBsb2NhbE5hbWUsIG1fZGVmYXVsdE5hbWVzcGFj
ZSk7Ci0gICAgcmV0dXJuIFF1YWxpZmllZE5hbWUocHJlZml4LCBsb2NhbE5hbWUsIG1fc3R5bGVT
aGVldC0+ZGV0ZXJtaW5lTmFtZXNwYWNlKHByZWZpeCkpOworICAgIHJldHVybiBRdWFsaWZpZWRO
YW1lKHByZWZpeCwgbG9jYWxOYW1lLCBtX3N0eWxlU2hlZXQtPm5hbWVzcGFjZVVSSUZyb21QcmVm
aXgocHJlZml4KSk7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpyZXdyaXRlU3BlY2lmaWVyc1dpdGhO
YW1lc3BhY2VJZk5lZWRlZChDU1NQYXJzZXJTZWxlY3RvciYgc3BlY2lmaWVycykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkocmV2aXNpb24gMjA1NDk5KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTcx
LDggKzU3MSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldFN0eWxlU2hlZXQoU3R5bGVTaGVl
dENvbnRlbnRzKiBzdHlsZVNoZWV0KSB7IG1fc3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7IH0KIAot
ICAgIGlubGluZSBib29sIGluU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5t
b2RlID09IENTU1N0cmljdE1vZGUgfHwgbV9jb250ZXh0Lm1vZGUgPT0gU1ZHQXR0cmlidXRlTW9k
ZTsgfQotICAgIGlubGluZSBib29sIGluUXVpcmtzTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dC5tb2RlID09IENTU1F1aXJrc01vZGU7IH0KKyAgICBpbmxpbmUgYm9vbCBpblN0cmljdE1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQubW9kZSA9PSBVQVNoZWV0TW9kZSB8fCBtX2Nv
bnRleHQubW9kZSA9PSBIVE1MU3RhbmRhcmRNb2RlIHx8IG1fY29udGV4dC5tb2RlID09IFNWR0F0
dHJpYnV0ZU1vZGU7IH0KKyAgICBpbmxpbmUgYm9vbCBpblF1aXJrc01vZGUoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtzTW9kZTsgfQogICAgIAogICAgIFVSTCBj
b21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyTW9kZS5oCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlck1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsMjEgKzM3LDUwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CiAK
Ky8vIE11c3Qgbm90IGdyb3cgYmV5b25kIDMgYml0cywgZHVlIHRvIHBhY2tpbmcgaW4gU3R5bGVQ
cm9wZXJ0aWVzLgogZW51bSBDU1NQYXJzZXJNb2RlIHsKLSAgICBDU1NRdWlya3NNb2RlLAotICAg
IENTU1N0cmljdE1vZGUsCi0gICAgLy8gU1ZHIHNob3VsZCBhbHdheXMgYmUgaW4gc3RyaWN0IG1v
ZGUuIEZvciBTVkcgYXR0cmlidXRlcywgdGhlIHJ1bGVzIGRpZmZlciB0byBzdHJpY3Qgc29tZXRp
bWVzLgotICAgIFNWR0F0dHJpYnV0ZU1vZGUKKyAgICBIVE1MU3RhbmRhcmRNb2RlLAorICAgIEhU
TUxRdWlya3NNb2RlLAorICAgIC8vIEhUTUwgYXR0cmlidXRlcyBhcmUgcGFyc2VkIGluIHF1aXJr
cyBtb2RlIGJ1dCBhbHNvIGFsbG93cyBpbnRlcm5hbCBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXMuCisg
ICAgSFRNTEF0dHJpYnV0ZU1vZGUsCisgICAgLy8gU1ZHIGF0dHJpYnV0ZXMgYXJlIHBhcnNlZCBp
biBxdWlya3MgbW9kZSBidXQgcnVsZXMgZGlmZmVyIHNsaWdodGx5LgorICAgIFNWR0F0dHJpYnV0
ZU1vZGUsCisgICAgLy8gQHZpZXdwb3J0IHJ1bGVzIGFyZSBwYXJzZWQgaW4gc3RhbmRhcmRzIG1v
ZGUgYnV0IENTU09NIG1vZGlmaWNhdGlvbnMgKHZpYSBTdHlsZVByb3BlcnR5U2V0KQorICAgIC8v
IG11c3QgY2FsbCBwYXJzZVZpZXdwb3J0UHJvcGVydGllcyBzbyBuZWVkcyBhIHNwZWNpYWwgbW9k
ZS4KKyAgICBDU1NWaWV3cG9ydFJ1bGVNb2RlLAorICAgIC8vIFVzZXIgYWdlbnQgc3R5bGVzaGVl
dHMgYXJlIHBhcnNlZCBpbiBzdGFuZGFyZHMgbW9kZSBidXQgYWxzbyBhbGxvd3MgaW50ZXJuYWwg
cHJvcGVydGllcyBhbmQgdmFsdWVzLgorICAgIFVBU2hlZXRNb2RlCiB9OwogCitpbmxpbmUgYm9v
bCBpc1F1aXJrc01vZGVCZWhhdmlvcihDU1NQYXJzZXJNb2RlIG1vZGUpCit7CisgICAgcmV0dXJu
IG1vZGUgPT0gSFRNTFF1aXJrc01vZGU7IC8vIHx8IG1vZGUgPT0gSFRNTEF0dHJpYnV0ZU1vZGU7
Cit9CisKK2lubGluZSBib29sIGlzVUFTaGVldEJlaGF2aW9yKENTU1BhcnNlck1vZGUgbW9kZSkK
K3sKKyAgICByZXR1cm4gbW9kZSA9PSBVQVNoZWV0TW9kZTsKK30KKworaW5saW5lIGJvb2wgaXNV
bml0TGVzc0xlbmd0aFBhcnNpbmdFbmFibGVkRm9yTW9kZShDU1NQYXJzZXJNb2RlIG1vZGUpCit7
CisgICAgcmV0dXJuIG1vZGUgPT0gSFRNTEF0dHJpYnV0ZU1vZGUgfHwgbW9kZSA9PSBTVkdBdHRy
aWJ1dGVNb2RlOworfQorCitpbmxpbmUgYm9vbCBpc0NTU1ZpZXdwb3J0UGFyc2luZ0VuYWJsZWRG
b3JNb2RlKENTU1BhcnNlck1vZGUgbW9kZSkKK3sKKyAgICByZXR1cm4gbW9kZSA9PSBDU1NWaWV3
cG9ydFJ1bGVNb2RlOworfQorCisvLyBGSVhNRS1ORVdQQVJTRVI6IE5leHQgdHdvIGZ1bmN0aW9u
cyBzaG91bGQgYmUgcmVtb3ZlZCBldmVudHVhbGx5LgogaW5saW5lIENTU1BhcnNlck1vZGUgc3Ry
aWN0VG9DU1NQYXJzZXJNb2RlKGJvb2wgaW5TdHJpY3RNb2RlKQogewotICAgIHJldHVybiBpblN0
cmljdE1vZGUgPyBDU1NTdHJpY3RNb2RlIDogQ1NTUXVpcmtzTW9kZTsKKyAgICByZXR1cm4gaW5T
dHJpY3RNb2RlID8gSFRNTFN0YW5kYXJkTW9kZSA6IEhUTUxRdWlya3NNb2RlOwogfQogCiBpbmxp
bmUgYm9vbCBpc1N0cmljdFBhcnNlck1vZGUoQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQog
ewotICAgIHJldHVybiBjc3NQYXJzZXJNb2RlID09IENTU1N0cmljdE1vZGUgfHwgY3NzUGFyc2Vy
TW9kZSA9PSBTVkdBdHRyaWJ1dGVNb2RlOworICAgIHJldHVybiBjc3NQYXJzZXJNb2RlID09IFVB
U2hlZXRNb2RlIHx8IGNzc1BhcnNlck1vZGUgPT0gSFRNTFN0YW5kYXJkTW9kZSB8fCBjc3NQYXJz
ZXJNb2RlID09IFNWR0F0dHJpYnV0ZU1vZGU7CiB9CiAKIHN0cnVjdCBDU1NQYXJzZXJDb250ZXh0
IHsKQEAgLTYyLDcgKzkxLDcgQEAgcHVibGljOgogCiAgICAgVVJMIGJhc2VVUkw7CiAgICAgU3Ry
aW5nIGNoYXJzZXQ7Ci0gICAgQ1NTUGFyc2VyTW9kZSBtb2RlIHsgQ1NTU3RyaWN0TW9kZSB9Owor
ICAgIENTU1BhcnNlck1vZGUgbW9kZSB7IEhUTUxTdGFuZGFyZE1vZGUgfTsKICAgICBib29sIGlz
SFRNTERvY3VtZW50IHsgZmFsc2UgfTsKICNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQogICAg
IGJvb2wgY3NzR3JpZExheW91dEVuYWJsZWQgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmNwcAkocmV2aXNpb24gMjA1NDk5KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VyVmFsdWVzLmgiCiAK
ICNpbmNsdWRlICJDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUGFyc2Vy
SWRpb21zLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NG
dW5jdGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKQEAgLTIxOSw2ICsyMjAs
MjcgQEAgQ1NTUGFyc2VyU2VsZWN0b3IqIENTU1BhcnNlclNlbGVjdG9yOjpwYQogICAgIHJldHVy
biBzZWxlY3Rvci5yZWxlYXNlKCk7CiB9CiAKK0NTU1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJT
ZWxlY3Rvcjo6cGFyc2VQc2V1ZG9FbGVtZW50U2VsZWN0b3JGcm9tU3RyaW5nVmlldyhTdHJpbmdW
aWV3JiBwc2V1ZG9UeXBlU3RyaW5nKQoreworICAgIGNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5Q
bGFjZShwc2V1ZG9UeXBlU3RyaW5nKTsKKyAgICBBdG9taWNTdHJpbmcgbmFtZSA9IHBzZXVkb1R5
cGVTdHJpbmcudG9BdG9taWNTdHJpbmcoKTsKKyAgICAKKyAgICBDU1NTZWxlY3Rvcjo6UHNldWRv
RWxlbWVudFR5cGUgcHNldWRvVHlwZSA9IENTU1NlbGVjdG9yOjpwYXJzZVBzZXVkb0VsZW1lbnRU
eXBlKG5hbWUpOworICAgIGlmIChwc2V1ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVt
ZW50VW5rbm93bikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byBzZWxl
Y3RvciA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7CisgICAgc2VsZWN0
b3ItPm1fc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KTsKKyAg
ICBzZWxlY3Rvci0+bV9zZWxlY3Rvci0+c2V0UHNldWRvRWxlbWVudFR5cGUocHNldWRvVHlwZSk7
CisgICAgaWYgKHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRD
dXN0b21MZWdhY3lQcmVmaXhlZCkgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG5hbWUg
PT0gIi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIiLCAiLXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRl
ciBpcyB0aGUgb25seSBMZWdhY3lQcmVmaXggcHNldWRvIHR5cGUuIik7CisgICAgICAgIGlmIChu
YW1lID09ICItd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIikKKyAgICAgICAgICAgIG5hbWUgPSBB
dG9taWNTdHJpbmcoInBsYWNlaG9sZGVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgfQorICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5zZXRWYWx1ZShuYW1lKTsK
KyAgICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOworfQorCiAjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQogQ1NTUGFyc2VyU2VsZWN0b3IqIENTU1BhcnNlclNlbGVjdG9yOjpwYXJzZVBzZXVkb0Vs
ZW1lbnRDdWVGdW5jdGlvblNlbGVjdG9yKGNvbnN0IENTU1BhcnNlclN0cmluZyYgZnVuY3Rpb25J
ZGVudGlmaWVyLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4qIHBh
cnNlZFNlbGVjdG9yVmVjdG9yKQogewpAQCAtMzA4LDYgKzMzMCwyOSBAQCBDU1NQYXJzZXJTZWxl
Y3RvciogQ1NTUGFyc2VyU2VsZWN0b3I6OnBhCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK0NT
U1BhcnNlclNlbGVjdG9yKiBDU1NQYXJzZXJTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9DbGFzc1NlbGVj
dG9yRnJvbVN0cmluZ1ZpZXcoU3RyaW5nVmlldyYgcHNldWRvVHlwZVN0cmluZykKK3sKKyAgICBp
ZiAocHNldWRvVHlwZVN0cmluZy5sZW5ndGgoKSAmJiBwc2V1ZG9UeXBlU3RyaW5nW3BzZXVkb1R5
cGVTdHJpbmcubGVuZ3RoKCkgLSAxXSA9PSAnKCcpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIAorICAgIFBzZXVkb0NsYXNzT3JDb21wYXRpYmlsaXR5UHNldWRvRWxlbWVudCBwc2V1ZG9U
eXBlID0gcGFyc2VQc2V1ZG9DbGFzc0FuZENvbXBhdGliaWxpdHlFbGVtZW50U3RyaW5nKHBzZXVk
b1R5cGVTdHJpbmcpOworICAgIGlmIChwc2V1ZG9UeXBlLnBzZXVkb0NsYXNzICE9IENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzc1Vua25vd24pIHsKKyAgICAgICAgYXV0byBzZWxlY3RvciA9IHN0ZDo6
bWFrZV91bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7CisgICAgICAgIHNlbGVjdG9yLT5tX3Nl
bGVjdG9yLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpOworICAgICAgICBzZWxl
Y3Rvci0+bV9zZWxlY3Rvci0+c2V0UHNldWRvQ2xhc3NUeXBlKHBzZXVkb1R5cGUucHNldWRvQ2xh
c3MpOworICAgICAgICByZXR1cm4gc2VsZWN0b3IucmVsZWFzZSgpOworICAgIH0KKyAgICBpZiAo
cHNldWRvVHlwZS5jb21wYXRpYmlsaXR5UHNldWRvRWxlbWVudCAhPSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRWxlbWVudFVua25vd24pIHsKKyAgICAgICAgYXV0byBzZWxlY3RvciA9IHN0ZDo6bWFrZV91
bmlxdWU8Q1NTUGFyc2VyU2VsZWN0b3I+KCk7CisgICAgICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9y
LT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCk7CisgICAgICAgIHNlbGVjdG9y
LT5tX3NlbGVjdG9yLT5zZXRQc2V1ZG9FbGVtZW50VHlwZShwc2V1ZG9UeXBlLmNvbXBhdGliaWxp
dHlQc2V1ZG9FbGVtZW50KTsKKyAgICAgICAgQXRvbWljU3RyaW5nIG5hbWUgPSBwc2V1ZG9UeXBl
U3RyaW5nLnRvQXRvbWljU3RyaW5nKCk7CisgICAgICAgIHNlbGVjdG9yLT5tX3NlbGVjdG9yLT5z
ZXRWYWx1ZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdG9yLnJlbGVhc2UoKTsKKyAgICB9
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIENTU1BhcnNlclNlbGVjdG9yOjpDU1NQYXJzZXJT
ZWxlY3RvcigpCiAgICAgOiBtX3NlbGVjdG9yKHN0ZDo6bWFrZV91bmlxdWU8Q1NTU2VsZWN0b3I+
KCkpCiB7CkBAIC0zNDksNyArMzk0LDEyIEBAIHZvaWQgQ1NTUGFyc2VyU2VsZWN0b3I6OnNldExh
bmdBcmd1bWVudEwKICAgICAgICAgYXJndW1lbnRMaXN0LT5hcHBlbmQobGFuZ3VhZ2VBcmd1bWVu
dCk7CiAgICAgbV9zZWxlY3Rvci0+c2V0TGFuZ0FyZ3VtZW50TGlzdChXVEZNb3ZlKGFyZ3VtZW50
TGlzdCkpOwogfQotCisgICAgCit2b2lkIENTU1BhcnNlclNlbGVjdG9yOjpzZXRTZWxlY3Rvckxp
c3Qoc3RkOjp1bmlxdWVfcHRyPENTU1NlbGVjdG9yTGlzdD4gc2VsZWN0b3JMaXN0KQoreworICAg
IG1fc2VsZWN0b3ItPnNldFNlbGVjdG9yTGlzdChXVEZNb3ZlKHNlbGVjdG9yTGlzdCkpOworfQor
ICAgIAogdm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6c2V0UHNldWRvQ2xhc3NWYWx1ZShjb25zdCBD
U1NQYXJzZXJTdHJpbmcmIHBzZXVkb0NsYXNzU3RyaW5nKQogewogICAgIEFTU0VSVChtX3NlbGVj
dG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyk7CkBAIC00MjUsNiArNDc1
LDE1IEBAIHZvaWQgQ1NTUGFyc2VyU2VsZWN0b3I6OmFwcGVuZFRhZ0hpc3RvcnkKICAgICBjYXNl
IENTU1BhcnNlclNlbGVjdG9yQ29tYmluYXRvcjo6SW5kaXJlY3RBZGphY2VudDoKICAgICAgICAg
c2VsZWN0b3JSZWxhdGlvbiA9IENTU1NlbGVjdG9yOjpJbmRpcmVjdEFkamFjZW50OwogICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENTU1BhcnNlclNlbGVjdG9yQ29tYmluYXRvcjo6U2hhZG93RGVl
cDoKKyAgICAgICAgc2VsZWN0b3JSZWxhdGlvbiA9IENTU1NlbGVjdG9yOjpTaGFkb3dEZWVwOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1BhcnNlclNlbGVjdG9yQ29tYmluYXRvcjo6U2hh
ZG93UHNldWRvOgorICAgICAgICBzZWxlY3RvclJlbGF0aW9uID0gQ1NTU2VsZWN0b3I6OlNoYWRv
d1BzZXVkbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQYXJzZXJTZWxlY3RvckNvbWJp
bmF0b3I6OlNoYWRvd1Nsb3Q6CisgICAgICAgIHNlbGVjdG9yUmVsYXRpb24gPSBDU1NTZWxlY3Rv
cjo6U2hhZG93U2xvdDsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGVuZC0+c2V0UmVsYXRp
b24oc2VsZWN0b3JSZWxhdGlvbik7CiAKQEAgLTQ0Nyw1ICs1MDYsMTcgQEAgdm9pZCBDU1NQYXJz
ZXJTZWxlY3Rvcjo6cHJlcGVuZFRhZ1NlbGVjdAogICAgIG1fc2VsZWN0b3ItPnNldFJlbGF0aW9u
KENTU1NlbGVjdG9yOjpTdWJTZWxlY3Rvcik7CiB9CiAKK3N0ZDo6dW5pcXVlX3B0cjxDU1NQYXJz
ZXJTZWxlY3Rvcj4gQ1NTUGFyc2VyU2VsZWN0b3I6OnJlbGVhc2VUYWdIaXN0b3J5KCkKK3sKKyAg
ICBzZXRSZWxhdGlvbihDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpOworICAgIHJldHVybiBXVEZN
b3ZlKG1fdGFnSGlzdG9yeSk7Cit9CisKKy8vIEZJWE1FLU5FV1BBUlNFUjogQWRkIHN1cHBvcnQg
Zm9yIDpob3N0LWNvbnRleHQKK2Jvb2wgQ1NTUGFyc2VyU2VsZWN0b3I6OmlzSG9zdFBzZXVkb1Nl
bGVjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzSG9zdDsKK30KKwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlclZhbHVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmgJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE5Myw3ICsxOTMsMTAgQEAgZW51bSBjbGFzcyBDU1NQYXJzZXJTZWxlY3RvckNvbWJpbmF0b3Ig
ewogICAgIERlc2NlbmRhbnREb3VibGVDaGlsZCwKICNlbmRpZgogICAgIERpcmVjdEFkamFjZW50
LAotICAgIEluZGlyZWN0QWRqYWNlbnQKKyAgICBJbmRpcmVjdEFkamFjZW50LAorICAgIFNoYWRv
d1BzZXVkbywgLy8gU3BlY2lhbCBjYXNlIG9mIHNoYWRvdyBET00gcHNldWRvIGVsZW1lbnRzIC8g
c2hhZG93IHBzZXVkbyBlbGVtZW50CisgICAgU2hhZG93RGVlcCwgLy8gL2RlZXAvIGNvbWJpbmF0
b3IKKyAgICBTaGFkb3dTbG90IC8vIHNsb3R0ZWQgdG8gPHNsb3Q+IGUKIH07CiAKIGNsYXNzIENT
U1BhcnNlclNlbGVjdG9yIHsKQEAgLTIwNiw2ICsyMDksOSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IENTU1BhcnNlclNlbGVjdG9yKiBwYXJzZVBzZXVkb0NsYXNzSG9zdEZ1bmN0aW9uU2VsZWN0b3Io
Y29uc3QgQ1NTUGFyc2VyU3RyaW5nJiBmdW5jdGlvbklkZW50aWZpZXIsIENTU1BhcnNlclNlbGVj
dG9yKik7CiAgICAgc3RhdGljIENTU1BhcnNlclNlbGVjdG9yKiBwYXJzZVBzZXVkb0NsYXNzQW5k
Q29tcGF0aWJpbGl0eUVsZW1lbnRTZWxlY3RvcihDU1NQYXJzZXJTdHJpbmcmIHBzZXVkb1R5cGVT
dHJpbmcpOwogCisgICAgc3RhdGljIENTU1BhcnNlclNlbGVjdG9yKiBwYXJzZVBzZXVkb0NsYXNz
U2VsZWN0b3JGcm9tU3RyaW5nVmlldyhTdHJpbmdWaWV3Jik7CisgICAgc3RhdGljIENTU1BhcnNl
clNlbGVjdG9yKiBwYXJzZVBzZXVkb0VsZW1lbnRTZWxlY3RvckZyb21TdHJpbmdWaWV3KFN0cmlu
Z1ZpZXcmKTsKKyAgICAKICAgICBDU1NQYXJzZXJTZWxlY3RvcigpOwogICAgIGV4cGxpY2l0IENT
U1BhcnNlclNlbGVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB+Q1NTUGFyc2VyU2Vs
ZWN0b3IoKTsKQEAgLTIyMCw4ICsyMjYsMTMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmVsYXRp
b24oQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHZhbHVlKSB7IG1fc2VsZWN0b3ItPnNldFJlbGF0aW9u
KHZhbHVlKTsgfQogICAgIHZvaWQgc2V0Rm9yUGFnZSgpIHsgbV9zZWxlY3Rvci0+c2V0Rm9yUGFn
ZSgpOyB9CiAKKyAgICBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0Y2goKSBjb25zdCB7IHJldHVybiBt
X3NlbGVjdG9yLT5tYXRjaCgpOyB9CisgICAgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRUeXBl
IHBzZXVkb0VsZW1lbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rvci0+cHNldWRvRWxl
bWVudFR5cGUoKTsgfQorICAgIGNvbnN0IENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0KCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCk7IH0KKwogICAgIHZvaWQg
YWRvcHRTZWxlY3RvclZlY3RvcihWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVj
dG9yPj4mIHNlbGVjdG9yVmVjdG9yKTsKICAgICB2b2lkIHNldExhbmdBcmd1bWVudExpc3QoY29u
c3QgVmVjdG9yPENTU1BhcnNlclN0cmluZz4mIHN0cmluZ1ZlY3Rvcik7CisgICAgdm9pZCBzZXRT
ZWxlY3Rvckxpc3Qoc3RkOjp1bmlxdWVfcHRyPENTU1NlbGVjdG9yTGlzdD4pOwogCiAgICAgdm9p
ZCBzZXRQc2V1ZG9DbGFzc1ZhbHVlKGNvbnN0IENTU1BhcnNlclN0cmluZyYgcHNldWRvQ2xhc3NT
dHJpbmcpOwogICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUgcHNldWRvQ2xhc3NUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCk7IH0KQEAgLTIz
OSw2ICsyNTAsMTEgQEAgcHVibGljOgogICAgIGJvb2wgaGFzU2hhZG93RGVzY2VuZGFudCgpIGNv
bnN0OwogICAgIGJvb2wgbWF0Y2hlc1BzZXVkb0VsZW1lbnQoKSBjb25zdDsKIAorICAgIGJvb2wg
aXNIb3N0UHNldWRvU2VsZWN0b3IoKSBjb25zdDsKKworICAgIC8vIEZJWE1FLU5FV1BBUlNFUjog
TWlzc2luZyAic2hhZG93IgorICAgIGJvb2wgbmVlZHNJbXBsaWNpdFNoYWRvd0NvbWJpbmF0b3JG
b3JNYXRjaGluZygpIGNvbnN0IHsgcmV0dXJuIHBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRDdXN0b20gfHwgcHNldWRvRWxlbWVudFR5cGUoKSA9
PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFVzZXJBZ2VudEN1c3RvbSB8fCBwc2V1ZG9FbGVt
ZW50VHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50V2ViS2l0Q3VzdG9tTGVnYWN5
UHJlZml4ZWQgfHwgcHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxl
bWVudEN1ZSB8fCBwc2V1ZG9FbGVtZW50VHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVt
ZW50U2xvdHRlZDsgfQorCiAgICAgQ1NTUGFyc2VyU2VsZWN0b3IqIHRhZ0hpc3RvcnkoKSBjb25z
dCB7IHJldHVybiBtX3RhZ0hpc3RvcnkuZ2V0KCk7IH0KICAgICB2b2lkIHNldFRhZ0hpc3Rvcnko
c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzZWxlY3RvcikgeyBtX3RhZ0hpc3Rv
cnkgPSBXVEZNb3ZlKHNlbGVjdG9yKTsgfQogICAgIHZvaWQgY2xlYXJUYWdIaXN0b3J5KCkgeyBt
X3RhZ0hpc3RvcnkucmVzZXQoKTsgfQpAQCAtMjQ2LDYgKzI2Miw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGFwcGVuZFRhZ0hpc3RvcnkoQ1NTU2VsZWN0b3I6OlJlbGF0aW9uLCBzdGQ6OnVuaXF1ZV9w
dHI8Q1NTUGFyc2VyU2VsZWN0b3I+KTsKICAgICB2b2lkIGFwcGVuZFRhZ0hpc3RvcnkoQ1NTUGFy
c2VyU2VsZWN0b3JDb21iaW5hdG9yLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+
KTsKICAgICB2b2lkIHByZXBlbmRUYWdTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgYm9v
bCB0YWdJc0Zvck5hbWVzcGFjZVJ1bGUgPSBmYWxzZSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPENT
U1BhcnNlclNlbGVjdG9yPiByZWxlYXNlVGFnSGlzdG9yeSgpOwogCiBwcml2YXRlOgogI2lmIEVO
QUJMRShDU1NfU0VMRUNUT1JTX0xFVkVMNCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmgJKHJldmlzaW9uIDIwNTQ5OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNyArNTUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgY29uc3VtZUNTU1dpZGVLZXl3b3JkKENT
U1Byb3BlcnR5SUQgdW5yZXNvbHZlZFByb3BlcnR5LCBib29sIGltcG9ydGFudCk7CiAgICAgY29u
c3QgQ1NTVmFsdWUqIHBhcnNlU2luZ2xlVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTUHJvcGVydHlJ
RCA9IENTU1Byb3BlcnR5SW52YWxpZCk7CiAKLSAgICBib29sIGluUXVpcmtzTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGV4dC5tb2RlID09IENTU1F1aXJrc01vZGU7IH0KKyAgICBib29sIGlu
UXVpcmtzTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5tb2RlID09IEhUTUxRdWlya3NN
b2RlOyB9CiAKICAgICBib29sIHBhcnNlVmlld3BvcnREZXNjcmlwdG9yKENTU1Byb3BlcnR5SUQg
cHJvcElkLCBib29sIGltcG9ydGFudCk7CiAgICAgYm9vbCBwYXJzZUZvbnRGYWNlRGVzY3JpcHRv
cihDU1NQcm9wZXJ0eUlEKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTU2Vs
ZWN0b3JQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTU2VsZWN0b3JQYXJzZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzcxIEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6Cisv
LworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisvLyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisv
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDU1NTZWxlY3RvclBhcnNlci5oIgorCisjaW5j
bHVkZSAiQ1NTUGFyc2VyTW9kZS5oIgorI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgorI2lu
Y2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitDU1NTZWxlY3Rvckxpc3QgQ1NTU2VsZWN0b3JQYXJzZXI6OnBhcnNl
U2VsZWN0b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgY29udGV4dCwgU3R5bGVTaGVldENvbnRlbnRzKiBzdHlsZVNoZWV0KQoreworICAgIENTU1Nl
bGVjdG9yUGFyc2VyIHBhcnNlcihjb250ZXh0LCBzdHlsZVNoZWV0KTsKKyAgICByYW5nZS5jb25z
dW1lV2hpdGVzcGFjZSgpOworICAgIENTU1NlbGVjdG9yTGlzdCByZXN1bHQgPSBwYXJzZXIuY29u
c3VtZUNvbXBsZXhTZWxlY3Rvckxpc3QocmFuZ2UpOworICAgIGlmICghcmFuZ2UuYXRFbmQoKSkK
KyAgICAgICAgcmV0dXJuIENTU1NlbGVjdG9yTGlzdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK0NTU1NlbGVjdG9yUGFyc2VyOjpDU1NTZWxlY3RvclBhcnNlcihjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiBjb250ZXh0LCBTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxlU2hlZXQpCisgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fc3R5bGVTaGVldChzdHlsZVNoZWV0KQoreworfQor
CitDU1NTZWxlY3Rvckxpc3QgQ1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVDb21wbGV4U2VsZWN0
b3JMaXN0KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+PiBzZWxlY3Rvckxpc3Q7CisgICAgc3RkOjp1bmlx
dWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzZWxlY3RvciA9IGNvbnN1bWVDb21wbGV4U2VsZWN0
b3IocmFuZ2UpOworICAgIGlmICghc2VsZWN0b3IpCisgICAgICAgIHJldHVybiBDU1NTZWxlY3Rv
ckxpc3QoKTsKKyAgICBzZWxlY3Rvckxpc3QuYXBwZW5kKFdURk1vdmUoc2VsZWN0b3IpKTsKKyAg
ICB3aGlsZSAoIXJhbmdlLmF0RW5kKCkgJiYgcmFuZ2UucGVlaygpLnR5cGUoKSA9PSBDb21tYVRv
a2VuKSB7CisgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAg
ICAgIHNlbGVjdG9yID0gY29uc3VtZUNvbXBsZXhTZWxlY3RvcihyYW5nZSk7CisgICAgICAgIGlm
ICghc2VsZWN0b3IpCisgICAgICAgICAgICByZXR1cm4gQ1NTU2VsZWN0b3JMaXN0KCk7CisgICAg
ICAgIHNlbGVjdG9yTGlzdC5hcHBlbmQoV1RGTW92ZShzZWxlY3RvcikpOworICAgIH0KKworICAg
IENTU1NlbGVjdG9yTGlzdCBsaXN0OworICAgIGlmIChtX2ZhaWxlZFBhcnNpbmcpCisgICAgICAg
IHJldHVybiBsaXN0OworICAgIGxpc3QuYWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3Rvckxpc3Qp
OworICAgIHJldHVybiBsaXN0OworfQorCitDU1NTZWxlY3Rvckxpc3QgQ1NTU2VsZWN0b3JQYXJz
ZXI6OmNvbnN1bWVDb21wb3VuZFNlbGVjdG9yTGlzdChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKK3sKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4gc2Vs
ZWN0b3JMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2VsZWN0
b3IgPSBjb25zdW1lQ29tcG91bmRTZWxlY3RvcihyYW5nZSk7CisgICAgcmFuZ2UuY29uc3VtZVdo
aXRlc3BhY2UoKTsKKyAgICBpZiAoIXNlbGVjdG9yKQorICAgICAgICByZXR1cm4gQ1NTU2VsZWN0
b3JMaXN0KCk7CisgICAgc2VsZWN0b3JMaXN0LmFwcGVuZChXVEZNb3ZlKHNlbGVjdG9yKSk7Cisg
ICAgd2hpbGUgKCFyYW5nZS5hdEVuZCgpICYmIHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gQ29tbWFU
b2tlbikgeworICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAg
ICAgICBzZWxlY3RvciA9IGNvbnN1bWVDb21wb3VuZFNlbGVjdG9yKHJhbmdlKTsKKyAgICAgICAg
cmFuZ2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICAgICAgaWYgKCFzZWxlY3RvcikKKyAgICAg
ICAgICAgIHJldHVybiBDU1NTZWxlY3Rvckxpc3QoKTsKKyAgICAgICAgc2VsZWN0b3JMaXN0LmFw
cGVuZChXVEZNb3ZlKHNlbGVjdG9yKSk7CisgICAgfQorCisgICAgQ1NTU2VsZWN0b3JMaXN0IGxp
c3Q7CisgICAgaWYgKG1fZmFpbGVkUGFyc2luZykKKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAg
bGlzdC5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yTGlzdCk7CisgICAgcmV0dXJuIGxpc3Q7
Cit9CisKK25hbWVzcGFjZSB7CisKK2VudW0gQ29tcG91bmRTZWxlY3RvckZsYWdzIHsKKyAgICBI
YXNQc2V1ZG9FbGVtZW50Rm9yUmlnaHRtb3N0Q29tcG91bmQgPSAxIDw8IDAsCisgICAgSGFzQ29u
dGVudFBzZXVkb0VsZW1lbnQgPSAxIDw8IDEKK307CisKK3Vuc2lnbmVkIGV4dHJhY3RDb21wb3Vu
ZEZsYWdzKGNvbnN0IENTU1BhcnNlclNlbGVjdG9yJiBzaW1wbGVTZWxlY3RvciwgQ1NTUGFyc2Vy
TW9kZSBwYXJzZXJNb2RlKQoreworICAgIGlmIChzaW1wbGVTZWxlY3Rvci5tYXRjaCgpICE9IENT
U1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBGSVhN
RS1ORVdQQVJTRVI6IFRoZXNlIGRvbid0IGV4aXN0IGZvciB1cywgc28gbWF5IG5lZWQgdG8gcmV2
aXNpdC4KKyAgICAvLyBpZiAoc2ltcGxlU2VsZWN0b3IucHNldWRvRWxlbWVudFR5cGUoKSA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ29udGVudCkKKyAgICAvLyAgICByZXR1cm4gSGFzQ29udGVudFBz
ZXVkb0VsZW1lbnQ7CisgICAgLy8gaWYgKHNpbXBsZVNlbGVjdG9yLnBzZXVkb0VsZW1lbnRUeXBl
KCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1NoYWRvdykKKyAgICAvLyAgICByZXR1cm4gMDsKKwor
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYx
NzQ3CisgICAgLy8gVGhlIFVBU2hlZXRNb2RlIGNoZWNrIGlzIGEgd29yay1hcm91bmQgdG8gYWxs
b3cgdGhpcyBzZWxlY3RvciBpbiBtZWRpYUNvbnRyb2xzKE5ldykuY3NzOgorICAgIC8vIGlucHV0
W3R5cGU9InJhbmdlIiBpXTo6LXdlYmtpdC1tZWRpYS1zbGlkZXItY29udGFpbmVyID4gZGl2IHsK
KyAgICBpZiAocGFyc2VyTW9kZSA9PSBVQVNoZWV0TW9kZSAmJiBzaW1wbGVTZWxlY3Rvci5wc2V1
ZG9FbGVtZW50VHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50V2ViS2l0Q3VzdG9t
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gSGFzUHNldWRvRWxlbWVudEZvclJpZ2h0
bW9zdENvbXBvdW5kOworfQorCit9IC8vIG5hbWVzcGFjZQorCitzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+IENTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQ29tcGxleFNlbGVjdG9y
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQ
YXJzZXJTZWxlY3Rvcj4gc2VsZWN0b3IgPSBjb25zdW1lQ29tcG91bmRTZWxlY3RvcihyYW5nZSk7
CisgICAgaWYgKCFzZWxlY3RvcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKworICAgIHVu
c2lnbmVkIHByZXZpb3VzQ29tcG91bmRGbGFncyA9IDA7CisKKyAgICBmb3IgKENTU1BhcnNlclNl
bGVjdG9yKiBzaW1wbGUgPSBzZWxlY3Rvci5nZXQoKTsgc2ltcGxlICYmICFwcmV2aW91c0NvbXBv
dW5kRmxhZ3M7IHNpbXBsZSA9IHNpbXBsZS0+dGFnSGlzdG9yeSgpKQorICAgICAgICBwcmV2aW91
c0NvbXBvdW5kRmxhZ3MgfD0gZXh0cmFjdENvbXBvdW5kRmxhZ3MoKnNpbXBsZSwgbV9jb250ZXh0
Lm1vZGUpOworCisgICAgd2hpbGUgKENTU1NlbGVjdG9yOjpSZWxhdGlvbiBjb21iaW5hdG9yID0g
Y29uc3VtZUNvbWJpbmF0b3IocmFuZ2UpKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQ
YXJzZXJTZWxlY3Rvcj4gbmV4dFNlbGVjdG9yID0gY29uc3VtZUNvbXBvdW5kU2VsZWN0b3IocmFu
Z2UpOworICAgICAgICBpZiAoIW5leHRTZWxlY3RvcikKKyAgICAgICAgICAgIHJldHVybiBjb21i
aW5hdG9yID09IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50ID8gV1RGTW92ZShzZWxlY3RvcikgOiBu
dWxscHRyOworICAgICAgICBpZiAocHJldmlvdXNDb21wb3VuZEZsYWdzICYgSGFzUHNldWRvRWxl
bWVudEZvclJpZ2h0bW9zdENvbXBvdW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIENTU1BhcnNlclNlbGVjdG9yKiBlbmQgPSBuZXh0U2VsZWN0b3IuZ2V0KCk7CisgICAg
ICAgIHVuc2lnbmVkIGNvbXBvdW5kRmxhZ3MgPSBleHRyYWN0Q29tcG91bmRGbGFncygqZW5kLCBt
X2NvbnRleHQubW9kZSk7CisgICAgICAgIHdoaWxlIChlbmQtPnRhZ0hpc3RvcnkoKSkgeworICAg
ICAgICAgICAgZW5kID0gZW5kLT50YWdIaXN0b3J5KCk7CisgICAgICAgICAgICBjb21wb3VuZEZs
YWdzIHw9IGV4dHJhY3RDb21wb3VuZEZsYWdzKCplbmQsIG1fY29udGV4dC5tb2RlKTsKKyAgICAg
ICAgfQorICAgICAgICBlbmQtPnNldFJlbGF0aW9uKGNvbWJpbmF0b3IpOworICAgICAgICAvLyBG
SVhNRS1ORVdQQVJTRVI6IFNoYWRvdyBzdHVmZiB0aGF0IHdlIGRvbid0IGhhdmUuCisgICAgICAg
IC8vIGlmIChwcmV2aW91c0NvbXBvdW5kRmxhZ3MgJiBIYXNDb250ZW50UHNldWRvRWxlbWVudCkK
KyAgICAgICAgLy8gICAgZW5kLT5zZXRSZWxhdGlvbklzQWZmZWN0ZWRCeVBzZXVkb0NvbnRlbnQo
KTsKKyAgICAgICAgcHJldmlvdXNDb21wb3VuZEZsYWdzID0gY29tcG91bmRGbGFnczsKKyAgICAg
ICAgZW5kLT5zZXRUYWdIaXN0b3J5KFdURk1vdmUoc2VsZWN0b3IpKTsKKworICAgICAgICBzZWxl
Y3RvciA9IFdURk1vdmUobmV4dFNlbGVjdG9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2VsZWN0
b3I7Cit9CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgaXNTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NUeXBlIHBzZXVkbykKK3sKKyAgICBzd2l0Y2ggKHBzZXVkbykg
eworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRW5hYmxlZDoKKyAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Rpc2FibGVkOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzSG92ZXI6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmU6
CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3Jpem9udGFsOgorICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmVydGljYWw6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NEZWNyZW1lbnQ6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NJ
bmNyZW1lbnQ6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NTdGFydDoKKyAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0VuZDoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0RvdWJsZUJ1dHRvbjoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c1NpbmdsZUJ1dHRvbjoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc05vQnV0dG9u
OgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQ29ybmVyUHJlc2VudDoKKyAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1dpbmRvd0luYWN0aXZlOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
Citib29sIGlzVXNlckFjdGlvblBzZXVkb0NsYXNzKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5
cGUgcHNldWRvKQoreworICAgIHN3aXRjaCAocHNldWRvKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NIb3ZlcjoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Zv
Y3VzOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQWN0aXZlOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCitib29sIGlzUHNldWRvQ2xhc3NWYWxpZEFmdGVyUHNldWRvRWxlbWVudChDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NUeXBlIHBzZXVkb0NsYXNzLCBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVu
dFR5cGUgY29tcG91bmRQc2V1ZG9FbGVtZW50KQoreworICAgIHN3aXRjaCAoY29tcG91bmRQc2V1
ZG9FbGVtZW50KSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFJlc2l6ZXI6
CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFNjcm9sbGJhcjoKKyAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50U2Nyb2xsYmFyQ29ybmVyOgorICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRTY3JvbGxiYXJCdXR0b246CisgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRWxlbWVudFNjcm9sbGJhclRodW1iOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0VsZW1lbnRTY3JvbGxiYXJUcmFjazoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9FbGVtZW50U2Nyb2xsYmFyVHJhY2tQaWVjZToKKyAgICAgICAgcmV0dXJuIGlzU2Nyb2xsYmFy
UHNldWRvQ2xhc3MocHNldWRvQ2xhc3MpOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Vs
ZW1lbnRTZWxlY3Rpb246CisgICAgICAgIHJldHVybiBwc2V1ZG9DbGFzcyA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3NXaW5kb3dJbmFjdGl2ZTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9FbGVtZW50V2ViS2l0Q3VzdG9tOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1l
bnRXZWJLaXRDdXN0b21MZWdhY3lQcmVmaXhlZDoKKyAgICAgICAgcmV0dXJuIGlzVXNlckFjdGlv
blBzZXVkb0NsYXNzKHBzZXVkb0NsYXNzKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitib29sIGlzU2ltcGxlU2VsZWN0b3JWYWxpZEFmdGVyUHNldWRv
RWxlbWVudChjb25zdCBDU1NQYXJzZXJTZWxlY3RvciYgc2ltcGxlU2VsZWN0b3IsIENTU1NlbGVj
dG9yOjpQc2V1ZG9FbGVtZW50VHlwZSBjb21wb3VuZFBzZXVkb0VsZW1lbnQpCit7CisgICAgaWYg
KGNvbXBvdW5kUHNldWRvRWxlbWVudCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFVua25v
d24pCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogVGhpcyBk
b2Vzbid0IGV4aXN0IGZvciB1cy4KKyAgICAvLyBpZiAoY29tcG91bmRQc2V1ZG9FbGVtZW50ID09
IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50Q29udGVudCkKKyAgICAvLyAgICByZXR1cm4gc2lt
cGxlU2VsZWN0b3IubWF0Y2goKSAhPSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudDsKKyAgICBp
ZiAoc2ltcGxlU2VsZWN0b3IubWF0Y2goKSAhPSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NUeXBlIHBz
ZXVkbyA9IHNpbXBsZVNlbGVjdG9yLnBzZXVkb0NsYXNzVHlwZSgpOworICAgIGlmIChwc2V1ZG8g
PT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTm90KSB7CisgICAgICAgIEFTU0VSVChzaW1wbGVT
ZWxlY3Rvci5zZWxlY3Rvckxpc3QoKSk7CisgICAgICAgIEFTU0VSVChzaW1wbGVTZWxlY3Rvci5z
ZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKSk7CisgICAgICAgIEFTU0VSVCghc2ltcGxlU2VsZWN0b3Iu
c2VsZWN0b3JMaXN0KCktPmZpcnN0KCktPnRhZ0hpc3RvcnkoKSk7CisgICAgICAgIHBzZXVkbyA9
IHNpbXBsZVNlbGVjdG9yLnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpLT5wc2V1ZG9DbGFzc1R5cGUo
KTsKKyAgICB9CisgICAgcmV0dXJuIGlzUHNldWRvQ2xhc3NWYWxpZEFmdGVyUHNldWRvRWxlbWVu
dChwc2V1ZG8sIGNvbXBvdW5kUHNldWRvRWxlbWVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisK
K3N0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gQ1NTU2VsZWN0b3JQYXJzZXI6OmNv
bnN1bWVDb21wb3VuZFNlbGVjdG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gY29tcG91bmRTZWxlY3RvcjsKKwor
ICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VQcmVmaXg7CisgICAgQXRvbWljU3RyaW5nIGVsZW1l
bnROYW1lOworICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50VHlwZSBjb21wb3VuZFBzZXVk
b0VsZW1lbnQgPSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFVua25vd247CisgICAgaWYgKCFj
b25zdW1lTmFtZShyYW5nZSwgZWxlbWVudE5hbWUsIG5hbWVzcGFjZVByZWZpeCkpIHsKKyAgICAg
ICAgY29tcG91bmRTZWxlY3RvciA9IGNvbnN1bWVTaW1wbGVTZWxlY3RvcihyYW5nZSk7CisgICAg
ICAgIGlmICghY29tcG91bmRTZWxlY3RvcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICBpZiAoY29tcG91bmRTZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRWxlbWVudCkKKyAgICAgICAgICAgIGNvbXBvdW5kUHNldWRvRWxlbWVudCA9IGNvbXBvdW5k
U2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCk7CisgICAgfQorICAgIGlmIChtX2NvbnRleHQu
aXNIVE1MRG9jdW1lbnQpCisgICAgICAgIGVsZW1lbnROYW1lID0gZWxlbWVudE5hbWUuY29udmVy
dFRvQVNDSUlMb3dlcmNhc2UoKTsKKworICAgIHdoaWxlIChzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFy
c2VyU2VsZWN0b3I+IHNpbXBsZVNlbGVjdG9yID0gY29uc3VtZVNpbXBsZVNlbGVjdG9yKHJhbmdl
KSkgeworICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MTc0NworICAgICAgICAvLyBUaGUgVUFTaGVldE1vZGUgY2hlY2sgaXMgYSB3b3Jr
LWFyb3VuZCB0byBhbGxvdyB0aGlzIHNlbGVjdG9yIGluIG1lZGlhQ29udHJvbHMoTmV3KS5jc3M6
CisgICAgICAgIC8vIHZpZGVvOjotd2Via2l0LW1lZGlhLXRleHQtdHJhY2stcmVnaW9uLWNvbnRh
aW5lci5zY3JvbGxpbmcKKyAgICAgICAgaWYgKG1fY29udGV4dC5tb2RlICE9IFVBU2hlZXRNb2Rl
ICYmICFpc1NpbXBsZVNlbGVjdG9yVmFsaWRBZnRlclBzZXVkb0VsZW1lbnQoKnNpbXBsZVNlbGVj
dG9yLmdldCgpLCBjb21wb3VuZFBzZXVkb0VsZW1lbnQpKSB7CisgICAgICAgICAgICBtX2ZhaWxl
ZFBhcnNpbmcgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHNpbXBsZVNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1
ZG9FbGVtZW50KQorICAgICAgICAgICAgY29tcG91bmRQc2V1ZG9FbGVtZW50ID0gc2ltcGxlU2Vs
ZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCk7CisKKyAgICAgICAgaWYgKGNvbXBvdW5kU2VsZWN0
b3IpCisgICAgICAgICAgICBjb21wb3VuZFNlbGVjdG9yID0gYWRkU2ltcGxlU2VsZWN0b3JUb0Nv
bXBvdW5kKFdURk1vdmUoY29tcG91bmRTZWxlY3RvciksIFdURk1vdmUoc2ltcGxlU2VsZWN0b3Ip
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcG91bmRTZWxlY3RvciA9IFdURk1vdmUo
c2ltcGxlU2VsZWN0b3IpOworICAgIH0KKworICAgIGlmICghY29tcG91bmRTZWxlY3Rvcikgewor
ICAgICAgICBBdG9taWNTdHJpbmcgbmFtZXNwYWNlVVJJID0gZGV0ZXJtaW5lTmFtZXNwYWNlKG5h
bWVzcGFjZVByZWZpeCk7CisgICAgICAgIGlmIChuYW1lc3BhY2VVUkkuaXNOdWxsKCkpIHsKKyAg
ICAgICAgICAgIG1fZmFpbGVkUGFyc2luZyA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfQorICAgICAgICBpZiAobmFtZXNwYWNlVVJJID09IGRlZmF1bHROYW1l
c3BhY2UoKSkKKyAgICAgICAgICAgIG5hbWVzcGFjZVByZWZpeCA9IG51bGxBdG9tOworICAgICAg
ICAKKyAgICAgICAgQ1NTUGFyc2VyU2VsZWN0b3IqIHJhd1NlbGVjdG9yID0gbmV3IENTU1BhcnNl
clNlbGVjdG9yKFF1YWxpZmllZE5hbWUobmFtZXNwYWNlUHJlZml4LCBlbGVtZW50TmFtZSwgbmFt
ZXNwYWNlVVJJKSk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4g
c2VsZWN0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+KHJhd1NlbGVjdG9y
KTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdG9yOworICAgIH0KKyAgICBwcmVwZW5kVHlwZVNlbGVj
dG9ySWZOZWVkZWQobmFtZXNwYWNlUHJlZml4LCBlbGVtZW50TmFtZSwgY29tcG91bmRTZWxlY3Rv
ci5nZXQoKSk7CisgICAgcmV0dXJuIHNwbGl0Q29tcG91bmRBdEltcGxpY2l0U2hhZG93Q3Jvc3Np
bmdDb21iaW5hdG9yKFdURk1vdmUoY29tcG91bmRTZWxlY3RvcikpOworfQorCitzdGQ6OnVuaXF1
ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lU2ltcGxl
U2VsZWN0b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgY29uc3QgQ1NTUGFy
c2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQ
YXJzZXJTZWxlY3Rvcj4gc2VsZWN0b3I7CisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIYXNoVG9r
ZW4pCisgICAgICAgIHNlbGVjdG9yID0gY29uc3VtZUlkKHJhbmdlKTsKKyAgICBlbHNlIGlmICh0
b2tlbi50eXBlKCkgPT0gRGVsaW1pdGVyVG9rZW4gJiYgdG9rZW4uZGVsaW1pdGVyKCkgPT0gJy4n
KQorICAgICAgICBzZWxlY3RvciA9IGNvbnN1bWVDbGFzcyhyYW5nZSk7CisgICAgZWxzZSBpZiAo
dG9rZW4udHlwZSgpID09IExlZnRCcmFja2V0VG9rZW4pCisgICAgICAgIHNlbGVjdG9yID0gY29u
c3VtZUF0dHJpYnV0ZShyYW5nZSk7CisgICAgZWxzZSBpZiAodG9rZW4udHlwZSgpID09IENvbG9u
VG9rZW4pCisgICAgICAgIHNlbGVjdG9yID0gY29uc3VtZVBzZXVkbyhyYW5nZSk7CisgICAgZWxz
ZQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIXNlbGVjdG9yKQorICAgICAgICBt
X2ZhaWxlZFBhcnNpbmcgPSB0cnVlOworICAgIHJldHVybiBzZWxlY3RvcjsKK30KKworYm9vbCBD
U1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZU5hbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IEF0b21pY1N0cmluZyYgbmFtZSwgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VQcmVmaXgpCit7Cisg
ICAgbmFtZSA9IG51bGxBdG9tOworICAgIG5hbWVzcGFjZVByZWZpeCA9IG51bGxBdG9tOworCisg
ICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIGZpcnN0VG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAg
aWYgKGZpcnN0VG9rZW4udHlwZSgpID09IElkZW50VG9rZW4pIHsKKyAgICAgICAgbmFtZSA9IGZp
cnN0VG9rZW4udmFsdWUoKS50b0F0b21pY1N0cmluZygpOworICAgICAgICByYW5nZS5jb25zdW1l
KCk7CisgICAgfSBlbHNlIGlmIChmaXJzdFRva2VuLnR5cGUoKSA9PSBEZWxpbWl0ZXJUb2tlbiAm
JiBmaXJzdFRva2VuLmRlbGltaXRlcigpID09ICcqJykgeworICAgICAgICBuYW1lID0gc3RhckF0
b207CisgICAgICAgIHJhbmdlLmNvbnN1bWUoKTsKKyAgICB9IGVsc2UgaWYgKGZpcnN0VG9rZW4u
dHlwZSgpID09IERlbGltaXRlclRva2VuICYmIGZpcnN0VG9rZW4uZGVsaW1pdGVyKCkgPT0gJ3wn
KSB7CisgICAgICAgIC8vIFRoaXMgaXMgYW4gZW1wdHkgbmFtZXNwYWNlLCB3aGljaCdsbCBnZXQg
YXNzaWduZWQgdGhpcyB2YWx1ZSBiZWxvdworICAgICAgICBuYW1lID0gZW1wdHlBdG9tOworICAg
IH0gZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5
cGUoKSAhPSBEZWxpbWl0ZXJUb2tlbiB8fCByYW5nZS5wZWVrKCkuZGVsaW1pdGVyKCkgIT0gJ3wn
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByYW5nZS5jb25zdW1lKCk7CisKKyAgICBuYW1l
c3BhY2VQcmVmaXggPSBuYW1lOworICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBuYW1lVG9rZW4g
PSByYW5nZS5jb25zdW1lKCk7CisgICAgaWYgKG5hbWVUb2tlbi50eXBlKCkgPT0gSWRlbnRUb2tl
bikgeworICAgICAgICBuYW1lID0gbmFtZVRva2VuLnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKTsK
KyAgICB9IGVsc2UgaWYgKG5hbWVUb2tlbi50eXBlKCkgPT0gRGVsaW1pdGVyVG9rZW4gJiYgbmFt
ZVRva2VuLmRlbGltaXRlcigpID09ICcqJykKKyAgICAgICAgbmFtZSA9IHN0YXJBdG9tOworICAg
IGVsc2UgeworICAgICAgICBuYW1lID0gbnVsbEF0b207CisgICAgICAgIG5hbWVzcGFjZVByZWZp
eCA9IG51bGxBdG9tOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gQ1NTU2VsZWN0
b3JQYXJzZXI6OmNvbnN1bWVJZChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBIYXNoVG9rZW4pOworICAgIGlmIChyYW5nZS5w
ZWVrKCkuZ2V0SGFzaFRva2VuVHlwZSgpICE9IEhhc2hUb2tlbklkKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9y
ID0gc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPihuZXcgQ1NTUGFyc2VyU2VsZWN0
b3IoKSk7CisgICAgc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9yOjpJZCk7CisgICAgQXRv
bWljU3RyaW5nIHZhbHVlID0gcmFuZ2UuY29uc3VtZSgpLnZhbHVlKCkudG9BdG9taWNTdHJpbmco
KTsKKyAgICBzZWxlY3Rvci0+c2V0VmFsdWUodmFsdWUpOworICAgIHJldHVybiBzZWxlY3RvcjsK
K30KKworc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZWxlY3RvclBhcnNl
cjo6Y29uc3VtZUNsYXNzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIEFTU0VS
VChyYW5nZS5wZWVrKCkudHlwZSgpID09IERlbGltaXRlclRva2VuKTsKKyAgICBBU1NFUlQocmFu
Z2UucGVlaygpLmRlbGltaXRlcigpID09ICcuJyk7CisgICAgcmFuZ2UuY29uc3VtZSgpOworICAg
IGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4pCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2VsZWN0b3Ig
PSBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+KG5ldyBDU1NQYXJzZXJTZWxlY3Rv
cigpKTsKKyAgICBzZWxlY3Rvci0+c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OkNsYXNzKTsKKyAgICBB
dG9taWNTdHJpbmcgdmFsdWUgPSByYW5nZS5jb25zdW1lKCkudmFsdWUoKS50b0F0b21pY1N0cmlu
ZygpOworICAgIHNlbGVjdG9yLT5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgcmV0dXJuIHNlbGVjdG9y
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1NlbGVjdG9yUGFy
c2VyOjpjb25zdW1lQXR0cmlidXRlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAg
IEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IExlZnRCcmFja2V0VG9rZW4pOworICAgIENT
U1BhcnNlclRva2VuUmFuZ2UgYmxvY2sgPSByYW5nZS5jb25zdW1lQmxvY2soKTsKKyAgICBibG9j
ay5jb25zdW1lV2hpdGVzcGFjZSgpOworCisgICAgQXRvbWljU3RyaW5nIG5hbWVzcGFjZVByZWZp
eDsKKyAgICBBdG9taWNTdHJpbmcgYXR0cmlidXRlTmFtZTsKKyAgICBpZiAoIWNvbnN1bWVOYW1l
KGJsb2NrLCBhdHRyaWJ1dGVOYW1lLCBuYW1lc3BhY2VQcmVmaXgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBibG9jay5jb25zdW1lV2hpdGVzcGFjZSgpOworCisgICAgaWYgKG1fY29u
dGV4dC5pc0hUTUxEb2N1bWVudCkKKyAgICAgICAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5h
bWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKKworICAgIEF0b21pY1N0cmluZyBuYW1lc3Bh
Y2VVUkkgPSBkZXRlcm1pbmVOYW1lc3BhY2UobmFtZXNwYWNlUHJlZml4KTsKKyAgICBpZiAobmFt
ZXNwYWNlVVJJLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFF1YWxp
ZmllZE5hbWUgcXVhbGlmaWVkTmFtZSA9IG5hbWVzcGFjZVByZWZpeC5pc051bGwoKQorICAgICAg
ICA/IFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0dHJpYnV0ZU5hbWUsIG51bGxBdG9tKQorICAg
ICAgICA6IFF1YWxpZmllZE5hbWUobmFtZXNwYWNlUHJlZml4LCBhdHRyaWJ1dGVOYW1lLCBuYW1l
c3BhY2VVUkkpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzZWxl
Y3RvciA9IHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4obmV3IENTU1BhcnNlclNl
bGVjdG9yKCkpOworCisgICAgaWYgKGJsb2NrLmF0RW5kKCkpIHsKKyAgICAgICAgc2VsZWN0b3It
PnNldEF0dHJpYnV0ZShxdWFsaWZpZWROYW1lLCBDU1NTZWxlY3Rvcjo6Q2FzZVNlbnNpdGl2ZSk7
CisgICAgICAgIHNlbGVjdG9yLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6U2V0KTsKKyAgICAgICAg
cmV0dXJuIHNlbGVjdG9yOworICAgIH0KKworICAgIHNlbGVjdG9yLT5zZXRNYXRjaChjb25zdW1l
QXR0cmlidXRlTWF0Y2goYmxvY2spKTsKKworICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBhdHRy
aWJ1dGVWYWx1ZSA9IGJsb2NrLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgaWYg
KGF0dHJpYnV0ZVZhbHVlLnR5cGUoKSAhPSBJZGVudFRva2VuICYmIGF0dHJpYnV0ZVZhbHVlLnR5
cGUoKSAhPSBTdHJpbmdUb2tlbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgc2VsZWN0
b3ItPnNldFZhbHVlKGF0dHJpYnV0ZVZhbHVlLnZhbHVlKCkudG9BdG9taWNTdHJpbmcoKSk7Cisg
ICAgc2VsZWN0b3ItPnNldEF0dHJpYnV0ZShxdWFsaWZpZWROYW1lLCBjb25zdW1lQXR0cmlidXRl
RmxhZ3MoYmxvY2spKTsKKworICAgIGlmICghYmxvY2suYXRFbmQoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIHNlbGVjdG9yOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+IENTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lUHNldWRvKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09
IENvbG9uVG9rZW4pOworICAgIHJhbmdlLmNvbnN1bWUoKTsKKworICAgIGludCBjb2xvbnMgPSAx
OworICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpID09IENvbG9uVG9rZW4pIHsKKyAgICAgICAg
cmFuZ2UuY29uc3VtZSgpOworICAgICAgICBjb2xvbnMrKzsKKyAgICB9CisKKyAgICBjb25zdCBD
U1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgaWYgKHRva2VuLnR5cGUo
KSAhPSBJZGVudFRva2VuICYmIHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rv
cj4gc2VsZWN0b3I7CisgICAgU3RyaW5nVmlldyB2YWx1ZSA9IHRva2VuLnZhbHVlKCk7CisgICAg
aWYgKHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykKKyAgICAg
ICAgc2VsZWN0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+KENTU1BhcnNl
clNlbGVjdG9yOjpwYXJzZVBzZXVkb0NsYXNzU2VsZWN0b3JGcm9tU3RyaW5nVmlldyh2YWx1ZSkp
OworICAgIGVsc2UKKyAgICAgICAgc2VsZWN0b3IgPSBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2Vy
U2VsZWN0b3I+KENTU1BhcnNlclNlbGVjdG9yOjpwYXJzZVBzZXVkb0VsZW1lbnRTZWxlY3RvckZy
b21TdHJpbmdWaWV3KHZhbHVlKSk7CisgICAgCisgICAgaWYgKCFzZWxlY3RvciB8fCAoc2VsZWN0
b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgJiYgbV9kaXNhbGxvd1Bz
ZXVkb0VsZW1lbnRzKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAodG9rZW4u
dHlwZSgpID09IElkZW50VG9rZW4pIHsKKyAgICAgICAgcmFuZ2UuY29uc3VtZSgpOworICAgICAg
ICBpZiAoc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b0VsZW1lbnRVbmtub3duKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBzZWxlY3RvcjsKKyAgICB9CisKKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGJsb2NrID0g
cmFuZ2UuY29uc3VtZUJsb2NrKCk7CisgICAgYmxvY2suY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAg
ICBpZiAodG9rZW4udHlwZSgpICE9IEZ1bmN0aW9uVG9rZW4pCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvQ2xhc3NUeXBlKCkpIHsKKyAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc05vdDogeworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q1NTUGFyc2VyU2VsZWN0b3I+IGlubmVyU2VsZWN0b3IgPSBjb25zdW1lQ29tcG91bmRTZWxl
Y3RvcihibG9jayk7CisgICAgICAgIGJsb2NrLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgICAg
IGlmICghaW5uZXJTZWxlY3RvciB8fCAhYmxvY2suYXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVj
dG9yPj4gc2VsZWN0b3JWZWN0b3I7CisgICAgICAgIHNlbGVjdG9yVmVjdG9yLmFwcGVuZChXVEZN
b3ZlKGlubmVyU2VsZWN0b3IpKTsKKyAgICAgICAgc2VsZWN0b3ItPmFkb3B0U2VsZWN0b3JWZWN0
b3Ioc2VsZWN0b3JWZWN0b3IpOworICAgICAgICByZXR1cm4gc2VsZWN0b3I7CisgICAgfQorICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoQ2hpbGQ6CisgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NOdGhMYXN0Q2hpbGQ6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NOdGhPZlR5cGU6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NOdGhM
YXN0T2ZUeXBlOiB7CisgICAgICAgIHN0ZDo6cGFpcjxpbnQsIGludD4gYWI7CisgICAgICAgIGlm
ICghY29uc3VtZUFOUGx1c0IoYmxvY2ssIGFiKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICBibG9jay5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgICAgICBpZiAoIWJsb2Nr
LmF0RW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgc2VsZWN0b3It
PnNldEFyZ3VtZW50KEF0b21pY1N0cmluZzo6bnVtYmVyKGFiLmZpcnN0ICogYWIuc2Vjb25kKSk7
CisgICAgICAgIHJldHVybiBzZWxlY3RvcjsKKyAgICB9CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NMYW5nOiB7CisgICAgICAgIC8vIEZJWE1FOiBDU1MgU2VsZWN0b3JzIExldmVs
IDQgYWxsb3dzIDpsYW5nKCotZm9vKQorICAgICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgaWRl
bnQgPSBibG9jay5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICBpZiAoaWRl
bnQudHlwZSgpICE9IElkZW50VG9rZW4gfHwgIWJsb2NrLmF0RW5kKCkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgc2VsZWN0b3ItPnNldEFyZ3VtZW50KGlkZW50LnZhbHVl
KCkudG9BdG9taWNTdHJpbmcoKSk7CisgICAgICAgIHJldHVybiBzZWxlY3RvcjsKKyAgICB9Cisg
ICAgLy8gRklYTUUtTkVXUEFSU0VSOiBTdXBwb3J0IDpob3N0LWNvbnRleHQKKyAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FueToKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc0hvc3Q6IHsKKyAgICAgICAgRGlzYWxsb3dQc2V1ZG9FbGVtZW50c1Njb3BlIHNjb3BlKHRo
aXMpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3JMaXN0PiBzZWxlY3Rvckxp
c3QgPSBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3JMaXN0PihuZXcgQ1NTU2VsZWN0b3JMaXN0
KCkpOworICAgICAgICAqc2VsZWN0b3JMaXN0ID0gY29uc3VtZUNvbXBvdW5kU2VsZWN0b3JMaXN0
KGJsb2NrKTsKKyAgICAgICAgaWYgKCFzZWxlY3Rvckxpc3QtPmlzVmFsaWQoKSB8fCAhYmxvY2su
YXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBzZWxlY3Rvci0+
c2V0U2VsZWN0b3JMaXN0KFdURk1vdmUoc2VsZWN0b3JMaXN0KSk7CisgICAgICAgIHJldHVybiBz
ZWxlY3RvcjsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSkgeworICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWU6IHsKKyAgICAgICAgRGlzYWxsb3dQc2V1ZG9FbGVt
ZW50c1Njb3BlIHNjb3BlKHRoaXMpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0
b3JMaXN0PiBzZWxlY3Rvckxpc3QgPSBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3JMaXN0Pihu
ZXcgQ1NTU2VsZWN0b3JMaXN0KCkpOworICAgICAgICAqc2VsZWN0b3JMaXN0ID0gY29uc3VtZUNv
bXBvdW5kU2VsZWN0b3JMaXN0KGJsb2NrKTsKKyAgICAgICAgaWYgKCFzZWxlY3Rvckxpc3QtPmlz
VmFsaWQoKSB8fCAhYmxvY2suYXRFbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICBzZWxlY3Rvci0+c2V0U2VsZWN0b3JMaXN0KFdURk1vdmUoc2VsZWN0b3JMaXN0KSk7
CisgICAgICAgIHJldHVybiBzZWxlY3RvcjsKKyAgICB9CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvRWxlbWVudFNsb3R0ZWQ6IHsKKyAgICAgICAgRGlzYWxsb3dQc2V1ZG9FbGVtZW50c1Nj
b3BlIHNjb3BlKHRoaXMpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxl
Y3Rvcj4gaW5uZXJTZWxlY3RvciA9IGNvbnN1bWVDb21wb3VuZFNlbGVjdG9yKGJsb2NrKTsKKyAg
ICAgICAgYmxvY2suY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICAgICAgaWYgKCFpbm5lclNlbGVj
dG9yIHx8ICFibG9jay5hdEVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+PiBzZWxlY3RvclZl
Y3RvcjsKKyAgICAgICAgc2VsZWN0b3JWZWN0b3IuYXBwZW5kKFdURk1vdmUoaW5uZXJTZWxlY3Rv
cikpOworICAgICAgICBzZWxlY3Rvci0+YWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvclZlY3Rv
cik7CisgICAgICAgIHJldHVybiBzZWxlY3RvcjsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0NTU1NlbGVjdG9y
OjpSZWxhdGlvbiBDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3VtZUNvbWJpbmF0b3IoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIGZhbGxiYWNr
UmVzdWx0ID0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yOworICAgIHdoaWxlIChyYW5nZS5wZWVr
KCkudHlwZSgpID09IFdoaXRlc3BhY2VUb2tlbikgeworICAgICAgICByYW5nZS5jb25zdW1lKCk7
CisgICAgICAgIGZhbGxiYWNrUmVzdWx0ID0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ7CisgICAg
fQorCisgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gRGVsaW1pdGVyVG9rZW4pCisgICAg
ICAgIHJldHVybiBmYWxsYmFja1Jlc3VsdDsKKworICAgIFVDaGFyIGRlbGltaXRlciA9IHJhbmdl
LnBlZWsoKS5kZWxpbWl0ZXIoKTsKKworICAgIGlmIChkZWxpbWl0ZXIgPT0gJysnIHx8IGRlbGlt
aXRlciA9PSAnficgfHwgZGVsaW1pdGVyID09ICc+JykgeworICAgICAgICByYW5nZS5jb25zdW1l
SW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICBpZiAoZGVsaW1pdGVyID09ICcrJykKKyAg
ICAgICAgICAgIHJldHVybiBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ7CisgICAgICAgIGlm
IChkZWxpbWl0ZXIgPT0gJ34nKQorICAgICAgICAgICAgcmV0dXJuIENTU1NlbGVjdG9yOjpJbmRp
cmVjdEFkamFjZW50OworICAgICAgICByZXR1cm4gQ1NTU2VsZWN0b3I6OkNoaWxkOworICAgIH0K
KworICAgIC8vIE1hdGNoIC9kZWVwLworICAgIGlmIChkZWxpbWl0ZXIgIT0gJy8nKQorICAgICAg
ICByZXR1cm4gZmFsbGJhY2tSZXN1bHQ7CisgICAgcmFuZ2UuY29uc3VtZSgpOworICAgIGNvbnN0
IENTU1BhcnNlclRva2VuJiBpZGVudCA9IHJhbmdlLmNvbnN1bWUoKTsKKyAgICBpZiAoaWRlbnQu
dHlwZSgpICE9IElkZW50VG9rZW4gfHwgIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UoaWRlbnQudmFs
dWUoKSwgImRlZXAiKSkKKyAgICAgICAgbV9mYWlsZWRQYXJzaW5nID0gdHJ1ZTsKKyAgICBjb25z
dCBDU1NQYXJzZXJUb2tlbiYgc2xhc2ggPSByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpOworICAgIGlmIChzbGFzaC50eXBlKCkgIT0gRGVsaW1pdGVyVG9rZW4gfHwgc2xhc2guZGVs
aW1pdGVyKCkgIT0gJy8nKQorICAgICAgICBtX2ZhaWxlZFBhcnNpbmcgPSB0cnVlOworICAgIHJl
dHVybiBDU1NTZWxlY3Rvcjo6U2hhZG93RGVlcDsKK30KKworQ1NTU2VsZWN0b3I6Ok1hdGNoIENT
U1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQXR0cmlidXRlTWF0Y2goQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UpCit7CisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewor
ICAgIGNhc2UgSW5jbHVkZU1hdGNoVG9rZW46CisgICAgICAgIHJldHVybiBDU1NTZWxlY3Rvcjo6
TGlzdDsKKyAgICBjYXNlIERhc2hNYXRjaFRva2VuOgorICAgICAgICByZXR1cm4gQ1NTU2VsZWN0
b3I6Okh5cGhlbjsKKyAgICBjYXNlIFByZWZpeE1hdGNoVG9rZW46CisgICAgICAgIHJldHVybiBD
U1NTZWxlY3Rvcjo6QmVnaW47CisgICAgY2FzZSBTdWZmaXhNYXRjaFRva2VuOgorICAgICAgICBy
ZXR1cm4gQ1NTU2VsZWN0b3I6OkVuZDsKKyAgICBjYXNlIFN1YnN0cmluZ01hdGNoVG9rZW46Cisg
ICAgICAgIHJldHVybiBDU1NTZWxlY3Rvcjo6Q29udGFpbjsKKyAgICBjYXNlIERlbGltaXRlclRv
a2VuOgorICAgICAgICBpZiAodG9rZW4uZGVsaW1pdGVyKCkgPT0gJz0nKQorICAgICAgICAgICAg
cmV0dXJuIENTU1NlbGVjdG9yOjpFeGFjdDsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgbV9mYWlsZWRQYXJzaW5nID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIENT
U1NlbGVjdG9yOjpFeGFjdDsKKyAgICB9Cit9CisKK0NTU1NlbGVjdG9yOjpBdHRyaWJ1dGVNYXRj
aFR5cGUgQ1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVBdHRyaWJ1dGVGbGFncyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVu
dFRva2VuKQorICAgICAgICByZXR1cm4gQ1NTU2VsZWN0b3I6OkNhc2VTZW5zaXRpdmU7CisgICAg
Y29uc3QgQ1NTUGFyc2VyVG9rZW4mIGZsYWcgPSByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpOworICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGZsYWcudmFsdWUoKSwgImki
KSkKKyAgICAgICAgcmV0dXJuIENTU1NlbGVjdG9yOjpDYXNlSW5zZW5zaXRpdmU7CisgICAgbV9m
YWlsZWRQYXJzaW5nID0gdHJ1ZTsKKyAgICByZXR1cm4gQ1NTU2VsZWN0b3I6OkNhc2VTZW5zaXRp
dmU7Cit9CisKK2Jvb2wgQ1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVBTlBsdXNCKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBzdGQ6OnBhaXI8aW50LCBpbnQ+JiByZXN1bHQpCit7CisgICAg
Y29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UuY29uc3VtZSgpOworICAgIGlmICh0
b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4gJiYgdG9rZW4ubnVtZXJpY1ZhbHVlVHlwZSgpID09
IEludGVnZXJWYWx1ZVR5cGUpIHsKKyAgICAgICAgcmVzdWx0ID0gc3RkOjptYWtlX3BhaXIoMCwg
c3RhdGljX2Nhc3Q8aW50Pih0b2tlbi5udW1lcmljVmFsdWUoKSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CisgICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHRva2VuLnZhbHVlKCksICJvZGQiKSkgewor
ICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYWtlX3BhaXIoMiwgMSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZSh0b2tlbi52YWx1ZSgpLCAiZXZlbiIpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBzdGQ6Om1h
a2VfcGFpcigyLCAwKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gVGhlICduJyB3aWxsIGVuZCB1cCBhcyBwYXJ0IG9mIGFuIGlkZW50IG9yIGRp
bWVuc2lvbi4gRm9yIGEgdmFsaWQgPGFuK2I+LAorICAgIC8vIHRoaXMgd2lsbCBzdG9yZSBhIHN0
cmluZyBvZiB0aGUgZm9ybSAnbicsICduLScsIG9yICduLTEyMycuCisgICAgU3RyaW5nIG5TdHJp
bmc7CisKKyAgICBpZiAodG9rZW4udHlwZSgpID09IERlbGltaXRlclRva2VuICYmIHRva2VuLmRl
bGltaXRlcigpID09ICcrJyAmJiByYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pIHsK
KyAgICAgICAgcmVzdWx0LmZpcnN0ID0gMTsKKyAgICAgICAgblN0cmluZyA9IHJhbmdlLmNvbnN1
bWUoKS52YWx1ZSgpLnRvU3RyaW5nKCk7CisgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlKCkgPT0g
RGltZW5zaW9uVG9rZW4gJiYgdG9rZW4ubnVtZXJpY1ZhbHVlVHlwZSgpID09IEludGVnZXJWYWx1
ZVR5cGUpIHsKKyAgICAgICAgcmVzdWx0LmZpcnN0ID0gdG9rZW4ubnVtZXJpY1ZhbHVlKCk7Cisg
ICAgICAgIG5TdHJpbmcgPSB0b2tlbi52YWx1ZSgpLnRvU3RyaW5nKCk7CisgICAgfSBlbHNlIGlm
ICh0b2tlbi50eXBlKCkgPT0gSWRlbnRUb2tlbikgeworICAgICAgICBpZiAodG9rZW4udmFsdWUo
KVswXSA9PSAnLScpIHsKKyAgICAgICAgICAgIHJlc3VsdC5maXJzdCA9IC0xOworICAgICAgICAg
ICAgblN0cmluZyA9IHRva2VuLnZhbHVlKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1bHQuZmlyc3QgPSAxOworICAgICAgICAgICAg
blN0cmluZyA9IHRva2VuLnZhbHVlKCkudG9TdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisKKyAgICBpZiAoblN0cmluZy5pc0VtcHR5
KCkgfHwgIWlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoblN0cmluZ1swXSwgJ24nKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChuU3RyaW5nLmxlbmd0aCgpID4gMSAmJiBuU3RyaW5n
WzFdICE9ICctJykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG5TdHJpbmcubGVu
Z3RoKCkgPiAyKSB7CisgICAgICAgIGJvb2wgdmFsaWQ7CisgICAgICAgIHJlc3VsdC5zZWNvbmQg
PSBuU3RyaW5nLnN1YnN0cmluZygxKS50b0ludFN0cmljdCgmdmFsaWQpOworICAgICAgICByZXR1
cm4gdmFsaWQ7CisgICAgfQorCisgICAgTnVtZXJpY1NpZ24gc2lnbiA9IG5TdHJpbmcubGVuZ3Ro
KCkgPT0gMSA/IE5vU2lnbiA6IE1pbnVzU2lnbjsKKyAgICBpZiAoc2lnbiA9PSBOb1NpZ24gJiYg
cmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEZWxpbWl0ZXJUb2tlbikgeworICAgICAgICBjaGFyIGRl
bGltaXRlclNpZ24gPSByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmRlbGltaXRl
cigpOworICAgICAgICBpZiAoZGVsaW1pdGVyU2lnbiA9PSAnKycpCisgICAgICAgICAgICBzaWdu
ID0gUGx1c1NpZ247CisgICAgICAgIGVsc2UgaWYgKGRlbGltaXRlclNpZ24gPT0gJy0nKQorICAg
ICAgICAgICAgc2lnbiA9IE1pbnVzU2lnbjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChzaWduID09IE5vU2lnbiAmJiByYW5nZS5wZWVr
KCkudHlwZSgpICE9IE51bWJlclRva2VuKSB7CisgICAgICAgIHJlc3VsdC5zZWNvbmQgPSAwOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYg
YiA9IHJhbmdlLmNvbnN1bWUoKTsKKyAgICBpZiAoYi50eXBlKCkgIT0gTnVtYmVyVG9rZW4gfHwg
Yi5udW1lcmljVmFsdWVUeXBlKCkgIT0gSW50ZWdlclZhbHVlVHlwZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICgoYi5udW1lcmljU2lnbigpID09IE5vU2lnbikgPT0gKHNpZ24gPT0g
Tm9TaWduKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5zZWNvbmQgPSBiLm51
bWVyaWNWYWx1ZSgpOworICAgIGlmIChzaWduID09IE1pbnVzU2lnbikKKyAgICAgICAgcmVzdWx0
LnNlY29uZCA9IC1yZXN1bHQuc2Vjb25kOworICAgIHJldHVybiB0cnVlOworfQorCitjb25zdCBB
dG9taWNTdHJpbmcmIENTU1NlbGVjdG9yUGFyc2VyOjpkZWZhdWx0TmFtZXNwYWNlKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fc3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuIHN0YXJBdG9tOworICAg
IHJldHVybiBtX3N0eWxlU2hlZXQtPmRlZmF1bHROYW1lc3BhY2UoKTsKK30KKworY29uc3QgQXRv
bWljU3RyaW5nJiBDU1NTZWxlY3RvclBhcnNlcjo6ZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0
b21pY1N0cmluZyYgcHJlZml4KQoreworICAgIGlmIChwcmVmaXguaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBkZWZhdWx0TmFtZXNwYWNlKCk7CisgICAgaWYgKHByZWZpeC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBlbXB0eUF0b207IC8vIE5vIG5hbWVzcGFjZS4gSWYgYW4gZWxlbWVudC9h
dHRyaWJ1dGUgaGFzIGEgbmFtZXNwYWNlLCB3ZSB3b24ndCBtYXRjaCBpdC4KKyAgICBpZiAocHJl
Zml4ID09IHN0YXJBdG9tKQorICAgICAgICByZXR1cm4gc3RhckF0b207IC8vIFdlJ2xsIG1hdGNo
IGFueSBuYW1lc3BhY2UuCisgICAgaWYgKCFtX3N0eWxlU2hlZXQpCisgICAgICAgIHJldHVybiBu
dWxsQXRvbTsgLy8gQ2Fubm90IHJlc29sdmUgcHJlZml4IHRvIG5hbWVzcGFjZSB3aXRob3V0IGEg
c3R5bGVzaGVldCwgc3ludGF4IGVycm9yLgorICAgIHJldHVybiBtX3N0eWxlU2hlZXQtPm5hbWVz
cGFjZVVSSUZyb21QcmVmaXgocHJlZml4KTsKK30KKwordm9pZCBDU1NTZWxlY3RvclBhcnNlcjo6
cHJlcGVuZFR5cGVTZWxlY3RvcklmTmVlZGVkKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNl
UHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnROYW1lLCBDU1NQYXJzZXJTZWxlY3Rv
ciogY29tcG91bmRTZWxlY3RvcikKK3sKKyAgICBpZiAoZWxlbWVudE5hbWUuaXNOdWxsKCkgJiYg
ZGVmYXVsdE5hbWVzcGFjZSgpID09IHN0YXJBdG9tICYmICFjb21wb3VuZFNlbGVjdG9yLT5uZWVk
c0ltcGxpY2l0U2hhZG93Q29tYmluYXRvckZvck1hdGNoaW5nKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEF0b21pY1N0cmluZyBkZXRlcm1pbmVkRWxlbWVudE5hbWUgPSBlbGVtZW50TmFtZS5p
c051bGwoKSA/IHN0YXJBdG9tIDogZWxlbWVudE5hbWU7CisgICAgQXRvbWljU3RyaW5nIG5hbWVz
cGFjZVVSSSA9IGRldGVybWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVmaXgpOworICAgIGlmIChu
YW1lc3BhY2VVUkkuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9mYWlsZWRQYXJzaW5nID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBdG9taWNTdHJpbmcgZGV0ZXJtaW5lZFByZWZp
eCA9IG5hbWVzcGFjZVByZWZpeDsKKyAgICBpZiAobmFtZXNwYWNlVVJJID09IGRlZmF1bHROYW1l
c3BhY2UoKSkKKyAgICAgICAgZGV0ZXJtaW5lZFByZWZpeCA9IG51bGxBdG9tOworICAgIFF1YWxp
ZmllZE5hbWUgdGFnID0gUXVhbGlmaWVkTmFtZShkZXRlcm1pbmVkUHJlZml4LCBkZXRlcm1pbmVk
RWxlbWVudE5hbWUsIG5hbWVzcGFjZVVSSSk7CisKKyAgICAvLyAqOmhvc3QvKjpob3N0LWNvbnRl
eHQgbmV2ZXIgbWF0Y2hlcywgc28gd2UgY2FuJ3QgZGlzY2FyZCB0aGUgKiwKKyAgICAvLyBvdGhl
cndpc2Ugd2UgY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuICo6aG9zdCBhbmQganVz
dCA6aG9zdC4KKyAgICAvLworICAgIC8vIEFsc28sIHNlbGVjdG9ycyB3aGVyZSB3ZSB1c2UgYSBT
aGFkb3dQc2V1ZG8gY29tYmluYXRvciBiZXR3ZWVuIHRoZQorICAgIC8vIGVsZW1lbnQgYW5kIHRo
ZSBwc2V1ZG8gZWxlbWVudCBmb3IgbWF0Y2hpbmcgKGN1c3RvbSBwc2V1ZG8gZWxlbWVudHMsCisg
ICAgLy8gOjpjdWUsIDo6c2hhZG93KSwgd2UgbmVlZCBhIHVuaXZlcnNhbCBzZWxlY3RvciB0byBz
ZXQgdGhlIGNvbWJpbmF0b3IKKyAgICAvLyAocmVsYXRpb24pIG9uIGluIHRoZSBjYXNlcyB3aGVy
ZSB0aGVyZSBhcmUgbm8gc2ltcGxlIHNlbGVjdG9ycyBwcmVjZWRpbmcKKyAgICAvLyB0aGUgcHNl
dWRvIGVsZW1lbnQuCisgICAgYm9vbCBleHBsaWNpdEZvckhvc3QgPSBjb21wb3VuZFNlbGVjdG9y
LT5pc0hvc3RQc2V1ZG9TZWxlY3RvcigpICYmICFlbGVtZW50TmFtZS5pc051bGwoKTsKKyAgICBp
ZiAodGFnICE9IGFueVFOYW1lKCkgfHwgZXhwbGljaXRGb3JIb3N0IHx8IGNvbXBvdW5kU2VsZWN0
b3ItPm5lZWRzSW1wbGljaXRTaGFkb3dDb21iaW5hdG9yRm9yTWF0Y2hpbmcoKSkKKyAgICAgICAg
Y29tcG91bmRTZWxlY3Rvci0+cHJlcGVuZFRhZ1NlbGVjdG9yKHRhZywgZGV0ZXJtaW5lZFByZWZp
eCA9PSBudWxsQXRvbSAmJiBkZXRlcm1pbmVkRWxlbWVudE5hbWUgPT0gc3RhckF0b20gJiYgIWV4
cGxpY2l0Rm9ySG9zdCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4g
Q1NTU2VsZWN0b3JQYXJzZXI6OmFkZFNpbXBsZVNlbGVjdG9yVG9Db21wb3VuZChzdGQ6OnVuaXF1
ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IGNvbXBvdW5kU2VsZWN0b3IsIHN0ZDo6dW5pcXVlX3B0
cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2ltcGxlU2VsZWN0b3IpCit7CisgICAgY29tcG91bmRTZWxl
Y3Rvci0+YXBwZW5kVGFnSGlzdG9yeShDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IsIFdURk1vdmUo
c2ltcGxlU2VsZWN0b3IpKTsKKyAgICByZXR1cm4gY29tcG91bmRTZWxlY3RvcjsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZWxlY3RvclBhcnNlcjo6c3BsaXRD
b21wb3VuZEF0SW1wbGljaXRTaGFkb3dDcm9zc2luZ0NvbWJpbmF0b3Ioc3RkOjp1bmlxdWVfcHRy
PENTU1BhcnNlclNlbGVjdG9yPiBjb21wb3VuZFNlbGVjdG9yKQoreworICAgIC8vIFRoZSB0YWdI
aXN0b3J5IGlzIGEgbGlua2VkIGxpc3QgdGhhdCBzdG9yZXMgY29tYmluYXRvciBzZXBhcmF0ZWQg
Y29tcG91bmQgc2VsZWN0b3JzCisgICAgLy8gZnJvbSByaWdodC10by1sZWZ0LiBZZXQsIHdpdGhp
biBhIHNpbmdsZSBjb21wb3VuZCBzZWxlY3Rvciwgc3RvcmVzIHRoZSBzaW1wbGUgc2VsZWN0b3Jz
CisgICAgLy8gZnJvbSBsZWZ0LXRvLXJpZ2h0LgorICAgIC8vCisgICAgLy8gIi5hLmIgPiBkaXYj
aWQiIGlzIHN0b3JlZCBpbiBhIHRhZ0hpc3RvcnkgYXMgW2RpdiwgI2lkLCAuYSwgLmJdLCBlYWNo
IGVsZW1lbnQgaW4gdGhlCisgICAgLy8gbGlzdCBzdG9yZWQgd2l0aCBhbiBhc3NvY2lhdGVkIHJl
bGF0aW9uIChjb21iaW5hdG9yIG9yIFN1YlNlbGVjdG9yKS4KKyAgICAvLworICAgIC8vIDo6Y3Vl
LCA6OnNoYWRvdywgYW5kIGN1c3RvbSBwc2V1ZG8gZWxlbWVudHMgaGF2ZSBhbiBpbXBsaWNpdCBT
aGFkb3dQc2V1ZG8gY29tYmluYXRvcgorICAgIC8vIHRvIHRoZWlyIGxlZnQsIHdoaWNoIHJlYWxs
eSBtYWtlcyBmb3IgYSBuZXcgY29tcG91bmQgc2VsZWN0b3IsIHlldCBpdCdzIGNvbnN1bWVkIGJ5
CisgICAgLy8gdGhlIHNlbGVjdG9yIHBhcnNlciBhcyBhIHNpbmdsZSBjb21wb3VuZCBzZWxlY3Rv
ci4KKyAgICAvLworICAgIC8vIEV4YW1wbGU6IGlucHV0I3g6Oi13ZWJraXQtY2xlYXItYnV0dG9u
IC0+IFsgOjotd2Via2l0LWNsZWFyLWJ1dHRvbiwgaW5wdXQsICN4IF0KKyAgICAvLworICAgIC8v
IExpa2V3aXNlLCA6OnNsb3R0ZWQoKSBwc2V1ZG8gZWxlbWVudCBoYXMgYW4gaW1wbGljaXQgU2hh
ZG93U2xvdCBjb21iaW5hdG9yIHRvIGl0cyBsZWZ0CisgICAgLy8gZm9yIGZpbmRpbmcgbWF0Y2hp
bmcgc2xvdCBlbGVtZW50IGluIG90aGVyIFRyZWVTY29wZS4KKyAgICAvLworICAgIC8vIEV4YW1w
bGU6IHNsb3RbbmFtZT1mb29dOjpzbG90dGVkKGRpdikgLT4gWyA6OnNsb3R0ZWQoZGl2KSwgc2xv
dCwgW25hbWU9Zm9vXSBdCisgICAgQ1NTUGFyc2VyU2VsZWN0b3IqIHNwbGl0QWZ0ZXIgPSBjb21w
b3VuZFNlbGVjdG9yLmdldCgpOworCisgICAgd2hpbGUgKHNwbGl0QWZ0ZXItPnRhZ0hpc3Rvcnko
KSAmJiAhc3BsaXRBZnRlci0+dGFnSGlzdG9yeSgpLT5uZWVkc0ltcGxpY2l0U2hhZG93Q29tYmlu
YXRvckZvck1hdGNoaW5nKCkpCisgICAgICAgIHNwbGl0QWZ0ZXIgPSBzcGxpdEFmdGVyLT50YWdI
aXN0b3J5KCk7CisKKyAgICBpZiAoIXNwbGl0QWZ0ZXIgfHwgIXNwbGl0QWZ0ZXItPnRhZ0hpc3Rv
cnkoKSkKKyAgICAgICAgcmV0dXJuIGNvbXBvdW5kU2VsZWN0b3I7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlY29uZENvbXBvdW5kID0gc3BsaXRBZnRlci0+cmVs
ZWFzZVRhZ0hpc3RvcnkoKTsKKyAgICBzZWNvbmRDb21wb3VuZC0+YXBwZW5kVGFnSGlzdG9yeShz
ZWNvbmRDb21wb3VuZC0+cHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRv
RWxlbWVudFNsb3R0ZWQgPyBDU1NTZWxlY3Rvcjo6U2hhZG93U2xvdCA6IENTU1NlbGVjdG9yOjpT
aGFkb3dQc2V1ZG8sIFdURk1vdmUoY29tcG91bmRTZWxlY3RvcikpOworICAgIHJldHVybiBzZWNv
bmRDb21wb3VuZDsKK30KKworfSAvLyBuYW1lc3BhY2UgYmxpbmsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTA4IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisvLyBtZXQ6CisvLworLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisvLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ1NTUGFyc2VyVG9rZW5SYW5n
ZS5oIgorI2luY2x1ZGUgIkNTU1BhcnNlclZhbHVlcy5oIiAvLyBGSVhNRS1ORVdQQVJTRVIgQ2hh
bmdlIHdoZW4gQ1NTUGFyc2VyU2VsZWN0b3IgbW92ZXMgaW50byBpdHMgb3duIGZpbGUuCisjaW5j
bHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBDU1NQYXJzZXJD
b250ZXh0OworY2xhc3MgQ1NTU2VsZWN0b3JMaXN0OworY2xhc3MgU3R5bGVTaGVldENvbnRlbnRz
OworCisvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIGJ1aWxkaW5nIENTU1NlbGVjdG9ycyBk
aXJlY3RseSBpbnN0ZWFkIG9mIHVzaW5nCisvLyB0aGUgaW50ZXJtZWRpYXRlIENTU1BhcnNlclNl
bGVjdG9yLgorY2xhc3MgQ1NTU2VsZWN0b3JQYXJzZXIgeworcHVibGljOgorICAgIHN0YXRpYyBD
U1NTZWxlY3Rvckxpc3QgcGFyc2VTZWxlY3RvcihDU1NQYXJzZXJUb2tlblJhbmdlLCBjb25zdCBD
U1NQYXJzZXJDb250ZXh0JiwgU3R5bGVTaGVldENvbnRlbnRzKik7CisKKyAgICBzdGF0aWMgYm9v
bCBjb25zdW1lQU5QbHVzQihDU1NQYXJzZXJUb2tlblJhbmdlJiwgc3RkOjpwYWlyPGludCwgaW50
PiYpOworCitwcml2YXRlOgorICAgIENTU1NlbGVjdG9yUGFyc2VyKGNvbnN0IENTU1BhcnNlckNv
bnRleHQmLCBTdHlsZVNoZWV0Q29udGVudHMqKTsKKworICAgIC8vIFRoZXNlIHdpbGwgYWxsIGNv
bnN1bWUgdHJhaWxpbmcgY29tbWVudHMgaWYgc3VjY2Vzc2Z1bAorCisgICAgQ1NTU2VsZWN0b3JM
aXN0IGNvbnN1bWVDb21wbGV4U2VsZWN0b3JMaXN0KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKKyAg
ICBDU1NTZWxlY3Rvckxpc3QgY29uc3VtZUNvbXBvdW5kU2VsZWN0b3JMaXN0KENTU1BhcnNlclRv
a2VuUmFuZ2UmKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gY29u
c3VtZUNvbXBsZXhTZWxlY3RvcihDU1NQYXJzZXJUb2tlblJhbmdlJik7CisgICAgc3RkOjp1bmlx
dWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBjb25zdW1lQ29tcG91bmRTZWxlY3RvcihDU1NQYXJz
ZXJUb2tlblJhbmdlJik7CisgICAgLy8gVGhpcyBkb2Vzbid0IGluY2x1ZGUgZWxlbWVudCBuYW1l
cywgc2luY2UgdGhleSdyZSBoYW5kbGVkIHNwZWNpYWxseQorICAgIHN0ZDo6dW5pcXVlX3B0cjxD
U1NQYXJzZXJTZWxlY3Rvcj4gY29uc3VtZVNpbXBsZVNlbGVjdG9yKENTU1BhcnNlclRva2VuUmFu
Z2UmKTsKKworICAgIGJvb2wgY29uc3VtZU5hbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIEF0b21p
Y1N0cmluZyYgbmFtZSwgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VQcmVmaXgpOworCisgICAgLy8g
VGhlc2Ugd2lsbCByZXR1cm4gbnVsbHB0ciB3aGVuIHRoZSBzZWxlY3RvciBpcyBpbnZhbGlkCisg
ICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBjb25zdW1lSWQoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gY29u
c3VtZUNsYXNzKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+IGNvbnN1bWVQc2V1ZG8oQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gY29uc3VtZUF0dHJpYnV0ZShDU1NQ
YXJzZXJUb2tlblJhbmdlJik7CisKKyAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gY29uc3VtZUNv
bWJpbmF0b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworICAgIENTU1NlbGVjdG9yOjpNYXRjaCBj
b25zdW1lQXR0cmlidXRlTWF0Y2goQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworICAgIENTU1NlbGVj
dG9yOjpBdHRyaWJ1dGVNYXRjaFR5cGUgY29uc3VtZUF0dHJpYnV0ZUZsYWdzKENTU1BhcnNlclRv
a2VuUmFuZ2UmKTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGVmYXVsdE5hbWVzcGFjZSgp
IGNvbnN0OworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0
IEF0b21pY1N0cmluZyYgcHJlZml4KTsKKyAgICB2b2lkIHByZXBlbmRUeXBlU2VsZWN0b3JJZk5l
ZWRlZChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVByZWZpeCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBlbGVtZW50TmFtZSwgQ1NTUGFyc2VyU2VsZWN0b3IqKTsKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBhZGRTaW1wbGVTZWxlY3RvclRvQ29tcG91bmQo
c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBjb21wb3VuZFNlbGVjdG9yLCBzdGQ6
OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNpbXBsZVNlbGVjdG9yKTsKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzcGxpdENvbXBvdW5kQXRJbXBs
aWNpdFNoYWRvd0Nyb3NzaW5nQ29tYmluYXRvcihzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2Vs
ZWN0b3I+IGNvbXBvdW5kU2VsZWN0b3IpOworCisgICAgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYg
bV9jb250ZXh0OworICAgIFJlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IG1fc3R5bGVTaGVldDsg
Ly8gRklYTUU6IFNob3VsZCBiZSBjb25zdAorCisgICAgYm9vbCBtX2ZhaWxlZFBhcnNpbmcgPSBm
YWxzZTsKKyAgICBib29sIG1fZGlzYWxsb3dQc2V1ZG9FbGVtZW50cyA9IGZhbHNlOworCisgICAg
Y2xhc3MgRGlzYWxsb3dQc2V1ZG9FbGVtZW50c1Njb3BlIHsKKyAgICAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoRGlzYWxsb3dQc2V1ZG9FbGVtZW50c1Njb3BlKTsKKyAgICBwdWJsaWM6CisgICAg
ICAgIERpc2FsbG93UHNldWRvRWxlbWVudHNTY29wZShDU1NTZWxlY3RvclBhcnNlciogcGFyc2Vy
KQorICAgICAgICAgICAgOiBtX3BhcnNlcihwYXJzZXIpLCBtX3dhc0Rpc2FsbG93ZWQobV9wYXJz
ZXItPm1fZGlzYWxsb3dQc2V1ZG9FbGVtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgbV9w
YXJzZXItPm1fZGlzYWxsb3dQc2V1ZG9FbGVtZW50cyA9IHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICB+RGlzYWxsb3dQc2V1ZG9FbGVtZW50c1Njb3BlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9wYXJzZXItPm1fZGlzYWxsb3dQc2V1ZG9FbGVtZW50cyA9IG1fd2FzRGlzYWxsb3dlZDsK
KyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ1NTU2VsZWN0b3JQYXJzZXIqIG1f
cGFyc2VyOworICAgICAgICBib29sIG1fd2FzRGlzYWxsb3dlZDsKKyAgICB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0
b3JDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVj
dG9yQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMDU0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Nq
aXQvU2VsZWN0b3JDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMSw2ICs0MTEsOSBA
QCBzdGF0aWMgaW5saW5lIEZyYWdtZW50UmVsYXRpb24gZnJhZ21lbnRSCiAgICAgICAgIHJldHVy
biBGcmFnbWVudFJlbGF0aW9uOjpJbmRpcmVjdEFkamFjZW50OwogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlN1YlNlbGVjdG9yOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQ6
CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93UHNldWRvOgorICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlNoYWRvd0RlZXA6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93U2xvdDoKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMjA1NDk5
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzEsNyArMzMxLDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjpyZWJ1aWxkUHJlc2VudGF0
aW9uQQogICAgICAgICBzdHlsZSA9IGNhY2hlSXRlcmF0b3ItPnZhbHVlLT52YWx1ZTsKICAgICAg
ICAgcHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGVDbGVhbmVyKCkuZGlkSGl0UHJlc2VudGF0aW9u
QXR0cmlidXRlQ2FjaGUoKTsKICAgICB9IGVsc2UgewotICAgICAgICBzdHlsZSA9IE11dGFibGVT
dHlsZVByb3BlcnRpZXM6OmNyZWF0ZShpc1NWR0VsZW1lbnQoKSA/IFNWR0F0dHJpYnV0ZU1vZGUg
OiBDU1NRdWlya3NNb2RlKTsKKyAgICAgICAgc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
OjpjcmVhdGUoaXNTVkdFbGVtZW50KCkgPyBTVkdBdHRyaWJ1dGVNb2RlIDogSFRNTFF1aXJrc01v
ZGUpOwogICAgICAgICBmb3IgKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlIDogYXR0cmlidXRl
c0l0ZXJhdG9yKCkpCiAgICAgICAgICAgICBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRy
aWJ1dGUoYXR0cmlidXRlLm5hbWUoKSwgYXR0cmlidXRlLnZhbHVlKCksIHN0YXRpY19jYXN0PE11
dGFibGVTdHlsZVByb3BlcnRpZXMmPigqc3R5bGUpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjA1NDk5KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDcgKzQ5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOwogCiBpbmxpbmUgU1ZHRm9u
dEZhY2VFbGVtZW50OjpTVkdGb250RmFjZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIDogU1ZHRWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkKLSAgICAsIG1fZm9udEZhY2VSdWxlKFN0eWxlUnVsZUZvbnRGYWNlOjpjcmVhdGUoTXV0
YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKENTU1N0cmljdE1vZGUpKSkKKyAgICAsIG1fZm9u
dEZhY2VSdWxlKFN0eWxlUnVsZUZvbnRGYWNlOjpjcmVhdGUoTXV0YWJsZVN0eWxlUHJvcGVydGll
czo6Y3JlYXRlKEhUTUxTdGFuZGFyZE1vZGUpKSkKICAgICAsIG1fZm9udEVsZW1lbnQobnVsbHB0
cikKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShmb250X2ZhY2VUYWcpKTsK
</data>
<flag name="review"
          id="311657"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>