<?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>35941</bug_id>
          
          <creation_ts>2010-03-09 13:17:36 -0800</creation_ts>
          <short_desc>[V8] Use a struct instead of an int to indicate the dom wrapper tpye</short_desc>
          <delta_ts>2010-03-10 14:53:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>33477</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>antonm</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>197738</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-03-09 13:17:36 -0800</bug_when>
    <thetext>Currently, when we wrap a WebCore object for use in V8, we insert 2 internal fields: a pointer to the WebCore object itself, and an integer indicating the V8ClassIndex::V8WrapperType.

Instead of the integer, we could use a struct that includes pointers to the appropriate versions of functions that WebCore might need for this object.  I believe the callbacks would be:

* A pointer to the appropriate GetTemplate function
* A pointer to a function that derefs the WebCore object (if it is refcounted, need in V8GCController.cpp)
* A pointer to a function that casts the WebCore object to an ActiveDOMObject if possible (needed for appropriate handling of active objects in DOMData.cpp)

This will allow us to remove any place that we&apos;re using a macro&apos;ed switch statement based on the declarations in V8Index.h, as well as delete V8Index.cpp.

Once this change is in, I plan on working toward generating an equivalent to V8Index.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197756</commentid>
    <comment_count>1</comment_count>
      <attachid>50343</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-03-09 13:57:14 -0800</bug_when>
    <thetext>Created attachment 50343
patch

This appears to be essentially a no-op in terms of Dromaeo performance (within a fraction of 1% from previous results).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197765</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-09 14:12:09 -0800</bug_when>
    <thetext>Attachment 50343 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/481007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197766</commentid>
    <comment_count>3</comment_count>
      <attachid>50347</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-03-09 14:14:36 -0800</bug_when>
    <thetext>Created attachment 50347
patch with build file changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197769</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-03-09 14:20:19 -0800</bug_when>
    <thetext>This is better than peanut butter, jelly and bread put together. Anton, do you have any concerns with this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197770</commentid>
    <comment_count>5</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-03-09 14:24:09 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; This is better than peanut butter, jelly and bread put together. Anton, do you
&gt; have any concerns with this patch?

I&apos;m allergic to peanuts, you insensitive clod!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197773</commentid>
    <comment_count>6</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-03-09 14:26:46 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; This is better than peanut butter, jelly and bread put together. Anton, do you
&gt; &gt; have any concerns with this patch?
&gt; 
&gt; I&apos;m allergic to peanuts, you insensitive clod!

Darn it! I&apos;ve gotta stop falling into this food sensitivity trap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197776</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-03-09 14:30:57 -0800</bug_when>
    <thetext>What about sunflower butter? http://www.nutsonline.com/snacks/sunflowerseeds/butter.html?source=googlebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197778</commentid>
    <comment_count>8</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-03-09 14:35:17 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; What about sunflower butter?
&gt; http://www.nutsonline.com/snacks/sunflowerseeds/butter.html?source=googlebase

I&apos;m generally ok with seeds, so it&apos;s probably safe.  However, unlike the individual in their testimonial, I do not crave peanut butter nor any substitute.  It is the Kryptonite to my Superman, the CodeGeneratorV8.pm to my comprehensible codebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197782</commentid>
    <comment_count>9</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-03-09 14:40:58 -0800</bug_when>
    <thetext>Does this have any memory implications?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197787</commentid>
    <comment_count>10</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-03-09 14:48:41 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Does this have any memory implications?

AFAICT, no.  I ran chromium&apos;s memory_tests, which passed locally.  If you have any recommendations on other tests to run, I would be happy to hear them.

In terms of what is supposed be happening, instead of storing an integer, we&apos;re storing a pointer to a static struct that contents an integer and 3 function pointers.  Unless I screwed something up, that should be negligible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198150</commentid>
    <comment_count>11</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2010-03-10 08:23:31 -0800</bug_when>
    <thetext>LGTM.  And I like it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198153</commentid>
    <comment_count>12</comment_count>
      <attachid>50347</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-03-10 08:26:39 -0800</bug_when>
    <thetext>Comment on attachment 50347
patch with build file changes

beam me up, Scotty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198358</commentid>
    <comment_count>13</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-03-10 14:53:21 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/55798</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50343</attachid>
            <date>2010-03-09 13:57:14 -0800</date>
            <delta_ts>2010-03-09 14:14:36 -0800</delta_ts>
            <desc>patch</desc>
            <filename>index.txt</filename>
            <type>text/plain</type>
            <size>80372</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCShy
ZXZpc2lvbiA1NTc0MykKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNyArMzM3LDYgQEAKIAogdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpjcmVhdGVJbnNwZWN0b3JCYWNrZW5kVjhX
cmFwcGVyKCkKIHsKLSAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgZGVzY3JpcHRvclR5
cGUgPSBWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQ7CiAgICAgdjg6OkhhbmRsZTx2ODo6
RnVuY3Rpb24+IGZ1bmN0aW9uID0gVjhJbnNwZWN0b3JCYWNrZW5kOjpHZXRUZW1wbGF0ZSgpLT5H
ZXRGdW5jdGlvbigpOwogICAgIGlmIChmdW5jdGlvbi5Jc0VtcHR5KCkpIHsKICAgICAgICAgLy8g
UmV0dXJuIGlmIGFsbG9jYXRpb24gZmFpbGVkLgpAQCAtMzQ5LDcgKzM0OCw3IEBACiAgICAgICAg
IHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD4oKTsKICAgICB9CiAgICAgSW5zcGVjdG9yQmFj
a2VuZCogYmFja2VuZCA9IG1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5pbnNwZWN0b3JCYWNrZW5kKCk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVy
KGluc3RhbmNlLCBWOENsYXNzSW5kZXg6OlRvSW50KGRlc2NyaXB0b3JUeXBlKSwgYmFja2VuZCk7
CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGluc3RhbmNlLCAmVjhJbnNwZWN0b3JC
YWNrZW5kOjppbmZvLCBiYWNrZW5kKTsKICAgICAvLyBDcmVhdGUgYSB3ZWFrIHJlZmVyZW5jZSB0
byB0aGUgdjggd3JhcHBlciBvZiBJbnNwZWN0b3JCYWNrZW5kIHRvIGRlcmVmCiAgICAgLy8gSW5z
cGVjdG9yQmFja2VuZCB3aGVuIHRoZSB3cmFwcGVyIGlzIGdhcmJhZ2UgY29sbGVjdGVkLgogICAg
IGJhY2tlbmQtPnJlZigpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zy
b250ZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZU
b29sc0Zyb250ZW5kSW1wbC5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw3
ICszNTgsNyBAQAogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IGV2ZW50V3JhcHBlciA9IHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2Fz
dChhcmdzWzBdKTsKLSAgICBpZiAoVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZShldmVudFdy
YXBwZXIpICE9IFY4Q2xhc3NJbmRleDo6TU9VU0VFVkVOVCkKKyAgICBpZiAoVjhET01XcmFwcGVy
Ojpkb21XcmFwcGVyVHlwZShldmVudFdyYXBwZXIpLT5pbmRleCAhPSBWOENsYXNzSW5kZXg6Ok1P
VVNFRVZFTlQpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBFdmVudCog
ZXZlbnQgPSBWOEV2ZW50Ojp0b05hdGl2ZShldmVudFdyYXBwZXIpOwpJbmRleDogV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJCaW5kaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJCaW5kaW5ncy5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJCaW5kaW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NCw3ICsyODQsNyBAQAog
ewogICAgIFY4TlBPYmplY3QqIHY4bnBvYmplY3QgPSByZWludGVycHJldF9jYXN0PFY4TlBPYmpl
Y3QqPihucG9iaik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB2OG9iamVjdCh2OG5wb2Jq
ZWN0LT52OE9iamVjdCk7Ci0gICAgaWYgKFY4Q2xhc3NJbmRleDo6UkFOR0UgIT0gVjhET01XcmFw
cGVyOjpkb21XcmFwcGVyVHlwZSh2OG9iamVjdCkpCisgICAgaWYgKFY4Q2xhc3NJbmRleDo6UkFO
R0UgIT0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh2OG9iamVjdCktPmluZGV4KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSYW5nZSogbmF0aXZlID0gVjhSYW5nZTo6dG9OYXRp
dmUodjhvYmplY3QpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA1NTc0NCkKKysrIFdlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAx
MC0wMy0wOSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdyYXAgYW5kIHVud3JhcCB2OCBv
YmplY3RzIHdpdGggV3JhcHBlclR5cGVJbmZvIGluc3RlYWQgb2YgVjhDbGFzc0luZGV4OjpWOFdy
YXBwZXJUeXBlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNTk0MQorCisgICAgICAgICogc3JjL1dlYkJpbmRpbmdzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6Z2V0UmFuZ2VJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6Y3JlYXRlSW5zcGVj
dG9yQmFja2VuZFY4V3JhcHBlcik6CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzU2hv
d0NvbnRleHRNZW51KToKKwogMjAxMC0wMy0wOSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDog
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDU1NzQ0KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw1OSBAQAorMjAxMC0wMy0wOSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtWOF0gSW5z
dGVhZCBvZiBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIGEgd3JhcHBlZCB2OCBvYmplY3QKKyAgICAg
ICAgd2l0aCBhbiBlbnVtIHZhbHVlLCB1c2UgYSBwb2ludGVyIHRvIHN0cnVjdCB3aXRoIG1vcmUg
Y29tcGxldGUKKyAgICAgICAgaW5mb3JtYXRpb24uCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1OTQxCisKKyAgICAgICAgUmVmYWN0b3Jpbmcgb25s
eSwgc28gbmV3IHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG06CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NRGF0YS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvdjgvRE9NRGF0YS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L05QVjhPYmplY3Qu
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
RE9NV2luZG93U2hlbGwuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhlbHBl
cnMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SGVscGVycy5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4SW5kZXguY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
SW5kZXguaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENv
bnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxl
bWVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
SW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTaGFyZWRXb3JrZXJDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlCdWZmZXJDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlDdXN0b20uaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEJ5dGVBcnJheUN1c3RvbS5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEludEFycmF5Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0
b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRJbnRB
cnJheUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNp
Z25lZFNob3J0QXJyYXlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhXZWJLaXRQb2ludENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhXZWJTb2NrZXRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdvcmtlckN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHA6CisKIDIwMTAtMDMtMDkgIEJyYWR5IEVpZHNv
biAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShy
ZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTI0NywxMCArMjQ3LDE1IEBACiAgICAgc3RhdGljIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOwogICAgIHN0
YXRpYyAke25hdGl2ZVR5cGV9KiB0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKICAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKCR7bmF0aXZlVHlwZX0qJHtmb3Jj
ZU5ld09iamVjdFBhcmFtZXRlcn0pOworICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQq
KTsKKyAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CiBFTkQKKyAgICBpZiAoSXNBY3Rp
dmVEb21UeXBlKCRpbXBsQ2xhc3NOYW1lKSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyBBY3RpdmVET01PYmplY3QqIHRvQWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4pO1xuIik7CisgICAgfQogCiAgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVx
ICJET01XaW5kb3ciKSB7Ci0gICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CisgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdFRlbXBsYXRlPiBHZXRTaGFkb3dPYmplY3RUZW1wbGF0ZSgpOwogRU5ECiAg
ICAgfQpAQCAtNTQ2LDggKzU1MSw4IEBACiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+ICR7
aW1wbENsYXNzTmFtZX1Db25zdHJ1Y3RvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykgewogICAgIElOQ19TVEFUUyhcIkRPTS4k
aW1wbENsYXNzTmFtZS5jb25zdHJ1Y3RvcnMuX2dldFwiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gZGF0YSA9IGluZm8uRGF0YSgpOwotICAgIEFTU0VSVChkYXRhLT5Jc051bWJlcigpKTsK
LSAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSA9IFY4Q2xhc3NJbmRleDo6RnJv
bUludChkYXRhLT5JbnQzMlZhbHVlKCkpOworICAgIEFTU0VSVChkYXRhLT5Jc0V4dGVybmFsKCkg
fHwgZGF0YS0+SXNOdW1iZXIoKSk7CisgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlID0gcmVpbnRl
cnByZXRfY2FzdDxXcmFwcGVyVHlwZUluZm8qPih2ODo6RXh0ZXJuYWw6OlVud3JhcChkYXRhKSk7
CiBFTkQKIAogICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAiRE9NV2luZG93IikgewpAQCAtMTE3
OSwxNyArMTE4NCwxNyBAQAogICAgIH0KIAogICAgIG15ICRvbl9wcm90byA9ICIwIC8qIG9uIGlu
c3RhbmNlICovIjsKLSAgICBteSAkZGF0YSA9ICJWOENsYXNzSW5kZXg6OklOVkFMSURfQ0xBU1Nf
SU5ERVggLyogbm8gZGF0YSAqLyI7CisgICAgbXkgJGRhdGEgPSAiMCAvKiBubyBkYXRhICovIjsK
IAogICAgICMgQ29uc3RydWN0b3IKICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBl
ID1+IC9Db25zdHJ1Y3RvciQvKSB7CiAgICAgICAgIG15ICRjb25zdHJ1Y3RvclR5cGUgPSAkY29k
ZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlKTsKICAg
ICAgICAgJGNvbnN0cnVjdG9yVHlwZSA9fiBzL0NvbnN0cnVjdG9yJC8vOwotICAgICAgICBteSAk
Y29uc3RydWN0b3JJbmRleCA9IHVjKCRjb25zdHJ1Y3RvclR5cGUpOworICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJWOCR7Y29uc3RydWN0b3JUeXBlfS5oIn0gPSAxOwogICAgICAgICBpZiAoJGN1c3Rv
bUFjY2Vzc29yKSB7CiAgICAgICAgICAgICAkZ2V0dGVyID0gIlY4JHtjdXN0b21BY2Nlc3Nvcn1B
Y2Nlc3NvckdldHRlciI7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkZGF0YSA9ICJW
OENsYXNzSW5kZXg6OiR7Y29uc3RydWN0b3JJbmRleH0iOworICAgICAgICAgICAgJGRhdGEgPSAi
JlY4JHtjb25zdHJ1Y3RvclR5cGV9OjppbmZvIjsKICAgICAgICAgICAgICRnZXR0ZXIgPSAiJHtp
bnRlcmZhY2VOYW1lfUludGVybmFsOjoke2ludGVyZmFjZU5hbWV9Q29uc3RydWN0b3JHZXR0ZXIi
OwogICAgICAgICB9CiAgICAgICAgICRzZXR0ZXIgPSAiMCI7CkBAIC0xNDU3LDcgKzE0NjIsMTAg
QEAKIAogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkaW50ZXJmYWNlTmFtZSk7CiAKLSAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAibmFtZXNwYWNlIFdlYkNvcmUge1xuIik7CisgICAgbXkgJHRv
QWN0aXZlID0gSXNBY3RpdmVEb21UeXBlKCRpbnRlcmZhY2VOYW1lKSA/ICIke2NsYXNzTmFtZX06
OnRvQWN0aXZlRE9NT2JqZWN0IiA6ICIwIjsKKworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICJuYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICJXcmFwcGVyVHlwZUluZm8gJHtjbGFzc05hbWV9OjppbmZvID0ge1Y4Q2xhc3NJbmRleDo6VG9J
bnQoVjhDbGFzc0luZGV4Ojoke2NsYXNzSW5kZXh9KSwgJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0
ZSwgJHtjbGFzc05hbWV9OjpkZXJlZk9iamVjdCwgJHt0b0FjdGl2ZX0gfTtcblxuIik7ICAgCiAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIm5hbWVzcGFjZSAke2ludGVyZmFjZU5hbWV9SW50
ZXJuYWwge1xuXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAidGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IHZvaWQgVjhfVVNFKFQpIHsgfVxuXG4iKTsKIApAQCAtMTYyNiw3ICsxNjM0LDcg
QEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke2NsYXNzTmFtZX06OmNvbnN0cnVjdG9yQ2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS4ke2lu
dGVyZmFjZU5hbWV9LkNvbnRydWN0b3IiKTsKLSAgICByZXR1cm4gVjhQcm94eTo6Y29uc3RydWN0
RE9NT2JqZWN0PFY4Q2xhc3NJbmRleDo6JHtjbGFzc0luZGV4fSwgJGludGVyZmFjZU5hbWU+KGFy
Z3MpOworICAgIHJldHVybiBWOFByb3h5Ojpjb25zdHJ1Y3RET01PYmplY3Q8JGludGVyZmFjZU5h
bWU+KGFyZ3MsICZpbmZvKTsKIH0KIEVORAogICAgfQpAQCAtMTg4MCw2ICsxODg4LDE4IEBACiAK
IEVORAogCisgICAgaWYgKElzQWN0aXZlRG9tVHlwZSgkaW50ZXJmYWNlTmFtZSkpIHsKKyAgICAg
ICAgIyBNZXNzYWdlUG9ydCBpcyBoYW5kbGVkIGxpa2UgYW4gYWN0aXZlIGRvbSBvYmplY3QgZXZl
biB0aG91Z2ggaXQgZG9lc24ndCBpbmhlcml0CisgICAgICAgICMgZnJvbSBBY3RpdmVET01PYmpl
Y3QsIHNvIGRvbid0IHRyeSB0byBjYXN0IGl0IHRvIEFjdGl2ZURPTU9iamVjdC4KKyAgICAgICAg
bXkgJHJldHVyblZhbHVlID0gJGludGVyZmFjZU5hbWUgZXEgIk1lc3NhZ2VQb3J0IiA/ICIwIiA6
ICJ0b05hdGl2ZShvYmplY3QpIjsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsK
K0FjdGl2ZURPTU9iamVjdCogJHtjbGFzc05hbWV9Ojp0b0FjdGl2ZURPTU9iamVjdCh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKK3sKKyAgICByZXR1cm4gJHtyZXR1cm5WYWx1ZX07Cit9
ICAgICAgCitFTkQKKyAgICB9CisKICAgICBpZiAoJGltcGxDbGFzc05hbWUgZXEgIkRPTVdpbmRv
dyIpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3RUZW1wbGF0ZT4gVjhET01XaW5kb3c6OkdldFNoYWRvd09iamVjdFRlbXBsYXRl
KCkKQEAgLTE4OTcsNiArMTkxNywyMCBAQAogICAgIEdlbmVyYXRlVG9WOENvbnZlcnRlcnMoJGRh
dGFOb2RlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJG5hdGl2ZVR5cGUpOwogCiAgICAg
cHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKwordm9pZCAke2NsYXNzTmFtZX06OmRlcmVmT2Jq
ZWN0KHZvaWQqIG9iamVjdCkKK3sKK0VORAorCisgICAgaWYgKElzUmVmUHRyVHlwZSgkaW50ZXJm
YWNlTmFtZSkpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgICBzdGF0
aWNfY2FzdDwke25hdGl2ZVR5cGV9Kj4ob2JqZWN0KS0+ZGVyZWYoKTsKK0VORAorICAgIH0KKwor
ICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIEVORAogCkBAIC0xOTYxLDcgKzE5OTUsNyBAQAogICAgIH0KIAogICAgIHB1c2goQGltcGxD
b250ZW50LCA8PEVORCk7Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVW
OE9iamVjdChwcm94eSwgJHt3cmFwcGVyVHlwZX0sIGltcGwpOworICAgIHdyYXBwZXIgPSBWOERP
TVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QocHJveHksICZpbmZvLCBpbXBsKTsKIEVORAog
CiAgICAgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgewpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMywxNyArMTMzLDcgQEAK
IHZvaWQgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qodm9pZCogb2JqZWN0
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogewogICAgIEFTU0VSVChWOERP
TVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcih3cmFwcGVyKSk7Ci0jaWZuZGVmIE5ERUJVRwotICAg
IFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhET01XcmFwcGVyOjpkb21XcmFw
cGVyVHlwZSh3cmFwcGVyKTsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSNkZWZpbmUgTUFLRV9DQVNF
KFRZUEUsIE5BTUUpIGNhc2UgVjhDbGFzc0luZGV4OjpUWVBFOgotICAgICAgICBBQ1RJVkVfRE9N
X09CSkVDVF9UWVBFUyhNQUtFX0NBU0UpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
I3VuZGVmIE1BS0VfQ0FTRQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNl
bmRpZgorICAgIEFTU0VSVCghZG9tV3JhcHBlclR5cGUod3JhcHBlciktPnRvQWN0aXZlRE9NT2Jq
ZWN0RnVuY3Rpb24pOwogICAgIGdldERPTU9iamVjdE1hcCgpLnNldChvYmplY3QsIHdyYXBwZXIp
OwogfQogCkBAIC0xNTEsMTYgKzE0MSw3IEBACiB2b2lkIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFw
cGVyRm9yQWN0aXZlRE9NT2JqZWN0KHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gd3JhcHBlcikKIHsKICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBw
ZXIod3JhcHBlcikpOwotI2lmbmRlZiBOREVCVUcKLSAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUgdHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7Ci0gICAg
c3dpdGNoICh0eXBlKSB7Ci0jZGVmaW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1FKSBjYXNlIFY4Q2xh
c3NJbmRleDo6VFlQRTogYnJlYWs7Ci0gICAgICAgIEFDVElWRV9ET01fT0JKRUNUX1RZUEVTKE1B
S0VfQ0FTRSkKLSAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0j
dW5kZWYgTUFLRV9DQVNFCi0gICAgfQotI2VuZGlmCisgICAgQVNTRVJUKGRvbVdyYXBwZXJUeXBl
KHdyYXBwZXIpLT50b0FjdGl2ZURPTU9iamVjdEZ1bmN0aW9uKTsKICAgICBnZXRBY3RpdmVET01P
YmplY3RNYXAoKS5zZXQob2JqZWN0LCB3cmFwcGVyKTsKIH0KIApAQCAtMTcxLDcgKzE1Miw3IEBA
CiAgICAgZ2V0RE9NTm9kZU1hcCgpLnNldChub2RlLCB3cmFwcGVyKTsKIH0KIAotdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvcihWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdFByb3RvdHlw
ZSkKK3Y4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3Io
V3JhcHBlclR5cGVJbmZvKiB0eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0UHJvdG90
eXBlKQogewogICAgIC8vIEEgRE9NIGNvbnN0cnVjdG9yIGlzIGEgZnVuY3Rpb24gaW5zdGFuY2Ug
Y3JlYXRlZCBmcm9tIGEgRE9NIGNvbnN0cnVjdG9yCiAgICAgLy8gdGVtcGxhdGUuIFRoZXJlIGlz
IG9uZSBpbnN0YW5jZSBwZXIgY29udGV4dC4gQSBET00gY29uc3RydWN0b3IgaXMKQEAgLTE4Miw3
ICsxNjMsNyBAQAogICAgIC8vIFRoZSByZWFzb24gZm9yIDIpIGlzIHRoYXQsIGluIFNhZmFyaSwg
YSBET00gY29uc3RydWN0b3IgaXMgYSBub3JtYWwgSlMKICAgICAvLyBvYmplY3QsIGJ1dCBub3Qg
YSBmdW5jdGlvbi4gSG90bWFpbCByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCwgaW4gU2FmYXJpLAog
ICAgIC8vIEhUTUxFbGVtZW50Ll9fcHJvdG9fXyA9PSBPYmplY3QucHJvdG90eXBlLgotICAgIHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGZ1bmN0aW9uVGVtcGxhdGUgPSBWOENsYXNz
SW5kZXg6OmdldFRlbXBsYXRlKHR5cGUpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IGZ1bmN0aW9uVGVtcGxhdGUgPSB0eXBlLT5nZXRUZW1wbGF0ZSgpOwogICAgIC8vIEdl
dHRpbmcgdGhlIGZ1bmN0aW9uIG1pZ2h0IGZhaWwgaWYgd2UncmUgcnVubmluZyBvdXQgb2YKICAg
ICAvLyBzdGFjayBvciBtZW1vcnkuCiAgICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoOwpAQCAtMTk1
LDcgKzE3Niw3IEBACiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi12ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yRm9yQ29udGV4dChWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKK3Y4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3JGb3JDb250
ZXh0KFdyYXBwZXJUeXBlSW5mbyogdHlwZSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4
dCkKIHsKICAgICAvLyBFbnRlciB0aGUgc2NvcGUgZm9yIHRoaXMgY29udGV4dCB0byBnZXQgdGhl
IGNvcnJlY3QgY29uc3RydWN0b3IuCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRl
eHQpOwpAQCAtMjAzLDcgKzE4NCw3IEBACiAgICAgcmV0dXJuIGdldENvbnN0cnVjdG9yKHR5cGUs
IFY4RE9NV2luZG93U2hlbGw6OmdldEhpZGRlbk9iamVjdFByb3RvdHlwZShjb250ZXh0KSk7CiB9
CiAKLXY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3Io
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIERPTVdpbmRvdyogd2luZG93KQordjg6
OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvcihXcmFwcGVy
VHlwZUluZm8qIHR5cGUsIERPTVdpbmRvdyogd2luZG93KQogewogICAgIEZyYW1lKiBmcmFtZSA9
IHdpbmRvdy0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtMjE2LDcgKzE5Nyw3IEBACiAg
ICAgcmV0dXJuIGdldENvbnN0cnVjdG9yRm9yQ29udGV4dCh0eXBlLCBjb250ZXh0KTsKIH0KIAot
djg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvcihWOENs
YXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgV29ya2VyQ29udGV4dCopCit2ODo6TG9jYWw8
djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKFdyYXBwZXJUeXBlSW5m
byogdHlwZSwgV29ya2VyQ29udGV4dCopCiB7CiAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5KiBwcm94eSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKTsKICAg
ICBpZiAoIXByb3h5KQpAQCAtMjQ4LDExICsyMjksMTAgQEAKICAgICBnbG9iYWwtPlNldEludGVy
bmFsRmllbGQoaW50ZXJuYWxJbmRleCwganNPYmplY3QpOwogfQogCi1WOENsYXNzSW5kZXg6OlY4
V3JhcHBlclR5cGUgVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IG9iamVjdCkKK1dyYXBwZXJUeXBlSW5mbyogVjhET01XcmFwcGVyOjpkb21XcmFwcGVy
VHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKIHsKICAgICBBU1NFUlQoVjhET01X
cmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHR5cGUgPSBvYmplY3QtPkdldEludGVybmFsRmllbGQodjhET01XcmFwcGVyVHlwZUluZGV4
KTsKLSAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpGcm9tSW50KHR5cGUtPkludDMyVmFsdWUoKSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdyYXBwZXJUeXBlSW5mbyo+KG9iamVjdC0+R2V0UG9p
bnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlclR5cGVJbmRleCkpOwogfQogCiBQYXNz
UmVmUHRyPE5vZGVGaWx0ZXI+IFY4RE9NV3JhcHBlcjo6d3JhcE5hdGl2ZU5vZGVGaWx0ZXIodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGZpbHRlcikKQEAgLTI4NSw3ICsyNjUsNyBAQAogICAgIHJldHVy
biBvYmplY3RQcm90b3R5cGUtPkludGVybmFsRmllbGRDb3VudCgpID09IFY4RE9NV2luZG93Ojpp
bnRlcm5hbEZpZWxkQ291bnQ7CiB9CiAKLXY4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdyYXBw
ZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSogcHJveHksIFY4Q2xhc3NJbmRleDo6VjhX
cmFwcGVyVHlwZSB0eXBlLCB2b2lkKiBpbXBsKQordjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4RE9N
V3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChWOFByb3h5KiBwcm94eSwgV3JhcHBlclR5cGVJ
bmZvKiB0eXBlLCB2b2lkKiBpbXBsKQogewogICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRl
eHQgPSAwOwogICAgIGlmIChWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKSB7CkBAIC0z
MTQsMTIgKzI5NCwxMiBAQAogICAgICAgICBpZiAod29ya2VyQ29udGV4dCkKICAgICAgICAgICAg
IGZ1bmN0aW9uID0gZ2V0Q29uc3RydWN0b3IodHlwZSwgd29ya2VyQ29udGV4dCk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gVjhDbGFzc0luZGV4OjpnZXRUZW1wbGF0ZSh0
eXBlKS0+R2V0RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gdHlwZS0+Z2V0VGVt
cGxhdGUoKS0+R2V0RnVuY3Rpb24oKTsKICAgICAgICAgaW5zdGFuY2UgPSBTYWZlQWxsb2NhdGlv
bjo6bmV3SW5zdGFuY2UoZnVuY3Rpb24pOwogICAgIH0KICAgICBpZiAoIWluc3RhbmNlLklzRW1w
dHkoKSkgewogICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIHRoZSBET00gd3JhcHBlciBmb3IgZmFp
bGVkIGFsbG9jYXRpb25zLgotICAgICAgICBzZXRET01XcmFwcGVyKGluc3RhbmNlLCBWOENsYXNz
SW5kZXg6OlRvSW50KHR5cGUpLCBpbXBsKTsKKyAgICAgICAgc2V0RE9NV3JhcHBlcihpbnN0YW5j
ZSwgdHlwZSwgaW1wbCk7CiAgICAgfQogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KQEAgLTMzNiw5
ICszMTYsOCBAQAogCiAgICAgQVNTRVJUKG9iamVjdC0+SW50ZXJuYWxGaWVsZENvdW50KCkgPj0g
djhEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCk7CiAKLSAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdHlwZSA9IG9iamVjdC0+R2V0SW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJUeXBl
SW5kZXgpOwotICAgIEFTU0VSVCh0eXBlLT5Jc0ludDMyKCkpOwotICAgIEFTU0VSVChWOENsYXNz
SW5kZXg6OklOVkFMSURfQ0xBU1NfSU5ERVggPCB0eXBlLT5JbnQzMlZhbHVlKCkgJiYgdHlwZS0+
SW50MzJWYWx1ZSgpIDwgVjhDbGFzc0luZGV4OjpDTEFTU0lOREVYX0VORCk7CisgICAgV3JhcHBl
clR5cGVJbmZvKiB0eXBlSW5mbyA9IHN0YXRpY19jYXN0PFdyYXBwZXJUeXBlSW5mbyo+KG9iamVj
dC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlclR5cGVJbmRleCkpOwor
ICAgIEFTU0VSVChWOENsYXNzSW5kZXg6OklOVkFMSURfQ0xBU1NfSU5ERVggPCB0eXBlSW5mby0+
aW5kZXggJiYgdHlwZUluZm8tPmluZGV4IDwgVjhDbGFzc0luZGV4OjpDTEFTU0lOREVYX0VORCk7
CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IG9iamVjdC0+R2V0SW50ZXJu
YWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCk7CiAgICAgQVNTRVJUKHdyYXBwZXItPklz
TnVtYmVyKCkgfHwgd3JhcHBlci0+SXNFeHRlcm5hbCgpKTsKQEAgLTM2NSwxMSArMzQ0LDEwIEBA
CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBvYmplY3QtPkdldEludGVybmFs
RmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpOwogICAgIEFTU0VSVCh3cmFwcGVyLT5Jc051
bWJlcigpIHx8IHdyYXBwZXItPklzRXh0ZXJuYWwoKSk7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdHlwZSA9IG9iamVjdC0+R2V0SW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJUeXBlSW5k
ZXgpOwotICAgIEFTU0VSVCh0eXBlLT5Jc0ludDMyKCkpOwotICAgIEFTU0VSVChWOENsYXNzSW5k
ZXg6OklOVkFMSURfQ0xBU1NfSU5ERVggPCB0eXBlLT5JbnQzMlZhbHVlKCkgJiYgdHlwZS0+SW50
MzJWYWx1ZSgpIDwgVjhDbGFzc0luZGV4OjpDTEFTU0lOREVYX0VORCk7CisgICAgV3JhcHBlclR5
cGVJbmZvKiB0eXBlSW5mbyA9IHN0YXRpY19jYXN0PFdyYXBwZXJUeXBlSW5mbyo+KG9iamVjdC0+
R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlclR5cGVJbmRleCkpOworICAg
IEFTU0VSVChWOENsYXNzSW5kZXg6OklOVkFMSURfQ0xBU1NfSU5ERVggPCB0eXBlSW5mby0+aW5k
ZXggJiYgdHlwZUluZm8tPmluZGV4IDwgVjhDbGFzc0luZGV4OjpDTEFTU0lOREVYX0VORCk7CiAK
LSAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpGcm9tSW50KHR5cGUtPkludDMyVmFsdWUoKSkgPT0g
Y2xhc3NUeXBlOworICAgIHJldHVybiBWOENsYXNzSW5kZXg6OkZyb21JbnQodHlwZUluZm8tPmlu
ZGV4KSA9PSBjbGFzc1R5cGU7CiB9CiAKIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhET01XcmFw
cGVyOjpnZXRXcmFwcGVyKE5vZGUqIG5vZGUpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkocmV2
aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBuYW1lOwog
ICAgICAgICB2ODo6QWNjZXNzb3JHZXR0ZXIgZ2V0dGVyOwogICAgICAgICB2ODo6QWNjZXNzb3JT
ZXR0ZXIgc2V0dGVyOwotICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgZGF0YTsK
KyAgICAgICAgV3JhcHBlclR5cGVJbmZvKiBkYXRhOwogICAgICAgICB2ODo6QWNjZXNzQ29udHJv
bCBzZXR0aW5nczsKICAgICAgICAgdjg6OlByb3BlcnR5QXR0cmlidXRlIGF0dHJpYnV0ZTsKICAg
ICAgICAgYm9vbCBvblByb3RvOwpAQCAtODksNyArODksNyBAQAogICAgICAgICAoYXR0cmlidXRl
Lm9uUHJvdG8gPyBwcm90byA6IGluc3RhbmNlKS0+U2V0QWNjZXNzb3Iodjg6OlN0cmluZzo6TmV3
KGF0dHJpYnV0ZS5uYW1lKSwKICAgICAgICAgICAgIGF0dHJpYnV0ZS5nZXR0ZXIsCiAgICAgICAg
ICAgICBhdHRyaWJ1dGUuc2V0dGVyLAotICAgICAgICAgICAgYXR0cmlidXRlLmRhdGEgPT0gVjhD
bGFzc0luZGV4OjpJTlZBTElEX0NMQVNTX0lOREVYID8gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCkg
OiB2ODo6SW50ZWdlcjo6TmV3KFY4Q2xhc3NJbmRleDo6VG9JbnQoYXR0cmlidXRlLmRhdGEpKSwK
KyAgICAgICAgICAgIHY4OjpFeHRlcm5hbDo6V3JhcChhdHRyaWJ1dGUuZGF0YSksCiAgICAgICAg
ICAgICBhdHRyaWJ1dGUuc2V0dGluZ3MsCiAgICAgICAgICAgICBhdHRyaWJ1dGUuYXR0cmlidXRl
KTsKICAgICB9CkBAIC0yOTAsMTMgKzI5MCw5IEBACiAgICAgICAgIC8vIFNjaGVkdWxlIGFuIGVy
cm9yIG9iamVjdCB0byBiZSB0aHJvd24uCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdGhyb3dFcnJvcihFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwogCi0gICAg
ICAgIC8vIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhIGZ1bmN0aW9uIGRlc2NyaXB0b3IgYW5kIHNl
dCB0byB0aGUgZ2xvYmFsIG9iamVjdAotICAgICAgICAvLyBhcyBhIG5hbWVkIHByb3BlcnR5LiBV
c2VkIGJ5IHY4X3Rlc3Rfc2hlbGwuCi0gICAgICAgIHN0YXRpYyB2b2lkIGJpbmRKc09iamVjdFRv
V2luZG93KEZyYW1lKiwgY29uc3QgY2hhciogbmFtZSwgaW50IHR5cGUsIHY4OjpIYW5kbGU8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+LCB2b2lkKik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgorICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0cnVjdERPTU9iamVj
dChjb25zdCB2ODo6QXJndW1lbnRzJiwgV3JhcHBlclR5cGVJbmZvKik7CiAKLSAgICAgICAgdGVt
cGxhdGUgPGludCB0YWcsIHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY29uc3RydWN0RE9NT2JqZWN0KGNvbnN0IHY4OjpBcmd1bWVudHMmKTsKLQogICAg
ICAgICAvLyBQcm9jZXNzIGFueSBwZW5kaW5nIEphdmFTY3JpcHQgY29uc29sZSBtZXNzYWdlcy4K
ICAgICAgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0NvbnNvbGVNZXNzYWdlcygpOwogCkBAIC00MTAs
OCArNDA2LDggQEAKICAgICAgICAgSXNvbGF0ZWRXb3JsZE1hcCBtX2lzb2xhdGVkV29ybGRzOwog
ICAgIH07CiAKLSAgICB0ZW1wbGF0ZSA8aW50IHRhZywgdHlwZW5hbWUgVD4KLSAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhQcm94eTo6Y29uc3RydWN0RE9NT2JqZWN0KGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4UHJveHk6OmNvbnN0cnVjdERPTU9iamVjdChjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzLCBXcmFwcGVyVHlwZUluZm8qIHR5cGUpCiAgICAgewogICAgICAgICBpZiAoIWFyZ3Mu
SXNDb25zdHJ1Y3RDYWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihWOFByb3h5
OjpUeXBlRXJyb3IsICJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMg
YSBmdW5jdGlvbi4iKTsKQEAgLTQxOSw3ICs0MTUsNyBAQAogICAgICAgICAvLyBOb3RlOiBpdCdz
IE9LIHRvIGxldCB0aGlzIFJlZlB0ciBnbyBvdXQgb2Ygc2NvcGUgYmVjYXVzZSB3ZSBhbHNvIGNh
bGwKICAgICAgICAgLy8gU2V0RE9NV3JhcHBlcigpLCB3aGljaCBlZmZlY3RpdmVseSBob2xkcyBh
IHJlZmVyZW5jZSB0byBvYmouCiAgICAgICAgIFJlZlB0cjxUPiBvYmogPSBUOjpjcmVhdGUoKTsK
LSAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIHRhZywg
b2JqLmdldCgpKTsKKyAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9s
ZGVyKCksIHR5cGUsIG9iai5nZXQoKSk7CiAgICAgICAgIG9iai0+cmVmKCk7CiAgICAgICAgIFY4
RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KG9iai5nZXQoKSwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CiAgICAgICAgIHJldHVybiBh
cmdzLkhvbGRlcigpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmgJ
KHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDkgKzc3LDkgQEAKICAgICAvLyBUbyBjcmVhdGUgSlMg
V3JhcHBlciBvYmplY3RzLCB3ZSBjcmVhdGUgYSBjYWNoZSBvZiBhICdib2lsZXIgcGxhdGUnCiAg
ICAgLy8gb2JqZWN0LCBhbmQgdGhlbiBzaW1wbHkgQ2xvbmUgdGhhdCBvYmplY3QgZWFjaCB0aW1l
IHdlIG5lZWQgYSBuZXcgb25lLgogICAgIC8vIFRoaXMgaXMgZmFzdGVyIHRoYW4gZ29pbmcgdGhy
b3VnaCB0aGUgZnVsbCBvYmplY3QgY3JlYXRpb24gcHJvY2Vzcy4KLSAgICB2ODo6TG9jYWw8djg6
Ok9iamVjdD4gY3JlYXRlV3JhcHBlckZyb21DYWNoZShWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5
cGUgdHlwZSkKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gY3JlYXRlV3JhcHBlckZyb21DYWNo
ZShXcmFwcGVyVHlwZUluZm8qIHR5cGUpCiAgICAgewotICAgICAgICBpbnQgY2xhc3NJbmRleCA9
IFY4Q2xhc3NJbmRleDo6VG9JbnQodHlwZSk7CisgICAgICAgIGludCBjbGFzc0luZGV4ID0gdHlw
ZS0+aW5kZXg7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjbG9uZShtX3dyYXBwZXJC
b2lsZXJwbGF0ZXMtPkNsb25lRWxlbWVudEF0KGNsYXNzSW5kZXgpKTsKICAgICAgICAgcmV0dXJu
IGNsb25lLklzRW1wdHkoKSA/IGNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGVTbG93Q2FzZSh0eXBlKSA6
IGNsb25lOwogICAgIH0KQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgIHZvaWQgdXBkYXRlRG9jdW1l
bnRXcmFwcGVyQ2FjaGUoKTsKICAgICB2b2lkIGNsZWFyRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsK
IAotICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nh
c2UoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlKTsKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gY3JlYXRlV3JhcHBlckZyb21DYWNoZVNsb3dDYXNlKFdyYXBwZXJUeXBlSW5mbyopOwogCiAg
ICAgRnJhbWUqIG1fZnJhbWU7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhIZWxwZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhlbHBlcnMuaAkocmV2aXNp
b24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw5ICszNyw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgVjhQ
cm94eTsKIAotICAgIC8vIEFzc29jaWF0ZXMgYW4gTlBPYmplY3Qgd2l0aCBhIFY4IG9iamVjdC4K
LSAgICB2b2lkIHdyYXBOUE9iamVjdCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCBOUE9iamVjdCop
OwotCiAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiB0b1Y4Q29udGV4dChOUFAsIE5QT2JqZWN0
Kik7CiAKICAgICBWOFByb3h5KiB0b1Y4UHJveHkoTlBPYmplY3QqKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFByb3h5LmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDMsMjEgKzc0Myw2IEBACiAgICAgcmV0dXJu
IGFyZ3MuVGhpcygpOwogfQogCi12b2lkIFY4UHJveHk6OmJpbmRKc09iamVjdFRvV2luZG93KEZy
YW1lKiBmcmFtZSwgY29uc3QgY2hhciogbmFtZSwgaW50IHR5cGUsIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IGRlc2NyaXB0b3IsIHZvaWQqIGltcGwpCi17Ci0gICAgLy8gR2V0IGVu
dmlyb25tZW50LgotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IFY4UHJv
eHk6Om1haW5Xb3JsZENvbnRleHQoZnJhbWUpOwotICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47IC8vIEpTIG5vdCBlbmFibGVkLgotCi0gICAgdjg6OkNvbnRleHQ6
OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBpbnN0
YW5jZSA9IGRlc2NyaXB0b3ItPkdldEZ1bmN0aW9uKCk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRE
T01XcmFwcGVyKGluc3RhbmNlLCB0eXBlLCBpbXBsKTsKLQotICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gZ2xvYmFsID0gdjhDb250ZXh0LT5HbG9iYWwoKTsKLSAgICBnbG9iYWwtPlNldCh2ODo6
U3RyaW5nOjpOZXcobmFtZSksIGluc3RhbmNlKTsKLX0KLQogdm9pZCBWOFByb3h5Ojpwcm9jZXNz
Q29uc29sZU1lc3NhZ2VzKCkKIHsKICAgICBWOENvbnNvbGVNZXNzYWdlOjpwcm9jZXNzRGVsYXll
ZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCShyZXZpc2lvbiA1NTc0MykK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDExICs2NywxMSBAQAogI2VuZGlmCiAKICAgICAgICAgLy8gU2V0cyBjb250ZW50cyBvZiBh
IERPTSB3cmFwcGVyLgotICAgICAgICBzdGF0aWMgdm9pZCBzZXRET01XcmFwcGVyKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gb2JqZWN0LCBpbnQgdHlwZSwgdm9pZCogY3B0cikKKyAgICAgICAgc3Rh
dGljIHZvaWQgc2V0RE9NV3JhcHBlcih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgV3Jh
cHBlclR5cGVJbmZvKiB0eXBlLCB2b2lkKiBjcHRyKQogICAgICAgICB7CiAgICAgICAgICAgICBB
U1NFUlQob2JqZWN0LT5JbnRlcm5hbEZpZWxkQ291bnQoKSA+PSAyKTsKICAgICAgICAgICAgIG9i
amVjdC0+U2V0UG9pbnRlckluSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCwg
Y3B0cik7Ci0gICAgICAgICAgICBvYmplY3QtPlNldEludGVybmFsRmllbGQodjhET01XcmFwcGVy
VHlwZUluZGV4LCB2ODo6SW50ZWdlcjo6TmV3KHR5cGUpKTsKKyAgICAgICAgICAgIG9iamVjdC0+
U2V0UG9pbnRlckluSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJUeXBlSW5kZXgsIHR5cGUpOwog
ICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gbG9va3Vw
RE9NV3JhcHBlcih2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBmdW5jdGlvblRlbXBs
YXRlLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKQEAgLTc5LDcgKzc5LDcgQEAKICAg
ICAgICAgICAgIHJldHVybiBvYmplY3QuSXNFbXB0eSgpID8gb2JqZWN0IDogb2JqZWN0LT5GaW5k
SW5zdGFuY2VJblByb3RvdHlwZUNoYWluKGZ1bmN0aW9uVGVtcGxhdGUpOwogICAgICAgICB9CiAK
LSAgICAgICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkb21XcmFwcGVyVHlw
ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgICAgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5m
byogZG9tV3JhcHBlclR5cGUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CiAKICAgICAgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KFBh
c3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGV2ZW50VGFyZ2V0KQogICAgICAgICB7CkBAIC0xMDYsMTAg
KzEwNiwxMCBAQAogICAgICAgICAvLyBXcmFwIEpTIG5vZGUgZmlsdGVyIGluIEMrKy4KICAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gd3JhcE5hdGl2ZU5vZGVGaWx0ZXIodjg6
OkhhbmRsZTx2ODo6VmFsdWU+KTsKIAotICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpGdW5j
dGlvbj4gZ2V0Q29uc3RydWN0b3JGb3JDb250ZXh0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwotICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj4gZ2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0UHJvdG90eXBlKTsKLSAgICAgICAgc3RhdGljIHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6VjhXcmFw
cGVyVHlwZSwgRE9NV2luZG93Kik7Ci0gICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPiBnZXRDb25zdHJ1Y3RvcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIFdvcmtlckNv
bnRleHQqKTsKKyAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGdldENvbnN0
cnVjdG9yRm9yQ29udGV4dChXcmFwcGVyVHlwZUluZm8qLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
Pik7CisgICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBnZXRDb25zdHJ1Y3Rv
cihXcmFwcGVyVHlwZUluZm8qLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0UHJvdG90eXBl
KTsKKyAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGdldENvbnN0cnVjdG9y
KFdyYXBwZXJUeXBlSW5mbyosIERPTVdpbmRvdyopOworICAgICAgICBzdGF0aWMgdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj4gZ2V0Q29uc3RydWN0b3IoV3JhcHBlclR5cGVJbmZvKiwgV29ya2VyQ29u
dGV4dCopOwogCiAgICAgICAgIC8vIFNldCBKUyB3cmFwcGVyIG9mIGEgRE9NIG9iamVjdCwgdGhl
IGNhbGxlciBpbiBjaGFyZ2Ugb2YgaW5jcmVhc2UgcmVmLgogICAgICAgICBzdGF0aWMgdm9pZCBz
ZXRKU1dyYXBwZXJGb3JET01PYmplY3Qodm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
KTsKQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgICAgICAvLyBTZXQgaGlkZGVuIHJlZmVyZW5jZXMg
aW4gYSBET01XaW5kb3cgb2JqZWN0IG9mIGEgZnJhbWUuCiAgICAgICAgIHN0YXRpYyB2b2lkIHNl
dEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSosIGNvbnN0IGludCBpbnRlcm5hbEluZGV4LCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKIAotICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGluc3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSogcHJveHksIFY4Q2xhc3NJbmRleDo6
VjhXcmFwcGVyVHlwZSB0eXBlLCB2b2lkKiBpbXBsKTsKKyAgICAgICAgc3RhdGljIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiBpbnN0YW50aWF0ZVY4T2JqZWN0KFY4UHJveHkqIHByb3h5LCBXcmFwcGVy
VHlwZUluZm8qLCB2b2lkKiBpbXBsKTsKIAogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBnZXRXcmFwcGVyKE5vZGUqKTsKICAgICB9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSwyMiAr
MzY5LDIyIEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIENyZWF0ZSBhIG5ldyBK
UyB3aW5kb3cgb2JqZWN0IGFuZCB1c2UgaXQgYXMgdGhlIHByb3RvdHlwZSBmb3IgdGhlICBzaGFk
b3cgZ2xvYmFsIG9iamVjdC4KLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd2luZG93Q29u
c3RydWN0b3IgPSBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6RE9N
V0lORE9XLCBnZXRIaWRkZW5PYmplY3RQcm90b3R5cGUoY29udGV4dCkpOworICAgIHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uPiB3aW5kb3dDb25zdHJ1Y3RvciA9IFY4RE9NV3JhcHBlcjo6Z2V0Q29u
c3RydWN0b3IoJlY4RE9NV2luZG93OjppbmZvLCBnZXRIaWRkZW5PYmplY3RQcm90b3R5cGUoY29u
dGV4dCkpOwogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBqc1dpbmRvdyA9IFNhZmVBbGxvY2F0
aW9uOjpuZXdJbnN0YW5jZSh3aW5kb3dDb25zdHJ1Y3Rvcik7CiAgICAgLy8gQmFpbCBvdXQgaWYg
YWxsb2NhdGlvbiBmYWlsZWQuCiAgICAgaWYgKGpzV2luZG93LklzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV3JhcCB0aGUgd2luZG93LgotICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcihqc1dpbmRvdywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5k
ZXg6OkRPTVdJTkRPVyksIHdpbmRvdyk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVy
KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoanNXaW5kb3ctPkdldFByb3RvdHlwZSgpKSwg
VjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVyksIHdpbmRvdyk7Cisg
ICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGpzV2luZG93LCAmVjhET01XaW5kb3c6Omlu
Zm8sIHdpbmRvdyk7CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoanNXaW5kb3ctPkdldFByb3RvdHlwZSgpKSwgJlY4RE9NV2luZG93
OjppbmZvLCB3aW5kb3cpOwogCiAgICAgd2luZG93LT5yZWYoKTsKICAgICBWOERPTVdyYXBwZXI6
OnNldEpTV3JhcHBlckZvckRPTU9iamVjdCh3aW5kb3csIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+OjpOZXcoanNXaW5kb3cpKTsKIAogICAgIC8vIEluc2VydCB0aGUgd2luZG93IGluc3RhbmNl
IGFzIHRoZSBwcm90b3R5cGUgb2YgdGhlIHNoYWRvdyBvYmplY3QuCiAgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB2OEdsb2JhbCA9IGNvbnRleHQtPkdsb2JhbCgpOwotICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHY4R2xvYmFsLT5H
ZXRQcm90b3R5cGUoKSksIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpET01XSU5E
T1cpLCB3aW5kb3cpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KHY4R2xvYmFsLT5HZXRQcm90b3R5cGUoKSksICZWOERPTVdpbmRv
dzo6aW5mbywgd2luZG93KTsKICAgICB2OEdsb2JhbC0+U2V0KGltcGxpY2l0UHJvdG9TdHJpbmcs
IGpzV2luZG93KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTUzMiwxMCArNTMyLDEwIEBACiAg
ICAgY29udGV4dC0+R2xvYmFsKCktPlNldEhpZGRlblZhbHVlKGhpZGRlbk9iamVjdFByb3RvdHlw
ZVN0cmluZywgb2JqZWN0UHJvdG90eXBlKTsKIH0KIAotdjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4
RE9NV2luZG93U2hlbGw6OmNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGVTbG93Q2FzZShWOENsYXNzSW5k
ZXg6OlY4V3JhcHBlclR5cGUgdHlwZSkKK3Y4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdpbmRv
d1NoZWxsOjpjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nhc2UoV3JhcHBlclR5cGVJbmZvKiB0
eXBlKQogewogICAgIC8vIE5vdCBpbiBjYWNoZS4KLSAgICBpbnQgY2xhc3NJbmRleCA9IFY4Q2xh
c3NJbmRleDo6VG9JbnQodHlwZSk7CisgICAgaW50IGNsYXNzSW5kZXggPSB0eXBlLT5pbmRleDsK
ICAgICBpbml0Q29udGV4dElmTmVlZGVkKCk7CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3Bl
KG1fY29udGV4dCk7CiAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSBWOERP
TVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKHR5cGUsIGdldEhpZGRlbk9iamVjdFByb3RvdHlwZSht
X2NvbnRleHQpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcAkocmV2aXNpb24g
NTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw2ICs1NCw4IEBACiAgICAgSW52b2tlRGVmYXVsdCA9IDMKIH07CiAKK3N0YXRp
YyBXcmFwcGVyVHlwZUluZm8gbnBPYmplY3RUeXBlSW5mbyA9IHsgVjhDbGFzc0luZGV4OjpUb0lu
dChWOENsYXNzSW5kZXg6Ok5QT0JKRUNUKSwgMCwgMCwgZmFsc2UgfTsKKwogLy8gRklYTUU6IG5l
ZWQgY29tbWVudHMuCiAvLyBQYXJhbXM6IGhvbGRlciBjb3VsZCBiZSBIVE1MRW1iZWRFbGVtZW50
IG9yIE5QT2JqZWN0CiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2JqZWN0SW52b2tl
SW1wbChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBJbnZva2VGdW5jdGlvblR5cGUgZnVuY3Rp
b25JZCkKQEAgLTM3NSw3ICszNzcsNyBAQAogICAgIGlmICh2YWx1ZS5Jc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiB2YWx1ZTsKIAotICAgIHdyYXBOUE9iamVjdCh2YWx1ZSwgb2JqZWN0KTsKKyAg
ICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIodmFsdWUsICZucE9iamVjdFR5cGVJbmZvLCBv
YmplY3QpOwogCiAgICAgLy8gS0pTIHJldGFpbnMgdGhlIG9iamVjdCBhcyBwYXJ0IG9mIGl0cyB3
cmFwcGVyIChzZWUgQmluZGluZ3M6OkNJbnN0YW5jZSkuCiAgICAgX05QTl9SZXRhaW5PYmplY3Qo
b2JqZWN0KTsKQEAgLTM5NCw3ICszOTYsNyBAQAogICAgIGlmIChzdGF0aWNOUE9iamVjdE1hcC5j
b250YWlucyhvYmplY3QpKSB7CiAgICAgICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKICAgICAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gaGFuZGxlKHN0YXRpY05QT2JqZWN0TWFwLmdl
dChvYmplY3QpKTsKLSAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGhhbmRsZSwg
V2ViQ29yZTo6VjhDbGFzc0luZGV4OjpOUE9CSkVDVCwgMCk7CisgICAgICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcihoYW5kbGUsICZucE9iamVjdFR5cGVJbmZvLCAwKTsKICAgICAgICAg
c3RhdGljTlBPYmplY3RNYXAuZm9yZ2V0KG9iamVjdCk7CiAgICAgICAgIF9OUE5fUmVsZWFzZU9i
amVjdChvYmplY3QpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAko
cmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3IEBACiB1c2luZyBXZWJDb3JlOjpWOERPTVdyYXBw
ZXI7CiB1c2luZyBXZWJDb3JlOjpWOEdDQ29udHJvbGxlcjsKIHVzaW5nIFdlYkNvcmU6OlY4UHJv
eHk7Cit1c2luZyBXZWJDb3JlOjpXcmFwcGVyVHlwZUluZm87CiAKIC8vIEZJWE1FOiBDb21tZW50
cyBvbiB3aHkgdXNlIG1hbGxvYyBhbmQgZnJlZS4KIHN0YXRpYyBOUE9iamVjdCogYWxsb2NWOE5Q
T2JqZWN0KE5QUCwgTlBDbGFzcyopCkBAIC0xMTUsOCArMTE2LDggQEAKIHsKICAgICAvLyBDaGVj
ayB0byBzZWUgaWYgdGhpcyBvYmplY3QgaXMgYWxyZWFkeSB3cmFwcGVkLgogICAgIGlmIChvYmpl
Y3QtPkludGVybmFsRmllbGRDb3VudCgpID09IG5wT2JqZWN0SW50ZXJuYWxGaWVsZENvdW50KSB7
Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHR5cGVJbmRleCA9IG9iamVjdC0+R2V0SW50
ZXJuYWxGaWVsZChXZWJDb3JlOjp2OERPTVdyYXBwZXJUeXBlSW5kZXgpOwotICAgICAgICBpZiAo
dHlwZUluZGV4LT5Jc051bWJlcigpICYmIHR5cGVJbmRleC0+VWludDMyVmFsdWUoKSA9PSBWOENs
YXNzSW5kZXg6Ok5QT0JKRUNUKSB7CisgICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZUluZm8g
PSBzdGF0aWNfY2FzdDxXcmFwcGVyVHlwZUluZm8qPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50
ZXJuYWxGaWVsZChXZWJDb3JlOjp2OERPTVdyYXBwZXJUeXBlSW5kZXgpKTsKKyAgICAgICAgaWYg
KHR5cGVJbmZvLT5pbmRleCA9PSBWOENsYXNzSW5kZXg6Ok5QT0JKRUNUKSB7CiAKICAgICAgICAg
ICAgIE5QT2JqZWN0KiByZXR1cm5WYWx1ZSA9IHY4T2JqZWN0VG9OUE9iamVjdChvYmplY3QpOwog
ICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocmV0dXJuVmFsdWUpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEluZGV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEluZGV4LmgJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOElu
ZGV4LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3MSwxMCArNjcxLDM2IEBACiAgICAgICAgICAgICBB
U1NFUlQoSU5WQUxJRF9DTEFTU19JTkRFWCA8PSB2ICYmIHYgPCBDTEFTU0lOREVYX0VORCk7CiAg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VjhXcmFwcGVyVHlwZT4odik7CiAgICAgICAg
IH0KKyAgICB9OwogCi0gICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gZ2V0VGVtcGxhdGUoVjhXcmFwcGVyVHlwZSB0eXBlKTsKKyAgICBjbGFzcyBBY3Rp
dmVET01PYmplY3Q7CisKKyAgICB0eXBlZGVmIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiAoKkdldFRlbXBsYXRlRnVuY3Rpb24pKCk7CisgICAgdHlwZWRlZiB2b2lkICgqRGVy
ZWZPYmplY3RGdW5jdGlvbikodm9pZCopOworICAgIHR5cGVkZWYgQWN0aXZlRE9NT2JqZWN0KiAo
KlRvQWN0aXZlRE9NT2JqZWN0RnVuY3Rpb24pKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOworCisg
ICAgc3RydWN0IFdyYXBwZXJUeXBlSW5mbyB7CisKKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IGdldFRlbXBsYXRlKCkgeyByZXR1cm4gZ2V0VGVtcGxhdGVGdW5j
dGlvbigpOyB9CisKKyAgICAgICAgdm9pZCBkZXJlZk9iamVjdCh2b2lkKiBvYmplY3QpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChkZXJlZk9iamVjdEZ1bmN0aW9uKSAKKyAgICAgICAgICAg
ICAgICBkZXJlZk9iamVjdEZ1bmN0aW9uKG9iamVjdCk7CisgICAgICAgIH0KKworICAgICAgICBB
Y3RpdmVET01PYmplY3QqIHRvQWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
b2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXRvQWN0aXZlRE9NT2JqZWN0RnVu
Y3Rpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gdG9B
Y3RpdmVET01PYmplY3RGdW5jdGlvbihvYmplY3QpOworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgaW50IGluZGV4OworICAgICAgICBjb25zdCBHZXRUZW1wbGF0ZUZ1bmN0aW9uIGdldFRlbXBs
YXRlRnVuY3Rpb247CisgICAgICAgIGNvbnN0IERlcmVmT2JqZWN0RnVuY3Rpb24gZGVyZWZPYmpl
Y3RGdW5jdGlvbjsKKyAgICAgICAgY29uc3QgVG9BY3RpdmVET01PYmplY3RGdW5jdGlvbiB0b0Fj
dGl2ZURPTU9iamVjdEZ1bmN0aW9uOwogICAgIH07Ci0KIH0KIAogI2VuZGlmIC8vIFY4SW5kZXhf
aApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5LmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQx
LDEwIEBACiAjaW5jbHVkZSAiU2hhcmVkV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Qmlu
ZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NTWFwLmgiCisjaW5jbHVkZSAiVjhEZWRpY2F0ZWRXb3Jr
ZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhJbmRleC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIK
KyNpbmNsdWRlICJWOFNoYXJlZFdvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJWOFdvcmtlckNv
bnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0Lmgi
CkBAIC0xMzcsMTAgKzEzOSwxMCBAQAogICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gaW1wbGlj
aXRQcm90b1N0cmluZyA9IHY4OjpTdHJpbmc6Ok5ldygiX19wcm90b19fIik7CiAKICAgICAvLyBD
cmVhdGUgYSBuZXcgSlMgb2JqZWN0IGFuZCB1c2UgaXQgYXMgdGhlIHByb3RvdHlwZSBmb3IgdGhl
IHNoYWRvdyBnbG9iYWwgb2JqZWN0LgotICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBj
b250ZXh0VHlwZSA9IFY4Q2xhc3NJbmRleDo6REVESUNBVEVEV09SS0VSQ09OVEVYVDsKKyAgICBX
cmFwcGVyVHlwZUluZm8qIGNvbnRleHRUeXBlID0gJlY4RGVkaWNhdGVkV29ya2VyQ29udGV4dDo6
aW5mbzsKICNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCiAgICAgaWYgKCFtX3dvcmtlckNvbnRl
eHQtPmlzRGVkaWNhdGVkV29ya2VyQ29udGV4dCgpKQotICAgICAgICBjb250ZXh0VHlwZSA9IFY4
Q2xhc3NJbmRleDo6U0hBUkVEV09SS0VSQ09OVEVYVDsKKyAgICAgICAgY29udGV4dFR5cGUgPSAm
VjhTaGFyZWRXb3JrZXJDb250ZXh0OjppbmZvOwogI2VuZGlmCiAgICAgdjg6OkhhbmRsZTx2ODo6
RnVuY3Rpb24+IHdvcmtlckNvbnRleHRDb25zdHJ1Y3RvciA9IFY4RE9NV3JhcHBlcjo6Z2V0Q29u
c3RydWN0b3JGb3JDb250ZXh0KGNvbnRleHRUeXBlLCBjb250ZXh0KTsKICAgICB2ODo6TG9jYWw8
djg6Ok9iamVjdD4ganNXb3JrZXJDb250ZXh0ID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNl
KHdvcmtlckNvbnRleHRDb25zdHJ1Y3Rvcik7CkBAIC0xNTEsNyArMTUzLDcgQEAKICAgICB9CiAK
ICAgICAvLyBXcmFwIHRoZSBvYmplY3QuCi0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVy
KGpzV29ya2VyQ29udGV4dCwgVjhDbGFzc0luZGV4OjpUb0ludChjb250ZXh0VHlwZSksIG1fd29y
a2VyQ29udGV4dCk7CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGpzV29ya2VyQ29u
dGV4dCwgY29udGV4dFR5cGUsIG1fd29ya2VyQ29udGV4dCk7CiAKICAgICBWOERPTVdyYXBwZXI6
OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChtX3dvcmtlckNvbnRleHQsIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+OjpOZXcoanNXb3JrZXJDb250ZXh0KSk7CiAgICAgbV93b3JrZXJDb250ZXh0
LT5yZWYoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAKIHsKICAgICBmb3IgKERPTU9iamVjdE1h
cDo6aXRlcmF0b3IgaXQgPSB3cmFwcGVyTWFwLmJlZ2luKCksIGVuZCA9IHdyYXBwZXJNYXAuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVyKGl0LT5zZWNvbmQpOwotICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5
cGUgdHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7CisgICAgICAg
IFdyYXBwZXJUeXBlSW5mbyogdHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3Jh
cHBlcik7CiAgICAgICAgIHZvaWQqIG9iamVjdCA9IGl0LT5maXJzdDsKICAgICAgICAgVU5VU0VE
X1BBUkFNKHR5cGUpOwogICAgICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKQEAgLTEyMyw3ICsx
MjMsNyBAQAogcHVibGljOgogICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKHZvaWQqIG9iamVjdCwg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKICAgICB7Ci0gICAgICAgIFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlw
ZSh3cmFwcGVyKTsKKyAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlID0gVjhET01XcmFwcGVy
Ojpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwog
ICAgICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICAgICB9CkBAIC0xODEsMzYgKzE4MSwyNiBA
QAogcHVibGljOgogICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKHZvaWQqIG9iamVjdCwgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVCh3cmFw
cGVyLklzV2VhaygpKTsKLSAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUg
PSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHdyYXBwZXIpOwotICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKLSNkZWZpbmUgTUFLRV9DQVNFKFRZUEUsIE5BTUUpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpUWVBFOiB7ICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICBOQU1FKiBpbXBsID0gc3RhdGljX2Nhc3Q8TkFNRSo+
KG9iamVjdCk7ICBcCi0gICAgICAgICAgICBpZiAoaW1wbC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkp
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgd3JhcHBlci5DbGVhcldlYWsoKTsgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIH0KLSAgICBBQ1RJVkVfRE9NX09CSkVDVF9UWVBFUyhNQUtF
X0NBU0UpCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jdW5k
ZWYgTUFLRV9DQVNFCi0gICAgICAgIH0KKyAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlSW5m
byA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7ICAKIAotICAgIC8vIEFk
ZGl0aW9uYWwgaGFuZGxpbmcgb2YgbWVzc2FnZSBwb3J0IGVuc3VyaW5nIHRoYXQgZW50YW5nbGVk
IHBvcnRzIGFsc28KLSAgICAvLyBoYXZlIHRoZWlyIHdyYXBwZXJzIGVudGFuZ2xlZC4gVGhpcyBz
aG91bGQgaWRlYWxseSBiZSBoYW5kbGVkIHdoZW4gdGhlCi0gICAgLy8gcG9ydHMgYXJlIGFjdHVh
bGx5IGVudGFuZ2xlZCBpbiBNZXNzYWdlUG9ydDo6ZW50YW5nbGUsIGJ1dCB0byBhdm9pZAotICAg
IC8vIGZvcmtpbmcgTWVzc2FnZVBvcnQuKiB0aGlzIGlzIHBvc3Rwb25lZCB0byBHQyB0aW1lLiBI
YXZpbmcgdGhpcyBwb3N0cG9uZWQKLSAgICAvLyBoYXMgdGhlIGRyYXdiYWNrIHRoYXQgdGhlIHdy
YXBwZXJzIGFyZSAiZW50YW5nbGVkL3VuZW50YW5nbGVkIiBmb3IgZWFjaAotICAgIC8vIEdDIGV2
ZW4gdGhvdWdoIHRoZWlyIGVudGFnbGVtZW50IG1vc3QgbGlrZWx5IGlzIHN0aWxsIHRoZSBzYW1l
LgotICAgIGlmICh0eXBlID09IFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQpIHsKLSAgICAgICAg
Ly8gTWFyayBlYWNoIHBvcnQgYXMgaW4tdXNlIGlmIGl0J3MgZW50YW5nbGVkLiBGb3Igc2ltcGxp
Y2l0eSdzIHNha2UsIHdlIGFzc3VtZSBhbGwgcG9ydHMgYXJlIHJlbW90ZWx5IGVudGFuZ2xlZCwK
LSAgICAgICAgLy8gc2luY2UgdGhlIENocm9taXVtIHBvcnQgaW1wbGVtZW50YXRpb24gY2FuJ3Qg
dGVsbCB0aGUgZGlmZmVyZW5jZS4KLSAgICAgICAgTWVzc2FnZVBvcnQqIHBvcnQxID0gc3RhdGlj
X2Nhc3Q8TWVzc2FnZVBvcnQqPihvYmplY3QpOwotICAgICAgICBpZiAocG9ydDEtPmlzRW50YW5n
bGVkKCkpCi0gICAgICAgICAgICB3cmFwcGVyLkNsZWFyV2VhaygpOworICAgICAgICAvLyBBZGRp
dGlvbmFsIGhhbmRsaW5nIG9mIG1lc3NhZ2UgcG9ydCBlbnN1cmluZyB0aGF0IGVudGFuZ2xlZCBw
b3J0cyBhbHNvCisgICAgICAgIC8vIGhhdmUgdGhlaXIgd3JhcHBlcnMgZW50YW5nbGVkLiBUaGlz
IHNob3VsZCBpZGVhbGx5IGJlIGhhbmRsZWQgd2hlbiB0aGUKKyAgICAgICAgLy8gcG9ydHMgYXJl
IGFjdHVhbGx5IGVudGFuZ2xlZCBpbiBNZXNzYWdlUG9ydDo6ZW50YW5nbGUsIGJ1dCB0byBhdm9p
ZAorICAgICAgICAvLyBmb3JraW5nIE1lc3NhZ2VQb3J0LiogdGhpcyBpcyBwb3N0cG9uZWQgdG8g
R0MgdGltZS4gSGF2aW5nIHRoaXMgcG9zdHBvbmVkCisgICAgICAgIC8vIGhhcyB0aGUgZHJhd2Jh
Y2sgdGhhdCB0aGUgd3JhcHBlcnMgYXJlICJlbnRhbmdsZWQvdW5lbnRhbmdsZWQiIGZvciBlYWNo
CisgICAgICAgIC8vIEdDIGV2ZW4gdGhvdWdoIHRoZWlyIGVudGFnbGVtZW50IG1vc3QgbGlrZWx5
IGlzIHN0aWxsIHRoZSBzYW1lLgorICAgICAgICBpZiAodHlwZUluZm8tPmluZGV4ID09IFY4Q2xh
c3NJbmRleDo6TUVTU0FHRVBPUlQpIHsKKyAgICAgICAgICAgIC8vIE1hcmsgZWFjaCBwb3J0IGFz
IGluLXVzZSBpZiBpdCdzIGVudGFuZ2xlZC4gRm9yIHNpbXBsaWNpdHkncyBzYWtlLCB3ZSBhc3N1
bWUgYWxsIHBvcnRzIGFyZSByZW1vdGVseSBlbnRhbmdsZWQsCisgICAgICAgICAgICAvLyBzaW5j
ZSB0aGUgQ2hyb21pdW0gcG9ydCBpbXBsZW1lbnRhdGlvbiBjYW4ndCB0ZWxsIHRoZSBkaWZmZXJl
bmNlLgorICAgICAgICAgICAgTWVzc2FnZVBvcnQqIHBvcnQxID0gc3RhdGljX2Nhc3Q8TWVzc2Fn
ZVBvcnQqPihvYmplY3QpOworICAgICAgICAgICAgaWYgKHBvcnQxLT5pc0VudGFuZ2xlZCgpIHx8
IHBvcnQxLT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKKyAgICAgICAgICAgICAgICB3cmFwcGVyLkNs
ZWFyV2VhaygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQWN0aXZlRE9NT2JqZWN0
KiBhY3RpdmVET01PYmplY3QgPSB0eXBlSW5mby0+dG9BY3RpdmVET01PYmplY3Qod3JhcHBlcik7
CisgICAgICAgICAgICBpZiAoYWN0aXZlRE9NT2JqZWN0ICYmIGFjdGl2ZURPTU9iamVjdC0+aGFz
UGVuZGluZ0FjdGl2aXR5KCkpCisgICAgICAgICAgICAgICAgd3JhcHBlci5DbGVhcldlYWsoKTsK
KyAgICAgICAgfQogICAgIH0KLX0KIH07CiAKIGNsYXNzIEdyb3VwZXJJdGVtIHsKQEAgLTM2OSwz
MCArMzU5LDIwIEBACiBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIodm9pZCogb2Jq
ZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogICAgIHsKLSAgICAgICAg
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBw
ZXJUeXBlKHdyYXBwZXIpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSNkZWZpbmUgTUFLRV9D
QVNFKFRZUEUsIE5BTUUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6VFlQRTogeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgTkFNRSogaW1w
bCA9IHN0YXRpY19jYXN0PE5BTUUqPihvYmplY3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICBpZiAoaW1wbC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgQVNTRVJUKCF3cmFw
cGVyLklzV2VhaygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICB3cmFwcGVyLk1ha2VXZWFrKGltcGwsICZET01EYXRhU3RvcmU6OndlYWtB
Y3RpdmVET01PYmplY3RDYWxsYmFjayk7IFwKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0KLUFDVElWRV9ET01fT0JKRUNUX1RZUEVT
KE1BS0VfQ0FTRSkKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotI3VuZGVmIE1BS0VfQ0FTRQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5cGUg
PT0gVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCkgeworICAgICAgICBXcmFwcGVyVHlwZUluZm8q
IHR5cGVJbmZvID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKKyAgICAg
ICAgaWYgKHR5cGVJbmZvLT5pbmRleCA9PSBWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JUKSB7CiAg
ICAgICAgICAgICBNZXNzYWdlUG9ydCogcG9ydDEgPSBzdGF0aWNfY2FzdDxNZXNzYWdlUG9ydCo+
KG9iamVjdCk7CiAgICAgICAgICAgICAvLyBXZSBtYXJrZWQgdGhpcyBwb3J0IGFzIHJlYWNoYWJs
ZSBpbiBHQ1Byb2xvZ3VlVmlzaXRvci4gIFVuZG8gdGhpcyBub3cgc2luY2UgdGhlCiAgICAgICAg
ICAgICAvLyBwb3J0IGNvdWxkIGJlIG5vdCByZWFjaGFibGUgaW4gdGhlIGZ1dHVyZSBpZiBpdCBn
ZXRzIGRpc2VudGFuZ2xlZCAoYW5kIGFsc28KICAgICAgICAgICAgIC8vIEdDUHJvbG9ndWVWaXNp
dG9yIGV4cGVjdHMgdG8gc2VlIGFsbCBoYW5kbGVzIG1hcmtlZCBhcyB3ZWFrKS4KLSAgICAgICAg
ICAgIGlmICghd3JhcHBlci5Jc1dlYWsoKSAmJiAhd3JhcHBlci5Jc05lYXJEZWF0aCgpKQorICAg
ICAgICAgICAgaWYgKCghd3JhcHBlci5Jc1dlYWsoKSAmJiAhd3JhcHBlci5Jc05lYXJEZWF0aCgp
KSB8fCBwb3J0MS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCiAgICAgICAgICAgICAgICAgd3JhcHBl
ci5NYWtlV2Vhayhwb3J0MSwgJkRPTURhdGFTdG9yZTo6d2Vha0FjdGl2ZURPTU9iamVjdENhbGxi
YWNrKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFjdGl2ZURPTU9iamVjdCogYWN0
aXZlRE9NT2JqZWN0ID0gdHlwZUluZm8tPnRvQWN0aXZlRE9NT2JqZWN0KHdyYXBwZXIpOworICAg
ICAgICAgICAgaWYgKGFjdGl2ZURPTU9iamVjdCAmJiBhY3RpdmVET01PYmplY3QtPmhhc1BlbmRp
bmdBY3Rpdml0eSgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCF3cmFwcGVyLklzV2Vhaygp
KTsKKyAgICAgICAgICAgICAgICB3cmFwcGVyLk1ha2VXZWFrKGFjdGl2ZURPTU9iamVjdCwgJkRP
TURhdGFTdG9yZTo6d2Vha0FjdGl2ZURPTU9iamVjdENhbGxiYWNrKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KIH07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgJ
KHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQAogewogICAgIC8vIEZJWE1FOiBhc3NlcnQg
b2JqZWN0IGlzIGEgY29sbGVjdGlvbiB0eXBlCiAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5
YmVET01XcmFwcGVyKG9iamVjdCkpOwotICAgIEFTU0VSVChWOERPTVdyYXBwZXI6OmRvbVdyYXBw
ZXJUeXBlKG9iamVjdCkgIT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKKyAgICBBU1NFUlQoVjhET01X
cmFwcGVyOjpkb21XcmFwcGVyVHlwZShvYmplY3QpLT5pbmRleCAhPSBWOENsYXNzSW5kZXg6Ok5P
REUpOwogICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSB0b05hdGl2ZUNvbGxlY3Rpb248Q29s
bGVjdGlvbj4ob2JqZWN0KTsKICAgICBBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lID0gdG9BdG9t
aWNXZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhuYW1lKTsKICAgICByZXR1cm4gZ2V0VjhPYmpl
Y3Q8SXRlbVR5cGU+KGNvbGxlY3Rpb24tPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpKTsKQEAgLTg5
LDcgKzg5LDcgQEAKIHsKICAgICAvLyBGSVhNRTogQXNzZXJ0IHRoYXQgb2JqZWN0IG11c3QgYmUg
YSBjb2xsZWN0aW9uIHR5cGUuCiAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFw
cGVyKG9iamVjdCkpOwotICAgIEFTU0VSVChWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKG9i
amVjdCkgIT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKKyAgICBBU1NFUlQoVjhET01XcmFwcGVyOjpk
b21XcmFwcGVyVHlwZShvYmplY3QpLT5pbmRleCAhPSBWOENsYXNzSW5kZXg6Ok5PREUpOwogICAg
IENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSB0b05hdGl2ZUNvbGxlY3Rpb248Q29sbGVjdGlvbj4o
b2JqZWN0KTsKICAgICByZXR1cm4gZ2V0VjhPYmplY3Q8SXRlbVR5cGU+KGNvbGxlY3Rpb24tPml0
ZW0oaW5kZXgpKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oCShyZXZpc2lvbiA1NTc0MykK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nywx
NyArNjcsMTcgQEAKICAgICAgICAgVGhyZWFkSWRlbnRpZmllciBvd25pbmdUaHJlYWQoKSBjb25z
dCB7IHJldHVybiBtX293bmluZ1RocmVhZDsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlw
ZWRlZiBXVEY6Okhhc2hNYXA8dm9pZCosIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZT4gRGVs
YXllZE9iamVjdE1hcDsKKyAgICAgICAgdHlwZWRlZiBXVEY6Okhhc2hNYXA8dm9pZCosIFdyYXBw
ZXJUeXBlSW5mbyo+IERlbGF5ZWRPYmplY3RNYXA7CiAKLSAgICAgICAgdm9pZCBlbnN1cmVEZXJl
ZihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9pZCogZG9tT2JqZWN0KTsKLSAg
ICAgICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IHR5cGUsIHZvaWQqIGRvbU9iamVjdCk7CisgICAgICAgIHZvaWQgZW5zdXJlRGVyZWYoV3JhcHBl
clR5cGVJbmZvKiB0eXBlLCB2b2lkKiBkb21PYmplY3QpOworICAgICAgICBzdGF0aWMgdm9pZCBk
ZXJlZk9iamVjdChXcmFwcGVyVHlwZUluZm8qIHR5cGUsIHZvaWQqIGRvbU9iamVjdCk7CiAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICAgICAgY2xhc3MgV3JhcHBlck1hcE9iamVj
dFJlbW92ZXIgOiBwdWJsaWMgV2Vha1JlZmVyZW5jZU1hcDxULCB2ODo6T2JqZWN0Pjo6VmlzaXRv
ciB7CiAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdERPTVdy
YXBwZXIoVCogZG9tT2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB2OE9iamVjdCkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5
cGUgdHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUodjhPYmplY3QpOworICAgICAg
ICAgICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBl
clR5cGUodjhPYmplY3QpOwogICAgICAgICAgICAgICAgIGRlcmVmT2JqZWN0KHR5cGUsIGRvbU9i
amVjdCk7CiAgICAgICAgICAgICAgICAgdjhPYmplY3QuRGlzcG9zZSgpOwogICAgICAgICAgICAg
fQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwCShyZXZpc2lvbiA1NTc0MykKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhJbmRleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDgzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVjhJbmRleC5oIgotCi0jaW5j
bHVkZSAiVjhBdHRyLmgiCi0jaW5jbHVkZSAiVjhCYXJJbmZvLmgiCi0jaW5jbHVkZSAiVjhCZWZv
cmVMb2FkRXZlbnQuaCIKLSNpbmNsdWRlICJWOEJsb2IuaCIKLSNpbmNsdWRlICJWOFdlYkdMQWN0
aXZlSW5mby5oIgotI2luY2x1ZGUgIlY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1
ZGUgIlY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCi0jaW5jbHVkZSAiVjhDYW52YXNHcmFk
aWVudC5oIgotI2luY2x1ZGUgIlY4Q2FudmFzUGF0dGVybi5oIgotI2luY2x1ZGUgIlY4Q2FudmFz
UGl4ZWxBcnJheS5oIgotI2luY2x1ZGUgIlY4Q0RBVEFTZWN0aW9uLmgiCi0jaW5jbHVkZSAiVjhD
aGFyYWN0ZXJEYXRhLmgiCi0jaW5jbHVkZSAiVjhDbGllbnRSZWN0LmgiCi0jaW5jbHVkZSAiVjhD
bGllbnRSZWN0TGlzdC5oIgotI2luY2x1ZGUgIlY4Q2xpcGJvYXJkLmgiCi0jaW5jbHVkZSAiVjhD
b21tZW50LmgiCi0jaW5jbHVkZSAiVjhDb21wb3NpdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiVjhD
b25zb2xlLmgiCi0jaW5jbHVkZSAiVjhDb3VudGVyLmgiCi0jaW5jbHVkZSAiVjhDU1NTdHlsZURl
Y2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiVjhDU1NSdWxlLmgiCi0jaW5jbHVkZSAiVjhDU1NTdHls
ZVJ1bGUuaCIKLSNpbmNsdWRlICJWOENTU0NoYXJzZXRSdWxlLmgiCi0jaW5jbHVkZSAiVjhDU1NJ
bXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiVjhDU1NNZWRpYVJ1bGUuaCIKLSNpbmNsdWRlICJWOENT
U0ZvbnRGYWNlUnVsZS5oIgotI2luY2x1ZGUgIlY4Q1NTUGFnZVJ1bGUuaCIKLSNpbmNsdWRlICJW
OENTU1J1bGVMaXN0LmgiCi0jaW5jbHVkZSAiVjhDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2luY2x1
ZGUgIlY4Q1NTVmFsdWUuaCIKLSNpbmNsdWRlICJWOENTU1ZhbHVlTGlzdC5oIgotI2luY2x1ZGUg
IlY4Q1NTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIlY4Q1NTVmFyaWFibGVzRGVjbGFyYXRpb24u
aCIKLSNpbmNsdWRlICJWOENTU1ZhcmlhYmxlc1J1bGUuaCIKLSNpbmNsdWRlICJWOERhdGFHcmlk
Q29sdW1uLmgiCi0jaW5jbHVkZSAiVjhEYXRhR3JpZENvbHVtbkxpc3QuaCIKLSNpbmNsdWRlICJW
OERvY3VtZW50LmgiCi0jaW5jbHVkZSAiVjhEb2N1bWVudEZyYWdtZW50LmgiCi0jaW5jbHVkZSAi
VjhEb2N1bWVudFR5cGUuaCIKLSNpbmNsdWRlICJWOEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEVu
dGl0eS5oIgotI2luY2x1ZGUgIlY4RW50aXR5UmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiVjhGaWxl
LmgiCi0jaW5jbHVkZSAiVjhGaWxlTGlzdC5oIgotI2luY2x1ZGUgIlY4SGlzdG9yeS5oIgotI2lu
Y2x1ZGUgIlY4SFRNTEFsbENvbGxlY3Rpb24uaCIKLSNpbmNsdWRlICJWOEhUTUxDYW52YXNFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MQ29sbGVjdGlvbi5oIgotI2luY2x1ZGUgIlY4SFRNTERv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTE9w
dGlvbnNDb2xsZWN0aW9uLmgiCi0jaW5jbHVkZSAiVjhIVE1MQW5jaG9yRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlY4SFRNTEFwcGxldEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxBcmVhRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlY4SFRNTEJhc2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MQmFz
ZUZvbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MQmxvY2txdW90ZUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJWOEhUTUxCb2R5RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTEJSRWxlbWVudC5o
IgotI2luY2x1ZGUgIlY4SFRNTEJ1dHRvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxDYW52
YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MTW9kRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4
SFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxEYXRhR3JpZENvbEVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxEYXRhR3JpZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJW
OEhUTUxEYXRhR3JpZFJvd0VsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxEaXJlY3RvcnlFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MRGl2RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTERM
aXN0RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTEVtYmVkRWxlbWVudC5oIgotI2luY2x1ZGUg
IlY4SFRNTEZpZWxkU2V0RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTEZvcm1FbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiVjhIVE1MRm9udEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxGcmFtZUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxGcmFtZVNldEVsZW1lbnQuaCIKLSNpbmNsdWRlICJW
OEhUTUxIZWFkaW5nRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTEhlYWRFbGVtZW50LmgiCi0j
aW5jbHVkZSAiVjhIVE1MSFJFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MSHRtbEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJWOEhUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MSW1h
Z2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuaCIK
LSNpbmNsdWRlICJWOEhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxJc0luZGV4
RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTExhYmVsRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4
SFRNTExlZ2VuZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxMSUVsZW1lbnQuaCIKLSNpbmNs
dWRlICJWOEhUTUxMaW5rRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTE1hcEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJWOEhUTUxNYXJxdWVlRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTE1lbnVF
bGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MTWV0YUVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhU
TUxPYmplY3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MT0xpc3RFbGVtZW50LmgiCi0jaW5j
bHVkZSAiVjhIVE1MT3B0R3JvdXBFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MT3B0aW9uRWxl
bWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oIgotI2lu
Y2x1ZGUgIlY4SFRNTFBhcmFncmFwaEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxQYXJhbUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxQcmVFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1M
UXVvdGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MU2NyaXB0RWxlbWVudC5oIgotI2luY2x1
ZGUgIlY4SFRNTFNlbGVjdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxTdHlsZUVsZW1lbnQu
aCIKLSNpbmNsdWRlICJWOEhUTUxUYWJsZUNhcHRpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhI
VE1MVGFibGVDb2xFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MVGFibGVFbGVtZW50LmgiCi0j
aW5jbHVkZSAiVjhIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTFRh
YmxlQ2VsbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxUYWJsZVJvd0VsZW1lbnQuaCIKLSNp
bmNsdWRlICJWOEhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxUaXRsZUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxVTGlzdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOElt
YWdlRGF0YS5oIgotI2luY2x1ZGUgIlY4TWVkaWEuaCIKLSNpbmNsdWRlICJWOE1lZGlhTGlzdC5o
IgotI2luY2x1ZGUgIlY4TWVzc2FnZUNoYW5uZWwuaCIKLSNpbmNsdWRlICJWOE1lc3NhZ2VFdmVu
dC5oIgotI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnQuaCIKLSNpbmNsdWRlICJWOE5hbWVkTm9kZU1h
cC5oIgotI2luY2x1ZGUgIlY4Tm9kZS5oIgotI2luY2x1ZGUgIlY4Tm9kZUxpc3QuaCIKLSNpbmNs
dWRlICJWOE5vZGVGaWx0ZXIuaCIKLSNpbmNsdWRlICJWOE5vdGF0aW9uLmgiCi0jaW5jbHVkZSAi
VjhQb3BTdGF0ZUV2ZW50LmgiCi0jaW5jbHVkZSAiVjhQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIK
LSNpbmNsdWRlICJWOFByb2dyZXNzRXZlbnQuaCIKLSNpbmNsdWRlICJWOFN0eWxlU2hlZXQuaCIK
LSNpbmNsdWRlICJWOFRleHQuaCIKLSNpbmNsdWRlICJWOFRleHRFdmVudC5oIgotI2luY2x1ZGUg
IlY4VG91Y2guaCIKLSNpbmNsdWRlICJWOFRvdWNoRXZlbnQuaCIKLSNpbmNsdWRlICJWOFRvdWNo
TGlzdC5oIgotI2luY2x1ZGUgIlY4RE9NQ29yZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIlY4RE9N
UGFyc2VyLmgiCi0jaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKLSNpbmNsdWRlICJWOEVycm9yRXZl
bnQuaCIKLSNpbmNsdWRlICJWOEV2ZW50LmgiCi0jaW5jbHVkZSAiVjhFdmVudEV4Y2VwdGlvbi5o
IgotI2luY2x1ZGUgIlY4S2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlY4TW91c2VFdmVudC5o
IgotI2luY2x1ZGUgIlY4VmFsaWRpdHlTdGF0ZS5oIgotI2luY2x1ZGUgIlY4V2ViS2l0QW5pbWF0
aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJWOFdlYktpdENTU0tleWZyYW1lUnVsZS5oIgotI2luY2x1
ZGUgIlY4V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgotI2luY2x1ZGUgIlY4V2ViS2l0Q1NTTWF0
cml4LmgiCi0jaW5jbHVkZSAiVjhXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIgotI2luY2x1ZGUg
IlY4V2ViS2l0UG9pbnQuaCIKLSNpbmNsdWRlICJWOFdlYktpdFRyYW5zaXRpb25FdmVudC5oIgot
I2luY2x1ZGUgIlY4V2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlY4VUlFdmVudC5oIgotI2luY2x1
ZGUgIlY4TXV0YXRpb25FdmVudC5oIgotI2luY2x1ZGUgIlY4T3ZlcmZsb3dFdmVudC5oIgotI2lu
Y2x1ZGUgIlY4TG9jYXRpb24uaCIKLSNpbmNsdWRlICJWOFNjcmVlbi5oIgotI2luY2x1ZGUgIlY4
RE9NU2VsZWN0aW9uLmgiCi0jaW5jbHVkZSAiVjhOYXZpZ2F0b3IuaCIKLSNpbmNsdWRlICJWOE1p
bWVUeXBlLmgiCi0jaW5jbHVkZSAiVjhNaW1lVHlwZUFycmF5LmgiCi0jaW5jbHVkZSAiVjhQYWdl
VHJhbnNpdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiVjhQbHVnaW4uaCIKLSNpbmNsdWRlICJWOFBs
dWdpbkFycmF5LmgiCi0jaW5jbHVkZSAiVjhSYW5nZS5oIgotI2luY2x1ZGUgIlY4UmFuZ2VFeGNl
cHRpb24uaCIKLSNpbmNsdWRlICJWOFJlY3QuaCIKLSNpbmNsdWRlICJWOE5vZGVJdGVyYXRvci5o
IgotI2luY2x1ZGUgIlY4VGV4dE1ldHJpY3MuaCIKLSNpbmNsdWRlICJWOFRyZWVXYWxrZXIuaCIK
LSNpbmNsdWRlICJWOFN0eWxlU2hlZXRMaXN0LmgiCi0jaW5jbHVkZSAiVjhET01JbXBsZW1lbnRh
dGlvbi5oIgotI2luY2x1ZGUgIlY4WE1MSHR0cFJlcXVlc3QuaCIKLSNpbmNsdWRlICJWOFhNTEh0
dHBSZXF1ZXN0RXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiVjhYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnQuaCIKLSNpbmNsdWRlICJWOFhNTEh0dHBSZXF1ZXN0VXBsb2FkLmgiCi0jaW5jbHVkZSAi
VjhYTUxTZXJpYWxpemVyLmgiCi0jaW5jbHVkZSAiVjhSR0JDb2xvci5oIgotCi0jaWYgRU5BQkxF
KE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSNpbmNsdWRlICJWOERPTUFwcGxpY2F0aW9uQ2Fj
aGUuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotI2luY2x1ZGUgIlY4U3Rv
cmFnZS5oIgotI2luY2x1ZGUgIlY4U3RvcmFnZUV2ZW50LmgiCi0jZW5kaWYKLQotI2lmIEVOQUJM
RShTVkdfQU5JTUFUSU9OKQotI2luY2x1ZGUgIlY4U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oIgot
I2luY2x1ZGUgIlY4U1ZHQW5pbWF0ZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdBbmltYXRpb25FbGVtZW50LmgiCi0j
aW5jbHVkZSAiVjhTVkdTZXRFbGVtZW50LmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlY4U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
bkVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0ZFQmxlbmRFbGVtZW50LmgiCi0jaW5jbHVkZSAi
VjhTVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0ZFQ29tcG9zaXRlRWxlbWVudC5oIgot
I2luY2x1ZGUgIlY4U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhT
VkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0ZFRGlzdGFudExp
Z2h0RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHRkVGbG9vZEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJWOFNWR0ZFRnVuY0FFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdGRUZ1bmNCRWxlbWVudC5o
IgotI2luY2x1ZGUgIlY4U1ZHRkVGdW5jR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0ZFRnVu
Y1JFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCIKLSNp
bmNsdWRlICJWOFNWR0ZFSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdGRU1lcmdlRWxl
bWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgiCi0jaW5jbHVkZSAi
VjhTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdGRU9mZnNldEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJWOFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaCIKLSNpbmNsdWRlICJW
OFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0ZFU3BvdExp
Z2h0RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHRkVUaWxlRWxlbWVudC5oIgotI2luY2x1ZGUg
IlY4U1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHRmlsdGVyRWxlbWVu
dC5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotI2luY2x1ZGUgIlY4U1ZHRm9u
dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0ZvbnRGYWNlRWxlbWVudC5oIgotI2luY2x1ZGUg
IlY4U1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdGb250RmFjZU5h
bWVFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdGb250RmFjZVNyY0VsZW1lbnQuaCIKLSNpbmNs
dWRlICJWOFNWR0ZvbnRGYWNlVXJpRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHTWlzc2luZ0ds
eXBoRWxlbWVudC5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQot
I2luY2x1ZGUgIlY4U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaCIKLSNlbmRpZgotCi0jaWYgRU5B
QkxFKFNWR19VU0UpCi0jaW5jbHVkZSAiVjhTVkdVc2VFbGVtZW50LmgiCi0jZW5kaWYKLQotI2lm
IEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiVjhTVkdBRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZH
QWx0R2x5cGhFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdDaXJjbGVFbGVtZW50LmgiCi0jaW5j
bHVkZSAiVjhTVkdDbGlwUGF0aEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0N1cnNvckVsZW1l
bnQuaCIKLSNpbmNsdWRlICJWOFNWR0RlZnNFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdEZXNj
RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHRWxs
aXBzZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0V4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIlY4
U1ZHR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0dseXBoRWxlbWVudC5oIgotI2luY2x1ZGUg
IlY4U1ZHR3JhZGllbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdJbWFnZUVsZW1lbnQuaCIK
LSNpbmNsdWRlICJWOFNWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZH
TGluZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR01hcmtlckVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJWOFNWR01hc2tFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdNZXRhZGF0YUVsZW1lbnQuaCIK
LSNpbmNsdWRlICJWOFNWR1BhdGhFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdQYXR0ZXJuRWxl
bWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHUG9seWdvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNW
R1BvbHlsaW5lRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
LmgiCi0jaW5jbHVkZSAiVjhTVkdSZWN0RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHU2NyaXB0
RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHU3RvcEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNW
R1N0eWxlRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUg
IlY4U1ZHU3dpdGNoRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHU3ltYm9sRWxlbWVudC5oIgot
I2luY2x1ZGUgIlY4U1ZHVGV4dENvbnRlbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdUZXh0
RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHVGV4dFBhdGhFbGVtZW50LmgiCi0jaW5jbHVkZSAi
VjhTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdUaXRsZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJWOFNWR1RSZWZFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdUU3Bh
bkVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR1ZpZXdFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhT
VkdBbmdsZS5oIgotI2luY2x1ZGUgIlY4U1ZHQW5pbWF0ZWRBbmdsZS5oIgotI2luY2x1ZGUgIlY4
U1ZHQW5pbWF0ZWRCb29sZWFuLmgiCi0jaW5jbHVkZSAiVjhTVkdBbmltYXRlZEVudW1lcmF0aW9u
LmgiCi0jaW5jbHVkZSAiVjhTVkdBbmltYXRlZEludGVnZXIuaCIKLSNpbmNsdWRlICJWOFNWR0Fu
aW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiVjhTVkdBbmltYXRlZExlbmd0aExpc3QuaCIKLSNp
bmNsdWRlICJWOFNWR0FuaW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVkZSAiVjhTVkdBbmltYXRlZE51
bWJlckxpc3QuaCIKLSNpbmNsdWRlICJWOFNWR0FuaW1hdGVkUG9pbnRzLmgiCi0jaW5jbHVkZSAi
VjhTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRlICJWOFNWR0FuaW1h
dGVkUmVjdC5oIgotI2luY2x1ZGUgIlY4U1ZHQW5pbWF0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJW
OFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oIgotI2luY2x1ZGUgIlY4U1ZHQ29sb3IuaCIKLSNp
bmNsdWRlICJWOFNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdFbGVtZW50SW5zdGFuY2Uu
aCIKLSNpbmNsdWRlICJWOFNWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaCIKLSNpbmNsdWRlICJWOFNW
R0xlbmd0aC5oIgotI2luY2x1ZGUgIlY4U1ZHTGVuZ3RoTGlzdC5oIgotI2luY2x1ZGUgIlY4U1ZH
TWF0cml4LmgiCi0jaW5jbHVkZSAiVjhTVkdOdW1iZXIuaCIKLSNpbmNsdWRlICJWOFNWR051bWJl
ckxpc3QuaCIKLSNpbmNsdWRlICJWOFNWR1BhaW50LmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2Vn
LmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2VnQXJjQWJzLmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRo
U2VnQXJjUmVsLmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ2xvc2VQYXRoLmgiCi0jaW5jbHVk
ZSAiVjhTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljUmVsLmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoQWJzLmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLmgi
Ci0jaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5oIgotI2luY2x1ZGUg
IlY4U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwuaCIKLSNpbmNsdWRlICJWOFNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzLmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aFJlbC5oIgotI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0xpbmV0b0Fi
cy5oIgotI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMuaCIKLSNpbmNs
dWRlICJWOFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLmgiCi0jaW5jbHVkZSAiVjhTVkdQ
YXRoU2VnTGluZXRvUmVsLmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2VnTGluZXRvVmVydGljYWxB
YnMuaCIKLSNpbmNsdWRlICJWOFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5oIgotI2luY2x1
ZGUgIlY4U1ZHUGF0aFNlZ0xpc3QuaCIKLSNpbmNsdWRlICJWOFNWR1BhdGhTZWdNb3ZldG9BYnMu
aCIKLSNpbmNsdWRlICJWOFNWR1BhdGhTZWdNb3ZldG9SZWwuaCIKLSNpbmNsdWRlICJWOFNWR1Bv
aW50LmgiCi0jaW5jbHVkZSAiVjhTVkdQb2ludExpc3QuaCIKLSNpbmNsdWRlICJWOFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRlICJWOFNWR1JlY3QuaCIKLSNpbmNsdWRlICJWOFNW
R1JlbmRlcmluZ0ludGVudC5oIgotI2luY2x1ZGUgIlY4U1ZHU3RyaW5nTGlzdC5oIgotI2luY2x1
ZGUgIlY4U1ZHVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiVjhTVkdUcmFuc2Zvcm1MaXN0LmgiCi0j
aW5jbHVkZSAiVjhTVkdVbml0VHlwZXMuaCIKLSNpbmNsdWRlICJWOFNWR1pvb21FdmVudC5oIgot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoVklERU8pCi0jaW5jbHVkZSAiVjhIVE1MQXVkaW9FbGVtZW50
LmgiCi0jaW5jbHVkZSAiVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRl
ICJWOEhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxTb3VyY2VFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiVjhIVE1MVmlkZW9FbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhNZWRpYUVycm9y
LmgiCi0jaW5jbHVkZSAiVjhUaW1lUmFuZ2VzLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShXRUJf
U09DS0VUUykKLSNpbmNsdWRlICJWOFdlYlNvY2tldC5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUo
V09SS0VSUykKLSNpbmNsdWRlICJWOEFic3RyYWN0V29ya2VyLmgiCi0jaW5jbHVkZSAiVjhEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0LmgiCi0jaW5jbHVkZSAiVjhXb3JrZXIuaCIKLSNpbmNsdWRlICJW
OFdvcmtlckNvbnRleHQuaCIKLSNpbmNsdWRlICJWOFdvcmtlckxvY2F0aW9uLmgiCi0jaW5jbHVk
ZSAiVjhXb3JrZXJOYXZpZ2F0b3IuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKE5PVElGSUNBVElP
TlMpCi0jaW5jbHVkZSAiVjhOb3RpZmljYXRpb24uaCIKLSNpbmNsdWRlICJWOE5vdGlmaWNhdGlv
bkNlbnRlci5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0jaW5jbHVk
ZSAiVjhTaGFyZWRXb3JrZXIuaCIKLSNpbmNsdWRlICJWOFNoYXJlZFdvcmtlckNvbnRleHQuaCIK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLSNpbmNsdWRlICJWOFdlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlY4V2ViR0xBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUg
IlY4V2ViR0xBcnJheS5oIgotI2luY2x1ZGUgIlY4V2ViR0xCeXRlQXJyYXkuaCIKLSNpbmNsdWRl
ICJWOFdlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiVjhXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgi
Ci0jaW5jbHVkZSAiVjhXZWJHTEZsb2F0QXJyYXkuaCIKLSNpbmNsdWRlICJWOFdlYkdMRnJhbWVi
dWZmZXIuaCIKLSNpbmNsdWRlICJWOFdlYkdMSW50QXJyYXkuaCIKLSNpbmNsdWRlICJWOFdlYkdM
UHJvZ3JhbS5oIgotI2luY2x1ZGUgIlY4V2ViR0xSZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJW
OFdlYkdMU2hhZGVyLmgiCi0jaW5jbHVkZSAiVjhXZWJHTFNob3J0QXJyYXkuaCIKLSNpbmNsdWRl
ICJWOFdlYkdMVGV4dHVyZS5oIgotI2luY2x1ZGUgIlY4V2ViR0xVbmlmb3JtTG9jYXRpb24uaCIK
LSNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKLSNpbmNsdWRlICJWOFdlYkdM
VW5zaWduZWRJbnRBcnJheS5oIgotI2luY2x1ZGUgIlY4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXku
aCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotI2luY2x1ZGUgIlY4RGF0YWJhc2Uu
aCIKLSNpbmNsdWRlICJWOFNRTEVycm9yLmgiCi0jaW5jbHVkZSAiVjhTUUxSZXN1bHRTZXQuaCIK
LSNpbmNsdWRlICJWOFNRTFJlc3VsdFNldFJvd0xpc3QuaCIKLSNpbmNsdWRlICJWOFNRTFRyYW5z
YWN0aW9uLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2luY2x1
ZGUgIlY4SURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIlY4SURCRGF0YWJhc2VFeGNlcHRp
b24uaCIKLSNpbmNsdWRlICJWOElEQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJWOEluZGV4ZWREYXRh
YmFzZVJlcXVlc3QuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFhQQVRIKQotI2luY2x1ZGUgIlY4
WFBhdGhSZXN1bHQuaCIKLSNpbmNsdWRlICJWOFhQYXRoRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAi
VjhYUGF0aEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJWOFhQYXRoTlNSZXNvbHZlci5oIgotI2lu
Y2x1ZGUgIlY4WFBhdGhFdmFsdWF0b3IuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFhTTFQpCi0j
aW5jbHVkZSAiVjhYU0xUUHJvY2Vzc29yLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1IpCi0jaW5jbHVkZSAiVjhJbmplY3RlZFNjcmlwdEhvc3QuaCIKLSNpbmNsdWRlICJWOEluc3Bl
Y3RvckJhY2tlbmQuaCIKLSNpbmNsdWRlICJWOEluc3BlY3RvckZyb250ZW5kSG9zdC5oIgotI2Vu
ZGlmCi0KLSNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCi0jaW5jbHVkZSAiVjhFdmVudFNvdXJjZS5o
IgotI2VuZGlmCi0KLS8vIEdlb2xvY2F0aW9uCi0jaW5jbHVkZSAiVjhDb29yZGluYXRlcy5oIgot
I2luY2x1ZGUgIlY4R2VvbG9jYXRpb24uaCIKLSNpbmNsdWRlICJWOEdlb3Bvc2l0aW9uLmgiCi0j
aW5jbHVkZSAiVjhQb3NpdGlvbkVycm9yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4Q2xhc3NJbmRleDo6Z2V0VGVtcGxh
dGUoVjhXcmFwcGVyVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotI2RlZmluZSBN
QUtFX0NBU0UodHlwZSwgbmFtZSlcCi0gICAgY2FzZSBWOENsYXNzSW5kZXg6OnR5cGU6IHJldHVy
biBWOCMjbmFtZTo6R2V0VGVtcGxhdGUoKTsKLSAgICBXUkFQUEVSX1RZUEVTKE1BS0VfQ0FTRSkK
LSN1bmRlZiBNQUtFX0NBU0UKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
Pjo6TmV3KHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoKSk7Ci0gIH0KLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcAkocmV2aXNpb24gNTU3
NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OCw3ICs1OCw3IEBACiAgICAgcmV0dXJuIGNoaWxkVGhyZWFkRE9NRGF0YTsKIH0KIAotdm9p
ZCBET01EYXRhOjplbnN1cmVEZXJlZihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwg
dm9pZCogZG9tT2JqZWN0KQordm9pZCBET01EYXRhOjplbnN1cmVEZXJlZihXcmFwcGVyVHlwZUlu
Zm8qIHR5cGUsIHZvaWQqIGRvbU9iamVjdCkKIHsKICAgICBpZiAobV9vd25pbmdUaHJlYWQgPT0g
V1RGOjpjdXJyZW50VGhyZWFkKCkpIHsKICAgICAgICAgLy8gTm8gbmVlZCB0byBkZWxheSB0aGUg
d29yay4gV2UgY2FuIGRlcmVmIHJpZ2h0IG5vdy4KQEAgLTc4LDM1ICs3OCw5IEBACiAgICAgfQog
fQogCi12b2lkIERPTURhdGE6OmRlcmVmT2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSB0eXBlLCB2b2lkKiBkb21PYmplY3QpCit2b2lkIERPTURhdGE6OmRlcmVmT2JqZWN0KFdyYXBw
ZXJUeXBlSW5mbyogdHlwZSwgdm9pZCogZG9tT2JqZWN0KQogewotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpOT0RFOgotICAgICAgICBzdGF0aWNfY2FzdDxOb2Rl
Kj4oZG9tT2JqZWN0KS0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0KLSNkZWZpbmUgTWFrZUNh
c2UodHlwZSwgbmFtZSkgICBcCi0gICAgICAgIGNhc2UgVjhDbGFzc0luZGV4Ojp0eXBlOiBzdGF0
aWNfY2FzdDxuYW1lKj4oZG9tT2JqZWN0KS0+ZGVyZWYoKTsgYnJlYWs7Ci0gICAgRE9NX09CSkVD
VF9UWVBFUyhNYWtlQ2FzZSkgICAvLyBUaGlzIGluY2x1ZGVzIGJvdGggYWN0aXZlIGFuZCBub24t
YWN0aXZlLgotI3VuZGVmIE1ha2VDYXNlCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2RlZmluZSBNYWtl
Q2FzZSh0eXBlLCBuYW1lKSAgICAgXAotICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6dHlwZTog
c3RhdGljX2Nhc3Q8bmFtZSo+KGRvbU9iamVjdCktPmRlcmVmKCk7IGJyZWFrOwotICAgIFNWR19P
QkpFQ1RfVFlQRVMoTWFrZUNhc2UpICAgLy8gVGhpcyBhbHNvIGluY2x1ZGVzIFNWR0VsZW1lbnRJ
bnN0YW5jZS4KLSN1bmRlZiBNYWtlQ2FzZQotCi0jZGVmaW5lIE1ha2VDYXNlKHR5cGUsIG5hbWUp
ICAgICBcCi0gICAgICAgIGNhc2UgVjhDbGFzc0luZGV4Ojp0eXBlOiAgICBcCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxWOFNWR1BPRFR5cGVXcmFwcGVyPG5hbWU+Kj4oZG9tT2JqZWN0KS0+ZGVy
ZWYoKTsgYnJlYWs7Ci0gICAgU1ZHX1BPRF9OQVRJVkVfVFlQRVMoTWFrZUNhc2UpCi0jdW5kZWYg
TWFrZUNhc2UKLSNlbmRpZgotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB0eXBlLT5kZXJlZk9iamVjdChkb21P
YmplY3QpOwogfQogCiB2b2lkIERPTURhdGE6OmRlcmVmRGVsYXllZE9iamVjdHMoKQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhIZWxwZXJzLmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCB3cmFwTlBPYmplY3Qodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBvYmplY3QsIE5QT2JqZWN0KiBucE9iamVjdCkKLXsKLSAgICBWOERPTVdyYXBw
ZXI6OnNldERPTVdyYXBwZXIob2JqZWN0LCBWOENsYXNzSW5kZXg6Ok5QT0JKRUNULCBucE9iamVj
dCk7Ci19Ci0KIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gdG9WOENvbnRleHQoTlBQIG5wcCwgTlBP
YmplY3QqIG5wT2JqZWN0KQogewogICAgIFY4TlBPYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8VjhOUE9iamVjdCo+KG5wT2JqZWN0KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMRmxvYXRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9u
IDU1NzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEZsb2F0QXJyYXlD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiB7CiAgICAgSU5DX1NU
QVRTKCJET00uV2ViR0xGbG9hdEFycmF5LkNvbnRydWN0b3IiKTsKIAotICAgIHJldHVybiBjb25z
dHJ1Y3RXZWJHTEFycmF5PFdlYkdMRmxvYXRBcnJheSwgZmxvYXQ+KGFyZ3MsIFY4Q2xhc3NJbmRl
eDo6VG9JbnQoVjhDbGFzc0luZGV4OjpXRUJHTEZMT0FUQVJSQVkpKTsKKyAgICByZXR1cm4gY29u
c3RydWN0V2ViR0xBcnJheTxXZWJHTEZsb2F0QXJyYXksIGZsb2F0PihhcmdzLCAmaW5mbyk7CiB9
CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMRmxvYXRBcnJheTo6Z2V0Q2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlv
bkVsZW1lbnRDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAj
aWZuZGVmIFY4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcl9oCiAjZGVmaW5lIFY4SFRNTE9w
dGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcl9oCiAKKyNpbmNsdWRlICJWOEluZGV4LmgiCisKICNpbmNs
dWRlIDx2OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2ICs0MCw3IEBACiBjbGFz
cyBWOEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IgewogcHVibGljOgogICAgIHN0YXRpYyB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKKyAgICBz
dGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhN
ZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NyBAQAogICAgIG1lc3NhZ2VDaGFubmVsLT5TZXRJbnRlcm5hbEZpZWxkKFY4TWVzc2FnZUNoYW5u
ZWw6OnBvcnQySW5kZXgsIHRvVjgob2JqLT5wb3J0MigpKSk7CiAKICAgICAvLyBTZXR1cCB0aGUg
c3RhbmRhcmQgd3JhcHBlciBvYmplY3QgaW50ZXJuYWwgZmllbGRzLgotICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcihtZXNzYWdlQ2hhbm5lbCwgVjhDbGFzc0luZGV4OjpNRVNTQUdFQ0hB
Tk5FTCwgb2JqLmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIobWVzc2Fn
ZUNoYW5uZWwsICZpbmZvLCBvYmouZ2V0KCkpOwogICAgIHJldHVybiB0b1Y4KG9iai5yZWxlYXNl
KCksIG1lc3NhZ2VDaGFubmVsKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXZWJHTEFycmF5QnVmZmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlCdWZmZXJDdXN0b20uY3BwCShyZXZpc2lvbiA1
NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUJ1ZmZlckN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKICAgICB9CiAgICAgLy8gVHJhbnNmb3JtIHRoZSBob2xkZXIgaW50
byBhIHdyYXBwZXIgb2JqZWN0IGZvciB0aGUgYXJyYXkuCi0gICAgVjhET01XcmFwcGVyOjpzZXRE
T01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4
OjpXRUJHTEFSUkFZQlVGRkVSKSwgYnVmZmVyLmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNl
dERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIGJ1ZmZlci5nZXQoKSk7CiAgICAgcmV0
dXJuIHRvVjgoYnVmZmVyLnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVt
ZW50Q29uc3RydWN0b3IuaAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw4IEBACiAjaWZuZGVmIFY4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yX2gK
ICNkZWZpbmUgVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3JfaAogCisjaW5jbHVkZSAiVjhJ
bmRleC5oIgorCiAjaW5jbHVkZSA8djguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgs
NiArNDAsNyBAQAogY2xhc3MgVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IgewogcHVibGlj
OgogICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVt
cGxhdGUoKTsKKyAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CiB9OwogCiB9CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3Bw
CShyZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2lu
ZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsMTAgQEAKICNpbmNsdWRl
ICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgog
I2luY2x1ZGUgIlY4R0NGb3JDb250ZXh0RGlzcG9zZS5oIgorI2luY2x1ZGUgIlY4SFRNTEF1ZGlv
RWxlbWVudENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVjhIVE1MQ29sbGVjdGlvbi5oIgorI2lu
Y2x1ZGUgIlY4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhIVE1M
T3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydEN1c3Rv
bS5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKQEAgLTIyNiw3
ICsyMjksNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93OjpBdWRpb0FjY2Vz
c29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQogewogICAgIERPTVdpbmRvdyogd2luZG93ID0gVjhET01XaW5kb3c6OnRvTmF0
aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVj
dG9yKFY4Q2xhc3NJbmRleDo6QVVESU8sIHdpbmRvdyk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBl
cjo6Z2V0Q29uc3RydWN0b3IoJlY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yOjppbmZvLCB3
aW5kb3cpOwogfQogCiAjZW5kaWYKQEAgLTIzNCwxMyArMjM3LDEzIEBACiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhET01XaW5kb3c6OkltYWdlQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgRE9NV2lu
ZG93KiB3aW5kb3cgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAg
cmV0dXJuIFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpJTUFHRSwg
d2luZG93KTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvcigmVjhIVE1M
SW1hZ2VFbGVtZW50Q29uc3RydWN0b3I6OmluZm8sIHdpbmRvdyk7CiB9CiAKIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6T3B0aW9uQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgRE9N
V2luZG93KiB3aW5kb3cgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0g
ICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpPUFRJ
T04sIHdpbmRvdyk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoJlY4
SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbywgd2luZG93KTsKIH0KIAogdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V29ya2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBACiAKICAgICAvLyBTZXR1cCB0aGUgc3RhbmRhcmQgd3JhcHBlciBvYmplY3QgaW50
ZXJuYWwgZmllbGRzLgogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlck9iamVjdCA9
IGFyZ3MuSG9sZGVyKCk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHdyYXBwZXJP
YmplY3QsIFY4Q2xhc3NJbmRleDo6V09SS0VSLCBvYmouZ2V0KCkpOworICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyT2JqZWN0LCAmaW5mbywgb2JqLmdldCgpKTsKIAogICAg
IG9iai0+cmVmKCk7CiAgICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JBY3RpdmVET01P
YmplY3Qob2JqLmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXJP
YmplY3QpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0UG9pbnRD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhXZWJLaXRQb2ludENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdFBvaW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw3ICs1OSw3IEBACiAgICAgfQogICAgIFBhc3NSZWZQdHI8V2ViS2l0UG9p
bnQ+IHBvaW50ID0gV2ViS2l0UG9pbnQ6OmNyZWF0ZSh4LCB5KTsKICAgICBwb2ludC0+cmVmKCk7
Ci0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIFY4Q2xhc3NJ
bmRleDo6V0VCS0lUUE9JTlQsIHBvaW50LmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldERP
TVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIHBvaW50LmdldCgpKTsKICAgICByZXR1cm4g
YXJncy5Ib2xkZXIoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA1
NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENv
bnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKICNpZm5kZWYgVjhI
VE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3JfaAogI2RlZmluZSBWOEhUTUxBdWRpb0VsZW1lbnRD
b25zdHJ1Y3Rvcl9oCiAKKyNpbmNsdWRlICJWOEluZGV4LmgiCisKICNpbmNsdWRlIDx2OC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2ICs0MCw3IEBACiBjbGFzcyBWOEhUTUxBdWRp
b0VsZW1lbnRDb25zdHJ1Y3RvciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOworICAgIHN0YXRpYyBXcmFwcGVy
VHlwZUluZm8gaW5mbzsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRp
b25FbGVtZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorV3JhcHBlclR5cGVJbmZvIFY4SFRNTE9wdGlvbkVs
ZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbyA9IHtWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRl
eDo6T1BUSU9OKSwgVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSwg
MCwgZmFsc2UgfTsKKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEhUTUxPcHRpb25F
bGVtZW50Q29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewog
ICAgIElOQ19TVEFUUygiRE9NLkhUTUxPcHRpb25FbGVtZW50LkNvbnRydWN0b3IiKTsKQEAgLTc4
LDcgKzgwLDcgQEAKICAgICBpZiAoZWMpCiAgICAgICAgIHRocm93RXJyb3IoZWMpOwogCi0gICAg
VjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIFY4Q2xhc3NJbmRleDo6
VG9JbnQoVjhDbGFzc0luZGV4OjpPUFRJT04pLCBvcHRpb24uZ2V0KCkpOworICAgIFY4RE9NV3Jh
cHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmVjhIVE1MT3B0aW9uRWxlbWVudENv
bnN0cnVjdG9yOjppbmZvLCBvcHRpb24uZ2V0KCkpOwogICAgIG9wdGlvbi0+cmVmKCk7CiAgICAg
VjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01Ob2RlKG9wdGlvbi5nZXQoKSwgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CiAgICAgcmV0dXJuIGFy
Z3MuSG9sZGVyKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQnl0
ZUFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNyArNDcsNyBAQAogewogICAgIElOQ19TVEFUUygiRE9NLldlYkdMQnl0ZUFy
cmF5LkNvbnRydWN0b3IiKTsKIAotICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5PFdlYkdM
Qnl0ZUFycmF5LCBzaWduZWQgY2hhcj4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNz
SW5kZXg6OldFQkdMQllURUFSUkFZKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8
V2ViR0xCeXRlQXJyYXksIHNpZ25lZCBjaGFyPihhcmdzLCAmaW5mbyk7CiB9CiAKIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOFdlYkdMQnl0ZUFycmF5OjpnZXRDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1h
Z2VFbGVtZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTU3
NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitXcmFwcGVyVHlwZUluZm8gVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0
b3I6OmluZm8gPSB7VjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OklNQUdFKSwgVjhI
VE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlLCAwLCBmYWxzZSB9OworCiBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9y
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5IVE1MSW1hZ2VFbGVtZW50LkNvbnRydWN0b3IiKTsKQEAgLTgwLDcgKzgyLDcgQEAKICAgICB9
CiAKICAgICBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gaW1hZ2UgPSBIVE1MSW1hZ2VFbGVtZW50
OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKGRvY3VtZW50LCBvcHRpb25hbFdpZHRoLCBvcHRpb25h
bEhlaWdodCk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCks
IFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpJTUFHRSksIGltYWdlLmdldCgpKTsK
KyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJlY4SFRNTElt
YWdlRWxlbWVudENvbnN0cnVjdG9yOjppbmZvLCBpbWFnZS5nZXQoKSk7CiAgICAgaW1hZ2UtPnJl
ZigpOwogICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShpbWFnZS5nZXQo
KSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CiAgICAg
cmV0dXJuIGFyZ3MuSG9sZGVyKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYkdMQXJyYXlDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYkdMQXJyYXlDdXN0b20uaAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsOCArNDIsNyBAQAogCiAvLyBUZW1wbGF0ZSBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBXZWJHTEFy
cmF5KkNvbnN0cnVjdG9yIGNhbGxiYWNrcy4KIHRlbXBsYXRlPGNsYXNzIEFycmF5Q2xhc3MsIGNs
YXNzIEVsZW1lbnRUeXBlPgotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0cnVjdFdlYkdMQXJy
YXkoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBjbGFzc0luZGV4KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNv
bnN0cnVjdFdlYkdMQXJyYXkoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywgV3JhcHBlclR5cGVJ
bmZvKiB0eXBlKQogewogICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxl
ZCBhcyBhIGZ1bmN0aW9uLiIpOwpAQCAtOTIsOSArOTEsOSBAQAogICAgICAgICBpZiAoIWFycmF5
KQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk91dC1vZi1yYW5nZSBvZmZzZXQgYW5k
L29yIGxlbmd0aCIpOwogICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIGhvbGRlciBpbnRvIGEgd3Jh
cHBlciBvYmplY3QgZm9yIHRoZSBhcnJheS4KLSAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01X
cmFwcGVyKGFyZ3MuSG9sZGVyKCksIGNsYXNzSW5kZXgsIGFycmF5LmdldCgpKTsKKyAgICAgICAg
VjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIHR5cGUsIGFycmF5Lmdl
dCgpKTsKICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRJbmRleGVkUHJvcGVydGllc1RvRXh0ZXJu
YWxBcnJheShhcmdzLkhvbGRlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzSW5kZXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS0+aW5kZXgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJy
YXkuZ2V0KCktPmJhc2VBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkuZ2V0KCktPmxlbmd0aCgpKTsKICAgICAg
ICAgcmV0dXJuIHRvVjgoYXJyYXkucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpKTsKQEAgLTEyNyw5
ICsxMjYsOSBAQAogICAgIH0KIAogICAgIC8vIFRyYW5zZm9ybSB0aGUgaG9sZGVyIGludG8gYSB3
cmFwcGVyIG9iamVjdCBmb3IgdGhlIGFycmF5LgotICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3Jh
cHBlcihhcmdzLkhvbGRlcigpLCBjbGFzc0luZGV4LCBhcnJheS5nZXQoKSk7CisgICAgVjhET01X
cmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIHR5cGUsIGFycmF5LmdldCgpKTsK
ICAgICBWOERPTVdyYXBwZXI6OnNldEluZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5KGFy
Z3MuSG9sZGVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzc0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZS0+aW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5nZXQoKS0+YmFzZUFkZHJlc3Mo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFycmF5LmdldCgpLT5sZW5ndGgoKSk7CiAgICAgcmV0dXJuIHRvVjgoYXJyYXkucmVsZWFzZSgp
LCBhcmdzLkhvbGRlcigpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
R0xVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwCShyZXZp
c2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25l
ZFNob3J0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiB7
CiAgICAgSU5DX1NUQVRTKCJET00uV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuQ29udHJ1Y3RvciIp
OwogCi0gICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8V2ViR0xVbnNpZ25lZFNob3J0QXJy
YXksIHVuc2lnbmVkIHNob3J0PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRl
eDo6V0VCR0xVTlNJR05FRFNIT1JUQVJSQVkpKTsKKyAgICByZXR1cm4gY29uc3RydWN0V2ViR0xB
cnJheTxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSwgdW5zaWduZWQgc2hvcnQ+KGFyZ3MsICZpbmZv
KTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6
OmdldENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEJ5dGVB
cnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNyArNDcsNyBAQAogewogICAgIElOQ19TVEFUUygiRE9NLldlYkdMVW5zaWduZWRCeXRl
QXJyYXkuQ29udHJ1Y3RvciIpOwogCi0gICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8V2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheSwgdW5zaWduZWQgY2hhcj4oYXJncywgVjhDbGFzc0luZGV4OjpU
b0ludChWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURCWVRFQVJSQVkpKTsKKyAgICByZXR1cm4g
Y29uc3RydWN0V2ViR0xBcnJheTxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LCB1bnNpZ25lZCBjaGFy
PihhcmdzLCAmaW5mbyk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMVW5zaWdu
ZWRCeXRlQXJyYXk6OmdldENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNoYXJlZFdvcmtlckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTaGFyZWRXb3JrZXJDdXN0
b20uY3BwCShyZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U2hhcmVkV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQAog
CiAgICAgLy8gU2V0dXAgdGhlIHN0YW5kYXJkIHdyYXBwZXIgb2JqZWN0IGludGVybmFsIGZpZWxk
cy4KICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXJPYmplY3QgPSBhcmdzLkhvbGRl
cigpOwotICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyT2JqZWN0LCBWOENs
YXNzSW5kZXg6OlNIQVJFRFdPUktFUiwgb2JqLmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNl
dERPTVdyYXBwZXIod3JhcHBlck9iamVjdCwgJmluZm8sIG9iai5nZXQoKSk7CiAKICAgICBvYmot
PnJlZigpOwogICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9NT2JqZWN0
KG9iai5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyT2JqZWN0
KSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRD
dXN0b20uY3BwCShyZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V2ViU29ja2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQAog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CiAKICAgICAvLyBTZXR1cCB0aGUgc3RhbmRh
cmQgd3JhcHBlciBvYmplY3QgaW50ZXJuYWwgZmllbGRzLgotICAgIFY4RE9NV3JhcHBlcjo6c2V0
RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRl
eDo6V0VCU09DS0VUKSwgd2ViU29ja2V0LmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldERP
TVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIHdlYlNvY2tldC5nZXQoKSk7CiAKICAgICAv
LyBBZGQgb2JqZWN0IHRvIHRoZSB3cmFwcGVyIG1hcC4KICAgICB3ZWJTb2NrZXQtPnJlZigpOwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNz
b3JDdXN0b20uY3BwCShyZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5
LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFhTTFRQcm9jZXNzb3I6OmNvbnN0cnVjdG9y
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5YU0xUUHJvY2Vzc29yLkNvbnN0cnVjdG9yIik7Ci0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnN0
cnVjdERPTU9iamVjdDxWOENsYXNzSW5kZXg6OlhTTFRQUk9DRVNTT1IsIFhTTFRQcm9jZXNzb3I+
KGFyZ3MpOworICAgIHJldHVybiBWOFByb3h5Ojpjb25zdHJ1Y3RET01PYmplY3Q8WFNMVFByb2Nl
c3Nvcj4oYXJncywgJmluZm8pOwogfQogCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0Q1NT
TWF0cml4Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBACiAg
ICAgICAgIHRocm93RXJyb3IoZWMpOwogCiAgICAgLy8gVHJhbnNmb3JtIHRoZSBob2xkZXIgaW50
byBhIHdyYXBwZXIgb2JqZWN0IGZvciB0aGUgbWF0cml4LgotICAgIFY4RE9NV3JhcHBlcjo6c2V0
RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRl
eDo6V0VCS0lUQ1NTTUFUUklYKSwgbWF0cml4LmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNl
dERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIG1hdHJpeC5nZXQoKSk7CiAgICAgcmV0
dXJuIHRvVjgobWF0cml4LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWdu
ZWRJbnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw3IEBACiB7CiAgICAgSU5DX1NUQVRTKCJET00uV2ViR0xVbnNpZ25l
ZEludEFycmF5LkNvbnRydWN0b3IiKTsKIAotICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5
PFdlYkdMVW5zaWduZWRJbnRBcnJheSwgdW5zaWduZWQgaW50PihhcmdzLCBWOENsYXNzSW5kZXg6
OlRvSW50KFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FRElOVEFSUkFZKSk7CisgICAgcmV0dXJu
IGNvbnN0cnVjdFdlYkdMQXJyYXk8V2ViR0xVbnNpZ25lZEludEFycmF5LCB1bnNpZ25lZCBpbnQ+
KGFyZ3MsICZpbmZvKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xVbnNpZ25l
ZEludEFycmF5OjpnZXRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3Jp
cHRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDcgKzU5LDYgQEAKIAogc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjcmVhdGVJbmpl
Y3RlZFNjcmlwdEhvc3RWOFdyYXBwZXIoSW5qZWN0ZWRTY3JpcHRIb3N0KiBob3N0KQogewotICAg
IFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkZXNjcmlwdG9yVHlwZSA9IFY4Q2xhc3NJbmRl
eDo6SU5KRUNURURTQ1JJUFRIT1NUOwogICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGZ1bmN0
aW9uID0gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OkdldFRlbXBsYXRlKCktPkdldEZ1bmN0aW9uKCk7
CiAgICAgaWYgKGZ1bmN0aW9uLklzRW1wdHkoKSkgewogICAgICAgICAvLyBSZXR1cm4gaWYgYWxs
b2NhdGlvbiBmYWlsZWQuCkBAIC03MCw3ICs2OSw3IEBACiAgICAgICAgIC8vIEF2b2lkIHNldHRp
bmcgdGhlIHdyYXBwZXIgaWYgYWxsb2NhdGlvbiBmYWlsZWQuCiAgICAgICAgIHJldHVybiB2ODo6
TG9jYWw8djg6Ok9iamVjdD4oKTsKICAgICB9Ci0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFw
cGVyKGluc3RhbmNlLCBWOENsYXNzSW5kZXg6OlRvSW50KGRlc2NyaXB0b3JUeXBlKSwgaG9zdCk7
CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGluc3RhbmNlLCAmVjhJbmplY3RlZFNj
cmlwdEhvc3Q6OmluZm8sIGhvc3QpOwogICAgIC8vIENyZWF0ZSBhIHdlYWsgcmVmZXJlbmNlIHRv
IHRoZSB2OCB3cmFwcGVyIG9mIEluc3BlY3RvckJhY2tlbmQgdG8gZGVyZWYKICAgICAvLyBJbnNw
ZWN0b3JCYWNrZW5kIHdoZW4gdGhlIHdyYXBwZXIgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuCiAgICAg
aG9zdC0+cmVmKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMSW50
QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V2ViR0xJbnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEludEFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNyArNDcsNyBAQAogewogICAgIElOQ19TVEFUUygiRE9NLldlYkdMSW50QXJyYXku
Q29udHJ1Y3RvciIpOwogCi0gICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8V2ViR0xJbnRB
cnJheSwgaW50PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6V0VCR0xJ
TlRBUlJBWSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5PFdlYkdMSW50QXJyYXks
IGludD4oYXJncywgJmluZm8pOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTElu
dEFycmF5OjpnZXRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxl
bWVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDYgKzQ0LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitXcmFwcGVyVHlw
ZUluZm8gVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3I6OmluZm8gPSB7VjhDbGFzc0luZGV4
OjpUb0ludChWOENsYXNzSW5kZXg6OkFVRElPKSwgVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0
b3I6OkdldFRlbXBsYXRlLCAwLCBmYWxzZSB9OworCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MQXVkaW9FbGVtZW50LkNvbnRy
dWN0b3IiKTsKQEAgLTY5LDcgKzcxLDcgQEAKICAgICAgICAgc3JjID0gdG9XZWJDb3JlU3RyaW5n
KGFyZ3NbMF0pOwogICAgIFJlZlB0cjxIVE1MQXVkaW9FbGVtZW50PiBhdWRpbyA9IEhUTUxBdWRp
b0VsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoZG9jdW1lbnQsIHNyYyk7CiAKLSAgICBW
OERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgVjhDbGFzc0luZGV4OjpU
b0ludChWOENsYXNzSW5kZXg6OkFVRElPKSwgYXVkaW8uZ2V0KCkpOworICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmVjhIVE1MQXVkaW9FbGVtZW50Q29uc3Ry
dWN0b3I6OmluZm8sIGF1ZGlvLmdldCgpKTsKICAgICBhdWRpby0+cmVmKCk7CiAgICAgVjhET01X
cmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01Ob2RlKGF1ZGlvLmdldCgpLCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsKICAgICByZXR1cm4gYXJncy5Ib2xk
ZXIoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xTaG9ydEFycmF5
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdl
YkdMU2hvcnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw3ICs0Nyw3IEBACiB7CiAgICAgSU5DX1NUQVRTKCJET00uV2ViR0xTaG9ydEFycmF5
LkNvbnRydWN0b3IiKTsKIAotICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5PFdlYkdMU2hv
cnRBcnJheSwgc2hvcnQ+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpX
RUJHTFNIT1JUQVJSQVkpKTsKKyAgICByZXR1cm4gY29uc3RydWN0V2ViR0xBcnJheTxXZWJHTFNo
b3J0QXJyYXksIHNob3J0PihhcmdzLCAmaW5mbyk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOFdlYkdMU2hvcnRBcnJheTo6Z2V0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhY
TUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBACiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcigiWE1MSHR0cFJlcXVlc3QgY29uc3RydWN0b3IncyBhc3NvY2lhdGVk
IGNvbnRleHQgaXMgbm90IGF2YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVycm9yKTsKICAg
ICBSZWZQdHI8WE1MSHR0cFJlcXVlc3Q+IHhtbEh0dHBSZXF1ZXN0ID0gWE1MSHR0cFJlcXVlc3Q6
OmNyZWF0ZShjb250ZXh0KTsKLSAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5I
b2xkZXIoKSwgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNU
KSwgeG1sSHR0cFJlcXVlc3QuZ2V0KCkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBl
cihhcmdzLkhvbGRlcigpLCAmaW5mbywgeG1sSHR0cFJlcXVlc3QuZ2V0KCkpOwogCiAgICAgLy8g
QWRkIG9iamVjdCB0byB0aGUgd3JhcHBlciBtYXAuCiAgICAgeG1sSHR0cFJlcXVlc3QtPnJlZigp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50347</attachid>
            <date>2010-03-09 14:14:36 -0800</date>
            <delta_ts>2010-03-10 08:26:39 -0800</delta_ts>
            <desc>patch with build file changes</desc>
            <filename>index2.txt</filename>
            <type>text/plain</type>
            <size>81354</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCShy
ZXZpc2lvbiA1NTc0MykKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNyArMzM3LDYgQEAKIAogdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpjcmVhdGVJbnNwZWN0b3JCYWNrZW5kVjhX
cmFwcGVyKCkKIHsKLSAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgZGVzY3JpcHRvclR5
cGUgPSBWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQ7CiAgICAgdjg6OkhhbmRsZTx2ODo6
RnVuY3Rpb24+IGZ1bmN0aW9uID0gVjhJbnNwZWN0b3JCYWNrZW5kOjpHZXRUZW1wbGF0ZSgpLT5H
ZXRGdW5jdGlvbigpOwogICAgIGlmIChmdW5jdGlvbi5Jc0VtcHR5KCkpIHsKICAgICAgICAgLy8g
UmV0dXJuIGlmIGFsbG9jYXRpb24gZmFpbGVkLgpAQCAtMzQ5LDcgKzM0OCw3IEBACiAgICAgICAg
IHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD4oKTsKICAgICB9CiAgICAgSW5zcGVjdG9yQmFj
a2VuZCogYmFja2VuZCA9IG1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5pbnNwZWN0b3JCYWNrZW5kKCk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVy
KGluc3RhbmNlLCBWOENsYXNzSW5kZXg6OlRvSW50KGRlc2NyaXB0b3JUeXBlKSwgYmFja2VuZCk7
CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGluc3RhbmNlLCAmVjhJbnNwZWN0b3JC
YWNrZW5kOjppbmZvLCBiYWNrZW5kKTsKICAgICAvLyBDcmVhdGUgYSB3ZWFrIHJlZmVyZW5jZSB0
byB0aGUgdjggd3JhcHBlciBvZiBJbnNwZWN0b3JCYWNrZW5kIHRvIGRlcmVmCiAgICAgLy8gSW5z
cGVjdG9yQmFja2VuZCB3aGVuIHRoZSB3cmFwcGVyIGlzIGdhcmJhZ2UgY29sbGVjdGVkLgogICAg
IGJhY2tlbmQtPnJlZigpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zy
b250ZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZU
b29sc0Zyb250ZW5kSW1wbC5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw3
ICszNTgsNyBAQAogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IGV2ZW50V3JhcHBlciA9IHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2Fz
dChhcmdzWzBdKTsKLSAgICBpZiAoVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZShldmVudFdy
YXBwZXIpICE9IFY4Q2xhc3NJbmRleDo6TU9VU0VFVkVOVCkKKyAgICBpZiAoVjhET01XcmFwcGVy
Ojpkb21XcmFwcGVyVHlwZShldmVudFdyYXBwZXIpLT5pbmRleCAhPSBWOENsYXNzSW5kZXg6Ok1P
VVNFRVZFTlQpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBFdmVudCog
ZXZlbnQgPSBWOEV2ZW50Ojp0b05hdGl2ZShldmVudFdyYXBwZXIpOwpJbmRleDogV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJCaW5kaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJCaW5kaW5ncy5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJCaW5kaW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NCw3ICsyODQsNyBAQAog
ewogICAgIFY4TlBPYmplY3QqIHY4bnBvYmplY3QgPSByZWludGVycHJldF9jYXN0PFY4TlBPYmpl
Y3QqPihucG9iaik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB2OG9iamVjdCh2OG5wb2Jq
ZWN0LT52OE9iamVjdCk7Ci0gICAgaWYgKFY4Q2xhc3NJbmRleDo6UkFOR0UgIT0gVjhET01XcmFw
cGVyOjpkb21XcmFwcGVyVHlwZSh2OG9iamVjdCkpCisgICAgaWYgKFY4Q2xhc3NJbmRleDo6UkFO
R0UgIT0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh2OG9iamVjdCktPmluZGV4KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSYW5nZSogbmF0aXZlID0gVjhSYW5nZTo6dG9OYXRp
dmUodjhvYmplY3QpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA1NTc0NCkKKysrIFdlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAx
MC0wMy0wOSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdyYXAgYW5kIHVud3JhcCB2OCBv
YmplY3RzIHdpdGggV3JhcHBlclR5cGVJbmZvIGluc3RlYWQgb2YgVjhDbGFzc0luZGV4OjpWOFdy
YXBwZXJUeXBlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNTk0MQorCisgICAgICAgICogc3JjL1dlYkJpbmRpbmdzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6Z2V0UmFuZ2VJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6Y3JlYXRlSW5zcGVj
dG9yQmFja2VuZFY4V3JhcHBlcik6CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzU2hv
d0NvbnRleHRNZW51KToKKwogMjAxMC0wMy0wOSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDog
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDU1NzQ0KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw1OSBAQAorMjAxMC0wMy0wOSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtWOF0gSW5z
dGVhZCBvZiBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIGEgd3JhcHBlZCB2OCBvYmplY3QKKyAgICAg
ICAgd2l0aCBhbiBlbnVtIHZhbHVlLCB1c2UgYSBwb2ludGVyIHRvIHN0cnVjdCB3aXRoIG1vcmUg
Y29tcGxldGUKKyAgICAgICAgaW5mb3JtYXRpb24uCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1OTQxCisKKyAgICAgICAgUmVmYWN0b3Jpbmcgb25s
eSwgc28gbmV3IHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG06CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NRGF0YS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvdjgvRE9NRGF0YS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L05QVjhPYmplY3Qu
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
RE9NV2luZG93U2hlbGwuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhlbHBl
cnMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4SGVscGVycy5oOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4SW5kZXguY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
SW5kZXguaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENv
bnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxl
bWVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
SW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTaGFyZWRXb3JrZXJDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlCdWZmZXJDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlDdXN0b20uaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEJ5dGVBcnJheUN1c3RvbS5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEludEFycmF5Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0
b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRJbnRB
cnJheUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNp
Z25lZFNob3J0QXJyYXlDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhXZWJLaXRQb2ludENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhXZWJTb2NrZXRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdvcmtlckN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHA6CisKIDIwMTAtMDMtMDkgIEJyYWR5IEVpZHNv
biAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShy
ZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTI0NywxMCArMjQ3LDE1IEBACiAgICAgc3RhdGljIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOwogICAgIHN0
YXRpYyAke25hdGl2ZVR5cGV9KiB0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKICAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKCR7bmF0aXZlVHlwZX0qJHtmb3Jj
ZU5ld09iamVjdFBhcmFtZXRlcn0pOworICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQq
KTsKKyAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CiBFTkQKKyAgICBpZiAoSXNBY3Rp
dmVEb21UeXBlKCRpbXBsQ2xhc3NOYW1lKSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyBBY3RpdmVET01PYmplY3QqIHRvQWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4pO1xuIik7CisgICAgfQogCiAgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVx
ICJET01XaW5kb3ciKSB7Ci0gICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CisgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdFRlbXBsYXRlPiBHZXRTaGFkb3dPYmplY3RUZW1wbGF0ZSgpOwogRU5ECiAg
ICAgfQpAQCAtNTQ2LDggKzU1MSw4IEBACiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+ICR7
aW1wbENsYXNzTmFtZX1Db25zdHJ1Y3RvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykgewogICAgIElOQ19TVEFUUyhcIkRPTS4k
aW1wbENsYXNzTmFtZS5jb25zdHJ1Y3RvcnMuX2dldFwiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gZGF0YSA9IGluZm8uRGF0YSgpOwotICAgIEFTU0VSVChkYXRhLT5Jc051bWJlcigpKTsK
LSAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSA9IFY4Q2xhc3NJbmRleDo6RnJv
bUludChkYXRhLT5JbnQzMlZhbHVlKCkpOworICAgIEFTU0VSVChkYXRhLT5Jc0V4dGVybmFsKCkg
fHwgZGF0YS0+SXNOdW1iZXIoKSk7CisgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlID0gcmVpbnRl
cnByZXRfY2FzdDxXcmFwcGVyVHlwZUluZm8qPih2ODo6RXh0ZXJuYWw6OlVud3JhcChkYXRhKSk7
CiBFTkQKIAogICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAiRE9NV2luZG93IikgewpAQCAtMTE3
OSwxNyArMTE4NCwxNyBAQAogICAgIH0KIAogICAgIG15ICRvbl9wcm90byA9ICIwIC8qIG9uIGlu
c3RhbmNlICovIjsKLSAgICBteSAkZGF0YSA9ICJWOENsYXNzSW5kZXg6OklOVkFMSURfQ0xBU1Nf
SU5ERVggLyogbm8gZGF0YSAqLyI7CisgICAgbXkgJGRhdGEgPSAiMCAvKiBubyBkYXRhICovIjsK
IAogICAgICMgQ29uc3RydWN0b3IKICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBl
ID1+IC9Db25zdHJ1Y3RvciQvKSB7CiAgICAgICAgIG15ICRjb25zdHJ1Y3RvclR5cGUgPSAkY29k
ZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlKTsKICAg
ICAgICAgJGNvbnN0cnVjdG9yVHlwZSA9fiBzL0NvbnN0cnVjdG9yJC8vOwotICAgICAgICBteSAk
Y29uc3RydWN0b3JJbmRleCA9IHVjKCRjb25zdHJ1Y3RvclR5cGUpOworICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJWOCR7Y29uc3RydWN0b3JUeXBlfS5oIn0gPSAxOwogICAgICAgICBpZiAoJGN1c3Rv
bUFjY2Vzc29yKSB7CiAgICAgICAgICAgICAkZ2V0dGVyID0gIlY4JHtjdXN0b21BY2Nlc3Nvcn1B
Y2Nlc3NvckdldHRlciI7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkZGF0YSA9ICJW
OENsYXNzSW5kZXg6OiR7Y29uc3RydWN0b3JJbmRleH0iOworICAgICAgICAgICAgJGRhdGEgPSAi
JlY4JHtjb25zdHJ1Y3RvclR5cGV9OjppbmZvIjsKICAgICAgICAgICAgICRnZXR0ZXIgPSAiJHtp
bnRlcmZhY2VOYW1lfUludGVybmFsOjoke2ludGVyZmFjZU5hbWV9Q29uc3RydWN0b3JHZXR0ZXIi
OwogICAgICAgICB9CiAgICAgICAgICRzZXR0ZXIgPSAiMCI7CkBAIC0xNDU3LDcgKzE0NjIsMTAg
QEAKIAogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkaW50ZXJmYWNlTmFtZSk7CiAKLSAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAibmFtZXNwYWNlIFdlYkNvcmUge1xuIik7CisgICAgbXkgJHRv
QWN0aXZlID0gSXNBY3RpdmVEb21UeXBlKCRpbnRlcmZhY2VOYW1lKSA/ICIke2NsYXNzTmFtZX06
OnRvQWN0aXZlRE9NT2JqZWN0IiA6ICIwIjsKKworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICJuYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOworICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICJXcmFwcGVyVHlwZUluZm8gJHtjbGFzc05hbWV9OjppbmZvID0ge1Y4Q2xhc3NJbmRleDo6VG9J
bnQoVjhDbGFzc0luZGV4Ojoke2NsYXNzSW5kZXh9KSwgJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0
ZSwgJHtjbGFzc05hbWV9OjpkZXJlZk9iamVjdCwgJHt0b0FjdGl2ZX0gfTtcblxuIik7ICAgCiAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIm5hbWVzcGFjZSAke2ludGVyZmFjZU5hbWV9SW50
ZXJuYWwge1xuXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAidGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IHZvaWQgVjhfVVNFKFQpIHsgfVxuXG4iKTsKIApAQCAtMTYyNiw3ICsxNjM0LDcg
QEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke2NsYXNzTmFtZX06OmNvbnN0cnVjdG9yQ2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS4ke2lu
dGVyZmFjZU5hbWV9LkNvbnRydWN0b3IiKTsKLSAgICByZXR1cm4gVjhQcm94eTo6Y29uc3RydWN0
RE9NT2JqZWN0PFY4Q2xhc3NJbmRleDo6JHtjbGFzc0luZGV4fSwgJGludGVyZmFjZU5hbWU+KGFy
Z3MpOworICAgIHJldHVybiBWOFByb3h5Ojpjb25zdHJ1Y3RET01PYmplY3Q8JGludGVyZmFjZU5h
bWU+KGFyZ3MsICZpbmZvKTsKIH0KIEVORAogICAgfQpAQCAtMTg4MCw2ICsxODg4LDE4IEBACiAK
IEVORAogCisgICAgaWYgKElzQWN0aXZlRG9tVHlwZSgkaW50ZXJmYWNlTmFtZSkpIHsKKyAgICAg
ICAgIyBNZXNzYWdlUG9ydCBpcyBoYW5kbGVkIGxpa2UgYW4gYWN0aXZlIGRvbSBvYmplY3QgZXZl
biB0aG91Z2ggaXQgZG9lc24ndCBpbmhlcml0CisgICAgICAgICMgZnJvbSBBY3RpdmVET01PYmpl
Y3QsIHNvIGRvbid0IHRyeSB0byBjYXN0IGl0IHRvIEFjdGl2ZURPTU9iamVjdC4KKyAgICAgICAg
bXkgJHJldHVyblZhbHVlID0gJGludGVyZmFjZU5hbWUgZXEgIk1lc3NhZ2VQb3J0IiA/ICIwIiA6
ICJ0b05hdGl2ZShvYmplY3QpIjsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsK
K0FjdGl2ZURPTU9iamVjdCogJHtjbGFzc05hbWV9Ojp0b0FjdGl2ZURPTU9iamVjdCh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKK3sKKyAgICByZXR1cm4gJHtyZXR1cm5WYWx1ZX07Cit9
ICAgICAgCitFTkQKKyAgICB9CisKICAgICBpZiAoJGltcGxDbGFzc05hbWUgZXEgIkRPTVdpbmRv
dyIpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3RUZW1wbGF0ZT4gVjhET01XaW5kb3c6OkdldFNoYWRvd09iamVjdFRlbXBsYXRl
KCkKQEAgLTE4OTcsNiArMTkxNywyMCBAQAogICAgIEdlbmVyYXRlVG9WOENvbnZlcnRlcnMoJGRh
dGFOb2RlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJG5hdGl2ZVR5cGUpOwogCiAgICAg
cHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKwordm9pZCAke2NsYXNzTmFtZX06OmRlcmVmT2Jq
ZWN0KHZvaWQqIG9iamVjdCkKK3sKK0VORAorCisgICAgaWYgKElzUmVmUHRyVHlwZSgkaW50ZXJm
YWNlTmFtZSkpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgICBzdGF0
aWNfY2FzdDwke25hdGl2ZVR5cGV9Kj4ob2JqZWN0KS0+ZGVyZWYoKTsKK0VORAorICAgIH0KKwor
ICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIEVORAogCkBAIC0xOTYxLDcgKzE5OTUsNyBAQAogICAgIH0KIAogICAgIHB1c2goQGltcGxD
b250ZW50LCA8PEVORCk7Ci0gICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVW
OE9iamVjdChwcm94eSwgJHt3cmFwcGVyVHlwZX0sIGltcGwpOworICAgIHdyYXBwZXIgPSBWOERP
TVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QocHJveHksICZpbmZvLCBpbXBsKTsKIEVORAog
CiAgICAgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgewpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMywxNyArMTMzLDcgQEAK
IHZvaWQgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qodm9pZCogb2JqZWN0
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogewogICAgIEFTU0VSVChWOERP
TVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcih3cmFwcGVyKSk7Ci0jaWZuZGVmIE5ERUJVRwotICAg
IFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhET01XcmFwcGVyOjpkb21XcmFw
cGVyVHlwZSh3cmFwcGVyKTsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSNkZWZpbmUgTUFLRV9DQVNF
KFRZUEUsIE5BTUUpIGNhc2UgVjhDbGFzc0luZGV4OjpUWVBFOgotICAgICAgICBBQ1RJVkVfRE9N
X09CSkVDVF9UWVBFUyhNQUtFX0NBU0UpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
I3VuZGVmIE1BS0VfQ0FTRQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNl
bmRpZgorICAgIEFTU0VSVCghZG9tV3JhcHBlclR5cGUod3JhcHBlciktPnRvQWN0aXZlRE9NT2Jq
ZWN0RnVuY3Rpb24pOwogICAgIGdldERPTU9iamVjdE1hcCgpLnNldChvYmplY3QsIHdyYXBwZXIp
OwogfQogCkBAIC0xNTEsMTYgKzE0MSw3IEBACiB2b2lkIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFw
cGVyRm9yQWN0aXZlRE9NT2JqZWN0KHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gd3JhcHBlcikKIHsKICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBw
ZXIod3JhcHBlcikpOwotI2lmbmRlZiBOREVCVUcKLSAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUgdHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7Ci0gICAg
c3dpdGNoICh0eXBlKSB7Ci0jZGVmaW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1FKSBjYXNlIFY4Q2xh
c3NJbmRleDo6VFlQRTogYnJlYWs7Ci0gICAgICAgIEFDVElWRV9ET01fT0JKRUNUX1RZUEVTKE1B
S0VfQ0FTRSkKLSAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0j
dW5kZWYgTUFLRV9DQVNFCi0gICAgfQotI2VuZGlmCisgICAgQVNTRVJUKGRvbVdyYXBwZXJUeXBl
KHdyYXBwZXIpLT50b0FjdGl2ZURPTU9iamVjdEZ1bmN0aW9uKTsKICAgICBnZXRBY3RpdmVET01P
YmplY3RNYXAoKS5zZXQob2JqZWN0LCB3cmFwcGVyKTsKIH0KIApAQCAtMTcxLDcgKzE1Miw3IEBA
CiAgICAgZ2V0RE9NTm9kZU1hcCgpLnNldChub2RlLCB3cmFwcGVyKTsKIH0KIAotdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvcihWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdFByb3RvdHlw
ZSkKK3Y4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3Io
V3JhcHBlclR5cGVJbmZvKiB0eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0UHJvdG90
eXBlKQogewogICAgIC8vIEEgRE9NIGNvbnN0cnVjdG9yIGlzIGEgZnVuY3Rpb24gaW5zdGFuY2Ug
Y3JlYXRlZCBmcm9tIGEgRE9NIGNvbnN0cnVjdG9yCiAgICAgLy8gdGVtcGxhdGUuIFRoZXJlIGlz
IG9uZSBpbnN0YW5jZSBwZXIgY29udGV4dC4gQSBET00gY29uc3RydWN0b3IgaXMKQEAgLTE4Miw3
ICsxNjMsNyBAQAogICAgIC8vIFRoZSByZWFzb24gZm9yIDIpIGlzIHRoYXQsIGluIFNhZmFyaSwg
YSBET00gY29uc3RydWN0b3IgaXMgYSBub3JtYWwgSlMKICAgICAvLyBvYmplY3QsIGJ1dCBub3Qg
YSBmdW5jdGlvbi4gSG90bWFpbCByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCwgaW4gU2FmYXJpLAog
ICAgIC8vIEhUTUxFbGVtZW50Ll9fcHJvdG9fXyA9PSBPYmplY3QucHJvdG90eXBlLgotICAgIHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGZ1bmN0aW9uVGVtcGxhdGUgPSBWOENsYXNz
SW5kZXg6OmdldFRlbXBsYXRlKHR5cGUpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IGZ1bmN0aW9uVGVtcGxhdGUgPSB0eXBlLT5nZXRUZW1wbGF0ZSgpOwogICAgIC8vIEdl
dHRpbmcgdGhlIGZ1bmN0aW9uIG1pZ2h0IGZhaWwgaWYgd2UncmUgcnVubmluZyBvdXQgb2YKICAg
ICAvLyBzdGFjayBvciBtZW1vcnkuCiAgICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoOwpAQCAtMTk1
LDcgKzE3Niw3IEBACiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi12ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yRm9yQ29udGV4dChWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKK3Y4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3JGb3JDb250
ZXh0KFdyYXBwZXJUeXBlSW5mbyogdHlwZSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4
dCkKIHsKICAgICAvLyBFbnRlciB0aGUgc2NvcGUgZm9yIHRoaXMgY29udGV4dCB0byBnZXQgdGhl
IGNvcnJlY3QgY29uc3RydWN0b3IuCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRl
eHQpOwpAQCAtMjAzLDcgKzE4NCw3IEBACiAgICAgcmV0dXJuIGdldENvbnN0cnVjdG9yKHR5cGUs
IFY4RE9NV2luZG93U2hlbGw6OmdldEhpZGRlbk9iamVjdFByb3RvdHlwZShjb250ZXh0KSk7CiB9
CiAKLXY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3Io
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIERPTVdpbmRvdyogd2luZG93KQordjg6
OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvcihXcmFwcGVy
VHlwZUluZm8qIHR5cGUsIERPTVdpbmRvdyogd2luZG93KQogewogICAgIEZyYW1lKiBmcmFtZSA9
IHdpbmRvdy0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtMjE2LDcgKzE5Nyw3IEBACiAg
ICAgcmV0dXJuIGdldENvbnN0cnVjdG9yRm9yQ29udGV4dCh0eXBlLCBjb250ZXh0KTsKIH0KIAot
djg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvcihWOENs
YXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgV29ya2VyQ29udGV4dCopCit2ODo6TG9jYWw8
djg6OkZ1bmN0aW9uPiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKFdyYXBwZXJUeXBlSW5m
byogdHlwZSwgV29ya2VyQ29udGV4dCopCiB7CiAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5KiBwcm94eSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKTsKICAg
ICBpZiAoIXByb3h5KQpAQCAtMjQ4LDExICsyMjksMTAgQEAKICAgICBnbG9iYWwtPlNldEludGVy
bmFsRmllbGQoaW50ZXJuYWxJbmRleCwganNPYmplY3QpOwogfQogCi1WOENsYXNzSW5kZXg6OlY4
V3JhcHBlclR5cGUgVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IG9iamVjdCkKK1dyYXBwZXJUeXBlSW5mbyogVjhET01XcmFwcGVyOjpkb21XcmFwcGVy
VHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKIHsKICAgICBBU1NFUlQoVjhET01X
cmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHR5cGUgPSBvYmplY3QtPkdldEludGVybmFsRmllbGQodjhET01XcmFwcGVyVHlwZUluZGV4
KTsKLSAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpGcm9tSW50KHR5cGUtPkludDMyVmFsdWUoKSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdyYXBwZXJUeXBlSW5mbyo+KG9iamVjdC0+R2V0UG9p
bnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlclR5cGVJbmRleCkpOwogfQogCiBQYXNz
UmVmUHRyPE5vZGVGaWx0ZXI+IFY4RE9NV3JhcHBlcjo6d3JhcE5hdGl2ZU5vZGVGaWx0ZXIodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGZpbHRlcikKQEAgLTI4NSw3ICsyNjUsNyBAQAogICAgIHJldHVy
biBvYmplY3RQcm90b3R5cGUtPkludGVybmFsRmllbGRDb3VudCgpID09IFY4RE9NV2luZG93Ojpp
bnRlcm5hbEZpZWxkQ291bnQ7CiB9CiAKLXY4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdyYXBw
ZXI6Omluc3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSogcHJveHksIFY4Q2xhc3NJbmRleDo6VjhX
cmFwcGVyVHlwZSB0eXBlLCB2b2lkKiBpbXBsKQordjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4RE9N
V3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChWOFByb3h5KiBwcm94eSwgV3JhcHBlclR5cGVJ
bmZvKiB0eXBlLCB2b2lkKiBpbXBsKQogewogICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRl
eHQgPSAwOwogICAgIGlmIChWOElzb2xhdGVkQ29udGV4dDo6Z2V0RW50ZXJlZCgpKSB7CkBAIC0z
MTQsMTIgKzI5NCwxMiBAQAogICAgICAgICBpZiAod29ya2VyQ29udGV4dCkKICAgICAgICAgICAg
IGZ1bmN0aW9uID0gZ2V0Q29uc3RydWN0b3IodHlwZSwgd29ya2VyQ29udGV4dCk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gVjhDbGFzc0luZGV4OjpnZXRUZW1wbGF0ZSh0
eXBlKS0+R2V0RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gdHlwZS0+Z2V0VGVt
cGxhdGUoKS0+R2V0RnVuY3Rpb24oKTsKICAgICAgICAgaW5zdGFuY2UgPSBTYWZlQWxsb2NhdGlv
bjo6bmV3SW5zdGFuY2UoZnVuY3Rpb24pOwogICAgIH0KICAgICBpZiAoIWluc3RhbmNlLklzRW1w
dHkoKSkgewogICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIHRoZSBET00gd3JhcHBlciBmb3IgZmFp
bGVkIGFsbG9jYXRpb25zLgotICAgICAgICBzZXRET01XcmFwcGVyKGluc3RhbmNlLCBWOENsYXNz
SW5kZXg6OlRvSW50KHR5cGUpLCBpbXBsKTsKKyAgICAgICAgc2V0RE9NV3JhcHBlcihpbnN0YW5j
ZSwgdHlwZSwgaW1wbCk7CiAgICAgfQogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KQEAgLTMzNiw5
ICszMTYsOCBAQAogCiAgICAgQVNTRVJUKG9iamVjdC0+SW50ZXJuYWxGaWVsZENvdW50KCkgPj0g
djhEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCk7CiAKLSAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdHlwZSA9IG9iamVjdC0+R2V0SW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJUeXBl
SW5kZXgpOwotICAgIEFTU0VSVCh0eXBlLT5Jc0ludDMyKCkpOwotICAgIEFTU0VSVChWOENsYXNz
SW5kZXg6OklOVkFMSURfQ0xBU1NfSU5ERVggPCB0eXBlLT5JbnQzMlZhbHVlKCkgJiYgdHlwZS0+
SW50MzJWYWx1ZSgpIDwgVjhDbGFzc0luZGV4OjpDTEFTU0lOREVYX0VORCk7CisgICAgV3JhcHBl
clR5cGVJbmZvKiB0eXBlSW5mbyA9IHN0YXRpY19jYXN0PFdyYXBwZXJUeXBlSW5mbyo+KG9iamVj
dC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlclR5cGVJbmRleCkpOwor
ICAgIEFTU0VSVChWOENsYXNzSW5kZXg6OklOVkFMSURfQ0xBU1NfSU5ERVggPCB0eXBlSW5mby0+
aW5kZXggJiYgdHlwZUluZm8tPmluZGV4IDwgVjhDbGFzc0luZGV4OjpDTEFTU0lOREVYX0VORCk7
CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IG9iamVjdC0+R2V0SW50ZXJu
YWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCk7CiAgICAgQVNTRVJUKHdyYXBwZXItPklz
TnVtYmVyKCkgfHwgd3JhcHBlci0+SXNFeHRlcm5hbCgpKTsKQEAgLTM2NSwxMSArMzQ0LDEwIEBA
CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBvYmplY3QtPkdldEludGVybmFs
RmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpOwogICAgIEFTU0VSVCh3cmFwcGVyLT5Jc051
bWJlcigpIHx8IHdyYXBwZXItPklzRXh0ZXJuYWwoKSk7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdHlwZSA9IG9iamVjdC0+R2V0SW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJUeXBlSW5k
ZXgpOwotICAgIEFTU0VSVCh0eXBlLT5Jc0ludDMyKCkpOwotICAgIEFTU0VSVChWOENsYXNzSW5k
ZXg6OklOVkFMSURfQ0xBU1NfSU5ERVggPCB0eXBlLT5JbnQzMlZhbHVlKCkgJiYgdHlwZS0+SW50
MzJWYWx1ZSgpIDwgVjhDbGFzc0luZGV4OjpDTEFTU0lOREVYX0VORCk7CisgICAgV3JhcHBlclR5
cGVJbmZvKiB0eXBlSW5mbyA9IHN0YXRpY19jYXN0PFdyYXBwZXJUeXBlSW5mbyo+KG9iamVjdC0+
R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlclR5cGVJbmRleCkpOworICAg
IEFTU0VSVChWOENsYXNzSW5kZXg6OklOVkFMSURfQ0xBU1NfSU5ERVggPCB0eXBlSW5mby0+aW5k
ZXggJiYgdHlwZUluZm8tPmluZGV4IDwgVjhDbGFzc0luZGV4OjpDTEFTU0lOREVYX0VORCk7CiAK
LSAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpGcm9tSW50KHR5cGUtPkludDMyVmFsdWUoKSkgPT0g
Y2xhc3NUeXBlOworICAgIHJldHVybiBWOENsYXNzSW5kZXg6OkZyb21JbnQodHlwZUluZm8tPmlu
ZGV4KSA9PSBjbGFzc1R5cGU7CiB9CiAKIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhET01XcmFw
cGVyOjpnZXRXcmFwcGVyKE5vZGUqIG5vZGUpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkocmV2
aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBuYW1lOwog
ICAgICAgICB2ODo6QWNjZXNzb3JHZXR0ZXIgZ2V0dGVyOwogICAgICAgICB2ODo6QWNjZXNzb3JT
ZXR0ZXIgc2V0dGVyOwotICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgZGF0YTsK
KyAgICAgICAgV3JhcHBlclR5cGVJbmZvKiBkYXRhOwogICAgICAgICB2ODo6QWNjZXNzQ29udHJv
bCBzZXR0aW5nczsKICAgICAgICAgdjg6OlByb3BlcnR5QXR0cmlidXRlIGF0dHJpYnV0ZTsKICAg
ICAgICAgYm9vbCBvblByb3RvOwpAQCAtODksNyArODksNyBAQAogICAgICAgICAoYXR0cmlidXRl
Lm9uUHJvdG8gPyBwcm90byA6IGluc3RhbmNlKS0+U2V0QWNjZXNzb3Iodjg6OlN0cmluZzo6TmV3
KGF0dHJpYnV0ZS5uYW1lKSwKICAgICAgICAgICAgIGF0dHJpYnV0ZS5nZXR0ZXIsCiAgICAgICAg
ICAgICBhdHRyaWJ1dGUuc2V0dGVyLAotICAgICAgICAgICAgYXR0cmlidXRlLmRhdGEgPT0gVjhD
bGFzc0luZGV4OjpJTlZBTElEX0NMQVNTX0lOREVYID8gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCkg
OiB2ODo6SW50ZWdlcjo6TmV3KFY4Q2xhc3NJbmRleDo6VG9JbnQoYXR0cmlidXRlLmRhdGEpKSwK
KyAgICAgICAgICAgIHY4OjpFeHRlcm5hbDo6V3JhcChhdHRyaWJ1dGUuZGF0YSksCiAgICAgICAg
ICAgICBhdHRyaWJ1dGUuc2V0dGluZ3MsCiAgICAgICAgICAgICBhdHRyaWJ1dGUuYXR0cmlidXRl
KTsKICAgICB9CkBAIC0yOTAsMTMgKzI5MCw5IEBACiAgICAgICAgIC8vIFNjaGVkdWxlIGFuIGVy
cm9yIG9iamVjdCB0byBiZSB0aHJvd24uCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdGhyb3dFcnJvcihFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwogCi0gICAg
ICAgIC8vIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhIGZ1bmN0aW9uIGRlc2NyaXB0b3IgYW5kIHNl
dCB0byB0aGUgZ2xvYmFsIG9iamVjdAotICAgICAgICAvLyBhcyBhIG5hbWVkIHByb3BlcnR5LiBV
c2VkIGJ5IHY4X3Rlc3Rfc2hlbGwuCi0gICAgICAgIHN0YXRpYyB2b2lkIGJpbmRKc09iamVjdFRv
V2luZG93KEZyYW1lKiwgY29uc3QgY2hhciogbmFtZSwgaW50IHR5cGUsIHY4OjpIYW5kbGU8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+LCB2b2lkKik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgorICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0cnVjdERPTU9iamVj
dChjb25zdCB2ODo6QXJndW1lbnRzJiwgV3JhcHBlclR5cGVJbmZvKik7CiAKLSAgICAgICAgdGVt
cGxhdGUgPGludCB0YWcsIHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY29uc3RydWN0RE9NT2JqZWN0KGNvbnN0IHY4OjpBcmd1bWVudHMmKTsKLQogICAg
ICAgICAvLyBQcm9jZXNzIGFueSBwZW5kaW5nIEphdmFTY3JpcHQgY29uc29sZSBtZXNzYWdlcy4K
ICAgICAgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0NvbnNvbGVNZXNzYWdlcygpOwogCkBAIC00MTAs
OCArNDA2LDggQEAKICAgICAgICAgSXNvbGF0ZWRXb3JsZE1hcCBtX2lzb2xhdGVkV29ybGRzOwog
ICAgIH07CiAKLSAgICB0ZW1wbGF0ZSA8aW50IHRhZywgdHlwZW5hbWUgVD4KLSAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhQcm94eTo6Y29uc3RydWN0RE9NT2JqZWN0KGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4UHJveHk6OmNvbnN0cnVjdERPTU9iamVjdChjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzLCBXcmFwcGVyVHlwZUluZm8qIHR5cGUpCiAgICAgewogICAgICAgICBpZiAoIWFyZ3Mu
SXNDb25zdHJ1Y3RDYWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihWOFByb3h5
OjpUeXBlRXJyb3IsICJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMg
YSBmdW5jdGlvbi4iKTsKQEAgLTQxOSw3ICs0MTUsNyBAQAogICAgICAgICAvLyBOb3RlOiBpdCdz
IE9LIHRvIGxldCB0aGlzIFJlZlB0ciBnbyBvdXQgb2Ygc2NvcGUgYmVjYXVzZSB3ZSBhbHNvIGNh
bGwKICAgICAgICAgLy8gU2V0RE9NV3JhcHBlcigpLCB3aGljaCBlZmZlY3RpdmVseSBob2xkcyBh
IHJlZmVyZW5jZSB0byBvYmouCiAgICAgICAgIFJlZlB0cjxUPiBvYmogPSBUOjpjcmVhdGUoKTsK
LSAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIHRhZywg
b2JqLmdldCgpKTsKKyAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9s
ZGVyKCksIHR5cGUsIG9iai5nZXQoKSk7CiAgICAgICAgIG9iai0+cmVmKCk7CiAgICAgICAgIFY4
RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KG9iai5nZXQoKSwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CiAgICAgICAgIHJldHVybiBh
cmdzLkhvbGRlcigpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmgJ
KHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDkgKzc3LDkgQEAKICAgICAvLyBUbyBjcmVhdGUgSlMg
V3JhcHBlciBvYmplY3RzLCB3ZSBjcmVhdGUgYSBjYWNoZSBvZiBhICdib2lsZXIgcGxhdGUnCiAg
ICAgLy8gb2JqZWN0LCBhbmQgdGhlbiBzaW1wbHkgQ2xvbmUgdGhhdCBvYmplY3QgZWFjaCB0aW1l
IHdlIG5lZWQgYSBuZXcgb25lLgogICAgIC8vIFRoaXMgaXMgZmFzdGVyIHRoYW4gZ29pbmcgdGhy
b3VnaCB0aGUgZnVsbCBvYmplY3QgY3JlYXRpb24gcHJvY2Vzcy4KLSAgICB2ODo6TG9jYWw8djg6
Ok9iamVjdD4gY3JlYXRlV3JhcHBlckZyb21DYWNoZShWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5
cGUgdHlwZSkKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gY3JlYXRlV3JhcHBlckZyb21DYWNo
ZShXcmFwcGVyVHlwZUluZm8qIHR5cGUpCiAgICAgewotICAgICAgICBpbnQgY2xhc3NJbmRleCA9
IFY4Q2xhc3NJbmRleDo6VG9JbnQodHlwZSk7CisgICAgICAgIGludCBjbGFzc0luZGV4ID0gdHlw
ZS0+aW5kZXg7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjbG9uZShtX3dyYXBwZXJC
b2lsZXJwbGF0ZXMtPkNsb25lRWxlbWVudEF0KGNsYXNzSW5kZXgpKTsKICAgICAgICAgcmV0dXJu
IGNsb25lLklzRW1wdHkoKSA/IGNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGVTbG93Q2FzZSh0eXBlKSA6
IGNsb25lOwogICAgIH0KQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgIHZvaWQgdXBkYXRlRG9jdW1l
bnRXcmFwcGVyQ2FjaGUoKTsKICAgICB2b2lkIGNsZWFyRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsK
IAotICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nh
c2UoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlKTsKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gY3JlYXRlV3JhcHBlckZyb21DYWNoZVNsb3dDYXNlKFdyYXBwZXJUeXBlSW5mbyopOwogCiAg
ICAgRnJhbWUqIG1fZnJhbWU7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhIZWxwZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhlbHBlcnMuaAkocmV2aXNp
b24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw5ICszNyw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgVjhQ
cm94eTsKIAotICAgIC8vIEFzc29jaWF0ZXMgYW4gTlBPYmplY3Qgd2l0aCBhIFY4IG9iamVjdC4K
LSAgICB2b2lkIHdyYXBOUE9iamVjdCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCBOUE9iamVjdCop
OwotCiAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiB0b1Y4Q29udGV4dChOUFAsIE5QT2JqZWN0
Kik7CiAKICAgICBWOFByb3h5KiB0b1Y4UHJveHkoTlBPYmplY3QqKTsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFByb3h5LmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDMsMjEgKzc0Myw2IEBACiAgICAgcmV0dXJu
IGFyZ3MuVGhpcygpOwogfQogCi12b2lkIFY4UHJveHk6OmJpbmRKc09iamVjdFRvV2luZG93KEZy
YW1lKiBmcmFtZSwgY29uc3QgY2hhciogbmFtZSwgaW50IHR5cGUsIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IGRlc2NyaXB0b3IsIHZvaWQqIGltcGwpCi17Ci0gICAgLy8gR2V0IGVu
dmlyb25tZW50LgotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IFY4UHJv
eHk6Om1haW5Xb3JsZENvbnRleHQoZnJhbWUpOwotICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47IC8vIEpTIG5vdCBlbmFibGVkLgotCi0gICAgdjg6OkNvbnRleHQ6
OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBpbnN0
YW5jZSA9IGRlc2NyaXB0b3ItPkdldEZ1bmN0aW9uKCk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRE
T01XcmFwcGVyKGluc3RhbmNlLCB0eXBlLCBpbXBsKTsKLQotICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gZ2xvYmFsID0gdjhDb250ZXh0LT5HbG9iYWwoKTsKLSAgICBnbG9iYWwtPlNldCh2ODo6
U3RyaW5nOjpOZXcobmFtZSksIGluc3RhbmNlKTsKLX0KLQogdm9pZCBWOFByb3h5Ojpwcm9jZXNz
Q29uc29sZU1lc3NhZ2VzKCkKIHsKICAgICBWOENvbnNvbGVNZXNzYWdlOjpwcm9jZXNzRGVsYXll
ZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oCShyZXZpc2lvbiA1NTc0MykK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDExICs2NywxMSBAQAogI2VuZGlmCiAKICAgICAgICAgLy8gU2V0cyBjb250ZW50cyBvZiBh
IERPTSB3cmFwcGVyLgotICAgICAgICBzdGF0aWMgdm9pZCBzZXRET01XcmFwcGVyKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gb2JqZWN0LCBpbnQgdHlwZSwgdm9pZCogY3B0cikKKyAgICAgICAgc3Rh
dGljIHZvaWQgc2V0RE9NV3JhcHBlcih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgV3Jh
cHBlclR5cGVJbmZvKiB0eXBlLCB2b2lkKiBjcHRyKQogICAgICAgICB7CiAgICAgICAgICAgICBB
U1NFUlQob2JqZWN0LT5JbnRlcm5hbEZpZWxkQ291bnQoKSA+PSAyKTsKICAgICAgICAgICAgIG9i
amVjdC0+U2V0UG9pbnRlckluSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCwg
Y3B0cik7Ci0gICAgICAgICAgICBvYmplY3QtPlNldEludGVybmFsRmllbGQodjhET01XcmFwcGVy
VHlwZUluZGV4LCB2ODo6SW50ZWdlcjo6TmV3KHR5cGUpKTsKKyAgICAgICAgICAgIG9iamVjdC0+
U2V0UG9pbnRlckluSW50ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJUeXBlSW5kZXgsIHR5cGUpOwog
ICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gbG9va3Vw
RE9NV3JhcHBlcih2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBmdW5jdGlvblRlbXBs
YXRlLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKQEAgLTc5LDcgKzc5LDcgQEAKICAg
ICAgICAgICAgIHJldHVybiBvYmplY3QuSXNFbXB0eSgpID8gb2JqZWN0IDogb2JqZWN0LT5GaW5k
SW5zdGFuY2VJblByb3RvdHlwZUNoYWluKGZ1bmN0aW9uVGVtcGxhdGUpOwogICAgICAgICB9CiAK
LSAgICAgICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkb21XcmFwcGVyVHlw
ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgICAgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5m
byogZG9tV3JhcHBlclR5cGUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CiAKICAgICAgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KFBh
c3NSZWZQdHI8RXZlbnRUYXJnZXQ+IGV2ZW50VGFyZ2V0KQogICAgICAgICB7CkBAIC0xMDYsMTAg
KzEwNiwxMCBAQAogICAgICAgICAvLyBXcmFwIEpTIG5vZGUgZmlsdGVyIGluIEMrKy4KICAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gd3JhcE5hdGl2ZU5vZGVGaWx0ZXIodjg6
OkhhbmRsZTx2ODo6VmFsdWU+KTsKIAotICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpGdW5j
dGlvbj4gZ2V0Q29uc3RydWN0b3JGb3JDb250ZXh0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwotICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj4gZ2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0UHJvdG90eXBlKTsKLSAgICAgICAgc3RhdGljIHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6VjhXcmFw
cGVyVHlwZSwgRE9NV2luZG93Kik7Ci0gICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPiBnZXRDb25zdHJ1Y3RvcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIFdvcmtlckNv
bnRleHQqKTsKKyAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGdldENvbnN0
cnVjdG9yRm9yQ29udGV4dChXcmFwcGVyVHlwZUluZm8qLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
Pik7CisgICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBnZXRDb25zdHJ1Y3Rv
cihXcmFwcGVyVHlwZUluZm8qLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0UHJvdG90eXBl
KTsKKyAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGdldENvbnN0cnVjdG9y
KFdyYXBwZXJUeXBlSW5mbyosIERPTVdpbmRvdyopOworICAgICAgICBzdGF0aWMgdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj4gZ2V0Q29uc3RydWN0b3IoV3JhcHBlclR5cGVJbmZvKiwgV29ya2VyQ29u
dGV4dCopOwogCiAgICAgICAgIC8vIFNldCBKUyB3cmFwcGVyIG9mIGEgRE9NIG9iamVjdCwgdGhl
IGNhbGxlciBpbiBjaGFyZ2Ugb2YgaW5jcmVhc2UgcmVmLgogICAgICAgICBzdGF0aWMgdm9pZCBz
ZXRKU1dyYXBwZXJGb3JET01PYmplY3Qodm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
KTsKQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgICAgICAvLyBTZXQgaGlkZGVuIHJlZmVyZW5jZXMg
aW4gYSBET01XaW5kb3cgb2JqZWN0IG9mIGEgZnJhbWUuCiAgICAgICAgIHN0YXRpYyB2b2lkIHNl
dEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSosIGNvbnN0IGludCBpbnRlcm5hbEluZGV4LCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKIAotICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGluc3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSogcHJveHksIFY4Q2xhc3NJbmRleDo6
VjhXcmFwcGVyVHlwZSB0eXBlLCB2b2lkKiBpbXBsKTsKKyAgICAgICAgc3RhdGljIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiBpbnN0YW50aWF0ZVY4T2JqZWN0KFY4UHJveHkqIHByb3h5LCBXcmFwcGVy
VHlwZUluZm8qLCB2b2lkKiBpbXBsKTsKIAogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBnZXRXcmFwcGVyKE5vZGUqKTsKICAgICB9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSwyMiAr
MzY5LDIyIEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIENyZWF0ZSBhIG5ldyBK
UyB3aW5kb3cgb2JqZWN0IGFuZCB1c2UgaXQgYXMgdGhlIHByb3RvdHlwZSBmb3IgdGhlICBzaGFk
b3cgZ2xvYmFsIG9iamVjdC4KLSAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd2luZG93Q29u
c3RydWN0b3IgPSBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6RE9N
V0lORE9XLCBnZXRIaWRkZW5PYmplY3RQcm90b3R5cGUoY29udGV4dCkpOworICAgIHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uPiB3aW5kb3dDb25zdHJ1Y3RvciA9IFY4RE9NV3JhcHBlcjo6Z2V0Q29u
c3RydWN0b3IoJlY4RE9NV2luZG93OjppbmZvLCBnZXRIaWRkZW5PYmplY3RQcm90b3R5cGUoY29u
dGV4dCkpOwogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBqc1dpbmRvdyA9IFNhZmVBbGxvY2F0
aW9uOjpuZXdJbnN0YW5jZSh3aW5kb3dDb25zdHJ1Y3Rvcik7CiAgICAgLy8gQmFpbCBvdXQgaWYg
YWxsb2NhdGlvbiBmYWlsZWQuCiAgICAgaWYgKGpzV2luZG93LklzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV3JhcCB0aGUgd2luZG93LgotICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcihqc1dpbmRvdywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5k
ZXg6OkRPTVdJTkRPVyksIHdpbmRvdyk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVy
KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoanNXaW5kb3ctPkdldFByb3RvdHlwZSgpKSwg
VjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVyksIHdpbmRvdyk7Cisg
ICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGpzV2luZG93LCAmVjhET01XaW5kb3c6Omlu
Zm8sIHdpbmRvdyk7CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoanNXaW5kb3ctPkdldFByb3RvdHlwZSgpKSwgJlY4RE9NV2luZG93
OjppbmZvLCB3aW5kb3cpOwogCiAgICAgd2luZG93LT5yZWYoKTsKICAgICBWOERPTVdyYXBwZXI6
OnNldEpTV3JhcHBlckZvckRPTU9iamVjdCh3aW5kb3csIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+OjpOZXcoanNXaW5kb3cpKTsKIAogICAgIC8vIEluc2VydCB0aGUgd2luZG93IGluc3RhbmNl
IGFzIHRoZSBwcm90b3R5cGUgb2YgdGhlIHNoYWRvdyBvYmplY3QuCiAgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB2OEdsb2JhbCA9IGNvbnRleHQtPkdsb2JhbCgpOwotICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHY4R2xvYmFsLT5H
ZXRQcm90b3R5cGUoKSksIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpET01XSU5E
T1cpLCB3aW5kb3cpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KHY4R2xvYmFsLT5HZXRQcm90b3R5cGUoKSksICZWOERPTVdpbmRv
dzo6aW5mbywgd2luZG93KTsKICAgICB2OEdsb2JhbC0+U2V0KGltcGxpY2l0UHJvdG9TdHJpbmcs
IGpzV2luZG93KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTUzMiwxMCArNTMyLDEwIEBACiAg
ICAgY29udGV4dC0+R2xvYmFsKCktPlNldEhpZGRlblZhbHVlKGhpZGRlbk9iamVjdFByb3RvdHlw
ZVN0cmluZywgb2JqZWN0UHJvdG90eXBlKTsKIH0KIAotdjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4
RE9NV2luZG93U2hlbGw6OmNyZWF0ZVdyYXBwZXJGcm9tQ2FjaGVTbG93Q2FzZShWOENsYXNzSW5k
ZXg6OlY4V3JhcHBlclR5cGUgdHlwZSkKK3Y4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdpbmRv
d1NoZWxsOjpjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nhc2UoV3JhcHBlclR5cGVJbmZvKiB0
eXBlKQogewogICAgIC8vIE5vdCBpbiBjYWNoZS4KLSAgICBpbnQgY2xhc3NJbmRleCA9IFY4Q2xh
c3NJbmRleDo6VG9JbnQodHlwZSk7CisgICAgaW50IGNsYXNzSW5kZXggPSB0eXBlLT5pbmRleDsK
ICAgICBpbml0Q29udGV4dElmTmVlZGVkKCk7CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3Bl
KG1fY29udGV4dCk7CiAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSBWOERP
TVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKHR5cGUsIGdldEhpZGRlbk9iamVjdFByb3RvdHlwZSht
X2NvbnRleHQpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcAkocmV2aXNpb24g
NTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw2ICs1NCw4IEBACiAgICAgSW52b2tlRGVmYXVsdCA9IDMKIH07CiAKK3N0YXRp
YyBXcmFwcGVyVHlwZUluZm8gbnBPYmplY3RUeXBlSW5mbyA9IHsgVjhDbGFzc0luZGV4OjpUb0lu
dChWOENsYXNzSW5kZXg6Ok5QT0JKRUNUKSwgMCwgMCwgZmFsc2UgfTsKKwogLy8gRklYTUU6IG5l
ZWQgY29tbWVudHMuCiAvLyBQYXJhbXM6IGhvbGRlciBjb3VsZCBiZSBIVE1MRW1iZWRFbGVtZW50
IG9yIE5QT2JqZWN0CiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2JqZWN0SW52b2tl
SW1wbChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBJbnZva2VGdW5jdGlvblR5cGUgZnVuY3Rp
b25JZCkKQEAgLTM3NSw3ICszNzcsNyBAQAogICAgIGlmICh2YWx1ZS5Jc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiB2YWx1ZTsKIAotICAgIHdyYXBOUE9iamVjdCh2YWx1ZSwgb2JqZWN0KTsKKyAg
ICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIodmFsdWUsICZucE9iamVjdFR5cGVJbmZvLCBv
YmplY3QpOwogCiAgICAgLy8gS0pTIHJldGFpbnMgdGhlIG9iamVjdCBhcyBwYXJ0IG9mIGl0cyB3
cmFwcGVyIChzZWUgQmluZGluZ3M6OkNJbnN0YW5jZSkuCiAgICAgX05QTl9SZXRhaW5PYmplY3Qo
b2JqZWN0KTsKQEAgLTM5NCw3ICszOTYsNyBAQAogICAgIGlmIChzdGF0aWNOUE9iamVjdE1hcC5j
b250YWlucyhvYmplY3QpKSB7CiAgICAgICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKICAgICAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gaGFuZGxlKHN0YXRpY05QT2JqZWN0TWFwLmdl
dChvYmplY3QpKTsKLSAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGhhbmRsZSwg
V2ViQ29yZTo6VjhDbGFzc0luZGV4OjpOUE9CSkVDVCwgMCk7CisgICAgICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcihoYW5kbGUsICZucE9iamVjdFR5cGVJbmZvLCAwKTsKICAgICAgICAg
c3RhdGljTlBPYmplY3RNYXAuZm9yZ2V0KG9iamVjdCk7CiAgICAgICAgIF9OUE5fUmVsZWFzZU9i
amVjdChvYmplY3QpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvTlBWOE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9OUFY4T2JqZWN0LmNwcAko
cmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L05QVjhPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3IEBACiB1c2luZyBXZWJDb3JlOjpWOERPTVdyYXBw
ZXI7CiB1c2luZyBXZWJDb3JlOjpWOEdDQ29udHJvbGxlcjsKIHVzaW5nIFdlYkNvcmU6OlY4UHJv
eHk7Cit1c2luZyBXZWJDb3JlOjpXcmFwcGVyVHlwZUluZm87CiAKIC8vIEZJWE1FOiBDb21tZW50
cyBvbiB3aHkgdXNlIG1hbGxvYyBhbmQgZnJlZS4KIHN0YXRpYyBOUE9iamVjdCogYWxsb2NWOE5Q
T2JqZWN0KE5QUCwgTlBDbGFzcyopCkBAIC0xMTUsOCArMTE2LDggQEAKIHsKICAgICAvLyBDaGVj
ayB0byBzZWUgaWYgdGhpcyBvYmplY3QgaXMgYWxyZWFkeSB3cmFwcGVkLgogICAgIGlmIChvYmpl
Y3QtPkludGVybmFsRmllbGRDb3VudCgpID09IG5wT2JqZWN0SW50ZXJuYWxGaWVsZENvdW50KSB7
Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHR5cGVJbmRleCA9IG9iamVjdC0+R2V0SW50
ZXJuYWxGaWVsZChXZWJDb3JlOjp2OERPTVdyYXBwZXJUeXBlSW5kZXgpOwotICAgICAgICBpZiAo
dHlwZUluZGV4LT5Jc051bWJlcigpICYmIHR5cGVJbmRleC0+VWludDMyVmFsdWUoKSA9PSBWOENs
YXNzSW5kZXg6Ok5QT0JKRUNUKSB7CisgICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZUluZm8g
PSBzdGF0aWNfY2FzdDxXcmFwcGVyVHlwZUluZm8qPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50
ZXJuYWxGaWVsZChXZWJDb3JlOjp2OERPTVdyYXBwZXJUeXBlSW5kZXgpKTsKKyAgICAgICAgaWYg
KHR5cGVJbmZvLT5pbmRleCA9PSBWOENsYXNzSW5kZXg6Ok5QT0JKRUNUKSB7CiAKICAgICAgICAg
ICAgIE5QT2JqZWN0KiByZXR1cm5WYWx1ZSA9IHY4T2JqZWN0VG9OUE9iamVjdChvYmplY3QpOwog
ICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocmV0dXJuVmFsdWUpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEluZGV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEluZGV4LmgJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOElu
ZGV4LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3MSwxMCArNjcxLDM2IEBACiAgICAgICAgICAgICBB
U1NFUlQoSU5WQUxJRF9DTEFTU19JTkRFWCA8PSB2ICYmIHYgPCBDTEFTU0lOREVYX0VORCk7CiAg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VjhXcmFwcGVyVHlwZT4odik7CiAgICAgICAg
IH0KKyAgICB9OwogCi0gICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gZ2V0VGVtcGxhdGUoVjhXcmFwcGVyVHlwZSB0eXBlKTsKKyAgICBjbGFzcyBBY3Rp
dmVET01PYmplY3Q7CisKKyAgICB0eXBlZGVmIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiAoKkdldFRlbXBsYXRlRnVuY3Rpb24pKCk7CisgICAgdHlwZWRlZiB2b2lkICgqRGVy
ZWZPYmplY3RGdW5jdGlvbikodm9pZCopOworICAgIHR5cGVkZWYgQWN0aXZlRE9NT2JqZWN0KiAo
KlRvQWN0aXZlRE9NT2JqZWN0RnVuY3Rpb24pKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOworCisg
ICAgc3RydWN0IFdyYXBwZXJUeXBlSW5mbyB7CisKKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IGdldFRlbXBsYXRlKCkgeyByZXR1cm4gZ2V0VGVtcGxhdGVGdW5j
dGlvbigpOyB9CisKKyAgICAgICAgdm9pZCBkZXJlZk9iamVjdCh2b2lkKiBvYmplY3QpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChkZXJlZk9iamVjdEZ1bmN0aW9uKSAKKyAgICAgICAgICAg
ICAgICBkZXJlZk9iamVjdEZ1bmN0aW9uKG9iamVjdCk7CisgICAgICAgIH0KKworICAgICAgICBB
Y3RpdmVET01PYmplY3QqIHRvQWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
b2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXRvQWN0aXZlRE9NT2JqZWN0RnVu
Y3Rpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gdG9B
Y3RpdmVET01PYmplY3RGdW5jdGlvbihvYmplY3QpOworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgaW50IGluZGV4OworICAgICAgICBjb25zdCBHZXRUZW1wbGF0ZUZ1bmN0aW9uIGdldFRlbXBs
YXRlRnVuY3Rpb247CisgICAgICAgIGNvbnN0IERlcmVmT2JqZWN0RnVuY3Rpb24gZGVyZWZPYmpl
Y3RGdW5jdGlvbjsKKyAgICAgICAgY29uc3QgVG9BY3RpdmVET01PYmplY3RGdW5jdGlvbiB0b0Fj
dGl2ZURPTU9iamVjdEZ1bmN0aW9uOwogICAgIH07Ci0KIH0KIAogI2VuZGlmIC8vIFY4SW5kZXhf
aApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5LmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1dv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQx
LDEwIEBACiAjaW5jbHVkZSAiU2hhcmVkV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4Qmlu
ZGluZy5oIgogI2luY2x1ZGUgIlY4RE9NTWFwLmgiCisjaW5jbHVkZSAiVjhEZWRpY2F0ZWRXb3Jr
ZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhJbmRleC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIK
KyNpbmNsdWRlICJWOFNoYXJlZFdvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJWOFdvcmtlckNv
bnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0Lmgi
CkBAIC0xMzcsMTAgKzEzOSwxMCBAQAogICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gaW1wbGlj
aXRQcm90b1N0cmluZyA9IHY4OjpTdHJpbmc6Ok5ldygiX19wcm90b19fIik7CiAKICAgICAvLyBD
cmVhdGUgYSBuZXcgSlMgb2JqZWN0IGFuZCB1c2UgaXQgYXMgdGhlIHByb3RvdHlwZSBmb3IgdGhl
IHNoYWRvdyBnbG9iYWwgb2JqZWN0LgotICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBj
b250ZXh0VHlwZSA9IFY4Q2xhc3NJbmRleDo6REVESUNBVEVEV09SS0VSQ09OVEVYVDsKKyAgICBX
cmFwcGVyVHlwZUluZm8qIGNvbnRleHRUeXBlID0gJlY4RGVkaWNhdGVkV29ya2VyQ29udGV4dDo6
aW5mbzsKICNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCiAgICAgaWYgKCFtX3dvcmtlckNvbnRl
eHQtPmlzRGVkaWNhdGVkV29ya2VyQ29udGV4dCgpKQotICAgICAgICBjb250ZXh0VHlwZSA9IFY4
Q2xhc3NJbmRleDo6U0hBUkVEV09SS0VSQ09OVEVYVDsKKyAgICAgICAgY29udGV4dFR5cGUgPSAm
VjhTaGFyZWRXb3JrZXJDb250ZXh0OjppbmZvOwogI2VuZGlmCiAgICAgdjg6OkhhbmRsZTx2ODo6
RnVuY3Rpb24+IHdvcmtlckNvbnRleHRDb25zdHJ1Y3RvciA9IFY4RE9NV3JhcHBlcjo6Z2V0Q29u
c3RydWN0b3JGb3JDb250ZXh0KGNvbnRleHRUeXBlLCBjb250ZXh0KTsKICAgICB2ODo6TG9jYWw8
djg6Ok9iamVjdD4ganNXb3JrZXJDb250ZXh0ID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNl
KHdvcmtlckNvbnRleHRDb25zdHJ1Y3Rvcik7CkBAIC0xNTEsNyArMTUzLDcgQEAKICAgICB9CiAK
ICAgICAvLyBXcmFwIHRoZSBvYmplY3QuCi0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVy
KGpzV29ya2VyQ29udGV4dCwgVjhDbGFzc0luZGV4OjpUb0ludChjb250ZXh0VHlwZSksIG1fd29y
a2VyQ29udGV4dCk7CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGpzV29ya2VyQ29u
dGV4dCwgY29udGV4dFR5cGUsIG1fd29ya2VyQ29udGV4dCk7CiAKICAgICBWOERPTVdyYXBwZXI6
OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChtX3dvcmtlckNvbnRleHQsIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+OjpOZXcoanNXb3JrZXJDb250ZXh0KSk7CiAgICAgbV93b3JrZXJDb250ZXh0
LT5yZWYoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAKIHsKICAgICBmb3IgKERPTU9iamVjdE1h
cDo6aXRlcmF0b3IgaXQgPSB3cmFwcGVyTWFwLmJlZ2luKCksIGVuZCA9IHdyYXBwZXJNYXAuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVyKGl0LT5zZWNvbmQpOwotICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5
cGUgdHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7CisgICAgICAg
IFdyYXBwZXJUeXBlSW5mbyogdHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3Jh
cHBlcik7CiAgICAgICAgIHZvaWQqIG9iamVjdCA9IGl0LT5maXJzdDsKICAgICAgICAgVU5VU0VE
X1BBUkFNKHR5cGUpOwogICAgICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKQEAgLTEyMyw3ICsx
MjMsNyBAQAogcHVibGljOgogICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKHZvaWQqIG9iamVjdCwg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKICAgICB7Ci0gICAgICAgIFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlw
ZSh3cmFwcGVyKTsKKyAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlID0gVjhET01XcmFwcGVy
Ojpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwog
ICAgICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICAgICB9CkBAIC0xODEsMzYgKzE4MSwyNiBA
QAogcHVibGljOgogICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKHZvaWQqIG9iamVjdCwgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVCh3cmFw
cGVyLklzV2VhaygpKTsKLSAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUg
PSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHdyYXBwZXIpOwotICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKLSNkZWZpbmUgTUFLRV9DQVNFKFRZUEUsIE5BTUUpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpUWVBFOiB7ICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICBOQU1FKiBpbXBsID0gc3RhdGljX2Nhc3Q8TkFNRSo+
KG9iamVjdCk7ICBcCi0gICAgICAgICAgICBpZiAoaW1wbC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkp
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgd3JhcHBlci5DbGVhcldlYWsoKTsgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIH0KLSAgICBBQ1RJVkVfRE9NX09CSkVDVF9UWVBFUyhNQUtF
X0NBU0UpCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jdW5k
ZWYgTUFLRV9DQVNFCi0gICAgICAgIH0KKyAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlSW5m
byA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7ICAKIAotICAgIC8vIEFk
ZGl0aW9uYWwgaGFuZGxpbmcgb2YgbWVzc2FnZSBwb3J0IGVuc3VyaW5nIHRoYXQgZW50YW5nbGVk
IHBvcnRzIGFsc28KLSAgICAvLyBoYXZlIHRoZWlyIHdyYXBwZXJzIGVudGFuZ2xlZC4gVGhpcyBz
aG91bGQgaWRlYWxseSBiZSBoYW5kbGVkIHdoZW4gdGhlCi0gICAgLy8gcG9ydHMgYXJlIGFjdHVh
bGx5IGVudGFuZ2xlZCBpbiBNZXNzYWdlUG9ydDo6ZW50YW5nbGUsIGJ1dCB0byBhdm9pZAotICAg
IC8vIGZvcmtpbmcgTWVzc2FnZVBvcnQuKiB0aGlzIGlzIHBvc3Rwb25lZCB0byBHQyB0aW1lLiBI
YXZpbmcgdGhpcyBwb3N0cG9uZWQKLSAgICAvLyBoYXMgdGhlIGRyYXdiYWNrIHRoYXQgdGhlIHdy
YXBwZXJzIGFyZSAiZW50YW5nbGVkL3VuZW50YW5nbGVkIiBmb3IgZWFjaAotICAgIC8vIEdDIGV2
ZW4gdGhvdWdoIHRoZWlyIGVudGFnbGVtZW50IG1vc3QgbGlrZWx5IGlzIHN0aWxsIHRoZSBzYW1l
LgotICAgIGlmICh0eXBlID09IFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQpIHsKLSAgICAgICAg
Ly8gTWFyayBlYWNoIHBvcnQgYXMgaW4tdXNlIGlmIGl0J3MgZW50YW5nbGVkLiBGb3Igc2ltcGxp
Y2l0eSdzIHNha2UsIHdlIGFzc3VtZSBhbGwgcG9ydHMgYXJlIHJlbW90ZWx5IGVudGFuZ2xlZCwK
LSAgICAgICAgLy8gc2luY2UgdGhlIENocm9taXVtIHBvcnQgaW1wbGVtZW50YXRpb24gY2FuJ3Qg
dGVsbCB0aGUgZGlmZmVyZW5jZS4KLSAgICAgICAgTWVzc2FnZVBvcnQqIHBvcnQxID0gc3RhdGlj
X2Nhc3Q8TWVzc2FnZVBvcnQqPihvYmplY3QpOwotICAgICAgICBpZiAocG9ydDEtPmlzRW50YW5n
bGVkKCkpCi0gICAgICAgICAgICB3cmFwcGVyLkNsZWFyV2VhaygpOworICAgICAgICAvLyBBZGRp
dGlvbmFsIGhhbmRsaW5nIG9mIG1lc3NhZ2UgcG9ydCBlbnN1cmluZyB0aGF0IGVudGFuZ2xlZCBw
b3J0cyBhbHNvCisgICAgICAgIC8vIGhhdmUgdGhlaXIgd3JhcHBlcnMgZW50YW5nbGVkLiBUaGlz
IHNob3VsZCBpZGVhbGx5IGJlIGhhbmRsZWQgd2hlbiB0aGUKKyAgICAgICAgLy8gcG9ydHMgYXJl
IGFjdHVhbGx5IGVudGFuZ2xlZCBpbiBNZXNzYWdlUG9ydDo6ZW50YW5nbGUsIGJ1dCB0byBhdm9p
ZAorICAgICAgICAvLyBmb3JraW5nIE1lc3NhZ2VQb3J0LiogdGhpcyBpcyBwb3N0cG9uZWQgdG8g
R0MgdGltZS4gSGF2aW5nIHRoaXMgcG9zdHBvbmVkCisgICAgICAgIC8vIGhhcyB0aGUgZHJhd2Jh
Y2sgdGhhdCB0aGUgd3JhcHBlcnMgYXJlICJlbnRhbmdsZWQvdW5lbnRhbmdsZWQiIGZvciBlYWNo
CisgICAgICAgIC8vIEdDIGV2ZW4gdGhvdWdoIHRoZWlyIGVudGFnbGVtZW50IG1vc3QgbGlrZWx5
IGlzIHN0aWxsIHRoZSBzYW1lLgorICAgICAgICBpZiAodHlwZUluZm8tPmluZGV4ID09IFY4Q2xh
c3NJbmRleDo6TUVTU0FHRVBPUlQpIHsKKyAgICAgICAgICAgIC8vIE1hcmsgZWFjaCBwb3J0IGFz
IGluLXVzZSBpZiBpdCdzIGVudGFuZ2xlZC4gRm9yIHNpbXBsaWNpdHkncyBzYWtlLCB3ZSBhc3N1
bWUgYWxsIHBvcnRzIGFyZSByZW1vdGVseSBlbnRhbmdsZWQsCisgICAgICAgICAgICAvLyBzaW5j
ZSB0aGUgQ2hyb21pdW0gcG9ydCBpbXBsZW1lbnRhdGlvbiBjYW4ndCB0ZWxsIHRoZSBkaWZmZXJl
bmNlLgorICAgICAgICAgICAgTWVzc2FnZVBvcnQqIHBvcnQxID0gc3RhdGljX2Nhc3Q8TWVzc2Fn
ZVBvcnQqPihvYmplY3QpOworICAgICAgICAgICAgaWYgKHBvcnQxLT5pc0VudGFuZ2xlZCgpIHx8
IHBvcnQxLT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKKyAgICAgICAgICAgICAgICB3cmFwcGVyLkNs
ZWFyV2VhaygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQWN0aXZlRE9NT2JqZWN0
KiBhY3RpdmVET01PYmplY3QgPSB0eXBlSW5mby0+dG9BY3RpdmVET01PYmplY3Qod3JhcHBlcik7
CisgICAgICAgICAgICBpZiAoYWN0aXZlRE9NT2JqZWN0ICYmIGFjdGl2ZURPTU9iamVjdC0+aGFz
UGVuZGluZ0FjdGl2aXR5KCkpCisgICAgICAgICAgICAgICAgd3JhcHBlci5DbGVhcldlYWsoKTsK
KyAgICAgICAgfQogICAgIH0KLX0KIH07CiAKIGNsYXNzIEdyb3VwZXJJdGVtIHsKQEAgLTM2OSwz
MCArMzU5LDIwIEBACiBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIodm9pZCogb2Jq
ZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogICAgIHsKLSAgICAgICAg
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBw
ZXJUeXBlKHdyYXBwZXIpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSNkZWZpbmUgTUFLRV9D
QVNFKFRZUEUsIE5BTUUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6VFlQRTogeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgTkFNRSogaW1w
bCA9IHN0YXRpY19jYXN0PE5BTUUqPihvYmplY3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICBpZiAoaW1wbC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgQVNTRVJUKCF3cmFw
cGVyLklzV2VhaygpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICB3cmFwcGVyLk1ha2VXZWFrKGltcGwsICZET01EYXRhU3RvcmU6OndlYWtB
Y3RpdmVET01PYmplY3RDYWxsYmFjayk7IFwKLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0KLUFDVElWRV9ET01fT0JKRUNUX1RZUEVT
KE1BS0VfQ0FTRSkKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotI3VuZGVmIE1BS0VfQ0FTRQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5cGUg
PT0gVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCkgeworICAgICAgICBXcmFwcGVyVHlwZUluZm8q
IHR5cGVJbmZvID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKKyAgICAg
ICAgaWYgKHR5cGVJbmZvLT5pbmRleCA9PSBWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JUKSB7CiAg
ICAgICAgICAgICBNZXNzYWdlUG9ydCogcG9ydDEgPSBzdGF0aWNfY2FzdDxNZXNzYWdlUG9ydCo+
KG9iamVjdCk7CiAgICAgICAgICAgICAvLyBXZSBtYXJrZWQgdGhpcyBwb3J0IGFzIHJlYWNoYWJs
ZSBpbiBHQ1Byb2xvZ3VlVmlzaXRvci4gIFVuZG8gdGhpcyBub3cgc2luY2UgdGhlCiAgICAgICAg
ICAgICAvLyBwb3J0IGNvdWxkIGJlIG5vdCByZWFjaGFibGUgaW4gdGhlIGZ1dHVyZSBpZiBpdCBn
ZXRzIGRpc2VudGFuZ2xlZCAoYW5kIGFsc28KICAgICAgICAgICAgIC8vIEdDUHJvbG9ndWVWaXNp
dG9yIGV4cGVjdHMgdG8gc2VlIGFsbCBoYW5kbGVzIG1hcmtlZCBhcyB3ZWFrKS4KLSAgICAgICAg
ICAgIGlmICghd3JhcHBlci5Jc1dlYWsoKSAmJiAhd3JhcHBlci5Jc05lYXJEZWF0aCgpKQorICAg
ICAgICAgICAgaWYgKCghd3JhcHBlci5Jc1dlYWsoKSAmJiAhd3JhcHBlci5Jc05lYXJEZWF0aCgp
KSB8fCBwb3J0MS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCiAgICAgICAgICAgICAgICAgd3JhcHBl
ci5NYWtlV2Vhayhwb3J0MSwgJkRPTURhdGFTdG9yZTo6d2Vha0FjdGl2ZURPTU9iamVjdENhbGxi
YWNrKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFjdGl2ZURPTU9iamVjdCogYWN0
aXZlRE9NT2JqZWN0ID0gdHlwZUluZm8tPnRvQWN0aXZlRE9NT2JqZWN0KHdyYXBwZXIpOworICAg
ICAgICAgICAgaWYgKGFjdGl2ZURPTU9iamVjdCAmJiBhY3RpdmVET01PYmplY3QtPmhhc1BlbmRp
bmdBY3Rpdml0eSgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCF3cmFwcGVyLklzV2Vhaygp
KTsKKyAgICAgICAgICAgICAgICB3cmFwcGVyLk1ha2VXZWFrKGFjdGl2ZURPTU9iamVjdCwgJkRP
TURhdGFTdG9yZTo6d2Vha0FjdGl2ZURPTU9iamVjdENhbGxiYWNrKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KIH07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgJ
KHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQAogewogICAgIC8vIEZJWE1FOiBhc3NlcnQg
b2JqZWN0IGlzIGEgY29sbGVjdGlvbiB0eXBlCiAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5
YmVET01XcmFwcGVyKG9iamVjdCkpOwotICAgIEFTU0VSVChWOERPTVdyYXBwZXI6OmRvbVdyYXBw
ZXJUeXBlKG9iamVjdCkgIT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKKyAgICBBU1NFUlQoVjhET01X
cmFwcGVyOjpkb21XcmFwcGVyVHlwZShvYmplY3QpLT5pbmRleCAhPSBWOENsYXNzSW5kZXg6Ok5P
REUpOwogICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSB0b05hdGl2ZUNvbGxlY3Rpb248Q29s
bGVjdGlvbj4ob2JqZWN0KTsKICAgICBBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lID0gdG9BdG9t
aWNXZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhuYW1lKTsKICAgICByZXR1cm4gZ2V0VjhPYmpl
Y3Q8SXRlbVR5cGU+KGNvbGxlY3Rpb24tPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpKTsKQEAgLTg5
LDcgKzg5LDcgQEAKIHsKICAgICAvLyBGSVhNRTogQXNzZXJ0IHRoYXQgb2JqZWN0IG11c3QgYmUg
YSBjb2xsZWN0aW9uIHR5cGUuCiAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFw
cGVyKG9iamVjdCkpOwotICAgIEFTU0VSVChWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKG9i
amVjdCkgIT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKKyAgICBBU1NFUlQoVjhET01XcmFwcGVyOjpk
b21XcmFwcGVyVHlwZShvYmplY3QpLT5pbmRleCAhPSBWOENsYXNzSW5kZXg6Ok5PREUpOwogICAg
IENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSB0b05hdGl2ZUNvbGxlY3Rpb248Q29sbGVjdGlvbj4o
b2JqZWN0KTsKICAgICByZXR1cm4gZ2V0VjhPYmplY3Q8SXRlbVR5cGU+KGNvbGxlY3Rpb24tPml0
ZW0oaW5kZXgpKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oCShyZXZpc2lvbiA1NTc0MykK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nywx
NyArNjcsMTcgQEAKICAgICAgICAgVGhyZWFkSWRlbnRpZmllciBvd25pbmdUaHJlYWQoKSBjb25z
dCB7IHJldHVybiBtX293bmluZ1RocmVhZDsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlw
ZWRlZiBXVEY6Okhhc2hNYXA8dm9pZCosIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZT4gRGVs
YXllZE9iamVjdE1hcDsKKyAgICAgICAgdHlwZWRlZiBXVEY6Okhhc2hNYXA8dm9pZCosIFdyYXBw
ZXJUeXBlSW5mbyo+IERlbGF5ZWRPYmplY3RNYXA7CiAKLSAgICAgICAgdm9pZCBlbnN1cmVEZXJl
ZihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9pZCogZG9tT2JqZWN0KTsKLSAg
ICAgICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IHR5cGUsIHZvaWQqIGRvbU9iamVjdCk7CisgICAgICAgIHZvaWQgZW5zdXJlRGVyZWYoV3JhcHBl
clR5cGVJbmZvKiB0eXBlLCB2b2lkKiBkb21PYmplY3QpOworICAgICAgICBzdGF0aWMgdm9pZCBk
ZXJlZk9iamVjdChXcmFwcGVyVHlwZUluZm8qIHR5cGUsIHZvaWQqIGRvbU9iamVjdCk7CiAKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICAgICAgY2xhc3MgV3JhcHBlck1hcE9iamVj
dFJlbW92ZXIgOiBwdWJsaWMgV2Vha1JlZmVyZW5jZU1hcDxULCB2ODo6T2JqZWN0Pjo6VmlzaXRv
ciB7CiAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdERPTVdy
YXBwZXIoVCogZG9tT2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB2OE9iamVjdCkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5
cGUgdHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUodjhPYmplY3QpOworICAgICAg
ICAgICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBl
clR5cGUodjhPYmplY3QpOwogICAgICAgICAgICAgICAgIGRlcmVmT2JqZWN0KHR5cGUsIGRvbU9i
amVjdCk7CiAgICAgICAgICAgICAgICAgdjhPYmplY3QuRGlzcG9zZSgpOwogICAgICAgICAgICAg
fQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwCShyZXZpc2lvbiA1NTc0MykKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhJbmRleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDgzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVjhJbmRleC5oIgotCi0jaW5j
bHVkZSAiVjhBdHRyLmgiCi0jaW5jbHVkZSAiVjhCYXJJbmZvLmgiCi0jaW5jbHVkZSAiVjhCZWZv
cmVMb2FkRXZlbnQuaCIKLSNpbmNsdWRlICJWOEJsb2IuaCIKLSNpbmNsdWRlICJWOFdlYkdMQWN0
aXZlSW5mby5oIgotI2luY2x1ZGUgIlY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1
ZGUgIlY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCi0jaW5jbHVkZSAiVjhDYW52YXNHcmFk
aWVudC5oIgotI2luY2x1ZGUgIlY4Q2FudmFzUGF0dGVybi5oIgotI2luY2x1ZGUgIlY4Q2FudmFz
UGl4ZWxBcnJheS5oIgotI2luY2x1ZGUgIlY4Q0RBVEFTZWN0aW9uLmgiCi0jaW5jbHVkZSAiVjhD
aGFyYWN0ZXJEYXRhLmgiCi0jaW5jbHVkZSAiVjhDbGllbnRSZWN0LmgiCi0jaW5jbHVkZSAiVjhD
bGllbnRSZWN0TGlzdC5oIgotI2luY2x1ZGUgIlY4Q2xpcGJvYXJkLmgiCi0jaW5jbHVkZSAiVjhD
b21tZW50LmgiCi0jaW5jbHVkZSAiVjhDb21wb3NpdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiVjhD
b25zb2xlLmgiCi0jaW5jbHVkZSAiVjhDb3VudGVyLmgiCi0jaW5jbHVkZSAiVjhDU1NTdHlsZURl
Y2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiVjhDU1NSdWxlLmgiCi0jaW5jbHVkZSAiVjhDU1NTdHls
ZVJ1bGUuaCIKLSNpbmNsdWRlICJWOENTU0NoYXJzZXRSdWxlLmgiCi0jaW5jbHVkZSAiVjhDU1NJ
bXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiVjhDU1NNZWRpYVJ1bGUuaCIKLSNpbmNsdWRlICJWOENT
U0ZvbnRGYWNlUnVsZS5oIgotI2luY2x1ZGUgIlY4Q1NTUGFnZVJ1bGUuaCIKLSNpbmNsdWRlICJW
OENTU1J1bGVMaXN0LmgiCi0jaW5jbHVkZSAiVjhDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2luY2x1
ZGUgIlY4Q1NTVmFsdWUuaCIKLSNpbmNsdWRlICJWOENTU1ZhbHVlTGlzdC5oIgotI2luY2x1ZGUg
IlY4Q1NTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIlY4Q1NTVmFyaWFibGVzRGVjbGFyYXRpb24u
aCIKLSNpbmNsdWRlICJWOENTU1ZhcmlhYmxlc1J1bGUuaCIKLSNpbmNsdWRlICJWOERhdGFHcmlk
Q29sdW1uLmgiCi0jaW5jbHVkZSAiVjhEYXRhR3JpZENvbHVtbkxpc3QuaCIKLSNpbmNsdWRlICJW
OERvY3VtZW50LmgiCi0jaW5jbHVkZSAiVjhEb2N1bWVudEZyYWdtZW50LmgiCi0jaW5jbHVkZSAi
VjhEb2N1bWVudFR5cGUuaCIKLSNpbmNsdWRlICJWOEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEVu
dGl0eS5oIgotI2luY2x1ZGUgIlY4RW50aXR5UmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiVjhGaWxl
LmgiCi0jaW5jbHVkZSAiVjhGaWxlTGlzdC5oIgotI2luY2x1ZGUgIlY4SGlzdG9yeS5oIgotI2lu
Y2x1ZGUgIlY4SFRNTEFsbENvbGxlY3Rpb24uaCIKLSNpbmNsdWRlICJWOEhUTUxDYW52YXNFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MQ29sbGVjdGlvbi5oIgotI2luY2x1ZGUgIlY4SFRNTERv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTE9w
dGlvbnNDb2xsZWN0aW9uLmgiCi0jaW5jbHVkZSAiVjhIVE1MQW5jaG9yRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlY4SFRNTEFwcGxldEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxBcmVhRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlY4SFRNTEJhc2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MQmFz
ZUZvbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MQmxvY2txdW90ZUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJWOEhUTUxCb2R5RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTEJSRWxlbWVudC5o
IgotI2luY2x1ZGUgIlY4SFRNTEJ1dHRvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxDYW52
YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MTW9kRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4
SFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxEYXRhR3JpZENvbEVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxEYXRhR3JpZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJW
OEhUTUxEYXRhR3JpZFJvd0VsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxEaXJlY3RvcnlFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MRGl2RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTERM
aXN0RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTEVtYmVkRWxlbWVudC5oIgotI2luY2x1ZGUg
IlY4SFRNTEZpZWxkU2V0RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTEZvcm1FbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiVjhIVE1MRm9udEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxGcmFtZUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxGcmFtZVNldEVsZW1lbnQuaCIKLSNpbmNsdWRlICJW
OEhUTUxIZWFkaW5nRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTEhlYWRFbGVtZW50LmgiCi0j
aW5jbHVkZSAiVjhIVE1MSFJFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MSHRtbEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJWOEhUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MSW1h
Z2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuaCIK
LSNpbmNsdWRlICJWOEhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxJc0luZGV4
RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTExhYmVsRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4
SFRNTExlZ2VuZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxMSUVsZW1lbnQuaCIKLSNpbmNs
dWRlICJWOEhUTUxMaW5rRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTE1hcEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJWOEhUTUxNYXJxdWVlRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTE1lbnVF
bGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MTWV0YUVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhU
TUxPYmplY3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MT0xpc3RFbGVtZW50LmgiCi0jaW5j
bHVkZSAiVjhIVE1MT3B0R3JvdXBFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MT3B0aW9uRWxl
bWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oIgotI2lu
Y2x1ZGUgIlY4SFRNTFBhcmFncmFwaEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxQYXJhbUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxQcmVFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1M
UXVvdGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MU2NyaXB0RWxlbWVudC5oIgotI2luY2x1
ZGUgIlY4SFRNTFNlbGVjdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxTdHlsZUVsZW1lbnQu
aCIKLSNpbmNsdWRlICJWOEhUTUxUYWJsZUNhcHRpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhI
VE1MVGFibGVDb2xFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MVGFibGVFbGVtZW50LmgiCi0j
aW5jbHVkZSAiVjhIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4SFRNTFRh
YmxlQ2VsbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxUYWJsZVJvd0VsZW1lbnQuaCIKLSNp
bmNsdWRlICJWOEhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxUaXRsZUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxVTGlzdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOElt
YWdlRGF0YS5oIgotI2luY2x1ZGUgIlY4TWVkaWEuaCIKLSNpbmNsdWRlICJWOE1lZGlhTGlzdC5o
IgotI2luY2x1ZGUgIlY4TWVzc2FnZUNoYW5uZWwuaCIKLSNpbmNsdWRlICJWOE1lc3NhZ2VFdmVu
dC5oIgotI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnQuaCIKLSNpbmNsdWRlICJWOE5hbWVkTm9kZU1h
cC5oIgotI2luY2x1ZGUgIlY4Tm9kZS5oIgotI2luY2x1ZGUgIlY4Tm9kZUxpc3QuaCIKLSNpbmNs
dWRlICJWOE5vZGVGaWx0ZXIuaCIKLSNpbmNsdWRlICJWOE5vdGF0aW9uLmgiCi0jaW5jbHVkZSAi
VjhQb3BTdGF0ZUV2ZW50LmgiCi0jaW5jbHVkZSAiVjhQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIK
LSNpbmNsdWRlICJWOFByb2dyZXNzRXZlbnQuaCIKLSNpbmNsdWRlICJWOFN0eWxlU2hlZXQuaCIK
LSNpbmNsdWRlICJWOFRleHQuaCIKLSNpbmNsdWRlICJWOFRleHRFdmVudC5oIgotI2luY2x1ZGUg
IlY4VG91Y2guaCIKLSNpbmNsdWRlICJWOFRvdWNoRXZlbnQuaCIKLSNpbmNsdWRlICJWOFRvdWNo
TGlzdC5oIgotI2luY2x1ZGUgIlY4RE9NQ29yZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIlY4RE9N
UGFyc2VyLmgiCi0jaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKLSNpbmNsdWRlICJWOEVycm9yRXZl
bnQuaCIKLSNpbmNsdWRlICJWOEV2ZW50LmgiCi0jaW5jbHVkZSAiVjhFdmVudEV4Y2VwdGlvbi5o
IgotI2luY2x1ZGUgIlY4S2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlY4TW91c2VFdmVudC5o
IgotI2luY2x1ZGUgIlY4VmFsaWRpdHlTdGF0ZS5oIgotI2luY2x1ZGUgIlY4V2ViS2l0QW5pbWF0
aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJWOFdlYktpdENTU0tleWZyYW1lUnVsZS5oIgotI2luY2x1
ZGUgIlY4V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgotI2luY2x1ZGUgIlY4V2ViS2l0Q1NTTWF0
cml4LmgiCi0jaW5jbHVkZSAiVjhXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIgotI2luY2x1ZGUg
IlY4V2ViS2l0UG9pbnQuaCIKLSNpbmNsdWRlICJWOFdlYktpdFRyYW5zaXRpb25FdmVudC5oIgot
I2luY2x1ZGUgIlY4V2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlY4VUlFdmVudC5oIgotI2luY2x1
ZGUgIlY4TXV0YXRpb25FdmVudC5oIgotI2luY2x1ZGUgIlY4T3ZlcmZsb3dFdmVudC5oIgotI2lu
Y2x1ZGUgIlY4TG9jYXRpb24uaCIKLSNpbmNsdWRlICJWOFNjcmVlbi5oIgotI2luY2x1ZGUgIlY4
RE9NU2VsZWN0aW9uLmgiCi0jaW5jbHVkZSAiVjhOYXZpZ2F0b3IuaCIKLSNpbmNsdWRlICJWOE1p
bWVUeXBlLmgiCi0jaW5jbHVkZSAiVjhNaW1lVHlwZUFycmF5LmgiCi0jaW5jbHVkZSAiVjhQYWdl
VHJhbnNpdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiVjhQbHVnaW4uaCIKLSNpbmNsdWRlICJWOFBs
dWdpbkFycmF5LmgiCi0jaW5jbHVkZSAiVjhSYW5nZS5oIgotI2luY2x1ZGUgIlY4UmFuZ2VFeGNl
cHRpb24uaCIKLSNpbmNsdWRlICJWOFJlY3QuaCIKLSNpbmNsdWRlICJWOE5vZGVJdGVyYXRvci5o
IgotI2luY2x1ZGUgIlY4VGV4dE1ldHJpY3MuaCIKLSNpbmNsdWRlICJWOFRyZWVXYWxrZXIuaCIK
LSNpbmNsdWRlICJWOFN0eWxlU2hlZXRMaXN0LmgiCi0jaW5jbHVkZSAiVjhET01JbXBsZW1lbnRh
dGlvbi5oIgotI2luY2x1ZGUgIlY4WE1MSHR0cFJlcXVlc3QuaCIKLSNpbmNsdWRlICJWOFhNTEh0
dHBSZXF1ZXN0RXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiVjhYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnQuaCIKLSNpbmNsdWRlICJWOFhNTEh0dHBSZXF1ZXN0VXBsb2FkLmgiCi0jaW5jbHVkZSAi
VjhYTUxTZXJpYWxpemVyLmgiCi0jaW5jbHVkZSAiVjhSR0JDb2xvci5oIgotCi0jaWYgRU5BQkxF
KE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSNpbmNsdWRlICJWOERPTUFwcGxpY2F0aW9uQ2Fj
aGUuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotI2luY2x1ZGUgIlY4U3Rv
cmFnZS5oIgotI2luY2x1ZGUgIlY4U3RvcmFnZUV2ZW50LmgiCi0jZW5kaWYKLQotI2lmIEVOQUJM
RShTVkdfQU5JTUFUSU9OKQotI2luY2x1ZGUgIlY4U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oIgot
I2luY2x1ZGUgIlY4U1ZHQW5pbWF0ZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdBbmltYXRpb25FbGVtZW50LmgiCi0j
aW5jbHVkZSAiVjhTVkdTZXRFbGVtZW50LmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShTVkcpICYm
IEVOQUJMRShGSUxURVJTKQotI2luY2x1ZGUgIlY4U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
bkVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0ZFQmxlbmRFbGVtZW50LmgiCi0jaW5jbHVkZSAi
VjhTVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0ZFQ29tcG9zaXRlRWxlbWVudC5oIgot
I2luY2x1ZGUgIlY4U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhT
VkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0ZFRGlzdGFudExp
Z2h0RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHRkVGbG9vZEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJWOFNWR0ZFRnVuY0FFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdGRUZ1bmNCRWxlbWVudC5o
IgotI2luY2x1ZGUgIlY4U1ZHRkVGdW5jR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0ZFRnVu
Y1JFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCIKLSNp
bmNsdWRlICJWOFNWR0ZFSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdGRU1lcmdlRWxl
bWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgiCi0jaW5jbHVkZSAi
VjhTVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdGRU9mZnNldEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJWOFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQuaCIKLSNpbmNsdWRlICJW
OFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0ZFU3BvdExp
Z2h0RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHRkVUaWxlRWxlbWVudC5oIgotI2luY2x1ZGUg
IlY4U1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHRmlsdGVyRWxlbWVu
dC5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotI2luY2x1ZGUgIlY4U1ZHRm9u
dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0ZvbnRGYWNlRWxlbWVudC5oIgotI2luY2x1ZGUg
IlY4U1ZHRm9udEZhY2VGb3JtYXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdGb250RmFjZU5h
bWVFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdGb250RmFjZVNyY0VsZW1lbnQuaCIKLSNpbmNs
dWRlICJWOFNWR0ZvbnRGYWNlVXJpRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHTWlzc2luZ0ds
eXBoRWxlbWVudC5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1ZHX0ZPUkVJR05fT0JKRUNUKQot
I2luY2x1ZGUgIlY4U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaCIKLSNlbmRpZgotCi0jaWYgRU5B
QkxFKFNWR19VU0UpCi0jaW5jbHVkZSAiVjhTVkdVc2VFbGVtZW50LmgiCi0jZW5kaWYKLQotI2lm
IEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiVjhTVkdBRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZH
QWx0R2x5cGhFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdDaXJjbGVFbGVtZW50LmgiCi0jaW5j
bHVkZSAiVjhTVkdDbGlwUGF0aEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0N1cnNvckVsZW1l
bnQuaCIKLSNpbmNsdWRlICJWOFNWR0RlZnNFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdEZXNj
RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHRWxs
aXBzZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0V4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIlY4
U1ZHR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR0dseXBoRWxlbWVudC5oIgotI2luY2x1ZGUg
IlY4U1ZHR3JhZGllbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdJbWFnZUVsZW1lbnQuaCIK
LSNpbmNsdWRlICJWOFNWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZH
TGluZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR01hcmtlckVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJWOFNWR01hc2tFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdNZXRhZGF0YUVsZW1lbnQuaCIK
LSNpbmNsdWRlICJWOFNWR1BhdGhFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdQYXR0ZXJuRWxl
bWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHUG9seWdvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNW
R1BvbHlsaW5lRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
LmgiCi0jaW5jbHVkZSAiVjhTVkdSZWN0RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHU2NyaXB0
RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHU3RvcEVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNW
R1N0eWxlRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUg
IlY4U1ZHU3dpdGNoRWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHU3ltYm9sRWxlbWVudC5oIgot
I2luY2x1ZGUgIlY4U1ZHVGV4dENvbnRlbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdUZXh0
RWxlbWVudC5oIgotI2luY2x1ZGUgIlY4U1ZHVGV4dFBhdGhFbGVtZW50LmgiCi0jaW5jbHVkZSAi
VjhTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdUaXRsZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJWOFNWR1RSZWZFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdUU3Bh
bkVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOFNWR1ZpZXdFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhT
VkdBbmdsZS5oIgotI2luY2x1ZGUgIlY4U1ZHQW5pbWF0ZWRBbmdsZS5oIgotI2luY2x1ZGUgIlY4
U1ZHQW5pbWF0ZWRCb29sZWFuLmgiCi0jaW5jbHVkZSAiVjhTVkdBbmltYXRlZEVudW1lcmF0aW9u
LmgiCi0jaW5jbHVkZSAiVjhTVkdBbmltYXRlZEludGVnZXIuaCIKLSNpbmNsdWRlICJWOFNWR0Fu
aW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiVjhTVkdBbmltYXRlZExlbmd0aExpc3QuaCIKLSNp
bmNsdWRlICJWOFNWR0FuaW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVkZSAiVjhTVkdBbmltYXRlZE51
bWJlckxpc3QuaCIKLSNpbmNsdWRlICJWOFNWR0FuaW1hdGVkUG9pbnRzLmgiCi0jaW5jbHVkZSAi
VjhTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRlICJWOFNWR0FuaW1h
dGVkUmVjdC5oIgotI2luY2x1ZGUgIlY4U1ZHQW5pbWF0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJW
OFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oIgotI2luY2x1ZGUgIlY4U1ZHQ29sb3IuaCIKLSNp
bmNsdWRlICJWOFNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiVjhTVkdFbGVtZW50SW5zdGFuY2Uu
aCIKLSNpbmNsdWRlICJWOFNWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaCIKLSNpbmNsdWRlICJWOFNW
R0xlbmd0aC5oIgotI2luY2x1ZGUgIlY4U1ZHTGVuZ3RoTGlzdC5oIgotI2luY2x1ZGUgIlY4U1ZH
TWF0cml4LmgiCi0jaW5jbHVkZSAiVjhTVkdOdW1iZXIuaCIKLSNpbmNsdWRlICJWOFNWR051bWJl
ckxpc3QuaCIKLSNpbmNsdWRlICJWOFNWR1BhaW50LmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2Vn
LmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2VnQXJjQWJzLmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRo
U2VnQXJjUmVsLmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ2xvc2VQYXRoLmgiCi0jaW5jbHVk
ZSAiVjhTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljUmVsLmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoQWJzLmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLmgi
Ci0jaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5oIgotI2luY2x1ZGUg
IlY4U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwuaCIKLSNpbmNsdWRlICJWOFNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzLmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aFJlbC5oIgotI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0xpbmV0b0Fi
cy5oIgotI2luY2x1ZGUgIlY4U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMuaCIKLSNpbmNs
dWRlICJWOFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLmgiCi0jaW5jbHVkZSAiVjhTVkdQ
YXRoU2VnTGluZXRvUmVsLmgiCi0jaW5jbHVkZSAiVjhTVkdQYXRoU2VnTGluZXRvVmVydGljYWxB
YnMuaCIKLSNpbmNsdWRlICJWOFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5oIgotI2luY2x1
ZGUgIlY4U1ZHUGF0aFNlZ0xpc3QuaCIKLSNpbmNsdWRlICJWOFNWR1BhdGhTZWdNb3ZldG9BYnMu
aCIKLSNpbmNsdWRlICJWOFNWR1BhdGhTZWdNb3ZldG9SZWwuaCIKLSNpbmNsdWRlICJWOFNWR1Bv
aW50LmgiCi0jaW5jbHVkZSAiVjhTVkdQb2ludExpc3QuaCIKLSNpbmNsdWRlICJWOFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRlICJWOFNWR1JlY3QuaCIKLSNpbmNsdWRlICJWOFNW
R1JlbmRlcmluZ0ludGVudC5oIgotI2luY2x1ZGUgIlY4U1ZHU3RyaW5nTGlzdC5oIgotI2luY2x1
ZGUgIlY4U1ZHVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiVjhTVkdUcmFuc2Zvcm1MaXN0LmgiCi0j
aW5jbHVkZSAiVjhTVkdVbml0VHlwZXMuaCIKLSNpbmNsdWRlICJWOFNWR1pvb21FdmVudC5oIgot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoVklERU8pCi0jaW5jbHVkZSAiVjhIVE1MQXVkaW9FbGVtZW50
LmgiCi0jaW5jbHVkZSAiVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRl
ICJWOEhUTUxNZWRpYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJWOEhUTUxTb3VyY2VFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiVjhIVE1MVmlkZW9FbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhNZWRpYUVycm9y
LmgiCi0jaW5jbHVkZSAiVjhUaW1lUmFuZ2VzLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShXRUJf
U09DS0VUUykKLSNpbmNsdWRlICJWOFdlYlNvY2tldC5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUo
V09SS0VSUykKLSNpbmNsdWRlICJWOEFic3RyYWN0V29ya2VyLmgiCi0jaW5jbHVkZSAiVjhEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0LmgiCi0jaW5jbHVkZSAiVjhXb3JrZXIuaCIKLSNpbmNsdWRlICJW
OFdvcmtlckNvbnRleHQuaCIKLSNpbmNsdWRlICJWOFdvcmtlckxvY2F0aW9uLmgiCi0jaW5jbHVk
ZSAiVjhXb3JrZXJOYXZpZ2F0b3IuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKE5PVElGSUNBVElP
TlMpCi0jaW5jbHVkZSAiVjhOb3RpZmljYXRpb24uaCIKLSNpbmNsdWRlICJWOE5vdGlmaWNhdGlv
bkNlbnRlci5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0jaW5jbHVk
ZSAiVjhTaGFyZWRXb3JrZXIuaCIKLSNpbmNsdWRlICJWOFNoYXJlZFdvcmtlckNvbnRleHQuaCIK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLSNpbmNsdWRlICJWOFdlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlY4V2ViR0xBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUg
IlY4V2ViR0xBcnJheS5oIgotI2luY2x1ZGUgIlY4V2ViR0xCeXRlQXJyYXkuaCIKLSNpbmNsdWRl
ICJWOFdlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiVjhXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgi
Ci0jaW5jbHVkZSAiVjhXZWJHTEZsb2F0QXJyYXkuaCIKLSNpbmNsdWRlICJWOFdlYkdMRnJhbWVi
dWZmZXIuaCIKLSNpbmNsdWRlICJWOFdlYkdMSW50QXJyYXkuaCIKLSNpbmNsdWRlICJWOFdlYkdM
UHJvZ3JhbS5oIgotI2luY2x1ZGUgIlY4V2ViR0xSZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJW
OFdlYkdMU2hhZGVyLmgiCi0jaW5jbHVkZSAiVjhXZWJHTFNob3J0QXJyYXkuaCIKLSNpbmNsdWRl
ICJWOFdlYkdMVGV4dHVyZS5oIgotI2luY2x1ZGUgIlY4V2ViR0xVbmlmb3JtTG9jYXRpb24uaCIK
LSNpbmNsdWRlICJWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKLSNpbmNsdWRlICJWOFdlYkdM
VW5zaWduZWRJbnRBcnJheS5oIgotI2luY2x1ZGUgIlY4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXku
aCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotI2luY2x1ZGUgIlY4RGF0YWJhc2Uu
aCIKLSNpbmNsdWRlICJWOFNRTEVycm9yLmgiCi0jaW5jbHVkZSAiVjhTUUxSZXN1bHRTZXQuaCIK
LSNpbmNsdWRlICJWOFNRTFJlc3VsdFNldFJvd0xpc3QuaCIKLSNpbmNsdWRlICJWOFNRTFRyYW5z
YWN0aW9uLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2luY2x1
ZGUgIlY4SURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIlY4SURCRGF0YWJhc2VFeGNlcHRp
b24uaCIKLSNpbmNsdWRlICJWOElEQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJWOEluZGV4ZWREYXRh
YmFzZVJlcXVlc3QuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFhQQVRIKQotI2luY2x1ZGUgIlY4
WFBhdGhSZXN1bHQuaCIKLSNpbmNsdWRlICJWOFhQYXRoRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAi
VjhYUGF0aEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJWOFhQYXRoTlNSZXNvbHZlci5oIgotI2lu
Y2x1ZGUgIlY4WFBhdGhFdmFsdWF0b3IuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFhTTFQpCi0j
aW5jbHVkZSAiVjhYU0xUUHJvY2Vzc29yLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1IpCi0jaW5jbHVkZSAiVjhJbmplY3RlZFNjcmlwdEhvc3QuaCIKLSNpbmNsdWRlICJWOEluc3Bl
Y3RvckJhY2tlbmQuaCIKLSNpbmNsdWRlICJWOEluc3BlY3RvckZyb250ZW5kSG9zdC5oIgotI2Vu
ZGlmCi0KLSNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCi0jaW5jbHVkZSAiVjhFdmVudFNvdXJjZS5o
IgotI2VuZGlmCi0KLS8vIEdlb2xvY2F0aW9uCi0jaW5jbHVkZSAiVjhDb29yZGluYXRlcy5oIgot
I2luY2x1ZGUgIlY4R2VvbG9jYXRpb24uaCIKLSNpbmNsdWRlICJWOEdlb3Bvc2l0aW9uLmgiCi0j
aW5jbHVkZSAiVjhQb3NpdGlvbkVycm9yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4Q2xhc3NJbmRleDo6Z2V0VGVtcGxh
dGUoVjhXcmFwcGVyVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotI2RlZmluZSBN
QUtFX0NBU0UodHlwZSwgbmFtZSlcCi0gICAgY2FzZSBWOENsYXNzSW5kZXg6OnR5cGU6IHJldHVy
biBWOCMjbmFtZTo6R2V0VGVtcGxhdGUoKTsKLSAgICBXUkFQUEVSX1RZUEVTKE1BS0VfQ0FTRSkK
LSN1bmRlZiBNQUtFX0NBU0UKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
Pjo6TmV3KHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoKSk7Ci0gIH0KLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhLmNwcAkocmV2aXNpb24gNTU3
NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OCw3ICs1OCw3IEBACiAgICAgcmV0dXJuIGNoaWxkVGhyZWFkRE9NRGF0YTsKIH0KIAotdm9p
ZCBET01EYXRhOjplbnN1cmVEZXJlZihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwg
dm9pZCogZG9tT2JqZWN0KQordm9pZCBET01EYXRhOjplbnN1cmVEZXJlZihXcmFwcGVyVHlwZUlu
Zm8qIHR5cGUsIHZvaWQqIGRvbU9iamVjdCkKIHsKICAgICBpZiAobV9vd25pbmdUaHJlYWQgPT0g
V1RGOjpjdXJyZW50VGhyZWFkKCkpIHsKICAgICAgICAgLy8gTm8gbmVlZCB0byBkZWxheSB0aGUg
d29yay4gV2UgY2FuIGRlcmVmIHJpZ2h0IG5vdy4KQEAgLTc4LDM1ICs3OCw5IEBACiAgICAgfQog
fQogCi12b2lkIERPTURhdGE6OmRlcmVmT2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSB0eXBlLCB2b2lkKiBkb21PYmplY3QpCit2b2lkIERPTURhdGE6OmRlcmVmT2JqZWN0KFdyYXBw
ZXJUeXBlSW5mbyogdHlwZSwgdm9pZCogZG9tT2JqZWN0KQogewotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpOT0RFOgotICAgICAgICBzdGF0aWNfY2FzdDxOb2Rl
Kj4oZG9tT2JqZWN0KS0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0KLSNkZWZpbmUgTWFrZUNh
c2UodHlwZSwgbmFtZSkgICBcCi0gICAgICAgIGNhc2UgVjhDbGFzc0luZGV4Ojp0eXBlOiBzdGF0
aWNfY2FzdDxuYW1lKj4oZG9tT2JqZWN0KS0+ZGVyZWYoKTsgYnJlYWs7Ci0gICAgRE9NX09CSkVD
VF9UWVBFUyhNYWtlQ2FzZSkgICAvLyBUaGlzIGluY2x1ZGVzIGJvdGggYWN0aXZlIGFuZCBub24t
YWN0aXZlLgotI3VuZGVmIE1ha2VDYXNlCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2RlZmluZSBNYWtl
Q2FzZSh0eXBlLCBuYW1lKSAgICAgXAotICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6dHlwZTog
c3RhdGljX2Nhc3Q8bmFtZSo+KGRvbU9iamVjdCktPmRlcmVmKCk7IGJyZWFrOwotICAgIFNWR19P
QkpFQ1RfVFlQRVMoTWFrZUNhc2UpICAgLy8gVGhpcyBhbHNvIGluY2x1ZGVzIFNWR0VsZW1lbnRJ
bnN0YW5jZS4KLSN1bmRlZiBNYWtlQ2FzZQotCi0jZGVmaW5lIE1ha2VDYXNlKHR5cGUsIG5hbWUp
ICAgICBcCi0gICAgICAgIGNhc2UgVjhDbGFzc0luZGV4Ojp0eXBlOiAgICBcCi0gICAgICAgICAg
ICBzdGF0aWNfY2FzdDxWOFNWR1BPRFR5cGVXcmFwcGVyPG5hbWU+Kj4oZG9tT2JqZWN0KS0+ZGVy
ZWYoKTsgYnJlYWs7Ci0gICAgU1ZHX1BPRF9OQVRJVkVfVFlQRVMoTWFrZUNhc2UpCi0jdW5kZWYg
TWFrZUNhc2UKLSNlbmRpZgotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB0eXBlLT5kZXJlZk9iamVjdChkb21P
YmplY3QpOwogfQogCiB2b2lkIERPTURhdGE6OmRlcmVmRGVsYXllZE9iamVjdHMoKQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhIZWxwZXJzLmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCB3cmFwTlBPYmplY3Qodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBvYmplY3QsIE5QT2JqZWN0KiBucE9iamVjdCkKLXsKLSAgICBWOERPTVdyYXBw
ZXI6OnNldERPTVdyYXBwZXIob2JqZWN0LCBWOENsYXNzSW5kZXg6Ok5QT0JKRUNULCBucE9iamVj
dCk7Ci19Ci0KIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gdG9WOENvbnRleHQoTlBQIG5wcCwgTlBP
YmplY3QqIG5wT2JqZWN0KQogewogICAgIFY4TlBPYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8VjhOUE9iamVjdCo+KG5wT2JqZWN0KTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMRmxvYXRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9u
IDU1NzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEZsb2F0QXJyYXlD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiB7CiAgICAgSU5DX1NU
QVRTKCJET00uV2ViR0xGbG9hdEFycmF5LkNvbnRydWN0b3IiKTsKIAotICAgIHJldHVybiBjb25z
dHJ1Y3RXZWJHTEFycmF5PFdlYkdMRmxvYXRBcnJheSwgZmxvYXQ+KGFyZ3MsIFY4Q2xhc3NJbmRl
eDo6VG9JbnQoVjhDbGFzc0luZGV4OjpXRUJHTEZMT0FUQVJSQVkpKTsKKyAgICByZXR1cm4gY29u
c3RydWN0V2ViR0xBcnJheTxXZWJHTEZsb2F0QXJyYXksIGZsb2F0PihhcmdzLCAmaW5mbyk7CiB9
CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMRmxvYXRBcnJheTo6Z2V0Q2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlv
bkVsZW1lbnRDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAj
aWZuZGVmIFY4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcl9oCiAjZGVmaW5lIFY4SFRNTE9w
dGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcl9oCiAKKyNpbmNsdWRlICJWOEluZGV4LmgiCisKICNpbmNs
dWRlIDx2OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2ICs0MCw3IEBACiBjbGFz
cyBWOEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IgewogcHVibGljOgogICAgIHN0YXRpYyB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKKyAgICBz
dGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhN
ZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEs
NyBAQAogICAgIG1lc3NhZ2VDaGFubmVsLT5TZXRJbnRlcm5hbEZpZWxkKFY4TWVzc2FnZUNoYW5u
ZWw6OnBvcnQySW5kZXgsIHRvVjgob2JqLT5wb3J0MigpKSk7CiAKICAgICAvLyBTZXR1cCB0aGUg
c3RhbmRhcmQgd3JhcHBlciBvYmplY3QgaW50ZXJuYWwgZmllbGRzLgotICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcihtZXNzYWdlQ2hhbm5lbCwgVjhDbGFzc0luZGV4OjpNRVNTQUdFQ0hB
Tk5FTCwgb2JqLmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIobWVzc2Fn
ZUNoYW5uZWwsICZpbmZvLCBvYmouZ2V0KCkpOwogICAgIHJldHVybiB0b1Y4KG9iai5yZWxlYXNl
KCksIG1lc3NhZ2VDaGFubmVsKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXZWJHTEFycmF5QnVmZmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlCdWZmZXJDdXN0b20uY3BwCShyZXZpc2lvbiA1
NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUJ1ZmZlckN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKICAgICB9CiAgICAgLy8gVHJhbnNmb3JtIHRoZSBob2xkZXIgaW50
byBhIHdyYXBwZXIgb2JqZWN0IGZvciB0aGUgYXJyYXkuCi0gICAgVjhET01XcmFwcGVyOjpzZXRE
T01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4
OjpXRUJHTEFSUkFZQlVGRkVSKSwgYnVmZmVyLmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNl
dERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIGJ1ZmZlci5nZXQoKSk7CiAgICAgcmV0
dXJuIHRvVjgoYnVmZmVyLnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVt
ZW50Q29uc3RydWN0b3IuaAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw4IEBACiAjaWZuZGVmIFY4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yX2gK
ICNkZWZpbmUgVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3JfaAogCisjaW5jbHVkZSAiVjhJ
bmRleC5oIgorCiAjaW5jbHVkZSA8djguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgs
NiArNDAsNyBAQAogY2xhc3MgVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IgewogcHVibGlj
OgogICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVt
cGxhdGUoKTsKKyAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CiB9OwogCiB9CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3Bw
CShyZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2lu
ZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsMTAgQEAKICNpbmNsdWRl
ICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgog
I2luY2x1ZGUgIlY4R0NGb3JDb250ZXh0RGlzcG9zZS5oIgorI2luY2x1ZGUgIlY4SFRNTEF1ZGlv
RWxlbWVudENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVjhIVE1MQ29sbGVjdGlvbi5oIgorI2lu
Y2x1ZGUgIlY4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiVjhIVE1M
T3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVjhNZXNzYWdlUG9ydEN1c3Rv
bS5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKQEAgLTIyNiw3
ICsyMjksNyBAQAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93OjpBdWRpb0FjY2Vz
c29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQogewogICAgIERPTVdpbmRvdyogd2luZG93ID0gVjhET01XaW5kb3c6OnRvTmF0
aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVj
dG9yKFY4Q2xhc3NJbmRleDo6QVVESU8sIHdpbmRvdyk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBl
cjo6Z2V0Q29uc3RydWN0b3IoJlY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yOjppbmZvLCB3
aW5kb3cpOwogfQogCiAjZW5kaWYKQEAgLTIzNCwxMyArMjM3LDEzIEBACiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhET01XaW5kb3c6OkltYWdlQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgRE9NV2lu
ZG93KiB3aW5kb3cgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAg
cmV0dXJuIFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpJTUFHRSwg
d2luZG93KTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3RvcigmVjhIVE1M
SW1hZ2VFbGVtZW50Q29uc3RydWN0b3I6OmluZm8sIHdpbmRvdyk7CiB9CiAKIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6T3B0aW9uQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgRE9N
V2luZG93KiB3aW5kb3cgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0g
ICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoVjhDbGFzc0luZGV4OjpPUFRJ
T04sIHdpbmRvdyk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Z2V0Q29uc3RydWN0b3IoJlY4
SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbywgd2luZG93KTsKIH0KIAogdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93OjphZGRFdmVudExpc3RlbmVyQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V29ya2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBACiAKICAgICAvLyBTZXR1cCB0aGUgc3RhbmRhcmQgd3JhcHBlciBvYmplY3QgaW50
ZXJuYWwgZmllbGRzLgogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlck9iamVjdCA9
IGFyZ3MuSG9sZGVyKCk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHdyYXBwZXJP
YmplY3QsIFY4Q2xhc3NJbmRleDo6V09SS0VSLCBvYmouZ2V0KCkpOworICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyT2JqZWN0LCAmaW5mbywgb2JqLmdldCgpKTsKIAogICAg
IG9iai0+cmVmKCk7CiAgICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JBY3RpdmVET01P
YmplY3Qob2JqLmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXJP
YmplY3QpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0UG9pbnRD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhXZWJLaXRQb2ludENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdFBvaW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw3ICs1OSw3IEBACiAgICAgfQogICAgIFBhc3NSZWZQdHI8V2ViS2l0UG9p
bnQ+IHBvaW50ID0gV2ViS2l0UG9pbnQ6OmNyZWF0ZSh4LCB5KTsKICAgICBwb2ludC0+cmVmKCk7
Ci0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIFY4Q2xhc3NJ
bmRleDo6V0VCS0lUUE9JTlQsIHBvaW50LmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldERP
TVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIHBvaW50LmdldCgpKTsKICAgICByZXR1cm4g
YXJncy5Ib2xkZXIoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA1
NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENv
bnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKICNpZm5kZWYgVjhI
VE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3JfaAogI2RlZmluZSBWOEhUTUxBdWRpb0VsZW1lbnRD
b25zdHJ1Y3Rvcl9oCiAKKyNpbmNsdWRlICJWOEluZGV4LmgiCisKICNpbmNsdWRlIDx2OC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2ICs0MCw3IEBACiBjbGFzcyBWOEhUTUxBdWRp
b0VsZW1lbnRDb25zdHJ1Y3RvciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOworICAgIHN0YXRpYyBXcmFwcGVy
VHlwZUluZm8gaW5mbzsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRp
b25FbGVtZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorV3JhcHBlclR5cGVJbmZvIFY4SFRNTE9wdGlvbkVs
ZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbyA9IHtWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRl
eDo6T1BUSU9OKSwgVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSwg
MCwgZmFsc2UgfTsKKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEhUTUxPcHRpb25F
bGVtZW50Q29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewog
ICAgIElOQ19TVEFUUygiRE9NLkhUTUxPcHRpb25FbGVtZW50LkNvbnRydWN0b3IiKTsKQEAgLTc4
LDcgKzgwLDcgQEAKICAgICBpZiAoZWMpCiAgICAgICAgIHRocm93RXJyb3IoZWMpOwogCi0gICAg
VjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIFY4Q2xhc3NJbmRleDo6
VG9JbnQoVjhDbGFzc0luZGV4OjpPUFRJT04pLCBvcHRpb24uZ2V0KCkpOworICAgIFY4RE9NV3Jh
cHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmVjhIVE1MT3B0aW9uRWxlbWVudENv
bnN0cnVjdG9yOjppbmZvLCBvcHRpb24uZ2V0KCkpOwogICAgIG9wdGlvbi0+cmVmKCk7CiAgICAg
VjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01Ob2RlKG9wdGlvbi5nZXQoKSwgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CiAgICAgcmV0dXJuIGFy
Z3MuSG9sZGVyKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQnl0
ZUFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNyArNDcsNyBAQAogewogICAgIElOQ19TVEFUUygiRE9NLldlYkdMQnl0ZUFy
cmF5LkNvbnRydWN0b3IiKTsKIAotICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5PFdlYkdM
Qnl0ZUFycmF5LCBzaWduZWQgY2hhcj4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNz
SW5kZXg6OldFQkdMQllURUFSUkFZKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8
V2ViR0xCeXRlQXJyYXksIHNpZ25lZCBjaGFyPihhcmdzLCAmaW5mbyk7CiB9CiAKIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOFdlYkdMQnl0ZUFycmF5OjpnZXRDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1h
Z2VFbGVtZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTU3
NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitXcmFwcGVyVHlwZUluZm8gVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0
b3I6OmluZm8gPSB7VjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OklNQUdFKSwgVjhI
VE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlLCAwLCBmYWxzZSB9OworCiBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9y
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5IVE1MSW1hZ2VFbGVtZW50LkNvbnRydWN0b3IiKTsKQEAgLTgwLDcgKzgyLDcgQEAKICAgICB9
CiAKICAgICBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gaW1hZ2UgPSBIVE1MSW1hZ2VFbGVtZW50
OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKGRvY3VtZW50LCBvcHRpb25hbFdpZHRoLCBvcHRpb25h
bEhlaWdodCk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCks
IFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpJTUFHRSksIGltYWdlLmdldCgpKTsK
KyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJlY4SFRNTElt
YWdlRWxlbWVudENvbnN0cnVjdG9yOjppbmZvLCBpbWFnZS5nZXQoKSk7CiAgICAgaW1hZ2UtPnJl
ZigpOwogICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShpbWFnZS5nZXQo
KSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CiAgICAg
cmV0dXJuIGFyZ3MuSG9sZGVyKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYkdMQXJyYXlDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdlYkdMQXJyYXlDdXN0b20uaAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsOCArNDIsNyBAQAogCiAvLyBUZW1wbGF0ZSBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBXZWJHTEFy
cmF5KkNvbnN0cnVjdG9yIGNhbGxiYWNrcy4KIHRlbXBsYXRlPGNsYXNzIEFycmF5Q2xhc3MsIGNs
YXNzIEVsZW1lbnRUeXBlPgotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0cnVjdFdlYkdMQXJy
YXkoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBjbGFzc0luZGV4KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNv
bnN0cnVjdFdlYkdMQXJyYXkoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywgV3JhcHBlclR5cGVJ
bmZvKiB0eXBlKQogewogICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxl
ZCBhcyBhIGZ1bmN0aW9uLiIpOwpAQCAtOTIsOSArOTEsOSBAQAogICAgICAgICBpZiAoIWFycmF5
KQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk91dC1vZi1yYW5nZSBvZmZzZXQgYW5k
L29yIGxlbmd0aCIpOwogICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIGhvbGRlciBpbnRvIGEgd3Jh
cHBlciBvYmplY3QgZm9yIHRoZSBhcnJheS4KLSAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01X
cmFwcGVyKGFyZ3MuSG9sZGVyKCksIGNsYXNzSW5kZXgsIGFycmF5LmdldCgpKTsKKyAgICAgICAg
VjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIHR5cGUsIGFycmF5Lmdl
dCgpKTsKICAgICAgICAgVjhET01XcmFwcGVyOjpzZXRJbmRleGVkUHJvcGVydGllc1RvRXh0ZXJu
YWxBcnJheShhcmdzLkhvbGRlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzSW5kZXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS0+aW5kZXgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJy
YXkuZ2V0KCktPmJhc2VBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkuZ2V0KCktPmxlbmd0aCgpKTsKICAgICAg
ICAgcmV0dXJuIHRvVjgoYXJyYXkucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpKTsKQEAgLTEyNyw5
ICsxMjYsOSBAQAogICAgIH0KIAogICAgIC8vIFRyYW5zZm9ybSB0aGUgaG9sZGVyIGludG8gYSB3
cmFwcGVyIG9iamVjdCBmb3IgdGhlIGFycmF5LgotICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3Jh
cHBlcihhcmdzLkhvbGRlcigpLCBjbGFzc0luZGV4LCBhcnJheS5nZXQoKSk7CisgICAgVjhET01X
cmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIHR5cGUsIGFycmF5LmdldCgpKTsK
ICAgICBWOERPTVdyYXBwZXI6OnNldEluZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5KGFy
Z3MuSG9sZGVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzc0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZS0+aW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5nZXQoKS0+YmFzZUFkZHJlc3Mo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFycmF5LmdldCgpLT5sZW5ndGgoKSk7CiAgICAgcmV0dXJuIHRvVjgoYXJyYXkucmVsZWFzZSgp
LCBhcmdzLkhvbGRlcigpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
R0xVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwCShyZXZp
c2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25l
ZFNob3J0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiB7
CiAgICAgSU5DX1NUQVRTKCJET00uV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuQ29udHJ1Y3RvciIp
OwogCi0gICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8V2ViR0xVbnNpZ25lZFNob3J0QXJy
YXksIHVuc2lnbmVkIHNob3J0PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRl
eDo6V0VCR0xVTlNJR05FRFNIT1JUQVJSQVkpKTsKKyAgICByZXR1cm4gY29uc3RydWN0V2ViR0xB
cnJheTxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSwgdW5zaWduZWQgc2hvcnQ+KGFyZ3MsICZpbmZv
KTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6
OmdldENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEJ5dGVB
cnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNyArNDcsNyBAQAogewogICAgIElOQ19TVEFUUygiRE9NLldlYkdMVW5zaWduZWRCeXRl
QXJyYXkuQ29udHJ1Y3RvciIpOwogCi0gICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8V2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheSwgdW5zaWduZWQgY2hhcj4oYXJncywgVjhDbGFzc0luZGV4OjpU
b0ludChWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURCWVRFQVJSQVkpKTsKKyAgICByZXR1cm4g
Y29uc3RydWN0V2ViR0xBcnJheTxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LCB1bnNpZ25lZCBjaGFy
PihhcmdzLCAmaW5mbyk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMVW5zaWdu
ZWRCeXRlQXJyYXk6OmdldENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNoYXJlZFdvcmtlckN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTaGFyZWRXb3JrZXJDdXN0
b20uY3BwCShyZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U2hhcmVkV29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQAog
CiAgICAgLy8gU2V0dXAgdGhlIHN0YW5kYXJkIHdyYXBwZXIgb2JqZWN0IGludGVybmFsIGZpZWxk
cy4KICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXJPYmplY3QgPSBhcmdzLkhvbGRl
cigpOwotICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyT2JqZWN0LCBWOENs
YXNzSW5kZXg6OlNIQVJFRFdPUktFUiwgb2JqLmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNl
dERPTVdyYXBwZXIod3JhcHBlck9iamVjdCwgJmluZm8sIG9iai5nZXQoKSk7CiAKICAgICBvYmot
PnJlZigpOwogICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9NT2JqZWN0
KG9iai5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyT2JqZWN0
KSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRD
dXN0b20uY3BwCShyZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V2ViU29ja2V0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQAog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CiAKICAgICAvLyBTZXR1cCB0aGUgc3RhbmRh
cmQgd3JhcHBlciBvYmplY3QgaW50ZXJuYWwgZmllbGRzLgotICAgIFY4RE9NV3JhcHBlcjo6c2V0
RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRl
eDo6V0VCU09DS0VUKSwgd2ViU29ja2V0LmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldERP
TVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIHdlYlNvY2tldC5nZXQoKSk7CiAKICAgICAv
LyBBZGQgb2JqZWN0IHRvIHRoZSB3cmFwcGVyIG1hcC4KICAgICB3ZWJTb2NrZXQtPnJlZigpOwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNz
b3JDdXN0b20uY3BwCShyZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5
LDcgQEAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFhTTFRQcm9jZXNzb3I6OmNvbnN0cnVjdG9y
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5YU0xUUHJvY2Vzc29yLkNvbnN0cnVjdG9yIik7Ci0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnN0
cnVjdERPTU9iamVjdDxWOENsYXNzSW5kZXg6OlhTTFRQUk9DRVNTT1IsIFhTTFRQcm9jZXNzb3I+
KGFyZ3MpOworICAgIHJldHVybiBWOFByb3h5Ojpjb25zdHJ1Y3RET01PYmplY3Q8WFNMVFByb2Nl
c3Nvcj4oYXJncywgJmluZm8pOwogfQogCiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiA1NTc0MykKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0Q1NT
TWF0cml4Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBACiAg
ICAgICAgIHRocm93RXJyb3IoZWMpOwogCiAgICAgLy8gVHJhbnNmb3JtIHRoZSBob2xkZXIgaW50
byBhIHdyYXBwZXIgb2JqZWN0IGZvciB0aGUgbWF0cml4LgotICAgIFY4RE9NV3JhcHBlcjo6c2V0
RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRl
eDo6V0VCS0lUQ1NTTUFUUklYKSwgbWF0cml4LmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNl
dERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIG1hdHJpeC5nZXQoKSk7CiAgICAgcmV0
dXJuIHRvVjgobWF0cml4LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWdu
ZWRJbnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw3IEBACiB7CiAgICAgSU5DX1NUQVRTKCJET00uV2ViR0xVbnNpZ25l
ZEludEFycmF5LkNvbnRydWN0b3IiKTsKIAotICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5
PFdlYkdMVW5zaWduZWRJbnRBcnJheSwgdW5zaWduZWQgaW50PihhcmdzLCBWOENsYXNzSW5kZXg6
OlRvSW50KFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FRElOVEFSUkFZKSk7CisgICAgcmV0dXJu
IGNvbnN0cnVjdFdlYkdMQXJyYXk8V2ViR0xVbnNpZ25lZEludEFycmF5LCB1bnNpZ25lZCBpbnQ+
KGFyZ3MsICZpbmZvKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xVbnNpZ25l
ZEludEFycmF5OjpnZXRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3Jp
cHRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDcgKzU5LDYgQEAKIAogc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjcmVhdGVJbmpl
Y3RlZFNjcmlwdEhvc3RWOFdyYXBwZXIoSW5qZWN0ZWRTY3JpcHRIb3N0KiBob3N0KQogewotICAg
IFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkZXNjcmlwdG9yVHlwZSA9IFY4Q2xhc3NJbmRl
eDo6SU5KRUNURURTQ1JJUFRIT1NUOwogICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGZ1bmN0
aW9uID0gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OkdldFRlbXBsYXRlKCktPkdldEZ1bmN0aW9uKCk7
CiAgICAgaWYgKGZ1bmN0aW9uLklzRW1wdHkoKSkgewogICAgICAgICAvLyBSZXR1cm4gaWYgYWxs
b2NhdGlvbiBmYWlsZWQuCkBAIC03MCw3ICs2OSw3IEBACiAgICAgICAgIC8vIEF2b2lkIHNldHRp
bmcgdGhlIHdyYXBwZXIgaWYgYWxsb2NhdGlvbiBmYWlsZWQuCiAgICAgICAgIHJldHVybiB2ODo6
TG9jYWw8djg6Ok9iamVjdD4oKTsKICAgICB9Ci0gICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFw
cGVyKGluc3RhbmNlLCBWOENsYXNzSW5kZXg6OlRvSW50KGRlc2NyaXB0b3JUeXBlKSwgaG9zdCk7
CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGluc3RhbmNlLCAmVjhJbmplY3RlZFNj
cmlwdEhvc3Q6OmluZm8sIGhvc3QpOwogICAgIC8vIENyZWF0ZSBhIHdlYWsgcmVmZXJlbmNlIHRv
IHRoZSB2OCB3cmFwcGVyIG9mIEluc3BlY3RvckJhY2tlbmQgdG8gZGVyZWYKICAgICAvLyBJbnNw
ZWN0b3JCYWNrZW5kIHdoZW4gdGhlIHdyYXBwZXIgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuCiAgICAg
aG9zdC0+cmVmKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMSW50
QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V2ViR0xJbnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEludEFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNyArNDcsNyBAQAogewogICAgIElOQ19TVEFUUygiRE9NLldlYkdMSW50QXJyYXku
Q29udHJ1Y3RvciIpOwogCi0gICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8V2ViR0xJbnRB
cnJheSwgaW50PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6V0VCR0xJ
TlRBUlJBWSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5PFdlYkdMSW50QXJyYXks
IGludD4oYXJncywgJmluZm8pOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTElu
dEFycmF5OjpnZXRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxl
bWVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDYgKzQ0LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitXcmFwcGVyVHlw
ZUluZm8gVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3I6OmluZm8gPSB7VjhDbGFzc0luZGV4
OjpUb0ludChWOENsYXNzSW5kZXg6OkFVRElPKSwgVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0
b3I6OkdldFRlbXBsYXRlLCAwLCBmYWxzZSB9OworCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MQXVkaW9FbGVtZW50LkNvbnRy
dWN0b3IiKTsKQEAgLTY5LDcgKzcxLDcgQEAKICAgICAgICAgc3JjID0gdG9XZWJDb3JlU3RyaW5n
KGFyZ3NbMF0pOwogICAgIFJlZlB0cjxIVE1MQXVkaW9FbGVtZW50PiBhdWRpbyA9IEhUTUxBdWRp
b0VsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoZG9jdW1lbnQsIHNyYyk7CiAKLSAgICBW
OERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgVjhDbGFzc0luZGV4OjpU
b0ludChWOENsYXNzSW5kZXg6OkFVRElPKSwgYXVkaW8uZ2V0KCkpOworICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmVjhIVE1MQXVkaW9FbGVtZW50Q29uc3Ry
dWN0b3I6OmluZm8sIGF1ZGlvLmdldCgpKTsKICAgICBhdWRpby0+cmVmKCk7CiAgICAgVjhET01X
cmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01Ob2RlKGF1ZGlvLmdldCgpLCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsKICAgICByZXR1cm4gYXJncy5Ib2xk
ZXIoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xTaG9ydEFycmF5
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdl
YkdMU2hvcnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw3ICs0Nyw3IEBACiB7CiAgICAgSU5DX1NUQVRTKCJET00uV2ViR0xTaG9ydEFycmF5
LkNvbnRydWN0b3IiKTsKIAotICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5PFdlYkdMU2hv
cnRBcnJheSwgc2hvcnQ+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpX
RUJHTFNIT1JUQVJSQVkpKTsKKyAgICByZXR1cm4gY29uc3RydWN0V2ViR0xBcnJheTxXZWJHTFNo
b3J0QXJyYXksIHNob3J0PihhcmdzLCAmaW5mbyk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOFdlYkdMU2hvcnRBcnJheTo6Z2V0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhY
TUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBACiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcigiWE1MSHR0cFJlcXVlc3QgY29uc3RydWN0b3IncyBhc3NvY2lhdGVk
IGNvbnRleHQgaXMgbm90IGF2YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVycm9yKTsKICAg
ICBSZWZQdHI8WE1MSHR0cFJlcXVlc3Q+IHhtbEh0dHBSZXF1ZXN0ID0gWE1MSHR0cFJlcXVlc3Q6
OmNyZWF0ZShjb250ZXh0KTsKLSAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5I
b2xkZXIoKSwgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNU
KSwgeG1sSHR0cFJlcXVlc3QuZ2V0KCkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBl
cihhcmdzLkhvbGRlcigpLCAmaW5mbywgeG1sSHR0cFJlcXVlc3QuZ2V0KCkpOwogCiAgICAgLy8g
QWRkIG9iamVjdCB0byB0aGUgd3JhcHBlciBtYXAuCiAgICAgeG1sSHR0cFJlcXVlc3QtPnJlZigp
OwpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHJldmlzaW9uIDU1NzQzKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtp
bmcgY29weSkKQEAgLTg3MSw3ICs4NzEsNiBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4
SGVscGVycy5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEhpZGRlblByb3BlcnR5TmFt
ZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SGlkZGVuUHJvcGVydHlOYW1lLmgn
LAotICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SW5kZXguY3BwJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9WOEluZGV4LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4SXNvbGF0
ZWRDb250ZXh0LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhJc29sYXRlZENvbnRl
eHQuaCcsCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5ncy5tawo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0FuZHJvaWQudjhiaW5kaW5ncy5tawkocmV2aXNpb24gNTU3NDMpCisrKyBXZWJD
b3JlL0FuZHJvaWQudjhiaW5kaW5ncy5tawkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNiBA
QAogCWJpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcCBcCiAJYmluZGluZ3MvdjgvVjhIZWxw
ZXJzLmNwcCBcCiAJYmluZGluZ3MvdjgvVjhIaWRkZW5Qcm9wZXJ0eU5hbWUuY3BwIFwKLQliaW5k
aW5ncy92OC9WOEluZGV4LmNwcCBcCiAJYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmNwcCBc
CiAJYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAgXAogCWJpbmRpbmdzL3Y4L1Y4
TlBPYmplY3QuY3BwIFwK
</data>
<flag name="review"
          id="33467"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>