<?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>49156</bug_id>
          
          <creation_ts>2010-11-07 20:34:29 -0800</creation_ts>
          <short_desc>Move the rest of the cache-related files into loader/cache</short_desc>
          <delta_ts>2010-11-07 23:43:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>49153</dependson>
    
    <dependson>49158</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>305962</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-07 20:34:29 -0800</bug_when>
    <thetext>Move the rest of teh cache-related files into loader/cache</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305968</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-07 20:41:41 -0800</bug_when>
    <thetext>Ran into bug 49158 while trying to suggest-reviewers for this change. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305969</commentid>
    <comment_count>2</comment_count>
      <attachid>73209</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-07 20:42:13 -0800</bug_when>
    <thetext>Created attachment 73209
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305971</commentid>
    <comment_count>3</comment_count>
      <attachid>73209</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-07 20:44:02 -0800</bug_when>
    <thetext>Comment on attachment 73209
Patch

rs=me


+        Move the rest of teh cache-related files into loader/cache


teh -&gt; the</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305975</commentid>
    <comment_count>4</comment_count>
      <attachid>73210</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-07 20:49:26 -0800</bug_when>
    <thetext>Created attachment 73210
I had some unsaved changes to some build files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305979</commentid>
    <comment_count>5</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-11-07 21:02:12 -0800</bug_when>
    <thetext>Attachment 73209 did not build on qt:
Build output: http://queues.webkit.org/results/5431021</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305980</commentid>
    <comment_count>6</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-11-07 21:20:30 -0800</bug_when>
    <thetext>Attachment 73210 did not build on qt:
Build output: http://queues.webkit.org/results/5444016</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305981</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-07 21:28:45 -0800</bug_when>
    <thetext>WebKit2/WebKit2.pro needed a fix.  Fixed locally.  Landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305982</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-07 21:30:34 -0800</bug_when>
    <thetext>Committed r71496: &lt;http://trac.webkit.org/changeset/71496&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305986</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-07 21:47:38 -0800</bug_when>
    <thetext>Committed r71497: &lt;http://trac.webkit.org/changeset/71497&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306023</commentid>
    <comment_count>10</comment_count>
      <attachid>73210</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-07 23:43:17 -0800</bug_when>
    <thetext>Comment on attachment 73210
I had some unsaved changes to some build files.

Cleared review? from attachment 73210 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73209</attachid>
            <date>2010-11-07 20:42:13 -0800</date>
            <delta_ts>2010-11-07 20:49:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49156-20101107204211.patch</filename>
            <type>text/plain</type>
            <size>248774</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTQ5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTUgQEAKKzIwMTAtMTEtMDcgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
dGhlIHJlc3Qgb2YgdGVoIGNhY2hlLXJlbGF0ZWQgZmlsZXMgaW50byBsb2FkZXIvY2FjaGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTU2CisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxvYWRlci9DYWNoZVBvbGljeS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIGxvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGxvYWRlci9DYWNoZWRGb250LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIv
Q2FjaGVkRm9udC5oOiBSZW1vdmVkLgorICAgICAgICAqIGxvYWRlci9DYWNoZWRJbWFnZS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL0NhY2hlZEltYWdlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2Fk
ZXIvQ2FjaGVkUmVzb3VyY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkUmVz
b3VyY2VDbGllbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2VD
bGllbnRXYWxrZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJj
ZUNsaWVudFdhbGtlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJj
ZUhhbmRsZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlSGFu
ZGxlLmg6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlTG9hZGVyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkU2NyaXB0LmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBsb2FkZXIvQ2FjaGVkU2NyaXB0Lmg6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL0Nh
Y2hlZFhTTFN0eWxlU2hlZXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGxvYWRlci9DYWNoZWRY
U0xTdHlsZVNoZWV0Lmg6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlUG9s
aWN5Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlUG9saWN5LmguCisgICAgICAg
ICogbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwOiBDb3BpZWQgZnJvbSBXZWJD
b3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcC4KKyAgICAgICAgKiBsb2FkZXIvY2Fj
aGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNo
ZWRDU1NTdHlsZVNoZWV0LmguCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3Bw
OiBDb3BpZWQgZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250LmNwcC4KKyAgICAgICAgKiBs
b2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNo
ZWRGb250LmguCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcDogQ29waWVk
IGZyb20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwLgorICAgICAgICAqIGxvYWRlci9j
YWNoZS9DYWNoZWRJbWFnZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFn
ZS5oLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6IENvcGllZCBm
cm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcC4KKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2UuaDogQ29waWVkIGZyb20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
UmVzb3VyY2UuaC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQu
aDogQ29waWVkIGZyb20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaC4KKyAg
ICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuY3BwOiBDb3Bp
ZWQgZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5jcHAuCisg
ICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmg6IENvcGll
ZCBmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmguCisgICAg
ICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcDogQ29waWVkIGZyb20g
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwLgorICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2xvYWRl
ci9DYWNoZWRSZXNvdXJjZUhhbmRsZS5oLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZUxvYWRlci5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuaDogQ29waWVkIGZyb20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaC4K
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcDogQ29waWVkIGZyb20gV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmNwcC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkU2NyaXB0Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5oLgor
ICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcDogQ29waWVkIGZy
b20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAuCisgICAgICAgICogbG9h
ZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaDogQ29waWVkIGZyb20gV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5oLgorCiAyMDEwLTExLTA3ICBEYW5pZWwgQmF0ZXMgIDxk
YmF0ZXNAcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDog
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCShyZXZpc2lvbiA3MTQ5MykKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE5MDcsMjggKzE5MDcsMjggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJD
b3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVSZXNvdXJjZS5jcHAgXAogCVdlYkNvcmUvbG9hZGVy
L2FyY2hpdmUvQXJjaGl2ZVJlc291cmNlLmggXAogCVdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
LmNwcCBcCi0JV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAgXAotCVdlYkNv
cmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuaCBcCi0JV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
Rm9udC5jcHAgXAotCVdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuaCBcCi0JV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkSW1hZ2UuY3BwIFwKLQlXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5oIFwKKwlX
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcCBcCisJV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIFwKKwlXZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRGb250LmNwcCBcCisJV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oIFwK
KwlXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAgXAorCVdlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZEltYWdlLmggXAorCVdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlQ2xpZW50LmggXAorCVdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50
V2Fsa2VyLmNwcCBcCisJV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRX
YWxrZXIuaCBcCisJV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIFwKKwlX
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oIFwKKwlXZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgXAorCVdlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlSGFuZGxlLmggXAorCVdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcCBcCisJV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuaCBcCisJV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcCBcCisJV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmggXAorCVdlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFhTTFN0eWxlU2hlZXQuY3BwIFwKKwlXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRYU0xT
dHlsZVNoZWV0LmggXAorCVdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlLmggXAorCVdlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlUG9saWN5LmggXAogCVdlYkNvcmUvbG9hZGVyL0NhY2hlZE1ldGFk
YXRhLmggXAotCVdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlQ2xpZW50LmggXAotCVdlYkNv
cmUvbG9hZGVyL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcCBcCi0JV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCBcCi0JV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
UmVzb3VyY2UuY3BwIFwKLQlXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oIFwKLQlXZWJD
b3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgXAotCVdlYkNvcmUvbG9hZGVyL0Nh
Y2hlZFJlc291cmNlSGFuZGxlLmggXAotCVdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcCBcCi0JV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCBcCi0JV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmNwcCBcCi0JV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2Ny
aXB0LmggXAotCVdlYkNvcmUvbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwIFwKLQlXZWJD
b3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmggXAotCVdlYkNvcmUvbG9hZGVyL0NhY2hl
LmggXAotCVdlYkNvcmUvbG9hZGVyL0NhY2hlUG9saWN5LmggXAogCVdlYkNvcmUvbG9hZGVyL0Ny
b3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAgXAogCVdlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2lu
QWNjZXNzQ29udHJvbC5oIFwKIAlXZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJl
c3VsdENhY2hlLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzE0OTMpCisrKyBXZWJDb3JlL1dlYkNv
cmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjAxMyw2ICsyMDEzLDI2IEBACiAgICAgICAgICAg
ICAnbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZVJlc291cmNlQ29sbGVjdGlvbi5oJywKICAgICAgICAg
ICAgICdsb2FkZXIvY2FjaGUvQ2FjaGUuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvY2FjaGUv
Q2FjaGUuaCcsCisgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQu
Y3BwJywKKyAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oJywK
KyAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAnLAorICAgICAgICAgICAg
J2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgnLAorICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5jcHAnLAorICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5o
JywKKyAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwJywKKyAgICAg
ICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaCcsCisgICAgICAgICAgICAnbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50LmgnLAorICAgICAgICAgICAgJ2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5jcHAnLAorICAgICAgICAgICAgJ2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oJywKKyAgICAgICAgICAgICdsb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwJywKKyAgICAgICAgICAgICdsb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCcsCisgICAgICAgICAgICAnbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcCcsCisgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlTG9hZGVyLmgnLAorICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRT
Y3JpcHQuY3BwJywKKyAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmgnLAor
ICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcCcsCisgICAg
ICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaCcsCisgICAgICAgICAg
ICAnbG9hZGVyL2NhY2hlL0NhY2hlUG9saWN5LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9pY29u
L0ljb25EYXRhYmFzZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9pY29uL0ljb25EYXRhYmFz
ZS5oJywKICAgICAgICAgICAgICdsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VDbGllbnQuaCcsCkBA
IC0yMDMwLDMwICsyMDUwLDEwIEBACiAgICAgICAgICAgICAnbG9hZGVyL3dpbi9Eb2N1bWVudExv
YWRlcldpbi5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci93aW4vRnJhbWVMb2FkZXJXaW4uY3Bw
JywKICAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVkTWV0YWRhdGEuaCcsCi0gICAgICAgICAgICAn
bG9hZGVyL0NhY2hlUG9saWN5LmgnLAotICAgICAgICAgICAgJ2xvYWRlci9DYWNoZWRDU1NTdHls
ZVNoZWV0LmNwcCcsCi0gICAgICAgICAgICAnbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuaCcs
Ci0gICAgICAgICAgICAnbG9hZGVyL0NhY2hlZEZvbnQuY3BwJywKLSAgICAgICAgICAgICdsb2Fk
ZXIvQ2FjaGVkRm9udC5oJywKLSAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwJywK
LSAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVkSW1hZ2UuaCcsCi0gICAgICAgICAgICAnbG9hZGVy
L0NhY2hlZFJlc291cmNlLmNwcCcsCi0gICAgICAgICAgICAnbG9hZGVyL0NhY2hlZFJlc291cmNl
LmgnLAotICAgICAgICAgICAgJ2xvYWRlci9DYWNoZWRSZXNvdXJjZUNsaWVudC5oJywKLSAgICAg
ICAgICAgICdsb2FkZXIvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuY3BwJywKLSAgICAgICAg
ICAgICdsb2FkZXIvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCcsCi0gICAgICAgICAgICAn
bG9hZGVyL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcCcsCi0gICAgICAgICAgICAnbG9hZGVyL0Nh
Y2hlZFJlc291cmNlSGFuZGxlLmgnLAotICAgICAgICAgICAgJ2xvYWRlci9DYWNoZWRTY3JpcHQu
Y3BwJywKLSAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVkU2NyaXB0LmgnLAotICAgICAgICAgICAg
J2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcCcsCi0gICAgICAgICAgICAnbG9hZGVyL0Nh
Y2hlZFhTTFN0eWxlU2hlZXQuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0Nyb3NzT3JpZ2luQWNj
ZXNzQ29udHJvbC5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0Nv
bnRyb2wuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0
Q2FjaGUuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1
bHRDYWNoZS5oJywKLSAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3Bw
JywKLSAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCcsCiAgICAgICAg
ICAgICAnbG9hZGVyL0RvY3VtZW50TG9hZFRpbWluZy5oJywKICAgICAgICAgICAgICdsb2FkZXIv
RG9jdW1lbnRMb2FkZXIuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvRG9jdW1lbnRMb2FkZXIu
aCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDcx
NDkzKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjM3MDgsODYgKzIzNzA4LDYgQEAKIAkJCU5hbWU9ImxvYWRlciINCiAJCQk+DQog
CQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ2FjaGVkQ1NTU3R5bGVTaGVl
dC5jcHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxsb2FkZXJcQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0K
LQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENhY2hlZEZvbnQuY3BwIg0K
LQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9h
ZGVyXENhY2hlZEZvbnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxDYWNoZWRJbWFnZS5jcHAiDQotCQkJCT4NCi0JCQk8L0Zp
bGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ2FjaGVkSW1hZ2Uu
aCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGxvYWRlclxDYWNoZWRSZXNvdXJjZS5jcHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZp
bGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ2FjaGVkUmVzb3VyY2UuaCINCi0JCQkJ
Pg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxD
YWNoZWRSZXNvdXJjZUNsaWVudC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQot
CQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNw
cCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGxvYWRlclxDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIg0KLQkJCQk+DQotCQkJPC9GaWxl
Pg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENhY2hlZFJlc291cmNl
SGFuZGxlLmNwcCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGxvYWRlclxDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIg0KLQkJCQk+DQotCQkJPC9G
aWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENhY2hlZFJlc291
cmNlTG9hZGVyLmNwcCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGxvYWRlclxDYWNoZWRSZXNvdXJjZUxvYWRlci5oIg0KLQkJCQk+DQotCQkJ
PC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENhY2hlZFNj
cmlwdC5jcHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxsb2FkZXJcQ2FjaGVkU2NyaXB0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJ
PEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ2FjaGVkWFNMU3R5bGVTaGVldC5j
cHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIu
Llxsb2FkZXJcQ2FjaGVkWFNMU3R5bGVTaGVldC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJ
CTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENhY2hlUG9saWN5LmgiDQotCQkJ
CT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJc
Q3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0y
NDI1MCw2ICsyNDE3MCw4NiBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxjYWNoZVxD
YWNoZS5oIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorICAgICAgICAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcY2FjaGVcQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAiDQor
ICAgICAgICAJCQkJPg0KKyAgICAgICAgCQkJPC9GaWxlPg0KKyAgICAgICAgCQkJPEZpbGUNCisg
ICAgICAgIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxjYWNoZVxDYWNoZWRDU1NTdHlsZVNo
ZWV0LmgiDQorICAgICAgICAJCQkJPg0KKyAgICAgICAgCQkJPC9GaWxlPg0KKyAgICAgICAgCQkJ
PEZpbGUNCisgICAgICAgIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxjYWNoZVxDYWNoZWRG
b250LmNwcCINCisgICAgICAgIAkJCQk+DQorICAgICAgICAJCQk8L0ZpbGU+DQorICAgICAgICAJ
CQk8RmlsZQ0KKyAgICAgICAgCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGNhY2hlXENhY2hl
ZEZvbnQuaCINCisgICAgICAgIAkJCQk+DQorICAgICAgICAJCQk8L0ZpbGU+DQorICAgICAgICAJ
CQk8RmlsZQ0KKyAgICAgICAgCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGNhY2hlXENhY2hl
ZEltYWdlLmNwcCINCisgICAgICAgIAkJCQk+DQorICAgICAgICAJCQk8L0ZpbGU+DQorICAgICAg
ICAJCQk8RmlsZQ0KKyAgICAgICAgCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGNhY2hlXENh
Y2hlZEltYWdlLmgiDQorICAgICAgICAJCQkJPg0KKyAgICAgICAgCQkJPC9GaWxlPg0KKyAgICAg
ICAgCQkJPEZpbGUNCisgICAgICAgIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxjYWNoZVxD
YWNoZWRSZXNvdXJjZS5jcHAiDQorICAgICAgICAJCQkJPg0KKyAgICAgICAgCQkJPC9GaWxlPg0K
KyAgICAgICAgCQkJPEZpbGUNCisgICAgICAgIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxj
YWNoZVxDYWNoZWRSZXNvdXJjZS5oIg0KKyAgICAgICAgCQkJCT4NCisgICAgICAgIAkJCTwvRmls
ZT4NCisgICAgICAgIAkJCTxGaWxlDQorICAgICAgICAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2Fk
ZXJcY2FjaGVcQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCINCisgICAgICAgIAkJCQk+DQorICAgICAg
ICAJCQk8L0ZpbGU+DQorICAgICAgICAJCQk8RmlsZQ0KKyAgICAgICAgCQkJCVJlbGF0aXZlUGF0
aD0iLi5cbG9hZGVyXGNhY2hlXENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcCINCisgICAg
ICAgIAkJCQk+DQorICAgICAgICAJCQk8L0ZpbGU+DQorICAgICAgICAJCQk8RmlsZQ0KKyAgICAg
ICAgCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGNhY2hlXENhY2hlZFJlc291cmNlQ2xpZW50
V2Fsa2VyLmgiDQorICAgICAgICAJCQkJPg0KKyAgICAgICAgCQkJPC9GaWxlPg0KKyAgICAgICAg
CQkJPEZpbGUNCisgICAgICAgIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxjYWNoZVxDYWNo
ZWRSZXNvdXJjZUhhbmRsZS5jcHAiDQorICAgICAgICAJCQkJPg0KKyAgICAgICAgCQkJPC9GaWxl
Pg0KKyAgICAgICAgCQkJPEZpbGUNCisgICAgICAgIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRl
clxjYWNoZVxDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIg0KKyAgICAgICAgCQkJCT4NCisgICAgICAg
IAkJCTwvRmlsZT4NCisgICAgICAgIAkJCTxGaWxlDQorICAgICAgICAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxsb2FkZXJcY2FjaGVcQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwIg0KKyAgICAgICAgCQkJ
CT4NCisgICAgICAgIAkJCTwvRmlsZT4NCisgICAgICAgIAkJCTxGaWxlDQorICAgICAgICAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcY2FjaGVcQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCINCisg
ICAgICAgIAkJCQk+DQorICAgICAgICAJCQk8L0ZpbGU+DQorICAgICAgICAJCQk8RmlsZQ0KKyAg
ICAgICAgCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGNhY2hlXENhY2hlZFNjcmlwdC5jcHAi
DQorICAgICAgICAJCQkJPg0KKyAgICAgICAgCQkJPC9GaWxlPg0KKyAgICAgICAgCQkJPEZpbGUN
CisgICAgICAgIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxjYWNoZVxDYWNoZWRTY3JpcHQu
aCINCisgICAgICAgIAkJCQk+DQorICAgICAgICAJCQk8L0ZpbGU+DQorICAgICAgICAJCQk8Rmls
ZQ0KKyAgICAgICAgCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGNhY2hlXENhY2hlZFhTTFN0
eWxlU2hlZXQuY3BwIg0KKyAgICAgICAgCQkJCT4NCisgICAgICAgIAkJCTwvRmlsZT4NCisgICAg
ICAgIAkJCTxGaWxlDQorICAgICAgICAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcY2FjaGVc
Q2FjaGVkWFNMU3R5bGVTaGVldC5oIg0KKyAgICAgICAgCQkJCT4NCisgICAgICAgIAkJCTwvRmls
ZT4NCisgICAgICAgIAkJCTxGaWxlDQorICAgICAgICAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2Fk
ZXJcY2FjaGVcQ2FjaGVQb2xpY3kuaCINCisgICAgICAgIAkJCQk+DQorICAgICAgICAJCQk8L0Zp
bGU+DQogCQkJPC9GaWx0ZXI+DQogCQk8L0ZpbHRlcj4NCiAJCTxGaWx0ZXINCkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzE0OTMpCisr
KyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTE1MzEsNyArMTE1MzEsNiBAQAogCQlFNDQ2MTQxMjBDRDY4MjY5MDBGQURBNzUgLyog
SlNUaW1lUmFuZ2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
VGltZVJhbmdlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxNDEzMENE
NjgyNjkwMEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNUaW1lUmFuZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
NjJBNEEwMTEzRTcxQkUwMDRBNDIyMCAvKiBJbnRQb2ludEhhc2guaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW50UG9pbnRIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUU0NzIwNTNBMEU1QTA1M0EwMDA2QkI0RCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRSZXNvdXJjZUhhbmRsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDc3OEI3RDExNUE1ODFBMDBCNUQzNzIg
LyogSlNDdXN0b21FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0N1c3RvbUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3NzhC
N0UxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3VzdG9tRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNDdXN0b21FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNDdCNEJFNjBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MDI0LDYgKzE2MDIzLDI2IEBACiAJCUE4
RDJCMjUyMTI4N0E1NjAwMEFGNEREQSAvKiBjYWNoZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQkNCMTZDMDAwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hl
ZENTU1N0eWxlU2hlZXQuY3BwICovLAorCQkJCUJDQjE2QzAxMDk3OUMzQkQwMDQ2Nzc0MSAvKiBD
YWNoZWRDU1NTdHlsZVNoZWV0LmggKi8sCisJCQkJQkM2NEI0QzkwQ0I0Mjk1RDAwNUYyQjYyIC8q
IENhY2hlZEZvbnQuY3BwICovLAorCQkJCUJDNjRCNENBMENCNDI5NUQwMDVGMkI2MiAvKiBDYWNo
ZWRGb250LmggKi8sCisJCQkJQkNCMTZDMDIwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZEltYWdl
LmNwcCAqLywKKwkJCQlCQ0IxNkMwMzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkSW1hZ2UuaCAq
LywKKwkJCQlCQ0IxNkMwNjA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2UuY3BwICov
LAorCQkJCUJDQjE2QzA3MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRSZXNvdXJjZS5oICovLAor
CQkJCUJDRkIyRTVEMDk3OUU0NjQwMEJBNzAzRCAvKiBDYWNoZWRSZXNvdXJjZUNsaWVudC5oICov
LAorCQkJCUJDQjE2QzA4MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRSZXNvdXJjZUNsaWVudFdh
bGtlci5jcHAgKi8sCisJCQkJQkNCMTZDMDkwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFJlc291
cmNlQ2xpZW50V2Fsa2VyLmggKi8sCisJCQkJRTQ3QjRCRTcwRTcxMjQxNjAwMDM4ODU0IC8qIENh
Y2hlZFJlc291cmNlSGFuZGxlLmNwcCAqLywKKwkJCQlFNDdCNEJFNjBFNzEyNDE2MDAwMzg4NTQg
LyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCAqLywKKwkJCQlCQ0IxNkMxMDA5NzlDM0JEMDA0Njc3
NDEgLyogQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwICovLAorCQkJCUJDQjE2QzExMDk3OUMzQkQw
MDQ2Nzc0MSAvKiBDYWNoZWRSZXNvdXJjZUxvYWRlci5oICovLAorCQkJCUJDQjE2QzBBMDk3OUMz
QkQwMDQ2Nzc0MSAvKiBDYWNoZWRTY3JpcHQuY3BwICovLAorCQkJCUJDQjE2QzBCMDk3OUMzQkQw
MDQ2Nzc0MSAvKiBDYWNoZWRTY3JpcHQuaCAqLywKKwkJCQlCQ0IxNkMwRTA5NzlDM0JEMDA0Njc3
NDEgLyogQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAgKi8sCisJCQkJQkNCMTZDMEYwOTc5QzNCRDAw
NDY3NzQxIC8qIENhY2hlZFhTTFN0eWxlU2hlZXQuaCAqLywKKwkJCQlGNTg3ODY0OTAyREUzQTlB
MDFFQTQxMjIgLyogQ2FjaGVQb2xpY3kuaCAqLywKIAkJCQlCQ0IxNkJGRTA5NzlDM0JEMDA0Njc3
NDEgLyogQ2FjaGUuY3BwICovLAogCQkJCUJDQjE2QkZGMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNo
ZS5oICovLAogCQkJKTsKQEAgLTE3MjU4LDI3ICsxNzI3Nyw2IEBACiAJCQkJNTEyREQ4RTgwRDkx
RTY5MTAwMEY4OUVFIC8qIGFyY2hpdmUgKi8sCiAJCQkJNTEyNkU2QjYwQTJFM0FFRjAwNUMyOUZB
IC8qIGljb24gKi8sCiAJCQkJOTNBMUVBQTIwQTU2MzREODAwNjk2MEEwIC8qIG1hYyAqLywKLQkJ
CQlCQ0IxNkMwMDA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAgKi8s
Ci0JCQkJQkNCMTZDMDEwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZENTU1N0eWxlU2hlZXQuaCAq
LywKLQkJCQlCQzY0QjRDOTBDQjQyOTVEMDA1RjJCNjIgLyogQ2FjaGVkRm9udC5jcHAgKi8sCi0J
CQkJQkM2NEI0Q0EwQ0I0Mjk1RDAwNUYyQjYyIC8qIENhY2hlZEZvbnQuaCAqLywKLQkJCQlCQ0Ix
NkMwMjA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkSW1hZ2UuY3BwICovLAotCQkJCUJDQjE2QzAz
MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRJbWFnZS5oICovLAotCQkJCUJDQjE2QzA2MDk3OUMz
QkQwMDQ2Nzc0MSAvKiBDYWNoZWRSZXNvdXJjZS5jcHAgKi8sCi0JCQkJQkNCMTZDMDcwOTc5QzNC
RDAwNDY3NzQxIC8qIENhY2hlZFJlc291cmNlLmggKi8sCi0JCQkJQkNGQjJFNUQwOTc5RTQ2NDAw
QkE3MDNEIC8qIENhY2hlZFJlc291cmNlQ2xpZW50LmggKi8sCi0JCQkJQkNCMTZDMDgwOTc5QzNC
RDAwNDY3NzQxIC8qIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcCAqLywKLQkJCQlCQ0Ix
NkMwOTA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCAqLywK
LQkJCQlFNDdCNEJFNzBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3Bw
ICovLAotCQkJCUU0N0I0QkU2MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRs
ZS5oICovLAotCQkJCUU0NzIwNTNBMEU1QTA1M0EwMDA2QkI0RCAvKiBDYWNoZWRSZXNvdXJjZUhh
bmRsZS5oICovLAotCQkJCUJDQjE2QzEwMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRSZXNvdXJj
ZUxvYWRlci5jcHAgKi8sCi0JCQkJQkNCMTZDMTEwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFJl
c291cmNlTG9hZGVyLmggKi8sCi0JCQkJQkNCMTZDMEEwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hl
ZFNjcmlwdC5jcHAgKi8sCi0JCQkJQkNCMTZDMEIwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFNj
cmlwdC5oICovLAotCQkJCUJDQjE2QzBFMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRYU0xTdHls
ZVNoZWV0LmNwcCAqLywKLQkJCQlCQ0IxNkMwRjA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkWFNM
U3R5bGVTaGVldC5oICovLAotCQkJCUY1ODc4NjQ5MDJERTNBOUEwMUVBNDEyMiAvKiBDYWNoZVBv
bGljeS5oICovLAogCQkJCUUxQzQxNjE2MEY2NTYzMTgwMDkyRDJGQiAvKiBDcm9zc09yaWdpbkFj
Y2Vzc0NvbnRyb2wuY3BwICovLAogCQkJCUUxQzQxNjExMEY2NTYyRkQwMDkyRDJGQiAvKiBDcm9z
c09yaWdpbkFjY2Vzc0NvbnRyb2wuaCAqLywKIAkJCQlFMUM0MTVERDBGNjU1RDdDMDA5MkQyRkIg
LyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgKi8sCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9DYWNoZVBvbGljeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hl
UG9saWN5LmgJKHJldmlzaW9uIDcxNDkzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVQb2xpY3ku
aAkod29ya2luZyBjb3B5KQpAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIENhY2hlUG9saWN5X2gKLSNkZWZpbmUgQ2FjaGVQb2xpY3lfaAotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBlbnVtIENhY2hlUG9saWN5IHsKLSAgICAgICAgQ2FjaGVQ
b2xpY3lDYWNoZSwKLSAgICAgICAgQ2FjaGVQb2xpY3lWZXJpZnksCi0gICAgICAgIENhY2hlUG9s
aWN5UmV2YWxpZGF0ZSwKLSAgICAgICAgQ2FjaGVQb2xpY3lSZWxvYWQsCi0gICAgICAgIENhY2hl
UG9saWN5QWxsb3dTdGFsZQotICAgIH07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gNzE0OTMpCisrKyBXZWJDb3JlL2xv
YWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTEgKzAs
MCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhk
Lm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2Rl
Lm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0Bn
bWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVk
ZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdlcyBm
cm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KLSov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0Lmgi
Ci0KLSNpbmNsdWRlICJDYWNoZS5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKLSNpbmNsdWRlICJIVFRQ
UGFyc2Vycy5oIgotI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKLSNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJsb2FkZXIuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Q2FjaGVk
Q1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQot
ICAgIDogQ2FjaGVkUmVzb3VyY2UodXJsLCBDU1NTdHlsZVNoZWV0KQotICAgICwgbV9kZWNvZGVy
KFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9jc3MiLCBjaGFyc2V0KSkKLXsKLSAg
ICAvLyBQcmVmZXIgdGV4dC9jc3MgYnV0IGFjY2VwdCBhbnkgdHlwZSAoZGVsbC5jb20gc2VydmVz
IGEgc3R5bGVzaGVldAotICAgIC8vIGFzIHRleHQvaHRtbDsgc2VlIDxodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ1MT4pLgotICAgIHNldEFjY2VwdCgidGV4dC9jc3Ms
Ki8qO3E9MC4xIik7Ci19Ci0KLUNhY2hlZENTU1N0eWxlU2hlZXQ6On5DYWNoZWRDU1NTdHlsZVNo
ZWV0KCkKLXsKLX0KLQotdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpkaWRBZGRDbGllbnQoQ2Fj
aGVkUmVzb3VyY2VDbGllbnQgKmMpCi17Ci0gICAgaWYgKCFpc0xvYWRpbmcoKSkKLSAgICAgICAg
Yy0+c2V0Q1NTU3R5bGVTaGVldChtX3VybCwgbV9yZXNwb25zZS51cmwoKSwgbV9kZWNvZGVyLT5l
bmNvZGluZygpLm5hbWUoKSwgdGhpcyk7Ci19Ci0KLXZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6
YWxsQ2xpZW50c1JlbW92ZWQoKQotewotICAgIGlmICghQ2FjaGU6OnNob3VsZE1ha2VSZXNvdXJj
ZVB1cmdlYWJsZU9uRXZpY3Rpb24oKSAmJiBpc1NhZmVUb01ha2VQdXJnZWFibGUoKSkKLSAgICAg
ICAgbWFrZVB1cmdlYWJsZSh0cnVlKTsKLX0KLQotdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0Ojpz
ZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGNocykKLXsKLSAgICBtX2RlY29kZXItPnNldEVuY29k
aW5nKGNocywgVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9tSFRUUEhlYWRlcik7Ci19
Ci0KLVN0cmluZyBDYWNoZWRDU1NTdHlsZVNoZWV0OjplbmNvZGluZygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCk7Ci19Ci0gICAgCi1jb25zdCBTdHJp
bmcgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6c2hlZXRUZXh0KGJvb2wgZW5mb3JjZU1JTUVUeXBlLCBi
b29sKiBoYXNWYWxpZE1JTUVUeXBlKSBjb25zdCAKLXsgCi0gICAgQVNTRVJUKCFpc1B1cmdlYWJs
ZSgpKTsKLQotICAgIGlmICghbV9kYXRhIHx8IG1fZGF0YS0+aXNFbXB0eSgpIHx8ICFjYW5Vc2VT
aGVldChlbmZvcmNlTUlNRVR5cGUsIGhhc1ZhbGlkTUlNRVR5cGUpKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgCi0gICAgaWYgKCFtX2RlY29kZWRTaGVldFRleHQuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybiBtX2RlY29kZWRTaGVldFRleHQ7Ci0gICAgCi0gICAgLy8gRG9uJ3QgY2Fj
aGUgdGhlIGRlY29kZWQgdGV4dCwgcmVnZW5lcmF0aW5nIGlzIGNoZWFwIGFuZCBpdCBjYW4gdXNl
IHF1aXRlIGEgYml0IG9mIG1lbW9yeQotICAgIFN0cmluZyBzaGVldFRleHQgPSBtX2RlY29kZXIt
PmRlY29kZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwotICAgIHNoZWV0VGV4dCAr
PSBtX2RlY29kZXItPmZsdXNoKCk7Ci0gICAgcmV0dXJuIHNoZWV0VGV4dDsKLX0KLQotdm9pZCBD
YWNoZWRDU1NTdHlsZVNoZWV0OjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICBpZiAoIWFsbERhdGFSZWNlaXZlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9kYXRhID0gZGF0YTsKLSAgICBzZXRFbmNvZGVkU2l6ZShtX2Rh
dGEuZ2V0KCkgPyBtX2RhdGEtPnNpemUoKSA6IDApOwotICAgIC8vIERlY29kZSB0aGUgZGF0YSB0
byBmaW5kIG91dCB0aGUgZW5jb2RpbmcgYW5kIGtlZXAgdGhlIHNoZWV0IHRleHQgYXJvdW5kIGR1
cmluZyBjaGVja05vdGlmeSgpCi0gICAgaWYgKG1fZGF0YSkgewotICAgICAgICBtX2RlY29kZWRT
aGVldFRleHQgPSBtX2RlY29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXpl
KCkpOwotICAgICAgICBtX2RlY29kZWRTaGVldFRleHQgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOwot
ICAgIH0KLSAgICBzZXRMb2FkaW5nKGZhbHNlKTsKLSAgICBjaGVja05vdGlmeSgpOwotICAgIC8v
IENsZWFyIHRoZSBkZWNvZGVkIHRleHQgYXMgaXQgaXMgdW5saWtlbHkgdG8gYmUgbmVlZGVkIGlt
bWVkaWF0ZWx5IGFnYWluIGFuZCBpcyBjaGVhcCB0byByZWdlbmVyYXRlLgotICAgIG1fZGVjb2Rl
ZFNoZWV0VGV4dCA9IFN0cmluZygpOwotfQotCi12b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmNo
ZWNrTm90aWZ5KCkKLXsKLSAgICBpZiAoaXNMb2FkaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKLSAgICB3aGlsZSAo
Q2FjaGVkUmVzb3VyY2VDbGllbnQgKmMgPSB3Lm5leHQoKSkKLSAgICAgICAgYy0+c2V0Q1NTU3R5
bGVTaGVldChtX3VybCwgbV9yZXNwb25zZS51cmwoKSwgbV9kZWNvZGVyLT5lbmNvZGluZygpLm5h
bWUoKSwgdGhpcyk7Ci19Ci0KLXZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6ZXJyb3IoKQotewot
ICAgIHNldExvYWRpbmcoZmFsc2UpOwotICAgIHNldEVycm9yT2NjdXJyZWQodHJ1ZSk7Ci0gICAg
Y2hlY2tOb3RpZnkoKTsKLX0KLQotYm9vbCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpjYW5Vc2VTaGVl
dChib29sIGVuZm9yY2VNSU1FVHlwZSwgYm9vbCogaGFzVmFsaWRNSU1FVHlwZSkgY29uc3QKLXsK
LSAgICBpZiAoZXJyb3JPY2N1cnJlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IAotICAgIGlmICghZW5mb3JjZU1JTUVUeXBlICYmICFoYXNWYWxpZE1JTUVUeXBlKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFRoaXMgY2hlY2sgZXhhY3RseSBtYXRjaGVzIEZpcmVm
b3guICBOb3RlIHRoYXQgd2UgZ3JhYiB0aGUgQ29udGVudC1UeXBlCi0gICAgLy8gaGVhZGVyIGRp
cmVjdGx5IGJlY2F1c2Ugd2Ugd2FudCB0byBzZWUgd2hhdCB0aGUgdmFsdWUgaXMgQkVGT1JFIGNv
bnRlbnQKLSAgICAvLyBzbmlmZmluZy4gIEZpcmVmb3ggZG9lcyB0aGlzIGJ5IHNldHRpbmcgYSAi
dHlwZSBoaW50IiBvbiB0aGUgY2hhbm5lbC4KLSAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIHNo
b3VsZCBiZSBvYnNlcnZhdGlvbmFsbHkgZXF1aXZhbGVudC4KLSAgICAvLwotICAgIC8vIFRoaXMg
Y29kZSBkZWZhdWx0cyB0byBhbGxvd2luZyB0aGUgc3R5bGVzaGVldCBmb3Igbm9uLUhUVFAgcHJv
dG9jb2xzIHNvCi0gICAgLy8gZm9sa3MgY2FuIHVzZSBzdGFuZGFyZHMgbW9kZSBmb3IgbG9jYWwg
SFRNTCBkb2N1bWVudHMuCi0gICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJv
bU1lZGlhVHlwZShyZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIikpOwot
ICAgIGJvb2wgdHlwZU9LID0gbWltZVR5cGUuaXNFbXB0eSgpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KG1pbWVUeXBlLCAidGV4dC9jc3MiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwgImFw
cGxpY2F0aW9uL3gtdW5rbm93bi1jb250ZW50LXR5cGUiKTsKLSAgICBpZiAoaGFzVmFsaWRNSU1F
VHlwZSkKLSAgICAgICAgKmhhc1ZhbGlkTUlNRVR5cGUgPSB0eXBlT0s7Ci0gICAgaWYgKCFlbmZv
cmNlTUlNRVR5cGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiB0eXBlT0s7Ci19
Ci0gCi19CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiA3
MTQ5MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtu
b2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11
ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdl
aW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBU
aGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBp
bWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQg
aGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgotKi8KLQotI2lmbmRlZiBDYWNo
ZWRDU1NTdHlsZVNoZWV0X2gKLSNkZWZpbmUgQ2FjaGVkQ1NTU3R5bGVTaGVldF9oCi0KLSNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZS5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI7Ci0gICAgY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKLQotICAg
IGNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgewotICAg
IHB1YmxpYzoKLSAgICAgICAgQ2FjaGVkQ1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIFVSTCwg
Y29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKLSAgICAgICAgdmlydHVhbCB+Q2FjaGVkQ1NTU3R5bGVT
aGVldCgpOwotCi0gICAgICAgIGNvbnN0IFN0cmluZyBzaGVldFRleHQoYm9vbCBlbmZvcmNlTUlN
RVR5cGUgPSB0cnVlLCBib29sKiBoYXNWYWxpZE1JTUVUeXBlID0gMCkgY29uc3Q7Ci0KLSAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOwotICAg
ICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFsbENsaWVudHNSZW1vdmVkKCk7Ci0KLSAgICAg
ICAgdmlydHVhbCB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYpOwotICAgICAgICB2aXJ0
dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgZXJyb3IoKTsKLQotICAgICAgICB2b2lkIGNoZWNrTm90aWZ5KCk7
Ci0gICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBjYW5Vc2VTaGVldChib29sIGVuZm9y
Y2VNSU1FVHlwZSwgYm9vbCogaGFzVmFsaWRNSU1FVHlwZSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1
YWwgUHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gUHVyZ2VMYXN0
OyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVy
PiBtX2RlY29kZXI7Ci0gICAgICAgIFN0cmluZyBtX2RlY29kZWRTaGVldFRleHQ7Ci0gICAgfTsK
LQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCShyZXZpc2lvbiA3MTQ5MykK
KysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIx
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2Jp
bGUsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhY2hlZEZv
bnQuaCIKLQotI2lmIFBMQVRGT1JNKENHKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RL
KSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIChPUyhXSU5ET1dTKSB8fCBPUyhMSU5VWCkgfHwg
T1MoRlJFRUJTRCkpKSB8fCBQTEFURk9STShIQUlLVSkgfHwgT1MoV0lOQ0UpIHx8IFBMQVRGT1JN
KEFORFJPSUQpIHx8IFBMQVRGT1JNKEJSRVdNUCkKLSNkZWZpbmUgU1RPUkVfRk9OVF9DVVNUT01f
UExBVEZPUk1fREFUQQotI2VuZGlmCi0KLSNpbmNsdWRlICJDYWNoZS5oIgotI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxr
ZXIuaCIKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgImxvYWRl
ci5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmZGVmIFNUT1JFX0ZPTlRfQ1VTVE9N
X1BMQVRGT1JNX0RBVEEKLSNpbmNsdWRlICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgiCi0jZW5k
aWYKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5j
bHVkZSAiTm9kZUxpc3QuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
Rm9udEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdHRWxlbWVudC5oIgotI2VuZGlmCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotQ2FjaGVkRm9udDo6Q2FjaGVkRm9udChjb25zdCBTdHJpbmcgJnVy
bCkKLSAgICA6IENhY2hlZFJlc291cmNlKHVybCwgRm9udFJlc291cmNlKQotICAgICwgbV9mb250
RGF0YSgwKQotICAgICwgbV9sb2FkSW5pdGlhdGVkKGZhbHNlKQotI2lmIEVOQUJMRShTVkdfRk9O
VFMpCi0gICAgLCBtX2lzU1ZHRm9udChmYWxzZSkKLSNlbmRpZgotewotfQotCi1DYWNoZWRGb250
Ojp+Q2FjaGVkRm9udCgpCi17Ci0jaWZkZWYgU1RPUkVfRk9OVF9DVVNUT01fUExBVEZPUk1fREFU
QQotICAgIGRlbGV0ZSBtX2ZvbnREYXRhOwotI2VuZGlmCi19Ci0KLXZvaWQgQ2FjaGVkRm9udDo6
bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciopCi17Ci0gICAgLy8gRG9uJ3QgbG9hZCB0aGUgZmls
ZSB5ZXQuICBXYWl0IGZvciBhbiBhY2Nlc3MgYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGxvYWQuCi0g
ICAgc2V0TG9hZGluZyh0cnVlKTsKLX0KLQotdm9pZCBDYWNoZWRGb250OjpkaWRBZGRDbGllbnQo
Q2FjaGVkUmVzb3VyY2VDbGllbnQqIGMpCi17Ci0gICAgaWYgKCFpc0xvYWRpbmcoKSkKLSAgICAg
ICAgYy0+Zm9udExvYWRlZCh0aGlzKTsKLX0KLQotdm9pZCBDYWNoZWRGb250OjpkYXRhKFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICBp
ZiAoIWFsbERhdGFSZWNlaXZlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhID0gZGF0
YTsgICAgIAotICAgIHNldEVuY29kZWRTaXplKG1fZGF0YS5nZXQoKSA/IG1fZGF0YS0+c2l6ZSgp
IDogMCk7Ci0gICAgc2V0TG9hZGluZyhmYWxzZSk7Ci0gICAgY2hlY2tOb3RpZnkoKTsKLX0KLQot
dm9pZCBDYWNoZWRGb250OjpiZWdpbkxvYWRJZk5lZWRlZChDYWNoZWRSZXNvdXJjZUxvYWRlciog
ZGwpCi17Ci0gICAgaWYgKCFtX2xvYWRJbml0aWF0ZWQpIHsKLSAgICAgICAgbV9sb2FkSW5pdGlh
dGVkID0gdHJ1ZTsKLSAgICAgICAgY2FjaGUoKS0+bG9hZGVyKCktPmxvYWQoZGwsIHRoaXMsIGZh
bHNlKTsKLSAgICB9Ci19Ci0KLWJvb2wgQ2FjaGVkRm9udDo6ZW5zdXJlQ3VzdG9tRm9udERhdGEo
KQotewotI2lmZGVmIFNUT1JFX0ZPTlRfQ1VTVE9NX1BMQVRGT1JNX0RBVEEKLSNpZiBFTkFCTEUo
U1ZHX0ZPTlRTKQotICAgIEFTU0VSVCghbV9pc1NWR0ZvbnQpOwotI2VuZGlmCi0gICAgaWYgKCFt
X2ZvbnREYXRhICYmICFlcnJvck9jY3VycmVkKCkgJiYgIWlzTG9hZGluZygpICYmIG1fZGF0YSkg
ewotICAgICAgICBtX2ZvbnREYXRhID0gY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0YShtX2Rh
dGEuZ2V0KCkpOwotICAgICAgICBpZiAoIW1fZm9udERhdGEpCi0gICAgICAgICAgICBzZXRFcnJv
ck9jY3VycmVkKHRydWUpOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBtX2ZvbnREYXRhOwot
fQotCi1Gb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6OnBsYXRmb3JtRGF0YUZyb21DdXN0b21E
YXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRhdGlvbiBv
cmllbnRhdGlvbiwgRm9udFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKLXsKLSNpZiBFTkFC
TEUoU1ZHX0ZPTlRTKQotICAgIGlmIChtX2V4dGVybmFsU1ZHRG9jdW1lbnQpCi0gICAgICAgIHJl
dHVybiBGb250UGxhdGZvcm1EYXRhKHNpemUsIGJvbGQsIGl0YWxpYyk7Ci0jZW5kaWYKLSNpZmRl
ZiBTVE9SRV9GT05UX0NVU1RPTV9QTEFURk9STV9EQVRBCi0gICAgQVNTRVJUKG1fZm9udERhdGEp
OwotICAgIHJldHVybiBtX2ZvbnREYXRhLT5mb250UGxhdGZvcm1EYXRhKHN0YXRpY19jYXN0PGlu
dD4oc2l6ZSksIGJvbGQsIGl0YWxpYywgb3JpZW50YXRpb24sIHJlbmRlcmluZ01vZGUpOwotI2Vs
c2UKLSAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YSgpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFC
TEUoU1ZHX0ZPTlRTKQotYm9vbCBDYWNoZWRGb250OjplbnN1cmVTVkdGb250RGF0YSgpCi17Ci0g
ICAgQVNTRVJUKG1faXNTVkdGb250KTsKLSAgICBpZiAoIW1fZXh0ZXJuYWxTVkdEb2N1bWVudCAm
JiAhZXJyb3JPY2N1cnJlZCgpICYmICFpc0xvYWRpbmcoKSAmJiBtX2RhdGEpIHsKLSAgICAgICAg
bV9leHRlcm5hbFNWR0RvY3VtZW50ID0gU1ZHRG9jdW1lbnQ6OmNyZWF0ZSgwLCBLVVJMKCkpOwot
ICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQtPm9wZW4oKTsKLQotICAgICAgICBSZWZQdHI8
VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0
ZSgiYXBwbGljYXRpb24veG1sIik7Ci0gICAgICAgIG1fZXh0ZXJuYWxTVkdEb2N1bWVudC0+d3Jp
dGUoZGVjb2Rlci0+ZGVjb2RlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSkpOwotICAg
ICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQtPndyaXRlKGRlY29kZXItPmZsdXNoKCkpOwotICAg
ICAgICBpZiAoZGVjb2Rlci0+c2F3RXJyb3IoKSkgewotICAgICAgICAgICAgbV9leHRlcm5hbFNW
R0RvY3VtZW50LmNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0g
ICAgICAgIG1fZXh0ZXJuYWxTVkdEb2N1bWVudC0+ZmluaXNoUGFyc2luZygpOwotICAgICAgICBt
X2V4dGVybmFsU1ZHRG9jdW1lbnQtPmNsb3NlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fZXh0
ZXJuYWxTVkdEb2N1bWVudDsKLX0KLQotU1ZHRm9udEVsZW1lbnQqIENhY2hlZEZvbnQ6OmdldFNW
R0ZvbnRCeUlkKGNvbnN0IFN0cmluZyYgZm9udE5hbWUpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1f
aXNTVkdGb250KTsKLSAgICBSZWZQdHI8Tm9kZUxpc3Q+IGxpc3QgPSBtX2V4dGVybmFsU1ZHRG9j
dW1lbnQtPmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoU1ZHTmFtZXM6OmZvbnRUYWcubmFtZXNwYWNl
VVJJKCksIFNWR05hbWVzOjpmb250VGFnLmxvY2FsTmFtZSgpKTsKLSAgICBpZiAoIWxpc3QpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgdW5zaWduZWQgbGlzdExlbmd0aCA9IGxpc3QtPmxlbmd0
aCgpOwotICAgIGlmICghbGlzdExlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSNpZm5kZWYg
TkRFQlVHCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3RMZW5ndGg7ICsraSkgewot
ICAgICAgICBBU1NFUlQobGlzdC0+aXRlbShpKSk7Ci0gICAgICAgIEFTU0VSVChsaXN0LT5pdGVt
KGkpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb250VGFnKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBpZiAoZm9udE5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZH
Rm9udEVsZW1lbnQqPihsaXN0LT5pdGVtKDApKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsaXN0TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgU1ZHRm9udEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdGb250RWxlbWVudCo+KGxpc3QtPml0ZW0oaSkpOwotICAgICAgICBp
ZiAoZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBmb250TmFtZSkKLSAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLXZvaWQg
Q2FjaGVkRm9udDo6YWxsQ2xpZW50c1JlbW92ZWQoKQotewotI2lmZGVmIFNUT1JFX0ZPTlRfQ1VT
VE9NX1BMQVRGT1JNX0RBVEEKLSAgICBpZiAobV9mb250RGF0YSkgewotICAgICAgICBkZWxldGUg
bV9mb250RGF0YTsKLSAgICAgICAgbV9mb250RGF0YSA9IDA7Ci0gICAgfQotI2VuZGlmCi19Ci0K
LXZvaWQgQ2FjaGVkRm9udDo6Y2hlY2tOb3RpZnkoKQotewotICAgIGlmIChpc0xvYWRpbmcoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHco
bV9jbGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQgKmMgPSB3Lm5leHQo
KSkKLSAgICAgICAgIGMtPmZvbnRMb2FkZWQodGhpcyk7Ci19Ci0KLQotdm9pZCBDYWNoZWRGb250
OjplcnJvcigpCi17Ci0gICAgc2V0TG9hZGluZyhmYWxzZSk7Ci0gICAgc2V0RXJyb3JPY2N1cnJl
ZCh0cnVlKTsKLSAgICBjaGVja05vdGlmeSgpOwotfQotCi19CkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9DYWNoZWRGb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkRm9udC5o
CShyZXZpc2lvbiA3MTQ5MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDYWNoZWRG
b250X2gKLSNkZWZpbmUgQ2FjaGVkRm9udF9oCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5o
IgotI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdN
b2RlLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgRU5BQkxFKFNWR19GT05UUykK
LSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwot
Y2xhc3MgQ2FjaGU7Ci1jbGFzcyBGb250UGxhdGZvcm1EYXRhOwotY2xhc3MgU1ZHRm9udEVsZW1l
bnQ7Ci0KLXN0cnVjdCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOwotCi1jbGFzcyBDYWNoZWRGb250
IDogcHVibGljIENhY2hlZFJlc291cmNlIHsKLXB1YmxpYzoKLSAgICBDYWNoZWRGb250KGNvbnN0
IFN0cmluZyYgdXJsKTsKLSAgICB2aXJ0dWFsIH5DYWNoZWRGb250KCk7Ci0gICAgCi0gICAgdmly
dHVhbCB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVy
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpOwotICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOwotCi0gICAg
dmlydHVhbCB2b2lkIGFsbENsaWVudHNSZW1vdmVkKCk7Ci0KLSAgICB2b2lkIGNoZWNrTm90aWZ5
KCk7Ci0KLSAgICB2b2lkIGJlZ2luTG9hZElmTmVlZGVkKENhY2hlZFJlc291cmNlTG9hZGVyKiBk
bCk7Ci0KLSAgICBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKCk7Ci0gICAgRm9udFBsYXRmb3Jt
RGF0YSBwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJv
b2wgaXRhbGljLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBGb250UmVuZGVyaW5nTW9k
ZSA9IE5vcm1hbFJlbmRlcmluZ01vZGUpOwotCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBi
b29sIGlzU1ZHRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTVkdGb250OyB9Ci0gICAgdm9pZCBz
ZXRTVkdGb250KGJvb2wgaXNTVkcpIHsgbV9pc1NWR0ZvbnQgPSBpc1NWRzsgfQotICAgIGJvb2wg
ZW5zdXJlU1ZHRm9udERhdGEoKTsKLSAgICBTVkdGb250RWxlbWVudCogZ2V0U1ZHRm9udEJ5SWQo
Y29uc3QgU3RyaW5nJikgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhKiBtX2ZvbnREYXRhOwotICAgIGJvb2wgbV9sb2FkSW5pdGlhdGVkOwotCi0j
aWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBib29sIG1faXNTVkdGb250OwotICAgIFJlZlB0cjxT
VkdEb2N1bWVudD4gbV9leHRlcm5hbFNWR0RvY3VtZW50OwotI2VuZGlmCi0KLSAgICBmcmllbmQg
Y2xhc3MgQ2FjaGU7Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2Fj
aGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNw
cAkocmV2aXNpb24gNzE0OTMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzg2ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAxOTk4
IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAx
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwMiBX
YWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDA2IFNh
bXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICAgIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0KLSNpbmNsdWRl
ICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkNhY2hlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VDbGllbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgot
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNp
bmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5j
bHVkZSAiUmVxdWVzdC5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIFBMQVRGT1JNKENH
KQotI2luY2x1ZGUgIlBERkRvY3VtZW50SW1hZ2UuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNW
R19BU19JTUFHRSkKLSNpbmNsdWRlICJTVkdJbWFnZS5oIgotI2VuZGlmCi0KLXVzaW5nIHN0ZDo6
bWF4OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShj
b25zdCBTdHJpbmcmIHVybCkKLSAgICA6IENhY2hlZFJlc291cmNlKHVybCwgSW1hZ2VSZXNvdXJj
ZSkKLSAgICAsIG1faW1hZ2UoMCkKLSAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyKHRo
aXMsICZDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpCi0gICAgLCBt
X2h0dHBTdGF0dXNDb2RlRXJyb3JPY2N1cnJlZChmYWxzZSkKLXsKLSAgICBzZXRTdGF0dXMoVW5r
bm93bik7Ci19Ci0KLUNhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2UpCi0gICAg
OiBDYWNoZWRSZXNvdXJjZShTdHJpbmcoKSwgSW1hZ2VSZXNvdXJjZSkKLSAgICAsIG1faW1hZ2Uo
aW1hZ2UpCi0gICAgLCBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lcih0aGlzLCAmQ2FjaGVkSW1h
Z2U6OmRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKQotICAgICwgbV9odHRwU3RhdHVzQ29k
ZUVycm9yT2NjdXJyZWQoZmFsc2UpCi17Ci0gICAgc2V0U3RhdHVzKENhY2hlZCk7Ci0gICAgc2V0
TG9hZGluZyhmYWxzZSk7Ci19Ci0KLUNhY2hlZEltYWdlOjp+Q2FjaGVkSW1hZ2UoKQotewotfQot
Ci12b2lkIENhY2hlZEltYWdlOjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZChUaW1lcjxD
YWNoZWRJbWFnZT4qKQotewotICAgIEFTU0VSVCghaGFzQ2xpZW50cygpKTsKLSAgICBkZXN0cm95
RGVjb2RlZERhdGEoKTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6bG9hZChDYWNoZWRSZXNvdXJj
ZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgaWYgKCFjYWNoZWRSZXNvdXJj
ZUxvYWRlciB8fCBjYWNoZWRSZXNvdXJjZUxvYWRlci0+YXV0b0xvYWRJbWFnZXMoKSkKLSAgICAg
ICAgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIHRydWUsIERvU2Vj
dXJpdHlDaGVjaywgdHJ1ZSk7Ci0gICAgZWxzZQotICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTsK
LX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50
KiBjKQotewotICAgIGlmIChtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5pc0FjdGl2ZSgpKQot
ICAgICAgICBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5zdG9wKCk7Ci0gICAgCi0gICAgaWYg
KG1fZGF0YSAmJiAhbV9pbWFnZSAmJiAhZXJyb3JPY2N1cnJlZCgpKSB7Ci0gICAgICAgIGNyZWF0
ZUltYWdlKCk7Ci0gICAgICAgIG1faW1hZ2UtPnNldERhdGEobV9kYXRhLCB0cnVlKTsKLSAgICB9
Ci0KLSAgICBpZiAobV9pbWFnZSAmJiAhbV9pbWFnZS0+aXNOdWxsKCkpCi0gICAgICAgIGMtPmlt
YWdlQ2hhbmdlZCh0aGlzKTsKLQotICAgIGlmICghaXNMb2FkaW5nKCkpCi0gICAgICAgIGMtPm5v
dGlmeUZpbmlzaGVkKHRoaXMpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjphbGxDbGllbnRzUmVt
b3ZlZCgpCi17Ci0gICAgaWYgKG1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAg
bV9pbWFnZS0+cmVzZXRBbmltYXRpb24oKTsKLSAgICBpZiAoZG91YmxlIGludGVydmFsID0gY2Fj
aGUoKS0+ZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCgpKQotICAgICAgICBtX2RlY29k
ZWREYXRhRGVsZXRpb25UaW1lci5zdGFydE9uZVNob3QoaW50ZXJ2YWwpOwotfQotCi1zdGF0aWMg
SW1hZ2UqIGJyb2tlbkltYWdlKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxJ
bWFnZT4sIGJyb2tlbkltYWdlLCAoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtaXNzaW5n
SW1hZ2UiKSkpOwotICAgIHJldHVybiBicm9rZW5JbWFnZS5nZXQoKTsKLX0KLQotc3RhdGljIElt
YWdlKiBudWxsSW1hZ2UoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPEJpdG1h
cEltYWdlPiwgbnVsbEltYWdlLCAoQml0bWFwSW1hZ2U6OmNyZWF0ZSgpKSk7Ci0gICAgcmV0dXJu
IG51bGxJbWFnZS5nZXQoKTsKLX0KLQotSW1hZ2UqIENhY2hlZEltYWdlOjppbWFnZSgpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKCFpc1B1cmdlYWJsZSgpKTsKLQotICAgIGlmIChlcnJvck9jY3VycmVk
KCkpCi0gICAgICAgIHJldHVybiBicm9rZW5JbWFnZSgpOwotCi0gICAgaWYgKG1faW1hZ2UpCi0g
ICAgICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwotCi0gICAgcmV0dXJuIG51bGxJbWFnZSgpOwot
fQotCi12b2lkIENhY2hlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6
ZSYgY29udGFpbmVyU2l6ZSkKLXsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZS0+
c2V0Q29udGFpbmVyU2l6ZShjb250YWluZXJTaXplKTsKLX0KLQotYm9vbCBDYWNoZWRJbWFnZTo6
dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAg
ICAgIHJldHVybiBtX2ltYWdlLT51c2VzQ29udGFpbmVyU2l6ZSgpOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIENhY2hlZEltYWdlOjppbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25z
dAotewotICAgIGlmIChtX2ltYWdlKQotICAgICAgICByZXR1cm4gbV9pbWFnZS0+aGFzUmVsYXRp
dmVXaWR0aCgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENhY2hlZEltYWdlOjpp
bWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAg
ICAgcmV0dXJuIG1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0KCk7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLUludFNpemUgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZShmbG9hdCBtdWx0aXBsaWVy
KSBjb25zdAotewotICAgIEFTU0VSVCghaXNQdXJnZWFibGUoKSk7Ci0KLSAgICBpZiAoIW1faW1h
Z2UpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0gICAgaWYgKG11bHRpcGxpZXIgPT0gMS4w
ZikKLSAgICAgICAgcmV0dXJuIG1faW1hZ2UtPnNpemUoKTsKLSAgICAgICAgCi0gICAgLy8gRG9u
J3QgbGV0IGltYWdlcyB0aGF0IGhhdmUgYSB3aWR0aC9oZWlnaHQgPj0gMSBzaHJpbmsgYmVsb3cg
MSB3aGVuIHpvb21lZC4KLSAgICBib29sIGhhc1dpZHRoID0gbV9pbWFnZS0+c2l6ZSgpLndpZHRo
KCkgPiAwOwotICAgIGJvb2wgaGFzSGVpZ2h0ID0gbV9pbWFnZS0+c2l6ZSgpLmhlaWdodCgpID4g
MDsKLSAgICBpbnQgd2lkdGggPSBtX2ltYWdlLT5zaXplKCkud2lkdGgoKSAqIChtX2ltYWdlLT5o
YXNSZWxhdGl2ZVdpZHRoKCkgPyAxLjBmIDogbXVsdGlwbGllcik7Ci0gICAgaW50IGhlaWdodCA9
IG1faW1hZ2UtPnNpemUoKS5oZWlnaHQoKSAqIChtX2ltYWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgp
ID8gMS4wZiA6IG11bHRpcGxpZXIpOwotICAgIGlmIChoYXNXaWR0aCkKLSAgICAgICAgd2lkdGgg
PSBtYXgoMSwgd2lkdGgpOwotICAgIGlmIChoYXNIZWlnaHQpCi0gICAgICAgIGhlaWdodCA9IG1h
eCgxLCBoZWlnaHQpOwotICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwotfQotCi1J
bnRSZWN0IENhY2hlZEltYWdlOjppbWFnZVJlY3QoZmxvYXQgbXVsdGlwbGllcikgY29uc3QKLXsK
LSAgICBBU1NFUlQoIWlzUHVyZ2VhYmxlKCkpOwotCi0gICAgaWYgKCFtX2ltYWdlKQotICAgICAg
ICByZXR1cm4gSW50UmVjdCgpOwotICAgIGlmIChtdWx0aXBsaWVyID09IDEuMGYgfHwgKCFtX2lt
YWdlLT5oYXNSZWxhdGl2ZVdpZHRoKCkgJiYgIW1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0KCkp
KQotICAgICAgICByZXR1cm4gbV9pbWFnZS0+cmVjdCgpOwotCi0gICAgZmxvYXQgd2lkdGhNdWx0
aXBsaWVyID0gKG1faW1hZ2UtPmhhc1JlbGF0aXZlV2lkdGgoKSA/IDEuMGYgOiBtdWx0aXBsaWVy
KTsKLSAgICBmbG9hdCBoZWlnaHRNdWx0aXBsaWVyID0gKG1faW1hZ2UtPmhhc1JlbGF0aXZlSGVp
Z2h0KCkgPyAxLjBmIDogbXVsdGlwbGllcik7Ci0KLSAgICAvLyBEb24ndCBsZXQgaW1hZ2VzIHRo
YXQgaGF2ZSBhIHdpZHRoL2hlaWdodCA+PSAxIHNocmluayBiZWxvdyAxIHdoZW4gem9vbWVkLgot
ICAgIGJvb2wgaGFzV2lkdGggPSBtX2ltYWdlLT5yZWN0KCkud2lkdGgoKSA+IDA7Ci0gICAgYm9v
bCBoYXNIZWlnaHQgPSBtX2ltYWdlLT5yZWN0KCkuaGVpZ2h0KCkgPiAwOwotCi0gICAgaW50IHdp
ZHRoID0gc3RhdGljX2Nhc3Q8aW50PihtX2ltYWdlLT5yZWN0KCkud2lkdGgoKSAqIHdpZHRoTXVs
dGlwbGllcik7Ci0gICAgaW50IGhlaWdodCA9IHN0YXRpY19jYXN0PGludD4obV9pbWFnZS0+cmVj
dCgpLmhlaWdodCgpICogaGVpZ2h0TXVsdGlwbGllcik7Ci0gICAgaWYgKGhhc1dpZHRoKQotICAg
ICAgICB3aWR0aCA9IG1heCgxLCB3aWR0aCk7Ci0gICAgaWYgKGhhc0hlaWdodCkKLSAgICAgICAg
aGVpZ2h0ID0gbWF4KDEsIGhlaWdodCk7Ci0KLSAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4o
bV9pbWFnZS0+cmVjdCgpLngoKSAqIHdpZHRoTXVsdGlwbGllcik7Ci0gICAgaW50IHkgPSBzdGF0
aWNfY2FzdDxpbnQ+KG1faW1hZ2UtPnJlY3QoKS55KCkgKiBoZWlnaHRNdWx0aXBsaWVyKTsKLQot
ICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIENhY2hl
ZEltYWdlOjpub3RpZnlPYnNlcnZlcnMoY29uc3QgSW50UmVjdCogY2hhbmdlUmVjdCkKLXsKLSAg
ICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7Ci0gICAgd2hpbGUgKENh
Y2hlZFJlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCi0gICAgICAgIGMtPmltYWdlQ2hhbmdl
ZCh0aGlzLCBjaGFuZ2VSZWN0KTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6Y2xlYXIoKQotewot
ICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOwotICAgIG1faW1hZ2UgPSAwOwotICAgIHNldEVuY29k
ZWRTaXplKDApOwotfQotCi1pbmxpbmUgdm9pZCBDYWNoZWRJbWFnZTo6Y3JlYXRlSW1hZ2UoKQot
ewotICAgIC8vIENyZWF0ZSB0aGUgaW1hZ2UgaWYgaXQgZG9lc24ndCB5ZXQgZXhpc3QuCi0gICAg
aWYgKG1faW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSNpZiBQTEFURk9STShDRykgJiYgIVVTRShX
RUJLSVRfSU1BR0VfREVDT0RFUlMpCi0gICAgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAi
YXBwbGljYXRpb24vcGRmIikgewotICAgICAgICBtX2ltYWdlID0gUERGRG9jdW1lbnRJbWFnZTo6
Y3JlYXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoU1ZH
X0FTX0lNQUdFKQotICAgIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImltYWdlL3N2Zyt4
bWwiKSB7Ci0gICAgICAgIG1faW1hZ2UgPSBTVkdJbWFnZTo6Y3JlYXRlKHRoaXMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVh
dGUodGhpcyk7Ci19Ci0KLXNpemVfdCBDYWNoZWRJbWFnZTo6bWF4aW11bURlY29kZWRJbWFnZVNp
emUoKQotewotICAgIEZyYW1lKiBmcmFtZSA9IG1fcmVxdWVzdCA/IG1fcmVxdWVzdC0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKS0+ZnJhbWUoKSA6IDA7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7Ci0g
ICAgcmV0dXJuIHNldHRpbmdzID8gc2V0dGluZ3MtPm1heGltdW1EZWNvZGVkSW1hZ2VTaXplKCkg
OiAwOwotfQotCi12b2lkIENhY2hlZEltYWdlOjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICBtX2RhdGEgPSBkYXRhOwotCi0g
ICAgY3JlYXRlSW1hZ2UoKTsKLQotICAgIGJvb2wgc2l6ZUF2YWlsYWJsZSA9IGZhbHNlOwotCi0g
ICAgLy8gSGF2ZSB0aGUgaW1hZ2UgdXBkYXRlIGl0cyBkYXRhIGZyb20gaXRzIGludGVybmFsIGJ1
ZmZlci4KLSAgICAvLyBJdCB3aWxsIG5vdCBkbyBhbnl0aGluZyBub3csIGJ1dCB3aWxsIGRlbGF5
IGRlY29kaW5nIHVudGlsIAotICAgIC8vIHF1ZXJpZWQgZm9yIGluZm8gKGxpa2Ugc2l6ZSBvciBz
cGVjaWZpYyBpbWFnZSBmcmFtZXMpLgotICAgIHNpemVBdmFpbGFibGUgPSBtX2ltYWdlLT5zZXRE
YXRhKG1fZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLQotICAgIC8vIEdvIGFoZWFkIGFuZCB0ZWxs
IG91ciBvYnNlcnZlcnMgdG8gdHJ5IHRvIGRyYXcgaWYgd2UgaGF2ZSBlaXRoZXIKLSAgICAvLyBy
ZWNlaXZlZCBhbGwgdGhlIGRhdGEgb3IgdGhlIHNpemUgaXMga25vd24uICBFYWNoIGNodW5rIGZy
b20gdGhlCi0gICAgLy8gbmV0d29yayBjYXVzZXMgb2JzZXJ2ZXJzIHRvIHJlcGFpbnQsIHdoaWNo
IHdpbGwgZm9yY2UgdGhhdCBjaHVuawotICAgIC8vIHRvIGRlY29kZS4KLSAgICBpZiAoc2l6ZUF2
YWlsYWJsZSB8fCBhbGxEYXRhUmVjZWl2ZWQpIHsKLSAgICAgICAgc2l6ZV90IG1heERlY29kZWRJ
bWFnZVNpemUgPSBtYXhpbXVtRGVjb2RlZEltYWdlU2l6ZSgpOwotICAgICAgICBJbnRTaXplIHMg
PSBpbWFnZVNpemUoMS4wZik7Ci0gICAgICAgIHNpemVfdCBlc3RpbWF0ZWREZWNvZGVkSW1hZ2VT
aXplID0gcy53aWR0aCgpICogcy5oZWlnaHQoKSAqIDQ7IC8vIG5vIG92ZXJmbG93IGNoZWNrCi0g
ICAgICAgIGlmIChtX2ltYWdlLT5pc051bGwoKSB8fCAobWF4RGVjb2RlZEltYWdlU2l6ZSA+IDAg
JiYgZXN0aW1hdGVkRGVjb2RlZEltYWdlU2l6ZSA+IG1heERlY29kZWRJbWFnZVNpemUpKSB7Ci0g
ICAgICAgICAgICBlcnJvcigpOwotICAgICAgICAgICAgaWYgKGluQ2FjaGUoKSkKLSAgICAgICAg
ICAgICAgICBjYWNoZSgpLT5yZW1vdmUodGhpcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gb25seSByZWRy
YXcgdGhlIGRlY29kZWQgYmFuZCBvZiB0aGUgaW1hZ2UsIGJ1dCB3aXRoIHRoZSBjdXJyZW50IGRl
c2lnbgotICAgICAgICAvLyAoZGVjb2RpbmcgZGVsYXllZCB1bnRpbCBwYWludGluZykgdGhhdCBz
ZWVtcyBoYXJkLgotICAgICAgICBub3RpZnlPYnNlcnZlcnMoKTsKLQotICAgICAgICBpZiAobV9p
bWFnZSkKLSAgICAgICAgICAgIHNldEVuY29kZWRTaXplKG1faW1hZ2UtPmRhdGEoKSA/IG1faW1h
Z2UtPmRhdGEoKS0+c2l6ZSgpIDogMCk7Ci0gICAgfQotICAgIAotICAgIGlmIChhbGxEYXRhUmVj
ZWl2ZWQpIHsKLSAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7Ci0gICAgICAgIGNoZWNrTm90aWZ5
KCk7Ci0gICAgfQotfQotCi12b2lkIENhY2hlZEltYWdlOjplcnJvcigpCi17Ci0gICAgY2xlYXIo
KTsKLSAgICBzZXRFcnJvck9jY3VycmVkKHRydWUpOwotICAgIG1fZGF0YS5jbGVhcigpOwotICAg
IG5vdGlmeU9ic2VydmVycygpOwotICAgIHNldExvYWRpbmcoZmFsc2UpOwotICAgIGNoZWNrTm90
aWZ5KCk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmNoZWNrTm90aWZ5KCkKLXsKLSAgICBpZiAo
aXNMb2FkaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENhY2hlZFJlc291cmNlQ2xpZW50
V2Fsa2VyIHcobV9jbGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGMg
PSB3Lm5leHQoKSkKLSAgICAgICAgYy0+bm90aWZ5RmluaXNoZWQodGhpcyk7Ci19Ci0KLXZvaWQg
Q2FjaGVkSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCi17Ci0gICAgYm9vbCBjYW5EZWxldGVJ
bWFnZSA9ICFtX2ltYWdlIHx8IChtX2ltYWdlLT5oYXNPbmVSZWYoKSAmJiBtX2ltYWdlLT5pc0Jp
dG1hcEltYWdlKCkpOwotICAgIGlmIChpc1NhZmVUb01ha2VQdXJnZWFibGUoKSAmJiBjYW5EZWxl
dGVJbWFnZSAmJiAhaXNMb2FkaW5nKCkpIHsKLSAgICAgICAgLy8gSW1hZ2UgcmVmcyB0aGUgZGF0
YSBidWZmZXIgc28gd2Ugc2hvdWxkIG5vdCBtYWtlIGl0IHB1cmdlYWJsZSB3aGlsZSB0aGUgaW1h
Z2UgaXMgYWxpdmUuIAotICAgICAgICAvLyBJbnZva2luZyBhZGRDbGllbnQoKSB3aWxsIHJlY29u
c3RydWN0IHRoZSBpbWFnZSBvYmplY3QuCi0gICAgICAgIG1faW1hZ2UgPSAwOwotICAgICAgICBz
ZXREZWNvZGVkU2l6ZSgwKTsKLSAgICAgICAgaWYgKCFDYWNoZTo6c2hvdWxkTWFrZVJlc291cmNl
UHVyZ2VhYmxlT25FdmljdGlvbigpKQotICAgICAgICAgICAgbWFrZVB1cmdlYWJsZSh0cnVlKTsK
LSAgICB9IGVsc2UgaWYgKG1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgbV9p
bWFnZS0+ZGVzdHJveURlY29kZWREYXRhKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmRlY29k
ZWRTaXplQ2hhbmdlZChjb25zdCBJbWFnZSogaW1hZ2UsIGludCBkZWx0YSkKLXsKLSAgICBpZiAo
aW1hZ2UgIT0gbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHNldERlY29kZWRT
aXplKGRlY29kZWRTaXplKCkgKyBkZWx0YSk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmRpZERy
YXcoY29uc3QgSW1hZ2UqIGltYWdlKQotewotICAgIGlmIChpbWFnZSAhPSBtX2ltYWdlKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgZG91YmxlIHRpbWVTdGFtcCA9IEZyYW1lVmlldzo6Y3Vy
cmVudFBhaW50VGltZVN0YW1wKCk7Ci0gICAgaWYgKCF0aW1lU3RhbXApIC8vIElmIGRpZERyYXcg
aXMgY2FsbGVkIG91dHNpZGUgb2YgYSBGcmFtZSBwYWludC4KLSAgICAgICAgdGltZVN0YW1wID0g
Y3VycmVudFRpbWUoKTsKLSAgICAKLSAgICBDYWNoZWRSZXNvdXJjZTo6ZGlkQWNjZXNzRGVjb2Rl
ZERhdGEodGltZVN0YW1wKTsKLX0KLQotYm9vbCBDYWNoZWRJbWFnZTo6c2hvdWxkUGF1c2VBbmlt
YXRpb24oY29uc3QgSW1hZ2UqIGltYWdlKQotewotICAgIGlmIChpbWFnZSAhPSBtX2ltYWdlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxr
ZXIgdyhtX2NsaWVudHMpOwotICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcu
bmV4dCgpKSB7Ci0gICAgICAgIGlmIChjLT53aWxsUmVuZGVySW1hZ2UodGhpcykpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
Q2FjaGVkSW1hZ2U6OmFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKiBpbWFnZSkKLXsKLSAg
ICBpZiAoaW1hZ2UgPT0gbV9pbWFnZSkKLSAgICAgICAgbm90aWZ5T2JzZXJ2ZXJzKCk7Ci19Ci0K
LXZvaWQgQ2FjaGVkSW1hZ2U6OmNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25z
dCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChpbWFnZSA9PSBtX2ltYWdlKQotICAgICAgICBu
b3RpZnlPYnNlcnZlcnMoJnJlY3QpOwotfQotCi19IC8vbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gNzE0OTMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNo
ZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICAgIENvcHly
aWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHly
aWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmln
aHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0qLwotCi0jaWZuZGVmIENhY2hlZEltYWdlX2gKLSNkZWZpbmUgQ2FjaGVkSW1hZ2Vf
aAotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJJbWFnZU9ic2VydmVy
LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hlZFJlc291
cmNlTG9hZGVyOwotY2xhc3MgQ2FjaGU7Ci0KLWNsYXNzIENhY2hlZEltYWdlIDogcHVibGljIENh
Y2hlZFJlc291cmNlLCBwdWJsaWMgSW1hZ2VPYnNlcnZlciB7Ci0gICAgZnJpZW5kIGNsYXNzIENh
Y2hlOwotCi1wdWJsaWM6Ci0gICAgQ2FjaGVkSW1hZ2UoY29uc3QgU3RyaW5nJiB1cmwpOwotICAg
IENhY2hlZEltYWdlKEltYWdlKik7Ci0gICAgdmlydHVhbCB+Q2FjaGVkSW1hZ2UoKTsKLSAgICAK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIpOwotCi0gICAgSW1hZ2UqIGltYWdlKCkgY29uc3Q7Ci0KLSAgICBib29sIGNhblJl
bmRlcihmbG9hdCBtdWx0aXBsaWVyKSBjb25zdCB7IHJldHVybiAhZXJyb3JPY2N1cnJlZCgpICYm
ICFpbWFnZVNpemUobXVsdGlwbGllcikuaXNFbXB0eSgpOyB9Ci0KLSAgICAvLyBUaGVzZSBhcmUg
b25seSB1c2VkIGZvciBTVkdJbWFnZSByaWdodCBub3cKLSAgICB2b2lkIHNldEltYWdlQ29udGFp
bmVyU2l6ZShjb25zdCBJbnRTaXplJik7Ci0gICAgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXpl
KCkgY29uc3Q7Ci0gICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdDsKLSAgICBi
b29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdDsKLSAgICAKLSAgICAvLyBCb3RoIG9m
IHRoZXNlIG1ldGhvZHMgdGFrZSBhIHpvb20gbXVsdGlwbGllciB0aGF0IGNhbiBiZSB1c2VkIHRv
IGluY3JlYXNlIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlIGltYWdlIGJ5IHRoZQotICAgIC8vIHpv
b20uCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoZmxvYXQgbXVsdGlwbGllcikgY29uc3Q7ICAvLyBy
ZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb21wbGV0ZSBpbWFnZS4KLSAgICBJbnRSZWN0IGltYWdl
UmVjdChmbG9hdCBtdWx0aXBsaWVyKSBjb25zdDsgIC8vIFRoZSBzaXplIG9mIHRoZSBjdXJyZW50
bHkgZGVjb2RlZCBwb3J0aW9uIG9mIHRoZSBpbWFnZS4KLQotICAgIHZpcnR1YWwgdm9pZCBkaWRB
ZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
YWxsQ2xpZW50c1JlbW92ZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRh
KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwotICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOwotICAg
IAotICAgIHZpcnR1YWwgdm9pZCBodHRwU3RhdHVzQ29kZUVycm9yKCkgeyBtX2h0dHBTdGF0dXND
b2RlRXJyb3JPY2N1cnJlZCA9IHRydWU7IH0KLSAgICBib29sIGh0dHBTdGF0dXNDb2RlRXJyb3JP
Y2N1cnJlZCgpIGNvbnN0IHsgcmV0dXJuIG1faHR0cFN0YXR1c0NvZGVFcnJvck9jY3VycmVkOyB9
Ci0gICAgCi0gICAgdm9pZCBjaGVja05vdGlmeSgpOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBp
c0ltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCBjbGVhcigpOwotICAg
IAotICAgIGJvb2wgc3RpbGxOZWVkc0xvYWQoKSBjb25zdCB7IHJldHVybiAhZXJyb3JPY2N1cnJl
ZCgpICYmIHN0YXR1cygpID09IFVua25vd24gJiYgIWlzTG9hZGluZygpOyB9Ci0gICAgdm9pZCBs
b2FkKCk7Ci0KLSAgICAvLyBJbWFnZU9ic2VydmVyCi0gICAgdmlydHVhbCB2b2lkIGRlY29kZWRT
aXplQ2hhbmdlZChjb25zdCBJbWFnZSogaW1hZ2UsIGludCBkZWx0YSk7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZERyYXcoY29uc3QgSW1hZ2UqKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQYXVz
ZUFuaW1hdGlvbihjb25zdCBJbWFnZSopOwotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25BZHZh
bmNlZChjb25zdCBJbWFnZSopOwotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VkSW5SZWN0KGNvbnN0
IEltYWdlKiwgY29uc3QgSW50UmVjdCYpOwotCi1wcml2YXRlOgotICAgIHZvaWQgY3JlYXRlSW1h
Z2UoKTsKLSAgICBzaXplX3QgbWF4aW11bURlY29kZWRJbWFnZVNpemUoKTsKLSAgICAvLyBJZiBu
b3QgbnVsbCwgY2hhbmdlUmVjdCBpcyB0aGUgY2hhbmdlZCBwYXJ0IG9mIHRoZSBpbWFnZS4KLSAg
ICB2b2lkIG5vdGlmeU9ic2VydmVycyhjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0ID0gMCk7Ci0g
ICAgdm9pZCBkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZChUaW1lcjxDYWNoZWRJbWFnZT4q
KTsKLSAgICB2aXJ0dWFsIFB1cmdlUHJpb3JpdHkgcHVyZ2VQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIFB1cmdlRmlyc3Q7IH0KLQotICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKLSAgICBUaW1l
cjxDYWNoZWRJbWFnZT4gbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXI7Ci0gICAgYm9vbCBtX2h0
dHBTdGF0dXNDb2RlRXJyb3JPY2N1cnJlZDsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA3MTQ5MykKKysrIFdlYkNvcmUvbG9hZGVy
L0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1NjUgKzAsMCBAQAotLyoK
LSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkK
LSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0g
ICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20p
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLQotI2luY2x1ZGUgIkNhY2hlLmgiCi0jaW5jbHVkZSAiQ2Fj
aGVkTWV0YWRhdGEuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGUuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUg
IkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJLVVJM
LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlB1cmdlYWJsZUJ1ZmZlci5oIgot
I2luY2x1ZGUgIlJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRl
ci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lm
bmRlZiBOREVCVUcKLXN0YXRpYyBSZWZDb3VudGVkTGVha0NvdW50ZXIgY2FjaGVkUmVzb3VyY2VM
ZWFrQ291bnRlcigiQ2FjaGVkUmVzb3VyY2UiKTsKLSNlbmRpZgotCi1DYWNoZWRSZXNvdXJjZTo6
Q2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIFR5cGUgdHlwZSkKLSAgICA6IG1fdXJs
KHVybCkKLSAgICAsIG1fcmVxdWVzdCgwKQotICAgICwgbV9yZXNwb25zZVRpbWVzdGFtcChjdXJy
ZW50VGltZSgpKQotICAgICwgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUoMCkKLSAgICAsIG1fZW5j
b2RlZFNpemUoMCkKLSAgICAsIG1fZGVjb2RlZFNpemUoMCkKLSAgICAsIG1fYWNjZXNzQ291bnQo
MCkKLSAgICAsIG1faGFuZGxlQ291bnQoMCkKLSAgICAsIG1fcHJlbG9hZENvdW50KDApCi0gICAg
LCBtX3ByZWxvYWRSZXN1bHQoUHJlbG9hZE5vdFJlZmVyZW5jZWQpCi0gICAgLCBtX2luTGl2ZURl
Y29kZWRSZXNvdXJjZXNMaXN0KGZhbHNlKQotICAgICwgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2lu
Z0xheWVyKGZhbHNlKQotICAgICwgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHRydWUpCi0g
ICAgLCBtX2Vycm9yT2NjdXJyZWQoZmFsc2UpCi0gICAgLCBtX2luQ2FjaGUoZmFsc2UpCi0gICAg
LCBtX2xvYWRpbmcoZmFsc2UpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fc3RhdHVzKFBl
bmRpbmcpCi0jaWZuZGVmIE5ERUJVRwotICAgICwgbV9kZWxldGVkKGZhbHNlKQotICAgICwgbV9s
cnVJbmRleCgwKQotI2VuZGlmCi0gICAgLCBtX25leHRJbkFsbFJlc291cmNlc0xpc3QoMCkKLSAg
ICAsIG1fcHJldkluQWxsUmVzb3VyY2VzTGlzdCgwKQotICAgICwgbV9uZXh0SW5MaXZlUmVzb3Vy
Y2VzTGlzdCgwKQotICAgICwgbV9wcmV2SW5MaXZlUmVzb3VyY2VzTGlzdCgwKQotICAgICwgbV9j
YWNoZWRSZXNvdXJjZUxvYWRlcigwKQotICAgICwgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSgwKQot
ICAgICwgbV9wcm94eVJlc291cmNlKDApCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIGNhY2hlZFJl
c291cmNlTGVha0NvdW50ZXIuaW5jcmVtZW50KCk7Ci0jZW5kaWYKLX0KLQotQ2FjaGVkUmVzb3Vy
Y2U6On5DYWNoZWRSZXNvdXJjZSgpCi17Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNlVG9SZXZhbGlk
YXRlKTsgLy8gU2hvdWxkIGJlIHRydWUgYmVjYXVzZSBjYW5EZWxldGUoKSBjaGVja3MgdGhpcy4K
LSAgICBBU1NFUlQoY2FuRGVsZXRlKCkpOwotICAgIEFTU0VSVCghaW5DYWNoZSgpKTsKLSAgICBB
U1NFUlQoIW1fZGVsZXRlZCk7Ci0gICAgQVNTRVJUKHVybCgpLmlzTnVsbCgpIHx8IGNhY2hlKCkt
PnJlc291cmNlRm9yVVJMKHVybCgpKSAhPSB0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9k
ZWxldGVkID0gdHJ1ZTsKLSAgICBjYWNoZWRSZXNvdXJjZUxlYWtDb3VudGVyLmRlY3JlbWVudCgp
OwotI2VuZGlmCi0KLSAgICBpZiAobV9jYWNoZWRSZXNvdXJjZUxvYWRlcikKLSAgICAgICAgbV9j
YWNoZWRSZXNvdXJjZUxvYWRlci0+cmVtb3ZlQ2FjaGVkUmVzb3VyY2UodGhpcyk7Ci19Ci0KLXZv
aWQgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291
cmNlTG9hZGVyLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5
Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKLXsKLSAgICBtX3NlbmRSZXNv
dXJjZUxvYWRDYWxsYmFja3MgPSBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOwotICAgIGNhY2hl
KCktPmxvYWRlcigpLT5sb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLCB0aGlzLCBpbmNyZW1lbnRh
bCwgc2VjdXJpdHlDaGVjaywgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7Ci0gICAgbV9sb2Fk
aW5nID0gdHJ1ZTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6ZGF0YShQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4sIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewotICAgIGlmICghYWxsRGF0YVJl
Y2VpdmVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRX
YWxrZXIgdyhtX2NsaWVudHMpOwotICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9
IHcubmV4dCgpKQotICAgICAgICBjLT5ub3RpZnlGaW5pc2hlZCh0aGlzKTsKLX0KLQotdm9pZCBD
YWNoZWRSZXNvdXJjZTo6ZmluaXNoKCkKLXsKLSAgICBtX3N0YXR1cyA9IENhY2hlZDsKLX0KLQot
Ym9vbCBDYWNoZWRSZXNvdXJjZTo6aXNFeHBpcmVkKCkgY29uc3QKLXsKLSAgICBpZiAobV9yZXNw
b25zZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGN1cnJl
bnRBZ2UoKSA+IGZyZXNobmVzc0xpZmV0aW1lKCk7Ci19Ci0gICAgCi1kb3VibGUgQ2FjaGVkUmVz
b3VyY2U6OmN1cnJlbnRBZ2UoKSBjb25zdAotewotICAgIC8vIFJGQzI2MTYgMTMuMi4zCi0gICAg
Ly8gTm8gY29tcGVuc2F0aW9uIGZvciBsYXRlbmN5IGFzIHRoYXQgaXMgbm90IHRlcnJpYmx5IGlt
cG9ydGFudCBpbiBwcmFjdGljZQotICAgIGRvdWJsZSBkYXRlVmFsdWUgPSBtX3Jlc3BvbnNlLmRh
dGUoKTsKLSAgICBkb3VibGUgYXBwYXJlbnRBZ2UgPSBpc2Zpbml0ZShkYXRlVmFsdWUpID8gbWF4
KDAuLCBtX3Jlc3BvbnNlVGltZXN0YW1wIC0gZGF0ZVZhbHVlKSA6IDA7Ci0gICAgZG91YmxlIGFn
ZVZhbHVlID0gbV9yZXNwb25zZS5hZ2UoKTsKLSAgICBkb3VibGUgY29ycmVjdGVkUmVjZWl2ZWRB
Z2UgPSBpc2Zpbml0ZShhZ2VWYWx1ZSkgPyBtYXgoYXBwYXJlbnRBZ2UsIGFnZVZhbHVlKSA6IGFw
cGFyZW50QWdlOwotICAgIGRvdWJsZSByZXNpZGVudFRpbWUgPSBjdXJyZW50VGltZSgpIC0gbV9y
ZXNwb25zZVRpbWVzdGFtcDsKLSAgICByZXR1cm4gY29ycmVjdGVkUmVjZWl2ZWRBZ2UgKyByZXNp
ZGVudFRpbWU7Ci19Ci0gICAgCi1kb3VibGUgQ2FjaGVkUmVzb3VyY2U6OmZyZXNobmVzc0xpZmV0
aW1lKCkgY29uc3QKLXsKLSAgICAvLyBDYWNoZSBub24taHR0cCByZXNvdXJjZXMgbGliZXJhbGx5
Ci0gICAgaWYgKCFtX3Jlc3BvbnNlLnVybCgpLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpCi0gICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpOwotCi0gICAgLy8g
UkZDMjYxNiAxMy4yLjQKLSAgICBkb3VibGUgbWF4QWdlVmFsdWUgPSBtX3Jlc3BvbnNlLmNhY2hl
Q29udHJvbE1heEFnZSgpOwotICAgIGlmIChpc2Zpbml0ZShtYXhBZ2VWYWx1ZSkpCi0gICAgICAg
IHJldHVybiBtYXhBZ2VWYWx1ZTsKLSAgICBkb3VibGUgZXhwaXJlc1ZhbHVlID0gbV9yZXNwb25z
ZS5leHBpcmVzKCk7Ci0gICAgZG91YmxlIGRhdGVWYWx1ZSA9IG1fcmVzcG9uc2UuZGF0ZSgpOwot
ICAgIGRvdWJsZSBjcmVhdGlvblRpbWUgPSBpc2Zpbml0ZShkYXRlVmFsdWUpID8gZGF0ZVZhbHVl
IDogbV9yZXNwb25zZVRpbWVzdGFtcDsKLSAgICBpZiAoaXNmaW5pdGUoZXhwaXJlc1ZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIGV4cGlyZXNWYWx1ZSAtIGNyZWF0aW9uVGltZTsKLSAgICBkb3VibGUg
bGFzdE1vZGlmaWVkVmFsdWUgPSBtX3Jlc3BvbnNlLmxhc3RNb2RpZmllZCgpOwotICAgIGlmIChp
c2Zpbml0ZShsYXN0TW9kaWZpZWRWYWx1ZSkpCi0gICAgICAgIHJldHVybiAoY3JlYXRpb25UaW1l
IC0gbGFzdE1vZGlmaWVkVmFsdWUpICogMC4xOwotICAgIC8vIElmIG5vIGNhY2hlIGhlYWRlcnMg
YXJlIHByZXNlbnQsIHRoZSBzcGVjaWZpY2F0aW9uIGxlYXZlcyB0aGUgZGVjaXNpb24gdG8gdGhl
IFVBLiBPdGhlciBicm93c2VycyBzZWVtIHRvIG9wdCBmb3IgMC4KLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCi17Ci0gICAgbV9yZXNwb25zZSA9IHJlc3BvbnNlOwotICAgIG1fcmVzcG9u
c2VUaW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlOjpz
ZXRTZXJpYWxpemVkQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUp
Ci17Ci0gICAgLy8gV2Ugb25seSBleHBlY3QgdG8gcmVjZWl2ZSBjYWNoZWQgbWV0YWRhdGEgZnJv
bSB0aGUgcGxhdGZvcm0gb25jZS4KLSAgICAvLyBJZiB0aGlzIHRyaWdnZXJzLCBpdCBpbmRpY2F0
ZXMgYW4gZWZmaWNpZW5jeSBwcm9ibGVtIHdoaWNoIGlzIG1vc3QKLSAgICAvLyBsaWtlbHkgdW5l
eHBlY3RlZCBpbiBjb2RlIGRlc2lnbmVkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCi0gICAgQVNT
RVJUKCFtX2NhY2hlZE1ldGFkYXRhKTsKLQotICAgIG1fY2FjaGVkTWV0YWRhdGEgPSBDYWNoZWRN
ZXRhZGF0YTo6ZGVzZXJpYWxpemUoZGF0YSwgc2l6ZSk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3Vy
Y2U6OnNldENhY2hlZE1ldGFkYXRhKHVuc2lnbmVkIGRhdGFUeXBlSUQsIGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBzaXplKQotewotICAgIC8vIEN1cnJlbnRseSwgb25seSBvbmUgdHlwZSBvZiBj
YWNoZWQgbWV0YWRhdGEgcGVyIHJlc291cmNlIGlzIHN1cHBvcnRlZC4KLSAgICAvLyBJZiB0aGUg
bmVlZCBhcmlzZXMgZm9yIG11bHRpcGxlIHR5cGVzIG9mIG1ldGFkYXRhIHBlciByZXNvdXJjZSB0
aGlzIGNvdWxkCi0gICAgLy8gYmUgZW5oYW5jZWQgdG8gc3RvcmUgdHlwZXMgb2YgbWV0YWRhdGEg
aW4gYSBtYXAuCi0gICAgQVNTRVJUKCFtX2NhY2hlZE1ldGFkYXRhKTsKLQotICAgIG1fY2FjaGVk
TWV0YWRhdGEgPSBDYWNoZWRNZXRhZGF0YTo6Y3JlYXRlKGRhdGFUeXBlSUQsIGRhdGEsIHNpemUp
OwotICAgIFJlc291cmNlSGFuZGxlOjpjYWNoZU1ldGFkYXRhKG1fcmVzcG9uc2UsIG1fY2FjaGVk
TWV0YWRhdGEtPnNlcmlhbGl6ZSgpKTsKLX0KLQotQ2FjaGVkTWV0YWRhdGEqIENhY2hlZFJlc291
cmNlOjpjYWNoZWRNZXRhZGF0YSh1bnNpZ25lZCBkYXRhVHlwZUlEKSBjb25zdAotewotICAgIGlm
ICghbV9jYWNoZWRNZXRhZGF0YSB8fCBtX2NhY2hlZE1ldGFkYXRhLT5kYXRhVHlwZUlEKCkgIT0g
ZGF0YVR5cGVJRCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fY2FjaGVkTWV0YWRh
dGEuZ2V0KCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJlcXVlc3QoUmVxdWVzdCog
cmVxdWVzdCkKLXsKLSAgICBpZiAocmVxdWVzdCAmJiAhbV9yZXF1ZXN0KQotICAgICAgICBtX3N0
YXR1cyA9IFBlbmRpbmc7Ci0gICAgbV9yZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICBpZiAoY2FuRGVs
ZXRlKCkgJiYgIWluQ2FjaGUoKSkKLSAgICAgICAgZGVsZXRlIHRoaXM7Ci19Ci0KLXZvaWQgQ2Fj
aGVkUmVzb3VyY2U6OmFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQotewot
ICAgIGFkZENsaWVudFRvU2V0KGNsaWVudCk7Ci0gICAgZGlkQWRkQ2xpZW50KGNsaWVudCk7Ci19
Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVu
dCogYykKLXsKLSAgICBpZiAoIWlzTG9hZGluZygpKQotICAgICAgICBjLT5ub3RpZnlGaW5pc2hl
ZCh0aGlzKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6YWRkQ2xpZW50VG9TZXQoQ2FjaGVk
UmVzb3VyY2VDbGllbnQqIGNsaWVudCkKLXsKLSAgICBBU1NFUlQoIWlzUHVyZ2VhYmxlKCkpOwot
Ci0gICAgaWYgKG1fcHJlbG9hZFJlc3VsdCA9PSBQcmVsb2FkTm90UmVmZXJlbmNlZCkgewotICAg
ICAgICBpZiAoaXNMb2FkZWQoKSkKLSAgICAgICAgICAgIG1fcHJlbG9hZFJlc3VsdCA9IFByZWxv
YWRSZWZlcmVuY2VkV2hpbGVDb21wbGV0ZTsKLSAgICAgICAgZWxzZSBpZiAobV9yZXF1ZXN0ZWRG
cm9tTmV0d29ya2luZ0xheWVyKQotICAgICAgICAgICAgbV9wcmVsb2FkUmVzdWx0ID0gUHJlbG9h
ZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcHJl
bG9hZFJlc3VsdCA9IFByZWxvYWRSZWZlcmVuY2VkOwotICAgIH0KLSAgICBpZiAoIWhhc0NsaWVu
dHMoKSAmJiBpbkNhY2hlKCkpCi0gICAgICAgIGNhY2hlKCktPmFkZFRvTGl2ZVJlc291cmNlc1Np
emUodGhpcyk7Ci0gICAgbV9jbGllbnRzLmFkZChjbGllbnQpOwotfQotCi12b2lkIENhY2hlZFJl
c291cmNlOjpyZW1vdmVDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCkKLXsKLSAg
ICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKGNsaWVudCkpOwotICAgIG1fY2xpZW50cy5yZW1v
dmUoY2xpZW50KTsKLQotICAgIGlmIChjYW5EZWxldGUoKSAmJiAhaW5DYWNoZSgpKQotICAgICAg
ICBkZWxldGUgdGhpczsKLSAgICBlbHNlIGlmICghaGFzQ2xpZW50cygpICYmIGluQ2FjaGUoKSkg
ewotICAgICAgICBjYWNoZSgpLT5yZW1vdmVGcm9tTGl2ZVJlc291cmNlc1NpemUodGhpcyk7Ci0g
ICAgICAgIGNhY2hlKCktPnJlbW92ZUZyb21MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QodGhpcyk7
Ci0gICAgICAgIGFsbENsaWVudHNSZW1vdmVkKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZSgpLmNh
Y2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKSB7Ci0gICAgICAgICAgICAvLyBSRkMyNjE2IDE0
LjkuMjoKLSAgICAgICAgICAgIC8vICJuby1zdG9yZTogLi4uTVVTVCBtYWtlIGEgYmVzdC1lZmZv
cnQgYXR0ZW1wdCB0byByZW1vdmUgdGhlIGluZm9ybWF0aW9uIGZyb20gdm9sYXRpbGUgc3RvcmFn
ZSBhcyBwcm9tcHRseSBhcyBwb3NzaWJsZSIKLSAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZSh0
aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWNoZSgpLT5wcnVuZSgpOwotICAg
IH0KLSAgICAvLyBUaGlzIG9iamVjdCBtYXkgYmUgZGVhZCBoZXJlLgotfQotCi12b2lkIENhY2hl
ZFJlc291cmNlOjpkZWxldGVJZlBvc3NpYmxlKCkKLXsKLSAgICBpZiAoY2FuRGVsZXRlKCkgJiYg
IWluQ2FjaGUoKSkKLSAgICAgICAgZGVsZXRlIHRoaXM7Ci19Ci0gICAgCi12b2lkIENhY2hlZFJl
c291cmNlOjpzZXREZWNvZGVkU2l6ZSh1bnNpZ25lZCBzaXplKQotewotICAgIGlmIChzaXplID09
IG1fZGVjb2RlZFNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBkZWx0YSA9IHNpemUg
LSBtX2RlY29kZWRTaXplOwotCi0gICAgLy8gVGhlIG9iamVjdCBtdXN0IG5vdyBiZSBtb3ZlZCB0
byBhIGRpZmZlcmVudCBxdWV1ZSwgc2luY2UgaXRzIHNpemUgaGFzIGJlZW4gY2hhbmdlZC4KLSAg
ICAvLyBXZSBoYXZlIHRvIHJlbW92ZSBleHBsaWNpdGx5IGJlZm9yZSB1cGRhdGluZyBtX2RlY29k
ZWRTaXplLCBzbyB0aGF0IHdlIGZpbmQgdGhlIGNvcnJlY3QgcHJldmlvdXMKLSAgICAvLyBxdWV1
ZS4KLSAgICBpZiAoaW5DYWNoZSgpKQotICAgICAgICBjYWNoZSgpLT5yZW1vdmVGcm9tTFJVTGlz
dCh0aGlzKTsKLSAgICAKLSAgICBtX2RlY29kZWRTaXplID0gc2l6ZTsKLSAgIAotICAgIGlmIChp
bkNhY2hlKCkpIHsgCi0gICAgICAgIC8vIE5vdyBpbnNlcnQgaW50byB0aGUgbmV3IExSVSBsaXN0
LgotICAgICAgICBjYWNoZSgpLT5pbnNlcnRJbkxSVUxpc3QodGhpcyk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBJbnNlcnQgaW50byBvciByZW1vdmUgZnJvbSB0aGUgbGl2ZSBkZWNvZGVkIGxpc3Qg
aWYgbmVjZXNzYXJ5LgotICAgICAgICAvLyBXaGVuIGluc2VydGluZyBpbnRvIHRoZSBMaXZlRGVj
b2RlZFJlc291cmNlc0xpc3QgaXQgaXMgcG9zc2libGUKLSAgICAgICAgLy8gdGhhdCB0aGUgbV9s
YXN0RGVjb2RlZEFjY2Vzc1RpbWUgaXMgc3RpbGwgemVybyBvciBzbWFsbGVyIHRoYW4KLSAgICAg
ICAgLy8gdGhlIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lIG9mIHRoZSBjdXJyZW50IGxpc3QgaGVh
ZC4gVGhpcyBpcyBhCi0gICAgICAgIC8vIHZpb2xhdGlvbiBvZiB0aGUgaW52YXJpYW50IHRoYXQg
dGhlIGxpc3QgaXMgdG8gYmUga2VwdCBzb3J0ZWQKLSAgICAgICAgLy8gYnkgYWNjZXNzIHRpbWUu
IFRoZSB3ZWFrZW5pbmcgb2YgdGhlIGludmFyaWFudCBkb2VzIG5vdCBwb3NlCi0gICAgICAgIC8v
IGEgcHJvYmxlbS4gRm9yIG1vcmUgZGV0YWlscyBwbGVhc2Ugc2VlOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAyMDkKLSAgICAgICAgaWYgKG1fZGVjb2RlZFNpemUg
JiYgIW1faW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QgJiYgaGFzQ2xpZW50cygpKQotICAgICAg
ICAgICAgY2FjaGUoKS0+aW5zZXJ0SW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QodGhpcyk7Ci0g
ICAgICAgIGVsc2UgaWYgKCFtX2RlY29kZWRTaXplICYmIG1faW5MaXZlRGVjb2RlZFJlc291cmNl
c0xpc3QpCi0gICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNvdXJj
ZXNMaXN0KHRoaXMpOwotCi0gICAgICAgIC8vIFVwZGF0ZSB0aGUgY2FjaGUncyBzaXplIHRvdGFs
cy4KLSAgICAgICAgY2FjaGUoKS0+YWRqdXN0U2l6ZShoYXNDbGllbnRzKCksIGRlbHRhKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldEVuY29kZWRTaXplKHVuc2lnbmVkIHNp
emUpCi17Ci0gICAgaWYgKHNpemUgPT0gbV9lbmNvZGVkU2l6ZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gVGhlIHNpemUgY2Fubm90IGV2ZXIgc2hyaW5rICh1bmxlc3MgaXQgaXMgYmVpbmcg
bnVsbGVkIG91dCBiZWNhdXNlIG9mIGFuIGVycm9yKS4gIElmIGl0IGV2ZXIgZG9lcywgYXNzZXJ0
LgotICAgIEFTU0VSVChzaXplID09IDAgfHwgc2l6ZSA+PSBtX2VuY29kZWRTaXplKTsKLSAgICAK
LSAgICBpbnQgZGVsdGEgPSBzaXplIC0gbV9lbmNvZGVkU2l6ZTsKLQotICAgIC8vIFRoZSBvYmpl
Y3QgbXVzdCBub3cgYmUgbW92ZWQgdG8gYSBkaWZmZXJlbnQgcXVldWUsIHNpbmNlIGl0cyBzaXpl
IGhhcyBiZWVuIGNoYW5nZWQuCi0gICAgLy8gV2UgaGF2ZSB0byByZW1vdmUgZXhwbGljaXRseSBi
ZWZvcmUgdXBkYXRpbmcgbV9lbmNvZGVkU2l6ZSwgc28gdGhhdCB3ZSBmaW5kIHRoZSBjb3JyZWN0
IHByZXZpb3VzCi0gICAgLy8gcXVldWUuCi0gICAgaWYgKGluQ2FjaGUoKSkKLSAgICAgICAgY2Fj
aGUoKS0+cmVtb3ZlRnJvbUxSVUxpc3QodGhpcyk7Ci0gICAgCi0gICAgbV9lbmNvZGVkU2l6ZSA9
IHNpemU7Ci0gICAKLSAgICBpZiAoaW5DYWNoZSgpKSB7IAotICAgICAgICAvLyBOb3cgaW5zZXJ0
IGludG8gdGhlIG5ldyBMUlUgbGlzdC4KLSAgICAgICAgY2FjaGUoKS0+aW5zZXJ0SW5MUlVMaXN0
KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgLy8gVXBkYXRlIHRoZSBjYWNoZSdzIHNpemUgdG90
YWxzLgotICAgICAgICBjYWNoZSgpLT5hZGp1c3RTaXplKGhhc0NsaWVudHMoKSwgZGVsdGEpOwot
ICAgIH0KLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6ZGlkQWNjZXNzRGVjb2RlZERhdGEoZG91
YmxlIHRpbWVTdGFtcCkKLXsKLSAgICBtX2xhc3REZWNvZGVkQWNjZXNzVGltZSA9IHRpbWVTdGFt
cDsKLSAgICAKLSAgICBpZiAoaW5DYWNoZSgpKSB7Ci0gICAgICAgIGlmIChtX2luTGl2ZURlY29k
ZWRSZXNvdXJjZXNMaXN0KSB7Ci0gICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmVGcm9tTGl2ZURl
Y29kZWRSZXNvdXJjZXNMaXN0KHRoaXMpOwotICAgICAgICAgICAgY2FjaGUoKS0+aW5zZXJ0SW5M
aXZlRGVjb2RlZFJlc291cmNlc0xpc3QodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FjaGUo
KS0+cHJ1bmUoKTsKLSAgICB9Ci19Ci0gICAgCi12b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXNv
dXJjZVRvUmV2YWxpZGF0ZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpIAoteyAKLSAgICBBU1NF
UlQocmVzb3VyY2UpOwotICAgIEFTU0VSVCghbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSk7Ci0gICAg
QVNTRVJUKHJlc291cmNlICE9IHRoaXMpOwotICAgIEFTU0VSVChtX2hhbmRsZXNUb1JldmFsaWRh
dGUuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQocmVzb3VyY2UtPnR5cGUoKSA9PSB0eXBlKCkpOwot
Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlICVwIHNldFJlc291cmNl
VG9SZXZhbGlkYXRlICVwIiwgdGhpcywgcmVzb3VyY2UpOwotCi0gICAgLy8gVGhlIGZvbGxvd2lu
ZyBhc3NlcnQgc2hvdWxkIGJlIGludmVzdGlnYXRlZCB3aGVuZXZlciBpdCBvY2N1cnMuIEFsdGhv
dWdoIGl0IHNob3VsZCBuZXZlciBmaXJlLCBpdCBjdXJyZW50bHkgZG9lcyBpbiByYXJlIGNpcmN1
bXN0YW5jZXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI4NjA0LgotICAgIC8vIFNvIHRoZSBjb2RlIG5lZWRzIHRvIGJlIHJvYnVzdCB0byB0aGlzIGFz
c2VydCBmYWlsaW5nIHRodXMgdGhlICJpZiAobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+bV9wcm94
eVJlc291cmNlID09IHRoaXMpIiBpbiBDYWNoZWRSZXNvdXJjZTo6Y2xlYXJSZXNvdXJjZVRvUmV2
YWxpZGF0ZS4KLSAgICBBU1NFUlQoIXJlc291cmNlLT5tX3Byb3h5UmVzb3VyY2UpOwotCi0gICAg
cmVzb3VyY2UtPm1fcHJveHlSZXNvdXJjZSA9IHRoaXM7Ci0gICAgbV9yZXNvdXJjZVRvUmV2YWxp
ZGF0ZSA9IHJlc291cmNlOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlOjpjbGVhclJlc291cmNl
VG9SZXZhbGlkYXRlKCkgCi17IAotICAgIEFTU0VSVChtX3Jlc291cmNlVG9SZXZhbGlkYXRlKTsK
LSAgICAvLyBBIHJlc291cmNlIG1heSBzdGFydCByZXZhbGlkYXRpb24gYmVmb3JlIHRoaXMgbWV0
aG9kIGhhcyBiZWVuIGNhbGxlZCwgc28gY2hlY2sgdGhhdCB0aGlzIHJlc291cmNlIGlzIHN0aWxs
IHRoZSBwcm94eSByZXNvdXJjZSBiZWZvcmUgY2xlYXJpbmcgaXQgb3V0LgotICAgIGlmIChtX3Jl
c291cmNlVG9SZXZhbGlkYXRlLT5tX3Byb3h5UmVzb3VyY2UgPT0gdGhpcykgewotICAgICAgICBt
X3Jlc291cmNlVG9SZXZhbGlkYXRlLT5tX3Byb3h5UmVzb3VyY2UgPSAwOwotICAgICAgICBtX3Jl
c291cmNlVG9SZXZhbGlkYXRlLT5kZWxldGVJZlBvc3NpYmxlKCk7Ci0gICAgfQotICAgIG1faGFu
ZGxlc1RvUmV2YWxpZGF0ZS5jbGVhcigpOwotICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUgPSAw
OwotICAgIGRlbGV0ZUlmUG9zc2libGUoKTsKLX0KLSAgICAKLXZvaWQgQ2FjaGVkUmVzb3VyY2U6
OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKQotewotICAgIEFTU0VSVChtX3Jl
c291cmNlVG9SZXZhbGlkYXRlKTsKLSAgICBBU1NFUlQobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+
aW5DYWNoZSgpKTsKLSAgICBBU1NFUlQoIWluQ2FjaGUoKSk7Ci0KLSAgICBMT0coUmVzb3VyY2VM
b2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2UgJXAgc3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNv
dXJjZSAlcCIsIHRoaXMsIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUpOwotCi0gICAgSGFzaFNldDxD
YWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqPjo6aXRlcmF0b3IgZW5kID0gbV9oYW5kbGVzVG9SZXZh
bGlkYXRlLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2Uq
Pjo6aXRlcmF0b3IgaXQgPSBtX2hhbmRsZXNUb1JldmFsaWRhdGUuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSogaGFuZGxlID0gKml0
OwotICAgICAgICBoYW5kbGUtPm1fcmVzb3VyY2UgPSBtX3Jlc291cmNlVG9SZXZhbGlkYXRlOwot
ICAgICAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5yZWdpc3RlckhhbmRsZShoYW5kbGUpOwot
ICAgICAgICAtLW1faGFuZGxlQ291bnQ7Ci0gICAgfQotICAgIEFTU0VSVCghbV9oYW5kbGVDb3Vu
dCk7Ci0gICAgbV9oYW5kbGVzVG9SZXZhbGlkYXRlLmNsZWFyKCk7Ci0KLSAgICBWZWN0b3I8Q2Fj
aGVkUmVzb3VyY2VDbGllbnQqPiBjbGllbnRzVG9Nb3ZlOwotICAgIEhhc2hDb3VudGVkU2V0PENh
Y2hlZFJlc291cmNlQ2xpZW50Kj46Oml0ZXJhdG9yIGVuZDIgPSBtX2NsaWVudHMuZW5kKCk7Ci0g
ICAgZm9yIChIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+OjppdGVyYXRvciBp
dCA9IG1fY2xpZW50cy5iZWdpbigpOyBpdCAhPSBlbmQyOyArK2l0KSB7Ci0gICAgICAgIENhY2hl
ZFJlc291cmNlQ2xpZW50KiBjbGllbnQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGNv
dW50ID0gaXQtPnNlY29uZDsKLSAgICAgICAgd2hpbGUgKGNvdW50KSB7Ci0gICAgICAgICAgICBj
bGllbnRzVG9Nb3ZlLmFwcGVuZChjbGllbnQpOwotICAgICAgICAgICAgLS1jb3VudDsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAvLyBFcXVpdmFsZW50IG9mIGNhbGxpbmcgcmVtb3ZlQ2xpZW50KCkg
Zm9yIGFsbCBjbGllbnRzCi0gICAgbV9jbGllbnRzLmNsZWFyKCk7Ci0KLSAgICB1bnNpZ25lZCBt
b3ZlQ291bnQgPSBjbGllbnRzVG9Nb3ZlLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAw
OyBuIDwgbW92ZUNvdW50OyArK24pCi0gICAgICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPmFk
ZENsaWVudFRvU2V0KGNsaWVudHNUb01vdmVbbl0pOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7
IG4gPCBtb3ZlQ291bnQ7ICsrbikgewotICAgICAgICAvLyBDYWxsaW5nIGRpZEFkZENsaWVudCBm
b3IgYSBjbGllbnQgbWF5IGVuZCB1cCByZW1vdmluZyBhbm90aGVyIGNsaWVudC4gSW4gdGhhdCBj
YXNlIGl0IHdvbid0IGJlIGluIHRoZSBzZXQgYW55bW9yZS4KLSAgICAgICAgaWYgKG1fcmVzb3Vy
Y2VUb1JldmFsaWRhdGUtPm1fY2xpZW50cy5jb250YWlucyhjbGllbnRzVG9Nb3ZlW25dKSkKLSAg
ICAgICAgICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPmRpZEFkZENsaWVudChjbGllbnRzVG9N
b3ZlW25dKTsKLSAgICB9Ci19Ci0gICAgCi12b2lkIENhY2hlZFJlc291cmNlOjp1cGRhdGVSZXNw
b25zZUFmdGVyUmV2YWxpZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHZhbGlkYXRpbmdS
ZXNwb25zZSkKLXsKLSAgICBtX3Jlc3BvbnNlVGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKLQot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBjb250ZW50SGVhZGVy
UHJlZml4LCAoImNvbnRlbnQtIikpOwotICAgIC8vIFJGQzI2MTYgMTAuMy41Ci0gICAgLy8gVXBk
YXRlIGNhY2hlZCBoZWFkZXJzIGZyb20gdGhlIDMwNCByZXNwb25zZQotICAgIGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIG5ld0hlYWRlcnMgPSB2YWxpZGF0aW5nUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
cygpOwotICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld0hlYWRlcnMu
ZW5kKCk7Ci0gICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG5ld0hl
YWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIC8vIERvbid0IGFsbG93
IDMwNCByZXNwb25zZSB0byB1cGRhdGUgY29udGVudCBoZWFkZXJzLCB0aGVzZSBjYW4ndCBjaGFu
Z2UgYnV0IHNvbWUgc2VydmVycyBzZW5kIHdyb25nIHZhbHVlcy4KLSAgICAgICAgaWYgKGl0LT5m
aXJzdC5zdGFydHNXaXRoKGNvbnRlbnRIZWFkZXJQcmVmaXgsIGZhbHNlKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChpdC0+Zmly
c3QsIGl0LT5zZWNvbmQpOwotICAgIH0KLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6cmVnaXN0
ZXJIYW5kbGUoQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKiBoKQotewotICAgICsrbV9oYW5kbGVD
b3VudDsKLSAgICBpZiAobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSkKLSAgICAgICAgbV9oYW5kbGVz
VG9SZXZhbGlkYXRlLmFkZChoKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6dW5yZWdpc3Rl
ckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpCi17Ci0gICAgQVNTRVJUKG1faGFu
ZGxlQ291bnQgPiAwKTsKLSAgICAtLW1faGFuZGxlQ291bnQ7Ci0KLSAgICBpZiAobV9yZXNvdXJj
ZVRvUmV2YWxpZGF0ZSkKLSAgICAgICAgIG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5yZW1vdmUoaCk7
Ci0KLSAgICBpZiAoIW1faGFuZGxlQ291bnQpCi0gICAgICAgIGRlbGV0ZUlmUG9zc2libGUoKTsK
LX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZTo6Y2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSBjb25zdAot
ewotICAgIGlmIChtX2xvYWRpbmcgfHwgbV9lcnJvck9jY3VycmVkKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAobV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBBdG9taWNTdHJpbmcsIGxhc3RNb2RpZmllZEhlYWRlciwgKCJsYXN0LW1vZGlmaWVkIikpOwot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBlVGFnSGVhZGVyLCAo
ImV0YWciKSk7Ci0gICAgcmV0dXJuICFtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChsYXN0TW9k
aWZpZWRIZWFkZXIpLmlzRW1wdHkoKSB8fCAhbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoZVRh
Z0hlYWRlcikuaXNFbXB0eSgpOwotfQotICAgIAotYm9vbCBDYWNoZWRSZXNvdXJjZTo6bXVzdFJl
dmFsaWRhdGUoQ2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZXJy
b3JPY2N1cnJlZCkgewotICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3Vy
Y2UgJXAgbXVzdFJldmFsaWRhdGUgYmVjYXVzZSBvZiBtX2Vycm9yT2NjdXJyZWRcbiIsIHRoaXMp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9sb2FkaW5nKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKG1fcmVzcG9uc2UuY2FjaGVDb250cm9s
Q29udGFpbnNOb0NhY2hlKCkgfHwgbV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vU3Rv
cmUoKSkgewotICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2UgJXAg
bXVzdFJldmFsaWRhdGUgYmVjYXVzZSBvZiBtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5z
Tm9DYWNoZSgpIHx8IG1fcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKClcbiIs
IHRoaXMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoY2FjaGVQb2xp
Y3kgPT0gQ2FjaGVQb2xpY3lDYWNoZSkgewotICAgICAgICBpZiAobV9yZXNwb25zZS5jYWNoZUNv
bnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlKCkgJiYgaXNFeHBpcmVkKCkpIHsKLSAgICAgICAg
ICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZSAlcCBtdXN0UmV2YWxpZGF0
ZSBiZWNhdXNlIG9mIGNhY2hlUG9saWN5ID09IENhY2hlUG9saWN5Q2FjaGUgYW5kIG1fcmVzcG9u
c2UuY2FjaGVDb250cm9sQ29udGFpbnNNdXN0UmV2YWxpZGF0ZSgpICYmIGlzRXhwaXJlZCgpXG4i
LCB0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoaXNFeHBpcmVkKCkpIHsKLSAgICAgICAgTE9H
KFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlICVwIG11c3RSZXZhbGlkYXRlIGJlY2F1
c2Ugb2YgaXNFeHBpcmVkKClcbiIsIHRoaXMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3VyY2U6OmlzU2FmZVRv
TWFrZVB1cmdlYWJsZSgpIGNvbnN0Ci17IAotICAgIHJldHVybiAhaGFzQ2xpZW50cygpICYmICFt
X3Byb3h5UmVzb3VyY2UgJiYgIW1fcmVzb3VyY2VUb1JldmFsaWRhdGU7Ci19Ci0KLWJvb2wgQ2Fj
aGVkUmVzb3VyY2U6Om1ha2VQdXJnZWFibGUoYm9vbCBwdXJnZWFibGUpIAoteyAKLSAgICBpZiAo
cHVyZ2VhYmxlKSB7Ci0gICAgICAgIEFTU0VSVChpc1NhZmVUb01ha2VQdXJnZWFibGUoKSk7Ci0K
LSAgICAgICAgaWYgKG1fcHVyZ2VhYmxlRGF0YSkgewotICAgICAgICAgICAgQVNTRVJUKCFtX2Rh
dGEpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFt
X2RhdGEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBT
aG91bGQgbm90IG1ha2UgYnVmZmVyIHB1cmdlYWJsZSBpZiBpdCBoYXMgcmVmcyBvdGhlciB0aGFu
IHRoaXMgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0d28gY29waWVzLgotICAgICAgICBpZiAoIW1fZGF0
YS0+aGFzT25lUmVmKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAg
ICAgICBpZiAobV9kYXRhLT5oYXNQdXJnZWFibGVCdWZmZXIoKSkgewotICAgICAgICAgICAgbV9w
dXJnZWFibGVEYXRhID0gbV9kYXRhLT5yZWxlYXNlUHVyZ2VhYmxlQnVmZmVyKCk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3B1cmdlYWJsZURhdGEgPSBQdXJnZWFibGVCdWZmZXI6
OmNyZWF0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwotICAgICAgICAgICAgaWYg
KCFtX3B1cmdlYWJsZURhdGEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgbV9wdXJnZWFibGVEYXRhLT5zZXRQdXJnZVByaW9yaXR5KHB1cmdlUHJpb3JpdHkoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fcHVyZ2VhYmxlRGF0YS0+bWFrZVB1cmdl
YWJsZSh0cnVlKTsKLSAgICAgICAgbV9kYXRhLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIGlmICghbV9wdXJnZWFibGVEYXRhKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBBU1NFUlQoIW1fZGF0YSk7Ci0gICAgQVNTRVJUKCFoYXNDbGllbnRzKCkpOwotCi0g
ICAgaWYgKCFtX3B1cmdlYWJsZURhdGEtPm1ha2VQdXJnZWFibGUoZmFsc2UpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7IAotCi0gICAgbV9kYXRhID0gU2hhcmVkQnVmZmVyOjphZG9wdFB1cmdlYWJs
ZUJ1ZmZlcihtX3B1cmdlYWJsZURhdGEucmVsZWFzZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBDYWNoZWRSZXNvdXJjZTo6aXNQdXJnZWFibGUoKSBjb25zdAotewotICAgIHJldHVy
biBtX3B1cmdlYWJsZURhdGEgJiYgbV9wdXJnZWFibGVEYXRhLT5pc1B1cmdlYWJsZSgpOwotfQot
Ci1ib29sIENhY2hlZFJlc291cmNlOjp3YXNQdXJnZWQoKSBjb25zdAotewotICAgIHJldHVybiBt
X3B1cmdlYWJsZURhdGEgJiYgbV9wdXJnZWFibGVEYXRhLT53YXNQdXJnZWQoKTsKLX0KLQotdW5z
aWduZWQgQ2FjaGVkUmVzb3VyY2U6Om92ZXJoZWFkU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHNpemVvZihDYWNoZWRSZXNvdXJjZSkgKyBtX3Jlc3BvbnNlLm1lbW9yeVVzYWdlKCkgKyA1NzY7
Ci0gICAgLyoKLSAgICAgICAgNTc2ID0gMTkyICsgICAgICAgICAgICAgICAgICAgLy8gYXZlcmFn
ZSBzaXplIG9mIG1fdXJsCi0gICAgICAgICAgICAgIDM4NDsgICAgICAgICAgICAgICAgICAgIC8v
IGF2ZXJhZ2Ugc2l6ZSBvZiBtX2NsaWVudHMgaGFzaCBtYXAKLSAgICAqLwotfQotCi19CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9uIDcxNDkzKQorKysgV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyODkgKzAsMCBAQAotLyoK
LSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkK
LSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0g
ICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29t
KQotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBDYWNoZWRSZXNvdXJjZV9oCi0jZGVmaW5l
IENhY2hlZFJlc291cmNlX2gKLQotI2luY2x1ZGUgIkNhY2hlUG9saWN5LmgiCi0jaW5jbHVkZSAi
RnJhbWVMb2FkZXJUeXBlcy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVk
ZSAiUHVyZ2VQcmlvcml0eS5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNs
dWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8
dGltZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hlOwotY2xhc3MgQ2Fj
aGVkTWV0YWRhdGE7Ci1jbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVudDsKLWNsYXNzIENhY2hlZFJl
c291cmNlSGFuZGxlQmFzZTsKLWNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwotY2xhc3MgRnJh
bWU7Ci1jbGFzcyBJbnNwZWN0b3JSZXNvdXJjZTsKLWNsYXNzIFB1cmdlYWJsZUJ1ZmZlcjsKLWNs
YXNzIFJlcXVlc3Q7Ci0KLS8vIEEgcmVzb3VyY2UgdGhhdCBpcyBoZWxkIGluIHRoZSBjYWNoZS4g
Q2xhc3NlcyB3aG8gd2FudCB0byB1c2UgdGhpcyBvYmplY3Qgc2hvdWxkIGRlcml2ZQotLy8gZnJv
bSBDYWNoZWRSZXNvdXJjZUNsaWVudCwgdG8gZ2V0IHRoZSBmdW5jdGlvbiBjYWxscyBpbiBjYXNl
IHRoZSByZXF1ZXN0ZWQgZGF0YSBoYXMgYXJyaXZlZC4KLS8vIFRoaXMgY2xhc3MgYWxzbyBkb2Vz
IHRoZSBhY3R1YWwgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBsb2FkZXIgdG8gb2J0YWluIHRoZSBy
ZXNvdXJjZSBmcm9tIHRoZSBuZXR3b3JrLgotY2xhc3MgQ2FjaGVkUmVzb3VyY2UgOiBwdWJsaWMg
Tm9uY29weWFibGUgewotICAgIGZyaWVuZCBjbGFzcyBDYWNoZTsKLSAgICBmcmllbmQgY2xhc3Mg
SW5zcGVjdG9yUmVzb3VyY2U7Ci0gICAgCi1wdWJsaWM6Ci0gICAgZW51bSBUeXBlIHsKLSAgICAg
ICAgSW1hZ2VSZXNvdXJjZSwKLSAgICAgICAgQ1NTU3R5bGVTaGVldCwKLSAgICAgICAgU2NyaXB0
LAotICAgICAgICBGb250UmVzb3VyY2UKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICAgICAgLCBYU0xT
dHlsZVNoZWV0Ci0jZW5kaWYKLSNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKLSAgICAgICAgLCBM
aW5rUHJlZmV0Y2gKLSNlbmRpZgotICAgIH07Ci0KLSAgICBlbnVtIFN0YXR1cyB7Ci0gICAgICAg
IFVua25vd24sICAgICAgLy8gbGV0IGNhY2hlIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggaXQKLSAg
ICAgICAgUGVuZGluZywgICAgICAvLyBvbmx5IHBhcnRpYWxseSBsb2FkZWQKLSAgICAgICAgQ2Fj
aGVkICAgICAgICAvLyByZWd1bGFyIGNhc2UKLSAgICB9OwotCi0gICAgQ2FjaGVkUmVzb3VyY2Uo
Y29uc3QgU3RyaW5nJiB1cmwsIFR5cGUpOwotICAgIHZpcnR1YWwgfkNhY2hlZFJlc291cmNlKCk7
Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyKSAgeyBsb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLCBmYWxzZSwgRG9T
ZWN1cml0eUNoZWNrLCB0cnVlKTsgfQotICAgIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRl
ciosIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3ksIGJvb2wgc2VuZFJlc291
cmNlTG9hZENhbGxiYWNrcyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RW5jb2RpbmcoY29uc3Qg
U3RyaW5nJikgeyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVy
biBTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0gICAgdmlydHVhbCB2b2lkIGVycm9y
KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGh0dHBTdGF0dXNDb2RlRXJyb3IoKSB7IGVycm9yKCk7
IH0gLy8gSW1hZ2VzIGtlZXAgbG9hZGluZyBpbiBzcGl0ZSBvZiBIVFRQIGVycm9ycyAoZm9yIGxl
Z2FjeSBjb21wYXQgd2l0aCA8aW1nPiwgZXRjLikuCi0KLSAgICBjb25zdCBTdHJpbmcgJnVybCgp
IGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQotCi0gICAgdm9pZCBhZGRDbGllbnQoQ2FjaGVk
UmVzb3VyY2VDbGllbnQqKTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJjZUNs
aWVudCopOwotICAgIGJvb2wgaGFzQ2xpZW50cygpIGNvbnN0IHsgcmV0dXJuICFtX2NsaWVudHMu
aXNFbXB0eSgpOyB9Ci0gICAgdm9pZCBkZWxldGVJZlBvc3NpYmxlKCk7Ci0KLSAgICBlbnVtIFBy
ZWxvYWRSZXN1bHQgewotICAgICAgICBQcmVsb2FkTm90UmVmZXJlbmNlZCwKLSAgICAgICAgUHJl
bG9hZFJlZmVyZW5jZWQsCi0gICAgICAgIFByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5nLAot
ICAgICAgICBQcmVsb2FkUmVmZXJlbmNlZFdoaWxlQ29tcGxldGUKLSAgICB9OwotICAgIFByZWxv
YWRSZXN1bHQgcHJlbG9hZFJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFByZWxv
YWRSZXN1bHQ+KG1fcHJlbG9hZFJlc3VsdCk7IH0KLSAgICB2b2lkIHNldFJlcXVlc3RlZEZyb21O
ZXR3b3JraW5nTGF5ZXIoKSB7IG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllciA9IHRydWU7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1JlbW92ZWQoKSB7IH0KLQotICAgIHVuc2ln
bmVkIGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRzLnNpemUoKTsgfQotCi0gICAgU3Rh
dHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFN0YXR1cz4obV9zdGF0dXMp
OyB9Ci0gICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1
czsgfQotCi0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGVuY29kZWRTaXplKCkg
KyBkZWNvZGVkU2l6ZSgpICsgb3ZlcmhlYWRTaXplKCk7IH0KLSAgICB1bnNpZ25lZCBlbmNvZGVk
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZFNpemU7IH0KLSAgICB1bnNpZ25lZCBkZWNv
ZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RlZFNpemU7IH0KLSAgICB1bnNpZ25lZCBv
dmVyaGVhZFNpemUoKSBjb25zdDsKLSAgICAKLSAgICBib29sIGlzTG9hZGVkKCkgY29uc3QgeyBy
ZXR1cm4gIW1fbG9hZGluZzsgfSAvLyBGSVhNRS4gTWV0aG9kIG5hbWUgaXMgaW5hY2N1cmF0ZS4g
TG9hZGluZyBtaWdodCBub3QgaGF2ZSBzdGFydGVkIHlldC4KLQotICAgIGJvb2wgaXNMb2FkaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9sb2FkaW5nOyB9Ci0gICAgdm9pZCBzZXRMb2FkaW5nKGJvb2wg
YikgeyBtX2xvYWRpbmcgPSBiOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBpc1ByZWZldGNoKCkgY29uc3QKLSAgICB7Ci0j
aWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCi0gICAgICAgIHJldHVybiB0eXBlKCkgPT0gTGlua1By
ZWZldGNoOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0gICAgfQotCi0g
ICAgdW5zaWduZWQgYWNjZXNzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2FjY2Vzc0NvdW50OyB9
Ci0gICAgdm9pZCBpbmNyZWFzZUFjY2Vzc0NvdW50KCkgeyBtX2FjY2Vzc0NvdW50Kys7IH0KLQot
ICAgIC8vIENvbXB1dGVzIHRoZSBzdGF0dXMgb2YgYW4gb2JqZWN0IGFmdGVyIGxvYWRpbmcuICAK
LSAgICAvLyBVcGRhdGVzIHRoZSBleHBpcmUgZGF0ZSBvbiB0aGUgY2FjaGUgZW50cnkgZmlsZQot
ICAgIHZvaWQgZmluaXNoKCk7Ci0KLSAgICAvLyBDYWxsZWQgYnkgdGhlIGNhY2hlIGlmIHRoZSBv
YmplY3QgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZQotICAgIC8vIHdoaWxlIHN0aWxs
IGJlaW5nIHJlZmVyZW5jZWQuIFRoaXMgbWVhbnMgdGhlIG9iamVjdCBzaG91bGQgZGVsZXRlIGl0
c2VsZgotICAgIC8vIGlmIHRoZSBudW1iZXIgb2YgY2xpZW50cyBvYnNlcnZpbmcgaXQgZXZlciBk
cm9wcyB0byAwLgotICAgIC8vIFRoZSByZXNvdXJjZSBjYW4gYmUgYnJvdWdodCBiYWNrIHRvIGNh
Y2hlIGFmdGVyIHN1Y2Nlc3NmdWwgcmV2YWxpZGF0aW9uLgotICAgIHZvaWQgc2V0SW5DYWNoZShi
b29sIGluQ2FjaGUpIHsgbV9pbkNhY2hlID0gaW5DYWNoZTsgfQotICAgIGJvb2wgaW5DYWNoZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5DYWNoZTsgfQotICAgIAotICAgIHZvaWQgc2V0SW5MaXZlRGVj
b2RlZFJlc291cmNlc0xpc3QoYm9vbCBiKSB7IG1faW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3Qg
PSBiOyB9Ci0gICAgYm9vbCBpbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCgpIHsgcmV0dXJuIG1f
aW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3Q7IH0KLSAgICAKLSAgICB2b2lkIHNldFJlcXVlc3Qo
UmVxdWVzdCopOwotCi0gICAgU2hhcmVkQnVmZmVyKiBkYXRhKCkgY29uc3QgeyBBU1NFUlQoIW1f
cHVyZ2VhYmxlRGF0YSk7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0UmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQotCi0gICAgLy8gU2V0
cyB0aGUgc2VyaWFsaXplZCBtZXRhZGF0YSByZXRyaWV2ZWQgZnJvbSB0aGUgcGxhdGZvcm0ncyBj
YWNoZS4KLSAgICB2b2lkIHNldFNlcmlhbGl6ZWRDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiwg
c2l6ZV90KTsKLQotICAgIC8vIENhY2hlcyB0aGUgZ2l2ZW4gbWV0YWRhdGEgaW4gYXNzb2NpYXRp
b24gd2l0aCB0aGlzIHJlc291cmNlIGFuZCBzdWdnZXN0cwotICAgIC8vIHRoYXQgdGhlIHBsYXRm
b3JtIHBlcnNpc3QgaXQuIFRoZSBkYXRhVHlwZUlEIGlzIGEgcHNldWRvLXJhbmRvbWx5IGNob3Nl
bgotICAgIC8vIGlkZW50aWZpZXIgdGhhdCBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGRhdGEgZ2Vu
ZXJhdGVkIGJ5IHRoZSBjYWxsZXIuCi0gICAgdm9pZCBzZXRDYWNoZWRNZXRhZGF0YSh1bnNpZ25l
ZCBkYXRhVHlwZUlELCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKLQotICAgIC8vIFJldHVybnMgY2Fj
aGVkIG1ldGFkYXRhIG9mIHRoZSBnaXZlbiB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc291
cmNlLgotICAgIENhY2hlZE1ldGFkYXRhKiBjYWNoZWRNZXRhZGF0YSh1bnNpZ25lZCBkYXRhVHlw
ZUlEKSBjb25zdDsKLQotICAgIGJvb2wgY2FuRGVsZXRlKCkgY29uc3QgeyByZXR1cm4gIWhhc0Ns
aWVudHMoKSAmJiAhbV9yZXF1ZXN0ICYmICFtX3ByZWxvYWRDb3VudCAmJiAhbV9oYW5kbGVDb3Vu
dCAmJiAhbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSAmJiAhbV9wcm94eVJlc291cmNlOyB9Ci0KLSAg
ICBib29sIGlzRXhwaXJlZCgpIGNvbnN0OwotCi0gICAgLy8gTGlzdCBvZiBhY2NlcHRhYmxlIE1J
TUUgdHlwZXMgc2VwYXJhdGVkIGJ5ICIsIi4KLSAgICAvLyBBIE1JTUUgdHlwZSBtYXkgY29udGFp
biBhIHdpbGRjYXJkLCBlLmcuICJ0ZXh0LyoiLgotICAgIFN0cmluZyBhY2NlcHQoKSBjb25zdCB7
IHJldHVybiBtX2FjY2VwdDsgfQotICAgIHZvaWQgc2V0QWNjZXB0KGNvbnN0IFN0cmluZyYgYWNj
ZXB0KSB7IG1fYWNjZXB0ID0gYWNjZXB0OyB9Ci0KLSAgICBib29sIGVycm9yT2NjdXJyZWQoKSBj
b25zdCB7IHJldHVybiBtX2Vycm9yT2NjdXJyZWQ7IH0KLSAgICB2b2lkIHNldEVycm9yT2NjdXJy
ZWQoYm9vbCBiKSB7IG1fZXJyb3JPY2N1cnJlZCA9IGI7IH0KLQotICAgIGJvb2wgc2VuZFJlc291
cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZFJlc291cmNlTG9hZENhbGxi
YWNrczsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoKSB7IH0K
LQotICAgIHZvaWQgc2V0Q2FjaGVkUmVzb3VyY2VMb2FkZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGNhY2hlZFJlc291cmNlTG9hZGVyKSB7IG1fY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBjYWNoZWRS
ZXNvdXJjZUxvYWRlcjsgfQotICAgIAotICAgIGJvb2wgaXNQcmVsb2FkZWQoKSBjb25zdCB7IHJl
dHVybiBtX3ByZWxvYWRDb3VudDsgfQotICAgIHZvaWQgaW5jcmVhc2VQcmVsb2FkQ291bnQoKSB7
ICsrbV9wcmVsb2FkQ291bnQ7IH0KLSAgICB2b2lkIGRlY3JlYXNlUHJlbG9hZENvdW50KCkgeyBB
U1NFUlQobV9wcmVsb2FkQ291bnQpOyAtLW1fcHJlbG9hZENvdW50OyB9Ci0gICAgCi0gICAgdm9p
ZCByZWdpc3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpOwotICAgIHZvaWQg
dW5yZWdpc3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpOwotICAgIAotICAg
IGJvb2wgY2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSBjb25zdDsKLSAgICBib29sIG11c3RSZXZhbGlk
YXRlKENhY2hlUG9saWN5KSBjb25zdDsKLSAgICBib29sIGlzQ2FjaGVWYWxpZGF0b3IoKSBjb25z
dCB7IHJldHVybiBtX3Jlc291cmNlVG9SZXZhbGlkYXRlOyB9Ci0gICAgQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlVG9SZXZhbGlkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVRvUmV2YWxp
ZGF0ZTsgfQotICAgIAotICAgIGJvb2wgaXNQdXJnZWFibGUoKSBjb25zdDsKLSAgICBib29sIHdh
c1B1cmdlZCgpIGNvbnN0OwotICAgIAotICAgIC8vIFRoaXMgaXMgdXNlZCBieSB0aGUgYXJjaGl2
ZSBtYWNoaW5lcnkgdG8gZ2V0IGF0IGEgcHVyZ2VkIHJlc291cmNlIHdpdGhvdXQKLSAgICAvLyB0
cmlnZ2VyaW5nIGEgbG9hZC4gV2Ugc2hvdWxkIG1ha2UgaXQgcHJvdGVjdGVkIGFnYWluIGlmIHdl
IGNhbiBmaW5kIGEKLSAgICAvLyBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGUgYXJjaGl2ZSBjYXNl
LgotICAgIGJvb2wgbWFrZVB1cmdlYWJsZShib29sIHB1cmdlYWJsZSk7Ci0KLXByb3RlY3RlZDoK
LSAgICB2b2lkIHNldEVuY29kZWRTaXplKHVuc2lnbmVkKTsKLSAgICB2b2lkIHNldERlY29kZWRT
aXplKHVuc2lnbmVkKTsKLSAgICB2b2lkIGRpZEFjY2Vzc0RlY29kZWREYXRhKGRvdWJsZSB0aW1l
U3RhbXApOwotCi0gICAgYm9vbCBpc1NhZmVUb01ha2VQdXJnZWFibGUoKSBjb25zdDsKLSAgICAK
LSAgICBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+IG1fY2xpZW50czsKLQot
ICAgIFN0cmluZyBtX3VybDsKLSAgICBTdHJpbmcgbV9hY2NlcHQ7Ci0gICAgUmVxdWVzdCogbV9y
ZXF1ZXN0OwotCi0gICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgIGRvdWJsZSBt
X3Jlc3BvbnNlVGltZXN0YW1wOwotCi0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOwot
ICAgIE93blB0cjxQdXJnZWFibGVCdWZmZXI+IG1fcHVyZ2VhYmxlRGF0YTsKLQotcHJpdmF0ZToK
LSAgICB2b2lkIGFkZENsaWVudFRvU2V0KENhY2hlZFJlc291cmNlQ2xpZW50Kik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgLy8gVGhlc2UgYXJlIGNhbGxl
ZCBieSB0aGUgZnJpZW5kbHkgQ2FjaGUgb25seQotICAgIHZvaWQgc2V0UmVzb3VyY2VUb1JldmFs
aWRhdGUoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICB2b2lkIHN3aXRjaENsaWVudHNUb1JldmFsaWRh
dGVkUmVzb3VyY2UoKTsKLSAgICB2b2lkIGNsZWFyUmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKLSAg
ICB2b2lkIHVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKTsKLSAgICB2aXJ0dWFsIFB1cmdlUHJpb3JpdHkgcHVy
Z2VQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIFB1cmdlRGVmYXVsdDsgfQotCi0gICAgZG91Ymxl
IGN1cnJlbnRBZ2UoKSBjb25zdDsKLSAgICBkb3VibGUgZnJlc2huZXNzTGlmZXRpbWUoKSBjb25z
dDsKLQotICAgIFJlZlB0cjxDYWNoZWRNZXRhZGF0YT4gbV9jYWNoZWRNZXRhZGF0YTsKLQotICAg
IGRvdWJsZSBtX2xhc3REZWNvZGVkQWNjZXNzVGltZTsgLy8gVXNlZCBhcyBhICJ0aHJhc2ggZ3Vh
cmQiIGluIHRoZSBjYWNoZQotCi0gICAgdW5zaWduZWQgbV9lbmNvZGVkU2l6ZTsKLSAgICB1bnNp
Z25lZCBtX2RlY29kZWRTaXplOwotICAgIHVuc2lnbmVkIG1fYWNjZXNzQ291bnQ7Ci0gICAgdW5z
aWduZWQgbV9oYW5kbGVDb3VudDsKLSAgICB1bnNpZ25lZCBtX3ByZWxvYWRDb3VudDsKLQotICAg
IHVuc2lnbmVkIG1fcHJlbG9hZFJlc3VsdCA6IDI7IC8vIFByZWxvYWRSZXN1bHQKLQotICAgIGJv
b2wgbV9pbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCA6IDE7Ci0gICAgYm9vbCBtX3JlcXVlc3Rl
ZEZyb21OZXR3b3JraW5nTGF5ZXIgOiAxOwotICAgIGJvb2wgbV9zZW5kUmVzb3VyY2VMb2FkQ2Fs
bGJhY2tzIDogMTsKLQotICAgIGJvb2wgbV9lcnJvck9jY3VycmVkIDogMTsKLSAgICBib29sIG1f
aW5DYWNoZSA6IDE7Ci0gICAgYm9vbCBtX2xvYWRpbmcgOiAxOwotCi0gICAgdW5zaWduZWQgbV90
eXBlIDogMzsgLy8gVHlwZQotICAgIHVuc2lnbmVkIG1fc3RhdHVzIDogMjsgLy8gU3RhdHVzCi0K
LSNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBtX2RlbGV0ZWQ7Ci0gICAgdW5zaWduZWQgbV9scnVJ
bmRleDsKLSNlbmRpZgotCi0gICAgQ2FjaGVkUmVzb3VyY2UqIG1fbmV4dEluQWxsUmVzb3VyY2Vz
TGlzdDsKLSAgICBDYWNoZWRSZXNvdXJjZSogbV9wcmV2SW5BbGxSZXNvdXJjZXNMaXN0OwotICAg
IAotICAgIENhY2hlZFJlc291cmNlKiBtX25leHRJbkxpdmVSZXNvdXJjZXNMaXN0OwotICAgIENh
Y2hlZFJlc291cmNlKiBtX3ByZXZJbkxpdmVSZXNvdXJjZXNMaXN0OwotCi0gICAgQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7IC8vIG9ubHkgbm9uLTAgZm9yIHJl
c291cmNlcyB0aGF0IGFyZSBub3QgaW4gdGhlIGNhY2hlCi0gICAgCi0gICAgLy8gSWYgdGhpcyBm
aWVsZCBpcyBub24tbnVsbCB3ZSBhcmUgdXNpbmcgdGhlIHJlc291cmNlIGFzIGEgcHJveHkgZm9y
IGNoZWNraW5nIHdoZXRoZXIgYW4gZXhpc3RpbmcgcmVzb3VyY2UgaXMgc3RpbGwgdXAgdG8gZGF0
ZQotICAgIC8vIHVzaW5nIEhUVFAgSWYtTW9kaWZpZWQtU2luY2UvSWYtTm9uZS1NYXRjaCBoZWFk
ZXJzLiBJZiB0aGUgcmVzcG9uc2UgaXMgMzA0IGFsbCBjbGllbnRzIG9mIHRoaXMgcmVzb3VyY2Ug
YXJlIG1vdmVkCi0gICAgLy8gdG8gdG8gYmUgY2xpZW50cyBvZiBtX3Jlc291cmNlVG9SZXZhbGlk
YXRlIGFuZCB0aGUgcmVzb3VyY2UgaXMgZGVsZXRlZC4gSWYgbm90LCB0aGUgZmllbGQgaXMgemVy
b2VkIGFuZCB0aGlzCi0gICAgLy8gcmVzb3VyY2VzIGJlY29tZXMgbm9ybWFsIHJlc291cmNlIGxv
YWQuCi0gICAgQ2FjaGVkUmVzb3VyY2UqIG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7Ci0KLSAgICAv
LyBJZiB0aGlzIGZpZWxkIGlzIG5vbi1udWxsLCB0aGUgcmVzb3VyY2UgaGFzIGEgcHJveHkgZm9y
IGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgc3RpbGwgdXAgdG8gZGF0ZSAoc2VlIG1fcmVzb3VyY2VU
b1JldmFsaWRhdGUpLgotICAgIENhY2hlZFJlc291cmNlKiBtX3Byb3h5UmVzb3VyY2U7Ci0KLSAg
ICAvLyBUaGVzZSBoYW5kbGVzIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHBvaW50IHRvIHRo
ZSBtX3Jlc291cmNlVG9SZXZhbGlkYXRlIGluIGNhc2Ugd2UgZ2V0IDMwNCByZXNwb25zZS4KLSAg
ICBIYXNoU2V0PENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSo+IG1faGFuZGxlc1RvUmV2YWxpZGF0
ZTsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJj
ZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlQ2xp
ZW50LmgJKHJldmlzaW9uIDcxNDkzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICAgIENvcHlyaWdo
dCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdo
dCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVk
IGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJv
bSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwot
Ci0jaWZuZGVmIENhY2hlZFJlc291cmNlQ2xpZW50X2gKLSNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VD
bGllbnRfaAotCi0jaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KLSNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBDYWNoZWRDU1NT
dHlsZVNoZWV0OwotICAgIGNsYXNzIENhY2hlZEZvbnQ7Ci0gICAgY2xhc3MgQ2FjaGVkUmVzb3Vy
Y2U7Ci0gICAgY2xhc3MgQ2FjaGVkSW1hZ2U7Ci0gICAgY2xhc3MgSW1hZ2U7Ci0gICAgY2xhc3Mg
SW50UmVjdDsKLSAgICBjbGFzcyBLVVJMOwotCi0gICAgLyoqCi0gICAgICogQGludGVybmFsCi0g
ICAgICoKLSAgICAgKiBhIGNsaWVudCB3aG8gd2FudHMgdG8gbG9hZCBzdHlsZXNoZWV0cywgaW1h
Z2VzIG9yIHNjcmlwdHMgZnJvbSB0aGUgd2ViIGhhcyB0bwotICAgICAqIGluaGVyaXQgZnJvbSB0
aGlzIGNsYXNzIGFuZCBvdmVybG9hZCBvbmUgb2YgdGhlIDMgZnVuY3Rpb25zCi0gICAgICoKLSAg
ICAgKi8KLSAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVudCA6IHB1YmxpYyBGYXN0QWxsb2NC
YXNlCi0gICAgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+Q2FjaGVkUmVzb3VyY2VD
bGllbnQoKSB7IH0KLQotICAgICAgICAvLyBDYWxsZWQgd2hlbmV2ZXIgYSBmcmFtZSBvZiBhbiBp
bWFnZSBjaGFuZ2VzLCBlaXRoZXIgYmVjYXVzZSB3ZSBnb3QgbW9yZSBkYXRhIGZyb20gdGhlIG5l
dHdvcmsgb3IKLSAgICAgICAgLy8gYmVjYXVzZSB3ZSBhcmUgYW5pbWF0aW5nLiBJZiBub3QgbnVs
bCwgdGhlIEludFJlY3QgaXMgdGhlIGNoYW5nZWQgcmVjdCBvZiB0aGUgaW1hZ2UuCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRSZWN0KiA9
IDApIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIENhbGxlZCB0byBmaW5kIG91dCBpZiB0aGlz
IGNsaWVudCB3YW50cyB0byBhY3R1YWxseSBkaXNwbGF5IHRoZSBpbWFnZS4gIFVzZWQgdG8gdGVs
bCB3aGVuIHdlCi0gICAgICAgIC8vIGNhbiBoYWx0IGFuaW1hdGlvbi4gIENvbnRlbnQgbm9kZXMg
dGhhdCBob2xkIGltYWdlIHJlZnMgZm9yIGV4YW1wbGUgd291bGQgbm90IHJlbmRlciB0aGUgaW1h
Z2UsCi0gICAgICAgIC8vIGJ1dCBSZW5kZXJJbWFnZXMgd291bGQgKGFzc3VtaW5nIHRoZXkgaGF2
ZSB2aXNpYmlsaXR5OiB2aXNpYmxlIGFuZCB0aGVpciByZW5kZXIgdHJlZSBpc24ndCBoaWRkZW4K
LSAgICAgICAgLy8gZS5nLiwgaW4gdGhlIGIvZiBjYWNoZSBvciBpbiBhIGJhY2tncm91bmQgdGFi
KS4KLSAgICAgICAgdmlydHVhbCBib29sIHdpbGxSZW5kZXJJbWFnZShDYWNoZWRJbWFnZSopIHsg
cmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQo
Y29uc3QgU3RyaW5nJiAvKiBocmVmICovLCBjb25zdCBLVVJMJiAvKiBiYXNlVVJMICovLCBjb25z
dCBTdHJpbmcmIC8qIGNoYXJzZXQgKi8sIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKSB7IH0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHNldFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiAvKiBo
cmVmICovLCBjb25zdCBLVVJMJiAvKiBiYXNlVVJMICovLCBjb25zdCBTdHJpbmcmIC8qIHNoZWV0
ICovKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCopIHt9
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKSB7
IH0KLSAgICB9OwotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVz
b3VyY2VDbGllbnRXYWxrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hl
ZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcAkocmV2aXNpb24gNzE0OTMpCisrKyBXZWJDb3JlL2xv
YWRlci9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NTMgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxA
bXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3Rp
YW5Aa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxs
IGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFu
ZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9y
IHRoZXNlIG9iamVjdHMuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DYWNo
ZWRSZXNvdXJjZUNsaWVudFdhbGtlcjo6Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIoY29uc3Qg
SGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiYgc2V0KQotICAgIDogbV9jbGll
bnRTZXQoc2V0KSwgbV9jbGllbnRWZWN0b3Ioc2V0LnNpemUoKSksIG1faW5kZXgoMCkKLXsKLSAg
ICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj46OmNvbnN0X2l0
ZXJhdG9yIEl0ZXJhdG9yOwotICAgIEl0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKLSAgICBzaXpl
X3QgY2xpZW50SW5kZXggPSAwOwotICAgIGZvciAoSXRlcmF0b3IgY3VycmVudCA9IHNldC5iZWdp
bigpOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50KQotICAgICAgICBtX2NsaWVudFZlY3Rvcltj
bGllbnRJbmRleCsrXSA9IGN1cnJlbnQtPmZpcnN0OwotfQotCi1DYWNoZWRSZXNvdXJjZUNsaWVu
dCogQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI6Om5leHQoKQotewotICAgIHNpemVfdCBzaXpl
ID0gbV9jbGllbnRWZWN0b3Iuc2l6ZSgpOwotICAgIHdoaWxlIChtX2luZGV4IDwgc2l6ZSkgewot
ICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCogbmV4dCA9IG1fY2xpZW50VmVjdG9yW21faW5k
ZXgrK107Ci0gICAgICAgIGlmIChtX2NsaWVudFNldC5jb250YWlucyhuZXh0KSkKLSAgICAgICAg
ICAgIHJldHVybiBuZXh0OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi19CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgJKHJldmlzaW9uIDcx
NDkzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OCBM
YXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFRoaXMg
Y2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdl
cywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMg
YSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwotCi0jaWZuZGVmIENhY2hlZFJl
c291cmNlQ2xpZW50V2Fsa2VyX2gKLSNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXJf
aAotCi0jaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZUNs
aWVudDsKLQotICAgIC8vIENhbGwgdGhpcyAid2Fsa2VyIiBpbnN0ZWFkIG9mIGl0ZXJhdG9yIHNv
IHBlb3BsZSB3b24ndCBleHBlY3QgUXQgb3IgU1RMLXN0eWxlIGl0ZXJhdG9yIGludGVyZmFjZS4K
LSAgICAvLyBKdXN0IGtlZXAgY2FsbGluZyBuZXh0KCkgb24gdGhpcy4gSXQncyBzYWZlIGZyb20g
ZGVsZXRpb25zIG9mIGl0ZW1zLgotICAgIGNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2Vy
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyKGNvbnN0
IEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj4mKTsKLSAgICAgICAgQ2FjaGVk
UmVzb3VyY2VDbGllbnQqIG5leHQoKTsKLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBIYXNo
Q291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+JiBtX2NsaWVudFNldDsKLSAgICAgICAg
VmVjdG9yPENhY2hlZFJlc291cmNlQ2xpZW50Kj4gbV9jbGllbnRWZWN0b3I7Ci0gICAgICAgIHNp
emVfdCBtX2luZGV4OwotICAgIH07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
Q2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA3MTQ5MykKKysrIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjpzZXRSZXNv
dXJjZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpIAotewotICAgIGlmIChyZXNvdXJjZSA9PSBt
X3Jlc291cmNlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fcmVzb3VyY2UpCi0gICAgICAg
IG1fcmVzb3VyY2UtPnVucmVnaXN0ZXJIYW5kbGUodGhpcyk7Ci0gICAgbV9yZXNvdXJjZSA9IHJl
c291cmNlOwotICAgIGlmIChtX3Jlc291cmNlKQotICAgICAgICBtX3Jlc291cmNlLT5yZWdpc3Rl
ckhhbmRsZSh0aGlzKTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUhh
bmRsZS5oCShyZXZpc2lvbiA3MTQ5MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNl
SGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDYWNoZWRSZXNvdXJjZUhh
bmRsZV9oCi0jZGVmaW5lIENhY2hlZFJlc291cmNlSGFuZGxlX2gKLQotI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIENhY2hlZFJl
c291cmNlSGFuZGxlQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICB+Q2FjaGVkUmVzb3VyY2VI
YW5kbGVCYXNlKCkgeyBpZiAobV9yZXNvdXJjZSkgbV9yZXNvdXJjZS0+dW5yZWdpc3RlckhhbmRs
ZSh0aGlzKTsgfQotICAgICAgICBDYWNoZWRSZXNvdXJjZSogZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV9yZXNvdXJjZTsgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhbV9yZXNvdXJjZTsgfQotICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBjb252ZXJz
aW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0
byBvdGhlciBpbnRlZ2VyIHR5cGVzLgotICAgICAgICAvLyBQYXJlbnRoZXNpcyBpcyBuZWVkZWQg
Zm9yIHdpbnNjdyBjb21waWxlciB0byByZXNvbHZlIGNsYXNzIHF1YWxpZmllciBpbiB0aGlzIGNh
c2UuCi0gICAgICAgIHR5cGVkZWYgQ2FjaGVkUmVzb3VyY2UqIChDYWNoZWRSZXNvdXJjZUhhbmRs
ZUJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKLSAgICAgICAgb3BlcmF0b3IgVW5zcGVjaWZp
ZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2UgPyAmQ2FjaGVkUmVzb3VyY2VI
YW5kbGVCYXNlOjptX3Jlc291cmNlIDogMDsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBD
YWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UoKSA6IG1fcmVzb3VyY2UoMCkge30KLSAgICAgICAgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGVCYXNlKENhY2hlZFJlc291cmNlKiByZXMpIHsgbV9yZXNvdXJjZSA9
IHJlczsgaWYgKG1fcmVzb3VyY2UpIG1fcmVzb3VyY2UtPnJlZ2lzdGVySGFuZGxlKHRoaXMpOyB9
Ci0gICAgICAgIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZShjb25zdCBDYWNoZWRSZXNvdXJjZUhh
bmRsZUJhc2UmIG8pIDogbV9yZXNvdXJjZShvLm1fcmVzb3VyY2UpIHsgaWYgKG1fcmVzb3VyY2Up
IG1fcmVzb3VyY2UtPnJlZ2lzdGVySGFuZGxlKHRoaXMpOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRS
ZXNvdXJjZShDYWNoZWRSZXNvdXJjZSopOwotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAg
ICBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UmIG9wZXJhdG9yPShjb25zdCBDYWNoZWRSZXNvdXJj
ZUhhbmRsZUJhc2UmKSB7IHJldHVybiAqdGhpczsgfSAKLSAgICAgICAgCi0gICAgICAgIGZyaWVu
ZCBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKLQotICAgICAgICBDYWNoZWRSZXNvdXJjZSogbV9yZXNv
dXJjZTsKLSAgICB9OwotICAgICAgICAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgUj4gY2xhc3MgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlIHsKLSAg
ICBwdWJsaWM6IAotICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZSgpIHsgfQotICAgICAgICBD
YWNoZWRSZXNvdXJjZUhhbmRsZShSKiByZXMpOwotICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRs
ZShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxSPiYgbykgOiBDYWNoZWRSZXNvdXJjZUhhbmRs
ZUJhc2UobykgeyB9Ci0KLSAgICAgICAgUiogZ2V0KCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxSKj4oQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjpnZXQoKSk7IH0KLSAgICAgICAg
Uiogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9Ci0gICAgICAgICAgICAgICAK
LSAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGUmIG9wZXJhdG9yPShSKiByZXMpIHsgc2V0UmVz
b3VyY2UocmVzKTsgcmV0dXJuICp0aGlzOyB9IAotICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRs
ZSYgb3BlcmF0b3I9KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlJiBvKSB7IHNldFJlc291cmNl
KG8uZ2V0KCkpOyByZXR1cm4gKnRoaXM7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSYgbykgY29uc3QgeyByZXR1cm4gZ2V0KCkgPT0gby5n
ZXQoKTsgfQotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5k
bGVCYXNlJiBvKSBjb25zdCB7IHJldHVybiBnZXQoKSAhPSBvLmdldCgpOyB9Ci0gICAgfTsKLQot
ICAgIC8vIERvbid0IGlubGluZSBmb3Igd2luc2N3IGNvbXBpbGVyIHRvIHByZXZlbnQgdGhlIGNv
bXBpbGVyIGFnZ3Jlc3NpdmVseSByZXNvbHZpbmcKLSAgICAvLyB0aGUgYmFzZSBjbGFzcyBvZiBS
KiB3aGVuIENhY2hlZFJlc291cmNlSGFuZGxlcjxUPihSKikgaXMgaW5saW5lZC4gIFRoZSBidWcg
aXMKLSAgICAvLyByZXBvcnRlZCBhdDogaHR0cHM6Ly94ZGFidWcwMDEuZXh0Lm5va2lhLmNvbS9i
dWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9OTgxMi4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgUj4KLSNp
ZiAhQ09NUElMRVIoV0lOU0NXKQotICAgIGlubGluZQotI2VuZGlmCi0gICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Uj46OkNhY2hlZFJlc291cmNlSGFuZGxlKFIqIHJlcykgOiBDYWNoZWRSZXNvdXJj
ZUhhbmRsZUJhc2UocmVzKSAKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlIDxjbGFz
cyBSLCBjbGFzcyBSUj4gYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxl
PFI+JiBoLCBjb25zdCBSUiogcmVzKSAKLSAgICB7IAotICAgICAgICByZXR1cm4gaC5nZXQoKSA9
PSByZXM7IAotICAgIH0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUlI+IGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBSUiogcmVzLCBjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxSPiYgaCkg
Ci0gICAgeyAKLSAgICAgICAgcmV0dXJuIGguZ2V0KCkgPT0gcmVzOyAKLSAgICB9Ci0gICAgdGVt
cGxhdGUgPGNsYXNzIFIsIGNsYXNzIFJSPiBib29sIG9wZXJhdG9yIT0oY29uc3QgQ2FjaGVkUmVz
b3VyY2VIYW5kbGU8Uj4mIGgsIGNvbnN0IFJSKiByZXMpIAotICAgIHsgCi0gICAgICAgIHJldHVy
biBoLmdldCgpICE9IHJlczsgCi0gICAgfQotICAgIHRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBS
Uj4gYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJSKiByZXMsIGNvbnN0IENhY2hlZFJlc291cmNlSGFu
ZGxlPFI+JiBoKSAKLSAgICB7IAotICAgICAgICByZXR1cm4gaC5nZXQoKSAhPSByZXM7IAotICAg
IH0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUxvYWRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
Y3BwCShyZXZpc2lvbiA3MTQ5MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0OTggKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0
IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICAgIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5
IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAotICAgIHBh
Z2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3Rz
LgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9h
ZGVyLmgiCi0KLSNpbmNsdWRlICJsb2FkZXIuaCIKLSNpbmNsdWRlICJDYWNoZS5oIgotI2luY2x1
ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJDYWNoZWRGb250LmgiCi0jaW5j
bHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKLSNpbmNsdWRl
ICJDYWNoZWRYU0xTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ29uc29sZS5oIgotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJQaW5nTG9hZGVyLmgiCi0jaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+Ci0KLSNkZWZpbmUgUFJFTE9BRF9ERUJVRyAw
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkNhY2hlZFJl
c291cmNlTG9hZGVyKERvY3VtZW50KiBkb2MpCi0gICAgOiBtX2NhY2hlKGNhY2hlKCkpCi0gICAg
LCBtX2RvYyhkb2MpCi0gICAgLCBtX3JlcXVlc3RDb3VudCgwKQotICAgICwgbV9hdXRvTG9hZElt
YWdlcyh0cnVlKQotICAgICwgbV9sb2FkSW5Qcm9ncmVzcyhmYWxzZSkKLSAgICAsIG1fYWxsb3dT
dGFsZVJlc291cmNlcyhmYWxzZSkKLXsKLSAgICBtX2NhY2hlLT5hZGRDYWNoZWRSZXNvdXJjZUxv
YWRlcih0aGlzKTsKLX0KLQotQ2FjaGVkUmVzb3VyY2VMb2FkZXI6On5DYWNoZWRSZXNvdXJjZUxv
YWRlcigpCi17Ci0gICAgaWYgKG1fcmVxdWVzdENvdW50KQotICAgICAgICBtX2NhY2hlLT5sb2Fk
ZXIoKS0+Y2FuY2VsUmVxdWVzdHModGhpcyk7Ci0KLSAgICBjbGVhclByZWxvYWRzKCk7Ci0gICAg
RG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFJlc291cmNlcy5l
bmQoKTsKLSAgICBmb3IgKERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1
bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNv
bmQtPnNldENhY2hlZFJlc291cmNlTG9hZGVyKDApOwotICAgIG1fY2FjaGUtPnJlbW92ZUNhY2hl
ZFJlc291cmNlTG9hZGVyKHRoaXMpOwotCi0gICAgLy8gTWFrZSBzdXJlIG5vIHJlcXVlc3RzIHN0
aWxsIHBvaW50IHRvIHRoaXMgQ2FjaGVkUmVzb3VyY2VMb2FkZXIKLSAgICBBU1NFUlQobV9yZXF1
ZXN0Q291bnQgPT0gMCk7Ci19Ci0KLUZyYW1lKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZnJhbWUo
KSBjb25zdAotewotICAgIHJldHVybiBtX2RvYy0+ZnJhbWUoKTsKLX0KLQotdm9pZCBDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6Y2hlY2tGb3JSZWxvYWQoY29uc3QgS1VSTCYgZnVsbFVSTCkKLXsKLSAg
ICBpZiAobV9hbGxvd1N0YWxlUmVzb3VyY2VzKQotICAgICAgICByZXR1cm47IC8vIERvbid0IHJl
bG9hZCByZXNvdXJjZXMgd2hpbGUgcGFzdGluZwotCi0gICAgaWYgKGZ1bGxVUkwuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKG1fcmVsb2FkZWRVUkxzLmNvbnRhaW5z
KGZ1bGxVUkwuc3RyaW5nKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQ2FjaGVkUmVz
b3VyY2UqIGV4aXN0aW5nID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwoZnVsbFVSTC5zdHJpbmco
KSk7Ci0gICAgaWYgKCFleGlzdGluZyB8fCBleGlzdGluZy0+aXNQcmVsb2FkZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChjYWNoZVBvbGljeSgpKSB7Ci0gICAgY2FzZSBDYWNo
ZVBvbGljeVZlcmlmeToKLSAgICAgICAgaWYgKCFleGlzdGluZy0+bXVzdFJldmFsaWRhdGUoQ2Fj
aGVQb2xpY3lWZXJpZnkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYWNoZSgpLT5y
ZXZhbGlkYXRlUmVzb3VyY2UoZXhpc3RpbmcsIHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENhY2hlUG9saWN5Q2FjaGU6Ci0gICAgICAgIGlmICghZXhpc3RpbmctPm11c3RSZXZhbGlk
YXRlKENhY2hlUG9saWN5Q2FjaGUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYWNo
ZSgpLT5yZXZhbGlkYXRlUmVzb3VyY2UoZXhpc3RpbmcsIHRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENhY2hlUG9saWN5UmVsb2FkOgotICAgICAgICBjYWNoZSgpLT5yZW1vdmUoZXhp
c3RpbmcpOyAgICAgICAgCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FjaGVQb2xpY3lSZXZh
bGlkYXRlOgotICAgICAgICBjYWNoZSgpLT5yZXZhbGlkYXRlUmVzb3VyY2UoZXhpc3RpbmcsIHRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhY2hlUG9saWN5QWxsb3dTdGFsZToKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcmVsb2FkZWRVUkxzLmFkZChmdWxsVVJMLnN0
cmluZygpKTsKLX0KLQotQ2FjaGVkSW1hZ2UqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0
SW1hZ2UoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgaWYgKEZyYW1lKiBmID0gZnJhbWUoKSkg
ewotICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmLT5zZXR0aW5ncygpOwotICAgICAgICBp
ZiAoIWYtPmxvYWRlcigpLT5jbGllbnQoKS0+YWxsb3dJbWFnZXMoIXNldHRpbmdzIHx8IHNldHRp
bmdzLT5hcmVJbWFnZXNFbmFibGVkKCkpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAg
ICAgaWYgKGYtPmxvYWRlcigpLT5wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQoKSkg
ewotICAgICAgICAgICAgS1VSTCBjb21wbGV0ZVVSTCA9IG1fZG9jLT5jb21wbGV0ZVVSTCh1cmwp
OwotICAgICAgICAgICAgaWYgKGNvbXBsZXRlVVJMLmlzVmFsaWQoKSAmJiBjYW5SZXF1ZXN0KENh
Y2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlLCBjb21wbGV0ZVVSTCkpCi0gICAgICAgICAgICAg
ICAgUGluZ0xvYWRlcjo6bG9hZEltYWdlKGYsIGNvbXBsZXRlVVJMKTsKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICB9Ci0gICAgfQotICAgIENhY2hlZEltYWdlKiByZXNvdXJjZSA9IHN0
YXRpY19jYXN0PENhY2hlZEltYWdlKj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpJ
bWFnZVJlc291cmNlLCB1cmwsIFN0cmluZygpKSk7Ci0gICAgaWYgKGF1dG9Mb2FkSW1hZ2VzKCkg
JiYgcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnN0aWxsTmVlZHNMb2FkKCkpIHsKLSAgICAgICAgcmVz
b3VyY2UtPnNldExvYWRpbmcodHJ1ZSk7Ci0gICAgICAgIGNhY2hlKCktPmxvYWRlcigpLT5sb2Fk
KHRoaXMsIHJlc291cmNlLCB0cnVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc291cmNlOwotfQot
Ci1DYWNoZWRGb250KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdEZvbnQoY29uc3QgU3Ry
aW5nJiB1cmwpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZEZvbnQqPihyZXF1ZXN0
UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZSwgdXJsLCBTdHJpbmcoKSkpOwot
fQotCi1DYWNoZWRDU1NTdHlsZVNoZWV0KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdENT
U1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLXsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkQ1NTU3R5bGVTaGVldCo+KHJlcXVlc3RSZXNv
dXJjZShDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCwgdXJsLCBjaGFyc2V0KSk7Ci19Ci0K
LUNhY2hlZENTU1N0eWxlU2hlZXQqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0VXNlckNT
U1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLXsK
LSAgICByZXR1cm4gY2FjaGUoKS0+cmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KHRoaXMsIHVybCwg
Y2hhcnNldCk7Ci19Ci0KLUNhY2hlZFNjcmlwdCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVl
c3RTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKLXsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkU2NyaXB0Kj4ocmVxdWVzdFJlc291cmNlKENhY2hl
ZFJlc291cmNlOjpTY3JpcHQsIHVybCwgY2hhcnNldCkpOwotfQotCi0jaWYgRU5BQkxFKFhTTFQp
Ci1DYWNoZWRYU0xTdHlsZVNoZWV0KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFhTTFN0
eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENh
Y2hlZFhTTFN0eWxlU2hlZXQqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlhTTFN0
eWxlU2hlZXQsIHVybCwgU3RyaW5nKCkpKTsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKExJTktf
UFJFRkVUQ0gpCi1DYWNoZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RM
aW5rUHJlZmV0Y2goY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgQVNTRVJUKGZyYW1lKCkpOwot
ICAgIHJldHVybiByZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaCwg
dXJsLCBTdHJpbmcoKSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
Y2FuUmVxdWVzdChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiB1cmwpCi17
Ci0gICAgLy8gU29tZSB0eXBlcyBvZiByZXNvdXJjZXMgY2FuIGJlIGxvYWRlZCBvbmx5IGZyb20g
dGhlIHNhbWUgb3JpZ2luLiAgT3RoZXIKLSAgICAvLyB0eXBlcyBvZiByZXNvdXJjZXMsIGxpa2Ug
SW1hZ2VzLCBTY3JpcHRzLCBhbmQgQ1NTLCBjYW4gYmUgbG9hZGVkIGZyb20KLSAgICAvLyBhbnkg
VVJMLgotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdl
UmVzb3VyY2U6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKLSAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9u
dFJlc291cmNlOgotI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OkxpbmtQcmVmZXRjaDoKLSNlbmRpZgotICAgICAgICAvLyBUaGVzZSB0eXBlcyBvZiBy
ZXNvdXJjZXMgY2FuIGJlIGxvYWRlZCBmcm9tIGFueSBvcmlnaW4uCi0gICAgICAgIC8vIEZJWE1F
OiBBcmUgd2Ugc3VyZSBhYm91dCBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlPwotICAgICAg
ICBicmVhazsKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xT
dHlsZVNoZWV0OgotICAgICAgICBpZiAoIW1fZG9jLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1
ZXN0KHVybCkpIHsKLSAgICAgICAgICAgIHByaW50QWNjZXNzRGVuaWVkTWVzc2FnZSh1cmwpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotI2Vu
ZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIC8vIEdpdmVuIHRoYXQgdGhlIGxvYWQgaXMgYWxsb3dlZCBi
eSB0aGUgc2FtZS1vcmlnaW4gcG9saWN5LCB3ZSBzaG91bGQKLSAgICAvLyBjaGVjayB3aGV0aGVy
IHRoZSBsb2FkIHBhc3NlcyB0aGUgbWl4ZWQtY29udGVudCBwb2xpY3kuCi0gICAgLy8KLSAgICAv
LyBOb3RlOiBDdXJyZW50bHksIHdlIGFsd2F5cyBhbGxvdyBtaXhlZCBjb250ZW50LCBidXQgd2Ug
Z2VuZXJhdGUgYQotICAgIC8vICAgICAgIGNhbGxiYWNrIHRvIHRoZSBGcmFtZUxvYWRlckNsaWVu
dCBpbiBjYXNlIHRoZSBlbWJlZGRlciB3YW50cyB0bwotICAgIC8vICAgICAgIHVwZGF0ZSBhbnkg
c2VjdXJpdHkgaW5kaWNhdG9ycy4KLSAgICAvLyAKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKLSNlbmRpZgotICAgICAgICAvLyBUaGVzZSBy
ZXNvdXJjZSBjYW4gaW5qZWN0IHNjcmlwdCBpbnRvIHRoZSBjdXJyZW50IGRvY3VtZW50LgotICAg
ICAgICBpZiAoRnJhbWUqIGYgPSBmcmFtZSgpKQotICAgICAgICAgICAgZi0+bG9hZGVyKCktPmNo
ZWNrSWZSdW5JbnNlY3VyZUNvbnRlbnQobV9kb2MtPnNlY3VyaXR5T3JpZ2luKCksIHVybCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6Ci0g
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKLSAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpGb250UmVzb3VyY2U6IHsKLSAgICAgICAgLy8gVGhlc2UgcmVzb3VyY2VzIGNhbiBj
b3JydXB0IG9ubHkgdGhlIGZyYW1lJ3MgcGl4ZWxzLgotICAgICAgICBpZiAoRnJhbWUqIGYgPSBm
cmFtZSgpKSB7Ci0gICAgICAgICAgICBGcmFtZSogdG9wID0gZi0+dHJlZSgpLT50b3AoKTsKLSAg
ICAgICAgICAgIHRvcC0+bG9hZGVyKCktPmNoZWNrSWZEaXNwbGF5SW5zZWN1cmVDb250ZW50KHRv
cC0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgdXJsKTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICB9Ci0jaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCi0gICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgotICAgICAgICAvLyBQcmVmZXRjaCBjYW5ub3QgYWZm
ZWN0IHRoZSBjdXJyZW50IGRvY3VtZW50LgotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgLy8gRklYTUU6IENvbnNpZGVyIGxldHRpbmcgdGhlIGVtYmVkZGVyIGJsb2NrIG1p
eGVkIGNvbnRlbnQgbG9hZHMuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUNhY2hlZFJlc291cmNl
KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpU
eXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGJvb2wg
aXNQcmVsb2FkKQotewotICAgIEtVUkwgZnVsbFVSTCA9IG1fZG9jLT5jb21wbGV0ZVVSTCh1cmwp
OwotCi0gICAgaWYgKCFmdWxsVVJMLmlzVmFsaWQoKSB8fCAhY2FuUmVxdWVzdCh0eXBlLCBmdWxs
VVJMKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoY2FjaGUoKS0+ZGlzYWJsZWQoKSkg
ewotICAgICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRS
ZXNvdXJjZXMuZmluZChmdWxsVVJMLnN0cmluZygpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChp
dCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+c2Vjb25k
LT5zZXRDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKLSAgICAgICAgICAgIG1fZG9jdW1lbnRSZXNv
dXJjZXMucmVtb3ZlKGl0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNoZWNrRm9yUmVsb2Fk
KGZ1bGxVUkwpOwotCi0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gY2FjaGUoKS0+cmVx
dWVzdFJlc291cmNlKHRoaXMsIHR5cGUsIGZ1bGxVUkwsIGNoYXJzZXQsIGlzUHJlbG9hZCk7Ci0g
ICAgaWYgKHJlc291cmNlKSB7Ci0gICAgICAgIC8vIENoZWNrIGZpbmFsIFVSTCBvZiByZXNvdXJj
ZSB0byBjYXRjaCByZWRpcmVjdHMuCi0gICAgICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTYzPi4KLSAgICAgICAgaWYgKGZ1bGxVUkwgIT0gcmVz
b3VyY2UtPnVybCgpICYmICFjYW5SZXF1ZXN0KHR5cGUsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBy
ZXNvdXJjZS0+dXJsKCkpKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIG1fZG9j
dW1lbnRSZXNvdXJjZXMuc2V0KHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UpOwotICAgICAgICBj
aGVja0NhY2hlT2JqZWN0U3RhdHVzKHJlc291cmNlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc291
cmNlOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpwcmludEFjY2Vzc0RlbmllZE1l
c3NhZ2UoY29uc3QgS1VSTCYgdXJsKSBjb25zdAotewotICAgIGlmICh1cmwuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUoKS0+c2V0dGluZ3MoKTsKLSAgICBpZiAoIXNl
dHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFN0cmluZyBtZXNzYWdlID0gbV9kb2MtPnVybCgpLmlzTnVsbCgpID8KLSAg
ICAgICAgbWFrZVN0cmluZygiVW5zYWZlIGF0dGVtcHQgdG8gbG9hZCBVUkwgIiwgdXJsLnN0cmlu
ZygpLCAnLicpIDoKLSAgICAgICAgbWFrZVN0cmluZygiVW5zYWZlIGF0dGVtcHQgdG8gbG9hZCBV
UkwgIiwgdXJsLnN0cmluZygpLCAiIGZyb20gZnJhbWUgd2l0aCBVUkwgIiwgbV9kb2MtPnVybCgp
LnN0cmluZygpLCAiLiBEb21haW5zLCBwcm90b2NvbHMgYW5kIHBvcnRzIG11c3QgbWF0Y2guXG4i
KTsKLQotICAgIC8vIEZJWE1FOiBwcm92aWRlIGEgcmVhbCBsaW5lIG51bWJlciBhbmQgc291cmNl
IFVSTC4KLSAgICBmcmFtZSgpLT5kb21XaW5kb3coKS0+Y29uc29sZSgpLT5hZGRNZXNzYWdlKE90
aGVyTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCBtZXNz
YWdlLCAxLCBTdHJpbmcoKSk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNldEF1
dG9Mb2FkSW1hZ2VzKGJvb2wgZW5hYmxlKQotewotICAgIGlmIChlbmFibGUgPT0gbV9hdXRvTG9h
ZEltYWdlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hdXRvTG9hZEltYWdlcyA9IGVuYWJs
ZTsKLQotICAgIGlmICghbV9hdXRvTG9hZEltYWdlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
RG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFJlc291cmNlcy5l
bmQoKTsKLSAgICBmb3IgKERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1
bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVk
UmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKLSAgICAgICAgaWYgKHJlc291
cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UpIHsKLSAgICAgICAg
ICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IGNvbnN0X2Nhc3Q8Q2FjaGVkSW1hZ2UqPihzdGF0aWNf
Y2FzdDxjb25zdCBDYWNoZWRJbWFnZSo+KHJlc291cmNlKSk7Ci0KLSAgICAgICAgICAgIGlmIChp
bWFnZS0+c3RpbGxOZWVkc0xvYWQoKSkKLSAgICAgICAgICAgICAgICBjYWNoZSgpLT5sb2FkZXIo
KS0+bG9hZCh0aGlzLCBpbWFnZSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUNhY2hl
UG9saWN5IENhY2hlZFJlc291cmNlTG9hZGVyOjpjYWNoZVBvbGljeSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGZyYW1lKCkgPyBmcmFtZSgpLT5sb2FkZXIoKS0+c3VicmVzb3VyY2VDYWNoZVBvbGlj
eSgpIDogQ2FjaGVQb2xpY3lWZXJpZnk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OnJlbW92ZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkgY29uc3QKLXsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X2RvY3VtZW50UmVzb3VyY2VzLmZpbmQocmVzb3VyY2UtPnVybCgpKTsKLSAgICBpZiAoaXQgIT0g
bV9kb2N1bWVudFJlc291cmNlcy5lbmQoKSkKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNvbmQuZ2V0
KCkgPT0gcmVzb3VyY2UpOwotI2VuZGlmCi0gICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1vdmUo
cmVzb3VyY2UtPnVybCgpKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0TG9h
ZEluUHJvZ3Jlc3MoYm9vbCBsb2FkKQotewotICAgIG1fbG9hZEluUHJvZ3Jlc3MgPSBsb2FkOwot
ICAgIGlmICghbG9hZCAmJiBmcmFtZSgpKQotICAgICAgICBmcmFtZSgpLT5sb2FkZXIoKS0+bG9h
ZERvbmUoKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tDYWNoZU9iamVj
dFN0YXR1cyhDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCi17Ci0gICAgLy8gUmV0dXJuIGZyb20g
dGhlIGZ1bmN0aW9uIGZvciBvYmplY3RzIHRoYXQgd2UgZGlkbid0IGxvYWQgZnJvbSB0aGUgY2Fj
aGUgb3IgaWYgd2UgZG9uJ3QgaGF2ZSBhIGZyYW1lLgotICAgIGlmICghcmVzb3VyY2UgfHwgIWZy
YW1lKCkgfHwgcmVzb3VyY2UtPnN0YXR1cygpICE9IENhY2hlZFJlc291cmNlOjpDYWNoZWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgV2ViS2l0IGNsaWVudCBjaGFu
Z2VzIG9yIGNhbmNlbHMgdGhlIHJlcXVlc3QsIFdlYkNvcmUgZG9lcyBub3QgcmVzcGVjdCB0aGlz
IGFuZCBjb250aW51ZXMgdGhlIGxvYWQuCi0gICAgZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRlZFJl
c291cmNlRnJvbU1lbW9yeUNhY2hlKHJlc291cmNlKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6aW5jcmVtZW50UmVxdWVzdENvdW50KGNvbnN0IENhY2hlZFJlc291cmNlKiByZXMp
Ci17Ci0gICAgaWYgKHJlcy0+aXNQcmVmZXRjaCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAr
K21fcmVxdWVzdENvdW50OwotfQotCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpkZWNyZW1l
bnRSZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVzb3VyY2UqIHJlcykKLXsKLSAgICBpZiAocmVz
LT5pc1ByZWZldGNoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC0tbV9yZXF1ZXN0Q291bnQ7
Ci0gICAgQVNTRVJUKG1fcmVxdWVzdENvdW50ID4gLTEpOwotfQotCi1pbnQgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OnJlcXVlc3RDb3VudCgpCi17Ci0gICAgaWYgKGxvYWRJblByb2dyZXNzKCkpCi0g
ICAgICAgICByZXR1cm4gbV9yZXF1ZXN0Q291bnQgKyAxOwotICAgIHJldHVybiBtX3JlcXVlc3RD
b3VudDsKLX0KLSAgICAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnByZWxvYWQoQ2FjaGVk
UmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hh
cnNldCwgYm9vbCByZWZlcmVuY2VkRnJvbUJvZHkpCi17Ci0gICAgYm9vbCBoYXNSZW5kZXJpbmcg
PSBtX2RvYy0+Ym9keSgpICYmIG1fZG9jLT5ib2R5KCktPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFo
YXNSZW5kZXJpbmcgJiYgKHJlZmVyZW5jZWRGcm9tQm9keSB8fCB0eXBlID09IENhY2hlZFJlc291
cmNlOjpJbWFnZVJlc291cmNlKSkgewotICAgICAgICAvLyBEb24ndCBwcmVsb2FkIGltYWdlcyBv
ciBib2R5IHJlc291cmNlcyBiZWZvcmUgd2UgaGF2ZSBzb21ldGhpbmcgdG8gZHJhdy4gVGhpcyBw
cmV2ZW50cwotICAgICAgICAvLyBwcmVsb2FkcyBmcm9tIGJvZHkgZGVsYXlpbmcgZmlyc3QgZGlz
cGxheSB3aGVuIGJhbmR3aWR0aCBpcyBsaW1pdGVkLgotICAgICAgICBQZW5kaW5nUHJlbG9hZCBw
ZW5kaW5nUHJlbG9hZCA9IHsgdHlwZSwgdXJsLCBjaGFyc2V0IH07Ci0gICAgICAgIG1fcGVuZGlu
Z1ByZWxvYWRzLmFwcGVuZChwZW5kaW5nUHJlbG9hZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgcmVxdWVzdFByZWxvYWQodHlwZSwgdXJsLCBjaGFyc2V0KTsKLX0KLQotdm9pZCBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tGb3JQZW5kaW5nUHJlbG9hZHMoKSAKLXsKLSAgICB1bnNp
Z25lZCBjb3VudCA9IG1fcGVuZGluZ1ByZWxvYWRzLnNpemUoKTsKLSAgICBpZiAoIWNvdW50IHx8
ICFtX2RvYy0+Ym9keSgpIHx8ICFtX2RvYy0+Ym9keSgpLT5yZW5kZXJlcigpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgUGVuZGluZ1ByZWxvYWQmIHByZWxvYWQgPSBtX3BlbmRpbmdQcmVsb2Fkc1tpXTsKLSAgICAg
ICAgLy8gRG9uJ3QgcmVxdWVzdCBwcmVsb2FkIGlmIHRoZSByZXNvdXJjZSBhbHJlYWR5IGxvYWRl
ZCBub3JtYWxseSAodGhpcyB3aWxsIHJlc3VsdCBpbiBkb3VibGUgbG9hZCBpZiB0aGUgcGFnZSBp
cyBiZWluZyByZWxvYWRlZCB3aXRoIGNhY2hlZCByZXN1bHRzIGlnbm9yZWQpLgotICAgICAgICBp
ZiAoIWNhY2hlZFJlc291cmNlKG1fZG9jLT5jb21wbGV0ZVVSTChwcmVsb2FkLm1fdXJsKSkpCi0g
ICAgICAgICAgICByZXF1ZXN0UHJlbG9hZChwcmVsb2FkLm1fdHlwZSwgcHJlbG9hZC5tX3VybCwg
cHJlbG9hZC5tX2NoYXJzZXQpOwotICAgIH0KLSAgICBtX3BlbmRpbmdQcmVsb2Fkcy5jbGVhcigp
OwotfQotCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UHJlbG9hZChDYWNoZWRS
ZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0KQotewotICAgIFN0cmluZyBlbmNvZGluZzsKLSAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNv
dXJjZTo6U2NyaXB0IHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpCi0g
ICAgICAgIGVuY29kaW5nID0gY2hhcnNldC5pc0VtcHR5KCkgPyBtX2RvYy0+ZnJhbWUoKS0+bG9h
ZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpIDogY2hhcnNldDsKLQotICAgIENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSA9IHJlcXVlc3RSZXNvdXJjZSh0eXBlLCB1cmwsIGVuY29kaW5nLCB0cnVl
KTsKLSAgICBpZiAoIXJlc291cmNlIHx8IChtX3ByZWxvYWRzICYmIG1fcHJlbG9hZHMtPmNvbnRh
aW5zKHJlc291cmNlKSkpCi0gICAgICAgIHJldHVybjsKLSAgICByZXNvdXJjZS0+aW5jcmVhc2VQ
cmVsb2FkQ291bnQoKTsKLQotICAgIGlmICghbV9wcmVsb2FkcykKLSAgICAgICAgbV9wcmVsb2Fk
cyA9IGFkb3B0UHRyKG5ldyBMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+KTsKLSAgICBtX3By
ZWxvYWRzLT5hZGQocmVzb3VyY2UpOwotCi0jaWYgUFJFTE9BRF9ERUJVRwotICAgIHByaW50Zigi
UFJFTE9BRElORyAlc1xuIiwgIHJlc291cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNsZWFyUHJlbG9hZHMoKQotewot
I2lmIFBSRUxPQURfREVCVUcKLSAgICBwcmludFByZWxvYWRTdGF0cygpOwotI2VuZGlmCi0gICAg
aWYgKCFtX3ByZWxvYWRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMaXN0SGFzaFNldDxDYWNo
ZWRSZXNvdXJjZSo+OjppdGVyYXRvciBlbmQgPSBtX3ByZWxvYWRzLT5lbmQoKTsKLSAgICBmb3Ig
KExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj46Oml0ZXJhdG9yIGl0ID0gbV9wcmVsb2Fkcy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlKiByZXMg
PSAqaXQ7Ci0gICAgICAgIHJlcy0+ZGVjcmVhc2VQcmVsb2FkQ291bnQoKTsKLSAgICAgICAgaWYg
KHJlcy0+Y2FuRGVsZXRlKCkgJiYgIXJlcy0+aW5DYWNoZSgpKQotICAgICAgICAgICAgZGVsZXRl
IHJlczsKLSAgICAgICAgZWxzZSBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVz
b3VyY2U6OlByZWxvYWROb3RSZWZlcmVuY2VkKQotICAgICAgICAgICAgY2FjaGUoKS0+cmVtb3Zl
KHJlcyk7Ci0gICAgfQotICAgIG1fcHJlbG9hZHMuY2xlYXIoKTsKLX0KLQotdm9pZCBDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6Y2xlYXJQZW5kaW5nUHJlbG9hZHMoKQotewotICAgIG1fcGVuZGluZ1By
ZWxvYWRzLmNsZWFyKCk7Ci19Ci0KLSNpZiBQUkVMT0FEX0RFQlVHCi12b2lkIENhY2hlZFJlc291
cmNlTG9hZGVyOjpwcmludFByZWxvYWRTdGF0cygpCi17Ci0gICAgdW5zaWduZWQgc2NyaXB0cyA9
IDA7Ci0gICAgdW5zaWduZWQgc2NyaXB0TWlzc2VzID0gMDsKLSAgICB1bnNpZ25lZCBzdHlsZXNo
ZWV0cyA9IDA7Ci0gICAgdW5zaWduZWQgc3R5bGVzaGVldE1pc3NlcyA9IDA7Ci0gICAgdW5zaWdu
ZWQgaW1hZ2VzID0gMDsKLSAgICB1bnNpZ25lZCBpbWFnZU1pc3NlcyA9IDA7Ci0gICAgTGlzdEhh
c2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPjo6aXRlcmF0b3IgZW5kID0gbV9wcmVsb2Fkcy5lbmQoKTsK
LSAgICBmb3IgKExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj46Oml0ZXJhdG9yIGl0ID0gbV9w
cmVsb2Fkcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2UqIHJlcyA9ICppdDsKLSAgICAgICAgaWYgKHJlcy0+cHJlbG9hZFJlc3VsdCgpID09IENhY2hl
ZFJlc291cmNlOjpQcmVsb2FkTm90UmVmZXJlbmNlZCkKLSAgICAgICAgICAgIHByaW50ZigiISEg
VU5SRUZFUkVOQ0VEIFBSRUxPQUQgJXNcbiIsIHJlcy0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsK
LSAgICAgICAgZWxzZSBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6
OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVDb21wbGV0ZSkKLSAgICAgICAgICAgIHByaW50ZigiSElU
IENPTVBMRVRFIFBSRUxPQUQgJXNcbiIsIHJlcy0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKLSAg
ICAgICAgZWxzZSBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlBy
ZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5nKQotICAgICAgICAgICAgcHJpbnRmKCJISVQgTE9B
RElORyBQUkVMT0FEICVzXG4iLCByZXMtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAocmVzLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCkgewot
ICAgICAgICAgICAgc2NyaXB0cysrOwotICAgICAgICAgICAgaWYgKHJlcy0+cHJlbG9hZFJlc3Vs
dCgpIDwgQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5nKQotICAg
ICAgICAgICAgICAgIHNjcmlwdE1pc3NlcysrOwotICAgICAgICB9IGVsc2UgaWYgKHJlcy0+dHlw
ZSgpID09IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KSB7Ci0gICAgICAgICAgICBzdHls
ZXNoZWV0cysrOwotICAgICAgICAgICAgaWYgKHJlcy0+cHJlbG9hZFJlc3VsdCgpIDwgQ2FjaGVk
UmVzb3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5nKQotICAgICAgICAgICAgICAg
IHN0eWxlc2hlZXRNaXNzZXMrKzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGltYWdl
cysrOwotICAgICAgICAgICAgaWYgKHJlcy0+cHJlbG9hZFJlc3VsdCgpIDwgQ2FjaGVkUmVzb3Vy
Y2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5nKQotICAgICAgICAgICAgICAgIGltYWdl
TWlzc2VzKys7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChyZXMtPmVycm9yT2Nj
dXJyZWQoKSkKLSAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZShyZXMpOwotICAgICAgICAKLSAg
ICAgICAgcmVzLT5kZWNyZWFzZVByZWxvYWRDb3VudCgpOwotICAgIH0KLSAgICBtX3ByZWxvYWRz
LmNsZWFyKCk7Ci0gICAgCi0gICAgaWYgKHNjcmlwdHMpCi0gICAgICAgIHByaW50ZigiU0NSSVBU
UzogJWQgKCVkIGhpdHMsIGhpdCByYXRlICVkJSUpXG4iLCBzY3JpcHRzLCBzY3JpcHRzIC0gc2Ny
aXB0TWlzc2VzLCAoc2NyaXB0cyAtIHNjcmlwdE1pc3NlcykgKiAxMDAgLyBzY3JpcHRzKTsKLSAg
ICBpZiAoc3R5bGVzaGVldHMpCi0gICAgICAgIHByaW50ZigiU1RZTEVTSEVFVFM6ICVkICglZCBo
aXRzLCBoaXQgcmF0ZSAlZCUlKVxuIiwgc3R5bGVzaGVldHMsIHN0eWxlc2hlZXRzIC0gc3R5bGVz
aGVldE1pc3NlcywgKHN0eWxlc2hlZXRzIC0gc3R5bGVzaGVldE1pc3NlcykgKiAxMDAgLyBzdHls
ZXNoZWV0cyk7Ci0gICAgaWYgKGltYWdlcykKLSAgICAgICAgcHJpbnRmKCJJTUFHRVM6ICAlZCAo
JWQgaGl0cywgaGl0IHJhdGUgJWQlJSlcbiIsIGltYWdlcywgaW1hZ2VzIC0gaW1hZ2VNaXNzZXMs
IChpbWFnZXMgLSBpbWFnZU1pc3NlcykgKiAxMDAgLyBpbWFnZXMpOwotfQotI2VuZGlmCi0gICAg
Ci19CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlTG9hZGVyLmgJKHJldmlzaW9uIDcx
NDkzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMzUgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBL
bm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1v
YmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFRoaXMgY2xhc3MgcHJv
dmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUg
c2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkg
Y2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwotCi0jaWZuZGVmIENhY2hlZFJlc291cmNlTG9h
ZGVyX2gKLSNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VMb2FkZXJfaAotCi0jaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2UuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUg
IkNhY2hlUG9saWN5LmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDYWNoZWRD
U1NTdHlsZVNoZWV0OwotY2xhc3MgQ2FjaGVkRm9udDsKLWNsYXNzIENhY2hlZEltYWdlOwotY2xh
c3MgQ2FjaGVkU2NyaXB0OwotY2xhc3MgQ2FjaGVkWFNMU3R5bGVTaGVldDsKLWNsYXNzIERvY3Vt
ZW50OwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBJbWFnZUxvYWRlcjsKLWNsYXNzIEtVUkw7Ci0KLS8v
IFRoZSBDYWNoZWRSZXNvdXJjZUxvYWRlciBtYW5hZ2VzIHRoZSBsb2FkaW5nIG9mIHNjcmlwdHMv
aW1hZ2VzL3N0eWxlc2hlZXRzIGZvciBhIHNpbmdsZSBkb2N1bWVudC4KLWNsYXNzIENhY2hlZFJl
c291cmNlTG9hZGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLWZyaWVuZCBjbGFzcyBDYWNoZTsK
LWZyaWVuZCBjbGFzcyBJbWFnZUxvYWRlcjsKLQotcHVibGljOgotICAgIENhY2hlZFJlc291cmNl
TG9hZGVyKERvY3VtZW50Kik7Ci0gICAgfkNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0KLSAgICBD
YWNoZWRJbWFnZSogcmVxdWVzdEltYWdlKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICBDYWNoZWRD
U1NTdHlsZVNoZWV0KiByZXF1ZXN0Q1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nJiBjaGFyc2V0KTsKLSAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiByZXF1ZXN0VXNl
ckNTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7
Ci0gICAgQ2FjaGVkU2NyaXB0KiByZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIGNoYXJzZXQpOwotICAgIENhY2hlZEZvbnQqIHJlcXVlc3RGb250KGNvbnN0IFN0
cmluZyYgdXJsKTsKLQotI2lmIEVOQUJMRShYU0xUKQotICAgIENhY2hlZFhTTFN0eWxlU2hlZXQq
IHJlcXVlc3RYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsKTsKLSNlbmRpZgotI2lmIEVO
QUJMRShMSU5LX1BSRUZFVENIKQotICAgIENhY2hlZFJlc291cmNlKiByZXF1ZXN0TGlua1ByZWZl
dGNoKGNvbnN0IFN0cmluZyAmdXJsKTsKLSNlbmRpZgotCi0gICAgLy8gTG9ncyBhbiBhY2Nlc3Mg
ZGVuaWVkIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUgZm9yIHRoZSBzcGVjaWZpZWQgVVJMLgotICAg
IHZvaWQgcHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKGNvbnN0IEtVUkwmIHVybCkgY29uc3Q7Ci0K
LSAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwpIGNv
bnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRSZXNvdXJjZXMuZ2V0KHVybCkuZ2V0KCk7IH0KLSAgICAK
LSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRS
ZXNvdXJjZT4gPiBEb2N1bWVudFJlc291cmNlTWFwOwotICAgIGNvbnN0IERvY3VtZW50UmVzb3Vy
Y2VNYXAmIGFsbENhY2hlZFJlc291cmNlcygpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRSZXNv
dXJjZXM7IH0KLQotICAgIGJvb2wgYXV0b0xvYWRJbWFnZXMoKSBjb25zdCB7IHJldHVybiBtX2F1
dG9Mb2FkSW1hZ2VzOyB9Ci0gICAgdm9pZCBzZXRBdXRvTG9hZEltYWdlcyhib29sKTsKLSAgICAK
LSAgICBDYWNoZVBvbGljeSBjYWNoZVBvbGljeSgpIGNvbnN0OwotICAgIAotICAgIEZyYW1lKiBm
cmFtZSgpIGNvbnN0OyAvLyBDYW4gYmUgTlVMTAotICAgIERvY3VtZW50KiBkb2MoKSBjb25zdCB7
IHJldHVybiBtX2RvYzsgfQotCi0gICAgdm9pZCByZW1vdmVDYWNoZWRSZXNvdXJjZShDYWNoZWRS
ZXNvdXJjZSopIGNvbnN0OwotCi0gICAgdm9pZCBzZXRMb2FkSW5Qcm9ncmVzcyhib29sKTsKLSAg
ICBib29sIGxvYWRJblByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkSW5Qcm9ncmVzczsg
fQotICAgIAotICAgIHZvaWQgc2V0QWxsb3dTdGFsZVJlc291cmNlcyhib29sIGFsbG93U3RhbGVS
ZXNvdXJjZXMpIHsgbV9hbGxvd1N0YWxlUmVzb3VyY2VzID0gYWxsb3dTdGFsZVJlc291cmNlczsg
fQotCi0gICAgdm9pZCBpbmNyZW1lbnRSZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVzb3VyY2Uq
KTsKLSAgICB2b2lkIGRlY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSop
OwotICAgIGludCByZXF1ZXN0Q291bnQoKTsKLSAgICAKLSAgICB2b2lkIGNsZWFyUHJlbG9hZHMo
KTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ1ByZWxvYWRzKCk7Ci0gICAgdm9pZCBwcmVsb2FkKENh
Y2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0LCBib29sIHJlZmVyZW5jZWRGcm9tQm9keSk7Ci0gICAgdm9pZCBjaGVja0ZvclBlbmRpbmdQ
cmVsb2FkcygpOwotICAgIHZvaWQgcHJpbnRQcmVsb2FkU3RhdHMoKTsKLSAgICAKLXByaXZhdGU6
Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlw
ZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCBpc1ByZWxv
YWQgPSBmYWxzZSk7Ci0gICAgdm9pZCByZXF1ZXN0UHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlw
ZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7Ci0KLSAgICB2b2lk
IGNoZWNrRm9yUmVsb2FkKGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIGNoZWNrQ2FjaGVPYmplY3RT
dGF0dXMoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICBib29sIGNhblJlcXVlc3QoQ2FjaGVkUmVzb3Vy
Y2U6OlR5cGUsIGNvbnN0IEtVUkwmKTsKLSAgICAKLSAgICBDYWNoZSogbV9jYWNoZTsKLSAgICBI
YXNoU2V0PFN0cmluZz4gbV9yZWxvYWRlZFVSTHM7Ci0gICAgbXV0YWJsZSBEb2N1bWVudFJlc291
cmNlTWFwIG1fZG9jdW1lbnRSZXNvdXJjZXM7Ci0gICAgRG9jdW1lbnQqIG1fZG9jOwotICAgIAot
ICAgIGludCBtX3JlcXVlc3RDb3VudDsKLSAgICAKLSAgICBPd25QdHI8TGlzdEhhc2hTZXQ8Q2Fj
aGVkUmVzb3VyY2UqPiA+IG1fcHJlbG9hZHM7Ci0gICAgc3RydWN0IFBlbmRpbmdQcmVsb2FkIHsK
LSAgICAgICAgQ2FjaGVkUmVzb3VyY2U6OlR5cGUgbV90eXBlOwotICAgICAgICBTdHJpbmcgbV91
cmw7Ci0gICAgICAgIFN0cmluZyBtX2NoYXJzZXQ7Ci0gICAgfTsKLSAgICBWZWN0b3I8UGVuZGlu
Z1ByZWxvYWQ+IG1fcGVuZGluZ1ByZWxvYWRzOwotICAgIAotICAgIC8vMjkgYml0cyBsZWZ0Ci0g
ICAgYm9vbCBtX2F1dG9Mb2FkSW1hZ2VzIDogMTsKLSAgICBib29sIG1fbG9hZEluUHJvZ3Jlc3Mg
OiAxOwotICAgIGJvb2wgbV9hbGxvd1N0YWxlUmVzb3VyY2VzIDogMTsKLX07Ci0KLX0KLQotI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAJKHJldmlzaW9uIDcxNDkzKQorKysgV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjMgKzAs
MCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhk
Lm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2Rl
Lm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0Bn
bWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQot
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVz
IGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0
cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hl
IGZvciB0aGVzZSBvYmplY3RzLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkNhY2hlZFNjcmlwdC5oIgotCi0jaW5jbHVkZSAiQ2FjaGUuaCIKLSNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUNsaWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgi
Ci0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rl
ci5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1D
YWNoZWRTY3JpcHQ6OkNhY2hlZFNjcmlwdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBjaGFyc2V0KQotICAgIDogQ2FjaGVkUmVzb3VyY2UodXJsLCBTY3JpcHQpCi0gICAgLCBtX2Rl
Y29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0
IiwgY2hhcnNldCkpCi0gICAgLCBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lcih0aGlzLCAmQ2Fj
aGVkU2NyaXB0OjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZCkKLXsKLSAgICAvLyBJdCdz
IGphdmFzY3JpcHQgd2Ugd2FudC4KLSAgICAvLyBCdXQgc29tZSB3ZWJzaXRlcyB0aGluayB0aGVp
ciBzY3JpcHRzIGFyZSA8c29tZSB3cm9uZyBtaW1ldHlwZSBoZXJlPgotICAgIC8vIGFuZCByZWZ1
c2UgdG8gc2VydmUgdGhlbSBpZiB3ZSBvbmx5IGFjY2VwdCBhcHBsaWNhdGlvbi94LWphdmFzY3Jp
cHQuCi0gICAgc2V0QWNjZXB0KCIqLyoiKTsKLX0KLQotQ2FjaGVkU2NyaXB0Ojp+Q2FjaGVkU2Ny
aXB0KCkKLXsKLX0KLQotdm9pZCBDYWNoZWRTY3JpcHQ6OmFsbENsaWVudHNSZW1vdmVkKCkKLXsK
LSAgICBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZv
aWQgQ2FjaGVkU2NyaXB0OjpzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGNocykKLXsKLSAgICBt
X2RlY29kZXItPnNldEVuY29kaW5nKGNocywgVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2RpbmdG
cm9tSFRUUEhlYWRlcik7Ci19Ci0KLVN0cmluZyBDYWNoZWRTY3JpcHQ6OmVuY29kaW5nKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKLX0KLQotY29u
c3QgU3RyaW5nJiBDYWNoZWRTY3JpcHQ6OnNjcmlwdCgpCi17Ci0gICAgQVNTRVJUKCFpc1B1cmdl
YWJsZSgpKTsKLQotICAgIGlmICghbV9zY3JpcHQgJiYgbV9kYXRhKSB7Ci0gICAgICAgIG1fc2Ny
aXB0ID0gbV9kZWNvZGVyLT5kZWNvZGUobV9kYXRhLT5kYXRhKCksIGVuY29kZWRTaXplKCkpOwot
ICAgICAgICBtX3NjcmlwdCArPSBtX2RlY29kZXItPmZsdXNoKCk7Ci0gICAgICAgIHNldERlY29k
ZWRTaXplKG1fc2NyaXB0Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgfQotICAgIG1f
ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICByZXR1cm4gbV9z
Y3JpcHQ7Ci19Ci0KLXZvaWQgQ2FjaGVkU2NyaXB0OjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICBpZiAoIWFsbERhdGFSZWNl
aXZlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhID0gZGF0YTsKLSAgICBzZXRFbmNv
ZGVkU2l6ZShtX2RhdGEuZ2V0KCkgPyBtX2RhdGEtPnNpemUoKSA6IDApOwotICAgIHNldExvYWRp
bmcoZmFsc2UpOwotICAgIGNoZWNrTm90aWZ5KCk7Ci19Ci0KLXZvaWQgQ2FjaGVkU2NyaXB0Ojpj
aGVja05vdGlmeSgpCi17Ci0gICAgaWYgKGlzTG9hZGluZygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7Ci0gICAgd2hpbGUg
KENhY2hlZFJlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCi0gICAgICAgIGMtPm5vdGlmeUZp
bmlzaGVkKHRoaXMpOwotfQotCi12b2lkIENhY2hlZFNjcmlwdDo6ZXJyb3IoKQotewotICAgIHNl
dExvYWRpbmcoZmFsc2UpOwotICAgIHNldEVycm9yT2NjdXJyZWQodHJ1ZSk7Ci0gICAgY2hlY2tO
b3RpZnkoKTsKLX0KLQotdm9pZCBDYWNoZWRTY3JpcHQ6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCi17
Ci0gICAgbV9zY3JpcHQgPSBTdHJpbmcoKTsKLSAgICBzZXREZWNvZGVkU2l6ZSgwKTsKLSAgICBp
ZiAoIUNhY2hlOjpzaG91bGRNYWtlUmVzb3VyY2VQdXJnZWFibGVPbkV2aWN0aW9uKCkgJiYgaXNT
YWZlVG9NYWtlUHVyZ2VhYmxlKCkpCi0gICAgICAgIG1ha2VQdXJnZWFibGUodHJ1ZSk7Ci19Ci0K
LXZvaWQgQ2FjaGVkU2NyaXB0OjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZChUaW1lcjxD
YWNoZWRTY3JpcHQ+KikKLXsKLSAgICBkZXN0cm95RGVjb2RlZERhdGEoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmgJKHJldmlzaW9uIDcxNDkz
KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NjUgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxA
bXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVs
bGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53
ZWluaWdAZ21haWwuY29tKQotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0gICAgVGhpcyBjbGFzcyBw
cm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHls
ZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9y
eSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KLSovCi0KLSNpZm5kZWYgQ2FjaGVkU2NyaXB0X2gK
LSNkZWZpbmUgQ2FjaGVkU2NyaXB0X2gKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCi0j
aW5jbHVkZSAiVGltZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI7Ci0gICAgY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKLQotICAg
IGNsYXNzIENhY2hlZFNjcmlwdCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7Ci0gICAgcHVibGlj
OgotICAgICAgICBDYWNoZWRTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y2hhcnNldCk7Ci0gICAgICAgIHZpcnR1YWwgfkNhY2hlZFNjcmlwdCgpOwotCi0gICAgICAgIGNv
bnN0IFN0cmluZyYgc2NyaXB0KCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFsbENsaWVudHNS
ZW1vdmVkKCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmlu
ZyYpOwotICAgICAgICB2aXJ0dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0OwotICAgICAgICB2
aXJ0dWFsIHZvaWQgZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZXJyb3IoKTsKLQotICAgICAgICB2
b2lkIGNoZWNrTm90aWZ5KCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVk
RGF0YSgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBkZWNvZGVkRGF0YURlbGV0aW9u
VGltZXJGaXJlZChUaW1lcjxDYWNoZWRTY3JpcHQ+Kik7Ci0gICAgICAgIHZpcnR1YWwgUHVyZ2VQ
cmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gUHVyZ2VMYXN0OyB9Ci0KLSAg
ICAgICAgU3RyaW5nIG1fc2NyaXB0OwotICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rl
cj4gbV9kZWNvZGVyOwotICAgICAgICBUaW1lcjxDYWNoZWRTY3JpcHQ+IG1fZGVjb2RlZERhdGFE
ZWxldGlvblRpbWVyOwotICAgIH07Ci19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9sb2FkZXIv
Q2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2Fj
aGVkWFNMU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDcxNDkzKQorKysgV2ViQ29yZS9sb2FkZXIv
Q2FjaGVkWFNMU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTkgKzAsMCBAQAot
LyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5k
ZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykK
LSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5j
b20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBm
dW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQg
aHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0
aGVzZSBvYmplY3RzLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhY2hl
ZFhTTFN0eWxlU2hlZXQuaCIKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0j
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKLSNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBFTkFCTEUoWFNMVCkKLQot
Q2FjaGVkWFNMU3R5bGVTaGVldDo6Q2FjaGVkWFNMU3R5bGVTaGVldChjb25zdCBTdHJpbmcgJnVy
bCkKLSAgICA6IENhY2hlZFJlc291cmNlKHVybCwgWFNMU3R5bGVTaGVldCkKLSAgICAsIG1fZGVj
b2RlcihUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQveHNsIikpCi17Ci0gICAgLy8g
SXQncyBYTUwgd2Ugd2FudC4KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWNjZXB0IG1vcmUg
Z2VuZXJhbCB4bWwgZm9ybWF0cyAqLyoreG1sLCBpbWFnZS9zdmcreG1sIGZvciBleGFtcGxlLgot
ICAgIHNldEFjY2VwdCgidGV4dC94bWwsIGFwcGxpY2F0aW9uL3htbCwgYXBwbGljYXRpb24veGh0
bWwreG1sLCB0ZXh0L3hzbCwgYXBwbGljYXRpb24vcnNzK3htbCwgYXBwbGljYXRpb24vYXRvbSt4
bWwiKTsKLX0KLQotdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpkaWRBZGRDbGllbnQoQ2FjaGVk
UmVzb3VyY2VDbGllbnQqIGMpCi17ICAKLSAgICBpZiAoIWlzTG9hZGluZygpKQotICAgICAgICBj
LT5zZXRYU0xTdHlsZVNoZWV0KG1fdXJsLCBtX3Jlc3BvbnNlLnVybCgpLCBtX3NoZWV0KTsKLX0K
LQotdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGNo
cykKLXsKLSAgICBtX2RlY29kZXItPnNldEVuY29kaW5nKGNocywgVGV4dFJlc291cmNlRGVjb2Rl
cjo6RW5jb2RpbmdGcm9tSFRUUEhlYWRlcik7Ci19Ci0KLVN0cmluZyBDYWNoZWRYU0xTdHlsZVNo
ZWV0OjplbmNvZGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVjb2Rlci0+ZW5jb2Rpbmco
KS5uYW1lKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZGF0YShQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgaWYgKCFh
bGxEYXRhUmVjZWl2ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YSA9IGRhdGE7ICAg
ICAKLSAgICBzZXRFbmNvZGVkU2l6ZShtX2RhdGEuZ2V0KCkgPyBtX2RhdGEtPnNpemUoKSA6IDAp
OwotICAgIGlmIChtX2RhdGEuZ2V0KCkpIHsKLSAgICAgICAgbV9zaGVldCA9IFN0cmluZyhtX2Rl
Y29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgZW5jb2RlZFNpemUoKSkpOwotICAgICAgICBt
X3NoZWV0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKLSAgICB9Ci0gICAgc2V0TG9hZGluZyhmYWxz
ZSk7Ci0gICAgY2hlY2tOb3RpZnkoKTsKLX0KLQotdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0Ojpj
aGVja05vdGlmeSgpCi17Ci0gICAgaWYgKGlzTG9hZGluZygpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOwotICAgIHdo
aWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCAqYyA9IHcubmV4dCgpKQotICAgICAgICBjLT5zZXRY
U0xTdHlsZVNoZWV0KG1fdXJsLCBtX3Jlc3BvbnNlLnVybCgpLCBtX3NoZWV0KTsKLX0KLQotdm9p
ZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjplcnJvcigpCi17Ci0gICAgc2V0TG9hZGluZyhmYWxzZSk7
Ci0gICAgc2V0RXJyb3JPY2N1cnJlZCh0cnVlKTsKLSAgICBjaGVja05vdGlmeSgpOwotfQotCi0j
ZW5kaWYKLQotfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuaAkocmV2aXNp
b24gNzE0OTMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFy
cyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVl
bCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0g
ICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRp
bmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdlcyBmcm9tIHRoZSB3ZWIu
IEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KLSovCi0KLSNpZm5kZWYg
Q2FjaGVkWFNMU3R5bGVTaGVldF9oCi0jZGVmaW5lIENhY2hlZFhTTFN0eWxlU2hlZXRfaAotCi0j
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwotICAg
IGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7Ci0KLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBjbGFz
cyBDYWNoZWRYU0xTdHlsZVNoZWV0IDogcHVibGljIENhY2hlZFJlc291cmNlIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIENhY2hlZFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwpOwotCi0g
ICAgICAgIGNvbnN0IFN0cmluZyYgc2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0OyB9Ci0g
ICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNl
Q2xpZW50Kik7Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5jb2RpbmcoY29u
c3QgU3RyaW5nJik7Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGVuY29kaW5nKCkgY29uc3Q7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOwotICAg
ICAgICAKLSAgICAgICAgdm9pZCBjaGVja05vdGlmeSgpOwotICAgICAgICAKLSAgICBwcm90ZWN0
ZWQ6Ci0gICAgICAgIFN0cmluZyBtX3NoZWV0OwotICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNl
RGVjb2Rlcj4gbV9kZWNvZGVyOwotICAgIH07Ci0KLSNlbmRpZgotCi19Ci0KLSNlbmRpZgpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVQb2xpY3kuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZVBvbGljeS5oCShyZXZpc2lvbiA3MTQ5MikJKGZyb20gV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVQb2xpY3kuaDo3MTQ5MikKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlUG9saWN5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDYWNoZVBvbGljeV9oCisjZGVmaW5lIENhY2hlUG9s
aWN5X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgZW51bSBDYWNoZVBvbGljeSB7Cisg
ICAgICAgIENhY2hlUG9saWN5Q2FjaGUsCisgICAgICAgIENhY2hlUG9saWN5VmVyaWZ5LAorICAg
ICAgICBDYWNoZVBvbGljeVJldmFsaWRhdGUsCisgICAgICAgIENhY2hlUG9saWN5UmVsb2FkLAor
ICAgICAgICBDYWNoZVBvbGljeUFsbG93U3RhbGUKKyAgICB9OworCit9CisKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlz
aW9uIDcxNDkyKQkoZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcDo3
MTQ5MikKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5
OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAw
MSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIg
V2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgICBUaGlzIGNsYXNzIHByb3Zp
ZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNo
ZWV0cyBhbmQgaHRtbAorICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNh
Y2hlIGZvciB0aGVzZSBvYmplY3RzLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKKworI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlci5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCisjaW5jbHVkZSAiVGV4dFJlc291
cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgImxvYWRl
ci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitD
YWNoZWRDU1NTdHlsZVNoZWV0OjpDYWNoZWRDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCisgICAgOiBDYWNoZWRSZXNvdXJjZSh1cmwsIENTU1N0
eWxlU2hlZXQpCisgICAgLCBtX2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0
ZXh0L2NzcyIsIGNoYXJzZXQpKQoreworICAgIC8vIFByZWZlciB0ZXh0L2NzcyBidXQgYWNjZXB0
IGFueSB0eXBlIChkZWxsLmNvbSBzZXJ2ZXMgYSBzdHlsZXNoZWV0CisgICAgLy8gYXMgdGV4dC9o
dG1sOyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDUxPiku
CisgICAgc2V0QWNjZXB0KCJ0ZXh0L2NzcywqLyo7cT0wLjEiKTsKK30KKworQ2FjaGVkQ1NTU3R5
bGVTaGVldDo6fkNhY2hlZENTU1N0eWxlU2hlZXQoKQoreworfQorCit2b2lkIENhY2hlZENTU1N0
eWxlU2hlZXQ6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCAqYykKK3sKKyAgICBp
ZiAoIWlzTG9hZGluZygpKQorICAgICAgICBjLT5zZXRDU1NTdHlsZVNoZWV0KG1fdXJsLCBtX3Jl
c3BvbnNlLnVybCgpLCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpLCB0aGlzKTsKK30KKwor
dm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjphbGxDbGllbnRzUmVtb3ZlZCgpCit7CisgICAgaWYg
KCFDYWNoZTo6c2hvdWxkTWFrZVJlc291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpICYmIGlzU2Fm
ZVRvTWFrZVB1cmdlYWJsZSgpKQorICAgICAgICBtYWtlUHVyZ2VhYmxlKHRydWUpOworfQorCit2
b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgY2hzKQor
eworICAgIG1fZGVjb2Rlci0+c2V0RW5jb2RpbmcoY2hzLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpF
bmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsKK30KKworU3RyaW5nIENhY2hlZENTU1N0eWxlU2hlZXQ6
OmVuY29kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLm5h
bWUoKTsKK30KKyAgICAKK2NvbnN0IFN0cmluZyBDYWNoZWRDU1NTdHlsZVNoZWV0OjpzaGVldFRl
eHQoYm9vbCBlbmZvcmNlTUlNRVR5cGUsIGJvb2wqIGhhc1ZhbGlkTUlNRVR5cGUpIGNvbnN0IAor
eyAKKyAgICBBU1NFUlQoIWlzUHVyZ2VhYmxlKCkpOworCisgICAgaWYgKCFtX2RhdGEgfHwgbV9k
YXRhLT5pc0VtcHR5KCkgfHwgIWNhblVzZVNoZWV0KGVuZm9yY2VNSU1FVHlwZSwgaGFzVmFsaWRN
SU1FVHlwZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAKKyAgICBpZiAoIW1fZGVj
b2RlZFNoZWV0VGV4dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG1fZGVjb2RlZFNoZWV0VGV4
dDsKKyAgICAKKyAgICAvLyBEb24ndCBjYWNoZSB0aGUgZGVjb2RlZCB0ZXh0LCByZWdlbmVyYXRp
bmcgaXMgY2hlYXAgYW5kIGl0IGNhbiB1c2UgcXVpdGUgYSBiaXQgb2YgbWVtb3J5CisgICAgU3Ry
aW5nIHNoZWV0VGV4dCA9IG1fZGVjb2Rlci0+ZGVjb2RlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEt
PnNpemUoKSk7CisgICAgc2hlZXRUZXh0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKKyAgICByZXR1
cm4gc2hlZXRUZXh0OworfQorCit2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmRhdGEoUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlm
ICghYWxsRGF0YVJlY2VpdmVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEgPSBkYXRh
OworICAgIHNldEVuY29kZWRTaXplKG1fZGF0YS5nZXQoKSA/IG1fZGF0YS0+c2l6ZSgpIDogMCk7
CisgICAgLy8gRGVjb2RlIHRoZSBkYXRhIHRvIGZpbmQgb3V0IHRoZSBlbmNvZGluZyBhbmQga2Vl
cCB0aGUgc2hlZXQgdGV4dCBhcm91bmQgZHVyaW5nIGNoZWNrTm90aWZ5KCkKKyAgICBpZiAobV9k
YXRhKSB7CisgICAgICAgIG1fZGVjb2RlZFNoZWV0VGV4dCA9IG1fZGVjb2Rlci0+ZGVjb2RlKG1f
ZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7CisgICAgICAgIG1fZGVjb2RlZFNoZWV0VGV4
dCArPSBtX2RlY29kZXItPmZsdXNoKCk7CisgICAgfQorICAgIHNldExvYWRpbmcoZmFsc2UpOwor
ICAgIGNoZWNrTm90aWZ5KCk7CisgICAgLy8gQ2xlYXIgdGhlIGRlY29kZWQgdGV4dCBhcyBpdCBp
cyB1bmxpa2VseSB0byBiZSBuZWVkZWQgaW1tZWRpYXRlbHkgYWdhaW4gYW5kIGlzIGNoZWFwIHRv
IHJlZ2VuZXJhdGUuCisgICAgbV9kZWNvZGVkU2hlZXRUZXh0ID0gU3RyaW5nKCk7Cit9CisKK3Zv
aWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Y2hlY2tOb3RpZnkoKQoreworICAgIGlmIChpc0xvYWRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIg
dyhtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCAqYyA9IHcubmV4
dCgpKQorICAgICAgICBjLT5zZXRDU1NTdHlsZVNoZWV0KG1fdXJsLCBtX3Jlc3BvbnNlLnVybCgp
LCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpLCB0aGlzKTsKK30KKwordm9pZCBDYWNoZWRD
U1NTdHlsZVNoZWV0OjplcnJvcigpCit7CisgICAgc2V0TG9hZGluZyhmYWxzZSk7CisgICAgc2V0
RXJyb3JPY2N1cnJlZCh0cnVlKTsKKyAgICBjaGVja05vdGlmeSgpOworfQorCitib29sIENhY2hl
ZENTU1N0eWxlU2hlZXQ6OmNhblVzZVNoZWV0KGJvb2wgZW5mb3JjZU1JTUVUeXBlLCBib29sKiBo
YXNWYWxpZE1JTUVUeXBlKSBjb25zdAoreworICAgIGlmIChlcnJvck9jY3VycmVkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgaWYgKCFlbmZvcmNlTUlNRVR5cGUgJiYg
IWhhc1ZhbGlkTUlNRVR5cGUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gVGhpcyBj
aGVjayBleGFjdGx5IG1hdGNoZXMgRmlyZWZveC4gIE5vdGUgdGhhdCB3ZSBncmFiIHRoZSBDb250
ZW50LVR5cGUKKyAgICAvLyBoZWFkZXIgZGlyZWN0bHkgYmVjYXVzZSB3ZSB3YW50IHRvIHNlZSB3
aGF0IHRoZSB2YWx1ZSBpcyBCRUZPUkUgY29udGVudAorICAgIC8vIHNuaWZmaW5nLiAgRmlyZWZv
eCBkb2VzIHRoaXMgYnkgc2V0dGluZyBhICJ0eXBlIGhpbnQiIG9uIHRoZSBjaGFubmVsLgorICAg
IC8vIFRoaXMgaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIG9ic2VydmF0aW9uYWxseSBlcXVpdmFs
ZW50LgorICAgIC8vCisgICAgLy8gVGhpcyBjb2RlIGRlZmF1bHRzIHRvIGFsbG93aW5nIHRoZSBz
dHlsZXNoZWV0IGZvciBub24tSFRUUCBwcm90b2NvbHMgc28KKyAgICAvLyBmb2xrcyBjYW4gdXNl
IHN0YW5kYXJkcyBtb2RlIGZvciBsb2NhbCBIVE1MIGRvY3VtZW50cy4KKyAgICBTdHJpbmcgbWlt
ZVR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKHJlc3BvbnNlKCkuaHR0cEhlYWRl
ckZpZWxkKCJDb250ZW50LVR5cGUiKSk7CisgICAgYm9vbCB0eXBlT0sgPSBtaW1lVHlwZS5pc0Vt
cHR5KCkgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJ0ZXh0L2NzcyIpIHx8IGVxdWFs
SWdub3JpbmdDYXNlKG1pbWVUeXBlLCAiYXBwbGljYXRpb24veC11bmtub3duLWNvbnRlbnQtdHlw
ZSIpOworICAgIGlmIChoYXNWYWxpZE1JTUVUeXBlKQorICAgICAgICAqaGFzVmFsaWRNSU1FVHlw
ZSA9IHR5cGVPSzsKKyAgICBpZiAoIWVuZm9yY2VNSU1FVHlwZSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIHR5cGVPSzsKK30KKyAKK30KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDcxNDkyKQkoZnJvbSBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0Lmg6NzE0OTIpCisrKyBXZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1w
Zy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5v
cmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21h
aWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBh
bGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMg
YW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBm
b3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2FjaGVkQ1NTU3R5bGVTaGVldF9oCisj
ZGVmaW5lIENhY2hlZENTU1N0eWxlU2hlZXRfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2Uu
aCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwor
ICAgIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CisKKyAgICBjbGFzcyBDYWNoZWRDU1NTdHls
ZVNoZWV0IDogcHVibGljIENhY2hlZFJlc291cmNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIENh
Y2hlZENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNl
dCk7CisgICAgICAgIHZpcnR1YWwgfkNhY2hlZENTU1N0eWxlU2hlZXQoKTsKKworICAgICAgICBj
b25zdCBTdHJpbmcgc2hlZXRUZXh0KGJvb2wgZW5mb3JjZU1JTUVUeXBlID0gdHJ1ZSwgYm9vbCog
aGFzVmFsaWRNSU1FVHlwZSA9IDApIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRB
ZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKKyAgICAgICAgCisgICAgICAgIHZpcnR1
YWwgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRF
bmNvZGluZyhjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZW5jb2Rpbmco
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGVy
cm9yKCk7CisKKyAgICAgICAgdm9pZCBjaGVja05vdGlmeSgpOworICAgIAorICAgIHByaXZhdGU6
CisgICAgICAgIGJvb2wgY2FuVXNlU2hlZXQoYm9vbCBlbmZvcmNlTUlNRVR5cGUsIGJvb2wqIGhh
c1ZhbGlkTUlNRVR5cGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFB1cmdlUHJpb3JpdHkgcHVy
Z2VQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIFB1cmdlTGFzdDsgfQorCisgICAgcHJvdGVjdGVk
OgorICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAgICAg
ICBTdHJpbmcgbV9kZWNvZGVkU2hlZXRUZXh0OworICAgIH07CisKK30KKworI2VuZGlmCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcAkocmV2aXNpb24gNzE0OTIpCShmcm9tIFdl
YkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwOjcxNDkyKQorKysgV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgorCisjaWYgUExB
VEZPUk0oQ0cpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspIHx8IChQTEFURk9STShD
SFJPTUlVTSkgJiYgKE9TKFdJTkRPV1MpIHx8IE9TKExJTlVYKSB8fCBPUyhGUkVFQlNEKSkpIHx8
IFBMQVRGT1JNKEhBSUtVKSB8fCBPUyhXSU5DRSkgfHwgUExBVEZPUk0oQU5EUk9JRCkgfHwgUExB
VEZPUk0oQlJFV01QKQorI2RlZmluZSBTVE9SRV9GT05UX0NVU1RPTV9QTEFURk9STV9EQVRBCisj
ZW5kaWYKKworI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGll
bnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgorI2luY2x1ZGUg
IkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRl
ICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCisjaWZkZWYgU1RPUkVfRk9OVF9DVVNUT01fUExBVEZPUk1fREFUQQor
I2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxF
KFNWR19GT05UUykKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5o
IgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgor
I2luY2x1ZGUgIlNWR0dFbGVtZW50LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitDYWNoZWRGb250OjpDYWNoZWRGb250KGNvbnN0IFN0cmluZyAmdXJsKQorICAgIDogQ2FjaGVk
UmVzb3VyY2UodXJsLCBGb250UmVzb3VyY2UpCisgICAgLCBtX2ZvbnREYXRhKDApCisgICAgLCBt
X2xvYWRJbml0aWF0ZWQoZmFsc2UpCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICAsIG1faXNT
VkdGb250KGZhbHNlKQorI2VuZGlmCit7Cit9CisKK0NhY2hlZEZvbnQ6On5DYWNoZWRGb250KCkK
K3sKKyNpZmRlZiBTVE9SRV9GT05UX0NVU1RPTV9QTEFURk9STV9EQVRBCisgICAgZGVsZXRlIG1f
Zm9udERhdGE7CisjZW5kaWYKK30KKwordm9pZCBDYWNoZWRGb250Ojpsb2FkKENhY2hlZFJlc291
cmNlTG9hZGVyKikKK3sKKyAgICAvLyBEb24ndCBsb2FkIHRoZSBmaWxlIHlldC4gIFdhaXQgZm9y
IGFuIGFjY2VzcyBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgbG9hZC4KKyAgICBzZXRMb2FkaW5nKHRy
dWUpOworfQorCit2b2lkIENhY2hlZEZvbnQ6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNs
aWVudCogYykKK3sKKyAgICBpZiAoIWlzTG9hZGluZygpKQorICAgICAgICBjLT5mb250TG9hZGVk
KHRoaXMpOworfQorCit2b2lkIENhY2hlZEZvbnQ6OmRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlmICghYWxsRGF0YVJlY2Vp
dmVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEgPSBkYXRhOyAgICAgCisgICAgc2V0
RW5jb2RlZFNpemUobV9kYXRhLmdldCgpID8gbV9kYXRhLT5zaXplKCkgOiAwKTsKKyAgICBzZXRM
b2FkaW5nKGZhbHNlKTsKKyAgICBjaGVja05vdGlmeSgpOworfQorCit2b2lkIENhY2hlZEZvbnQ6
OmJlZ2luTG9hZElmTmVlZGVkKENhY2hlZFJlc291cmNlTG9hZGVyKiBkbCkKK3sKKyAgICBpZiAo
IW1fbG9hZEluaXRpYXRlZCkgeworICAgICAgICBtX2xvYWRJbml0aWF0ZWQgPSB0cnVlOworICAg
ICAgICBjYWNoZSgpLT5sb2FkZXIoKS0+bG9hZChkbCwgdGhpcywgZmFsc2UpOworICAgIH0KK30K
KworYm9vbCBDYWNoZWRGb250OjplbnN1cmVDdXN0b21Gb250RGF0YSgpCit7CisjaWZkZWYgU1RP
UkVfRk9OVF9DVVNUT01fUExBVEZPUk1fREFUQQorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAg
QVNTRVJUKCFtX2lzU1ZHRm9udCk7CisjZW5kaWYKKyAgICBpZiAoIW1fZm9udERhdGEgJiYgIWVy
cm9yT2NjdXJyZWQoKSAmJiAhaXNMb2FkaW5nKCkgJiYgbV9kYXRhKSB7CisgICAgICAgIG1fZm9u
dERhdGEgPSBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKG1fZGF0YS5nZXQoKSk7CisgICAg
ICAgIGlmICghbV9mb250RGF0YSkKKyAgICAgICAgICAgIHNldEVycm9yT2NjdXJyZWQodHJ1ZSk7
CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIG1fZm9udERhdGE7Cit9CisKK0ZvbnRQbGF0Zm9y
bURhdGEgQ2FjaGVkRm9udDo6cGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoZmxvYXQgc2l6ZSwg
Ym9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBGb250
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQoreworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisg
ICAgaWYgKG1fZXh0ZXJuYWxTVkdEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIEZvbnRQbGF0Zm9y
bURhdGEoc2l6ZSwgYm9sZCwgaXRhbGljKTsKKyNlbmRpZgorI2lmZGVmIFNUT1JFX0ZPTlRfQ1VT
VE9NX1BMQVRGT1JNX0RBVEEKKyAgICBBU1NFUlQobV9mb250RGF0YSk7CisgICAgcmV0dXJuIG1f
Zm9udERhdGEtPmZvbnRQbGF0Zm9ybURhdGEoc3RhdGljX2Nhc3Q8aW50PihzaXplKSwgYm9sZCwg
aXRhbGljLCBvcmllbnRhdGlvbiwgcmVuZGVyaW5nTW9kZSk7CisjZWxzZQorICAgIHJldHVybiBG
b250UGxhdGZvcm1EYXRhKCk7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCiti
b29sIENhY2hlZEZvbnQ6OmVuc3VyZVNWR0ZvbnREYXRhKCkKK3sKKyAgICBBU1NFUlQobV9pc1NW
R0ZvbnQpOworICAgIGlmICghbV9leHRlcm5hbFNWR0RvY3VtZW50ICYmICFlcnJvck9jY3VycmVk
KCkgJiYgIWlzTG9hZGluZygpICYmIG1fZGF0YSkgeworICAgICAgICBtX2V4dGVybmFsU1ZHRG9j
dW1lbnQgPSBTVkdEb2N1bWVudDo6Y3JlYXRlKDAsIEtVUkwoKSk7CisgICAgICAgIG1fZXh0ZXJu
YWxTVkdEb2N1bWVudC0+b3BlbigpOworCisgICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNv
ZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJhcHBsaWNhdGlvbi94
bWwiKTsKKyAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50LT53cml0ZShkZWNvZGVyLT5kZWNv
ZGUobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKSk7CisgICAgICAgIG1fZXh0ZXJuYWxT
VkdEb2N1bWVudC0+d3JpdGUoZGVjb2Rlci0+Zmx1c2goKSk7CisgICAgICAgIGlmIChkZWNvZGVy
LT5zYXdFcnJvcigpKSB7CisgICAgICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQuY2xlYXIo
KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgbV9leHRlcm5h
bFNWR0RvY3VtZW50LT5maW5pc2hQYXJzaW5nKCk7CisgICAgICAgIG1fZXh0ZXJuYWxTVkdEb2N1
bWVudC0+Y2xvc2UoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9leHRlcm5hbFNWR0RvY3VtZW50
OworfQorCitTVkdGb250RWxlbWVudCogQ2FjaGVkRm9udDo6Z2V0U1ZHRm9udEJ5SWQoY29uc3Qg
U3RyaW5nJiBmb250TmFtZSkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pc1NWR0ZvbnQpOworICAg
IFJlZlB0cjxOb2RlTGlzdD4gbGlzdCA9IG1fZXh0ZXJuYWxTVkdEb2N1bWVudC0+Z2V0RWxlbWVu
dHNCeVRhZ05hbWVOUyhTVkdOYW1lczo6Zm9udFRhZy5uYW1lc3BhY2VVUkkoKSwgU1ZHTmFtZXM6
OmZvbnRUYWcubG9jYWxOYW1lKCkpOworICAgIGlmICghbGlzdCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICB1bnNpZ25lZCBsaXN0TGVuZ3RoID0gbGlzdC0+bGVuZ3RoKCk7CisgICAgaWYgKCFs
aXN0TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworI2lmbmRlZiBOREVCVUcKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgKytpKSB7CisgICAgICAgIEFTU0VSVChs
aXN0LT5pdGVtKGkpKTsKKyAgICAgICAgQVNTRVJUKGxpc3QtPml0ZW0oaSktPmhhc1RhZ05hbWUo
U1ZHTmFtZXM6OmZvbnRUYWcpKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChmb250TmFtZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdGb250RWxlbWVudCo+KGxp
c3QtPml0ZW0oMCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3RMZW5ndGg7
ICsraSkgeworICAgICAgICBTVkdGb250RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNW
R0ZvbnRFbGVtZW50Kj4obGlzdC0+aXRlbShpKSk7CisgICAgICAgIGlmIChlbGVtZW50LT5nZXRJ
ZEF0dHJpYnV0ZSgpID09IGZvbnROYW1lKQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Cisg
ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwordm9pZCBDYWNoZWRGb250OjphbGxD
bGllbnRzUmVtb3ZlZCgpCit7CisjaWZkZWYgU1RPUkVfRk9OVF9DVVNUT01fUExBVEZPUk1fREFU
QQorICAgIGlmIChtX2ZvbnREYXRhKSB7CisgICAgICAgIGRlbGV0ZSBtX2ZvbnREYXRhOworICAg
ICAgICBtX2ZvbnREYXRhID0gMDsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBDYWNoZWRGb250
OjpjaGVja05vdGlmeSgpCit7CisgICAgaWYgKGlzTG9hZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOworICAg
IHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCAqYyA9IHcubmV4dCgpKQorICAgICAgICAgYy0+
Zm9udExvYWRlZCh0aGlzKTsKK30KKworCit2b2lkIENhY2hlZEZvbnQ6OmVycm9yKCkKK3sKKyAg
ICBzZXRMb2FkaW5nKGZhbHNlKTsKKyAgICBzZXRFcnJvck9jY3VycmVkKHRydWUpOworICAgIGNo
ZWNrTm90aWZ5KCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZv
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgJKHJl
dmlzaW9uIDcxNDkyKQkoZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250Lmg6NzE0OTIpCisr
KyBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FjaGVkRm9udF9oCisjZGVmaW5l
IENhY2hlZEZvbnRfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJG
b250T3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisjaW5jbHVkZSAiU1ZH
RWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKK2NsYXNzIENhY2hlOwor
Y2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIFNWR0ZvbnRFbGVtZW50OworCitzdHJ1Y3Qg
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTsKKworY2xhc3MgQ2FjaGVkRm9udCA6IHB1YmxpYyBDYWNo
ZWRSZXNvdXJjZSB7CitwdWJsaWM6CisgICAgQ2FjaGVkRm9udChjb25zdCBTdHJpbmcmIHVybCk7
CisgICAgdmlydHVhbCB+Q2FjaGVkRm9udCgpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBsb2Fk
KENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlcik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CisgICAgdmlydHVh
bCB2b2lkIGRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJl
Y2VpdmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXJyb3IoKTsKKworICAgIHZpcnR1YWwgdm9pZCBh
bGxDbGllbnRzUmVtb3ZlZCgpOworCisgICAgdm9pZCBjaGVja05vdGlmeSgpOworCisgICAgdm9p
ZCBiZWdpbkxvYWRJZk5lZWRlZChDYWNoZWRSZXNvdXJjZUxvYWRlciogZGwpOworCisgICAgYm9v
bCBlbnN1cmVDdXN0b21Gb250RGF0YSgpOworICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1E
YXRhRnJvbUN1c3RvbURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9u
dE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbCwgRm9udFJlbmRlcmluZ01vZGUgPSBOb3JtYWxSZW5k
ZXJpbmdNb2RlKTsKKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgYm9vbCBpc1NWR0ZvbnQo
KSBjb25zdCB7IHJldHVybiBtX2lzU1ZHRm9udDsgfQorICAgIHZvaWQgc2V0U1ZHRm9udChib29s
IGlzU1ZHKSB7IG1faXNTVkdGb250ID0gaXNTVkc7IH0KKyAgICBib29sIGVuc3VyZVNWR0ZvbnRE
YXRhKCk7CisgICAgU1ZHRm9udEVsZW1lbnQqIGdldFNWR0ZvbnRCeUlkKGNvbnN0IFN0cmluZyYp
IGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSog
bV9mb250RGF0YTsKKyAgICBib29sIG1fbG9hZEluaXRpYXRlZDsKKworI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCisgICAgYm9vbCBtX2lzU1ZHRm9udDsKKyAgICBSZWZQdHI8U1ZHRG9jdW1lbnQ+IG1f
ZXh0ZXJuYWxTVkdEb2N1bWVudDsKKyNlbmRpZgorCisgICAgZnJpZW5kIGNsYXNzIENhY2hlOwor
fTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJ
KHJldmlzaW9uIDcxNDkyKQkoZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHA6NzE0
OTIpCisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzODYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25v
bGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0
aWFuIChiYXN0aWFuQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWlu
aWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgorI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGll
bnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgorI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiUmVx
dWVzdC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIFBMQVRGT1JNKENHKQorI2luY2x1
ZGUgIlBERkRvY3VtZW50SW1hZ2UuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWR19BU19JTUFH
RSkKKyNpbmNsdWRlICJTVkdJbWFnZS5oIgorI2VuZGlmCisKK3VzaW5nIHN0ZDo6bWF4OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBTdHJp
bmcmIHVybCkKKyAgICA6IENhY2hlZFJlc291cmNlKHVybCwgSW1hZ2VSZXNvdXJjZSkKKyAgICAs
IG1faW1hZ2UoMCkKKyAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyKHRoaXMsICZDYWNo
ZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpCisgICAgLCBtX2h0dHBTdGF0
dXNDb2RlRXJyb3JPY2N1cnJlZChmYWxzZSkKK3sKKyAgICBzZXRTdGF0dXMoVW5rbm93bik7Cit9
CisKK0NhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2UpCisgICAgOiBDYWNoZWRS
ZXNvdXJjZShTdHJpbmcoKSwgSW1hZ2VSZXNvdXJjZSkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisg
ICAgLCBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lcih0aGlzLCAmQ2FjaGVkSW1hZ2U6OmRlY29k
ZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKQorICAgICwgbV9odHRwU3RhdHVzQ29kZUVycm9yT2Nj
dXJyZWQoZmFsc2UpCit7CisgICAgc2V0U3RhdHVzKENhY2hlZCk7CisgICAgc2V0TG9hZGluZyhm
YWxzZSk7Cit9CisKK0NhY2hlZEltYWdlOjp+Q2FjaGVkSW1hZ2UoKQoreworfQorCit2b2lkIENh
Y2hlZEltYWdlOjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZChUaW1lcjxDYWNoZWRJbWFn
ZT4qKQoreworICAgIEFTU0VSVCghaGFzQ2xpZW50cygpKTsKKyAgICBkZXN0cm95RGVjb2RlZERh
dGEoKTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciog
Y2FjaGVkUmVzb3VyY2VMb2FkZXIpCit7CisgICAgaWYgKCFjYWNoZWRSZXNvdXJjZUxvYWRlciB8
fCBjYWNoZWRSZXNvdXJjZUxvYWRlci0+YXV0b0xvYWRJbWFnZXMoKSkKKyAgICAgICAgQ2FjaGVk
UmVzb3VyY2U6OmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIHRydWUsIERvU2VjdXJpdHlDaGVj
aywgdHJ1ZSk7CisgICAgZWxzZQorICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTsKK30KKwordm9p
ZCBDYWNoZWRJbWFnZTo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjKQorewor
ICAgIGlmIChtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBt
X2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5zdG9wKCk7CisgICAgCisgICAgaWYgKG1fZGF0YSAm
JiAhbV9pbWFnZSAmJiAhZXJyb3JPY2N1cnJlZCgpKSB7CisgICAgICAgIGNyZWF0ZUltYWdlKCk7
CisgICAgICAgIG1faW1hZ2UtPnNldERhdGEobV9kYXRhLCB0cnVlKTsKKyAgICB9CisKKyAgICBp
ZiAobV9pbWFnZSAmJiAhbV9pbWFnZS0+aXNOdWxsKCkpCisgICAgICAgIGMtPmltYWdlQ2hhbmdl
ZCh0aGlzKTsKKworICAgIGlmICghaXNMb2FkaW5nKCkpCisgICAgICAgIGMtPm5vdGlmeUZpbmlz
aGVkKHRoaXMpOworfQorCit2b2lkIENhY2hlZEltYWdlOjphbGxDbGllbnRzUmVtb3ZlZCgpCit7
CisgICAgaWYgKG1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQoKSkKKyAgICAgICAgbV9pbWFnZS0+
cmVzZXRBbmltYXRpb24oKTsKKyAgICBpZiAoZG91YmxlIGludGVydmFsID0gY2FjaGUoKS0+ZGVh
ZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCgpKQorICAgICAgICBtX2RlY29kZWREYXRhRGVs
ZXRpb25UaW1lci5zdGFydE9uZVNob3QoaW50ZXJ2YWwpOworfQorCitzdGF0aWMgSW1hZ2UqIGJy
b2tlbkltYWdlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxJbWFnZT4sIGJy
b2tlbkltYWdlLCAoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtaXNzaW5nSW1hZ2UiKSkp
OworICAgIHJldHVybiBicm9rZW5JbWFnZS5nZXQoKTsKK30KKworc3RhdGljIEltYWdlKiBudWxs
SW1hZ2UoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPEJpdG1hcEltYWdlPiwg
bnVsbEltYWdlLCAoQml0bWFwSW1hZ2U6OmNyZWF0ZSgpKSk7CisgICAgcmV0dXJuIG51bGxJbWFn
ZS5nZXQoKTsKK30KKworSW1hZ2UqIENhY2hlZEltYWdlOjppbWFnZSgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFpc1B1cmdlYWJsZSgpKTsKKworICAgIGlmIChlcnJvck9jY3VycmVkKCkpCisgICAg
ICAgIHJldHVybiBicm9rZW5JbWFnZSgpOworCisgICAgaWYgKG1faW1hZ2UpCisgICAgICAgIHJl
dHVybiBtX2ltYWdlLmdldCgpOworCisgICAgcmV0dXJuIG51bGxJbWFnZSgpOworfQorCit2b2lk
IENhY2hlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYgY29udGFp
bmVyU2l6ZSkKK3sKKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgbV9pbWFnZS0+c2V0Q29udGFp
bmVyU2l6ZShjb250YWluZXJTaXplKTsKK30KKworYm9vbCBDYWNoZWRJbWFnZTo6dXNlc0ltYWdl
Q29udGFpbmVyU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1faW1hZ2UpCisgICAgICAgIHJldHVy
biBtX2ltYWdlLT51c2VzQ29udGFpbmVyU2l6ZSgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIENhY2hlZEltYWdlOjppbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdAoreworICAg
IGlmIChtX2ltYWdlKQorICAgICAgICByZXR1cm4gbV9pbWFnZS0+aGFzUmVsYXRpdmVXaWR0aCgp
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENhY2hlZEltYWdlOjppbWFnZUhhc1Jl
bGF0aXZlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgcmV0dXJu
IG1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0KCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K0ludFNpemUgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZShmbG9hdCBtdWx0aXBsaWVyKSBjb25zdAor
eworICAgIEFTU0VSVCghaXNQdXJnZWFibGUoKSk7CisKKyAgICBpZiAoIW1faW1hZ2UpCisgICAg
ICAgIHJldHVybiBJbnRTaXplKCk7CisgICAgaWYgKG11bHRpcGxpZXIgPT0gMS4wZikKKyAgICAg
ICAgcmV0dXJuIG1faW1hZ2UtPnNpemUoKTsKKyAgICAgICAgCisgICAgLy8gRG9uJ3QgbGV0IGlt
YWdlcyB0aGF0IGhhdmUgYSB3aWR0aC9oZWlnaHQgPj0gMSBzaHJpbmsgYmVsb3cgMSB3aGVuIHpv
b21lZC4KKyAgICBib29sIGhhc1dpZHRoID0gbV9pbWFnZS0+c2l6ZSgpLndpZHRoKCkgPiAwOwor
ICAgIGJvb2wgaGFzSGVpZ2h0ID0gbV9pbWFnZS0+c2l6ZSgpLmhlaWdodCgpID4gMDsKKyAgICBp
bnQgd2lkdGggPSBtX2ltYWdlLT5zaXplKCkud2lkdGgoKSAqIChtX2ltYWdlLT5oYXNSZWxhdGl2
ZVdpZHRoKCkgPyAxLjBmIDogbXVsdGlwbGllcik7CisgICAgaW50IGhlaWdodCA9IG1faW1hZ2Ut
PnNpemUoKS5oZWlnaHQoKSAqIChtX2ltYWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgpID8gMS4wZiA6
IG11bHRpcGxpZXIpOworICAgIGlmIChoYXNXaWR0aCkKKyAgICAgICAgd2lkdGggPSBtYXgoMSwg
d2lkdGgpOworICAgIGlmIChoYXNIZWlnaHQpCisgICAgICAgIGhlaWdodCA9IG1heCgxLCBoZWln
aHQpOworICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworfQorCitJbnRSZWN0IENh
Y2hlZEltYWdlOjppbWFnZVJlY3QoZmxvYXQgbXVsdGlwbGllcikgY29uc3QKK3sKKyAgICBBU1NF
UlQoIWlzUHVyZ2VhYmxlKCkpOworCisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICByZXR1cm4g
SW50UmVjdCgpOworICAgIGlmIChtdWx0aXBsaWVyID09IDEuMGYgfHwgKCFtX2ltYWdlLT5oYXNS
ZWxhdGl2ZVdpZHRoKCkgJiYgIW1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0KCkpKQorICAgICAg
ICByZXR1cm4gbV9pbWFnZS0+cmVjdCgpOworCisgICAgZmxvYXQgd2lkdGhNdWx0aXBsaWVyID0g
KG1faW1hZ2UtPmhhc1JlbGF0aXZlV2lkdGgoKSA/IDEuMGYgOiBtdWx0aXBsaWVyKTsKKyAgICBm
bG9hdCBoZWlnaHRNdWx0aXBsaWVyID0gKG1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0KCkgPyAx
LjBmIDogbXVsdGlwbGllcik7CisKKyAgICAvLyBEb24ndCBsZXQgaW1hZ2VzIHRoYXQgaGF2ZSBh
IHdpZHRoL2hlaWdodCA+PSAxIHNocmluayBiZWxvdyAxIHdoZW4gem9vbWVkLgorICAgIGJvb2wg
aGFzV2lkdGggPSBtX2ltYWdlLT5yZWN0KCkud2lkdGgoKSA+IDA7CisgICAgYm9vbCBoYXNIZWln
aHQgPSBtX2ltYWdlLT5yZWN0KCkuaGVpZ2h0KCkgPiAwOworCisgICAgaW50IHdpZHRoID0gc3Rh
dGljX2Nhc3Q8aW50PihtX2ltYWdlLT5yZWN0KCkud2lkdGgoKSAqIHdpZHRoTXVsdGlwbGllcik7
CisgICAgaW50IGhlaWdodCA9IHN0YXRpY19jYXN0PGludD4obV9pbWFnZS0+cmVjdCgpLmhlaWdo
dCgpICogaGVpZ2h0TXVsdGlwbGllcik7CisgICAgaWYgKGhhc1dpZHRoKQorICAgICAgICB3aWR0
aCA9IG1heCgxLCB3aWR0aCk7CisgICAgaWYgKGhhc0hlaWdodCkKKyAgICAgICAgaGVpZ2h0ID0g
bWF4KDEsIGhlaWdodCk7CisKKyAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4obV9pbWFnZS0+
cmVjdCgpLngoKSAqIHdpZHRoTXVsdGlwbGllcik7CisgICAgaW50IHkgPSBzdGF0aWNfY2FzdDxp
bnQ+KG1faW1hZ2UtPnJlY3QoKS55KCkgKiBoZWlnaHRNdWx0aXBsaWVyKTsKKworICAgIHJldHVy
biBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIENhY2hlZEltYWdlOjpu
b3RpZnlPYnNlcnZlcnMoY29uc3QgSW50UmVjdCogY2hhbmdlUmVjdCkKK3sKKyAgICBDYWNoZWRS
ZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hlZFJlc291
cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgIGMtPmltYWdlQ2hhbmdlZCh0aGlzLCBj
aGFuZ2VSZWN0KTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6Y2xlYXIoKQoreworICAgIGRlc3Ry
b3lEZWNvZGVkRGF0YSgpOworICAgIG1faW1hZ2UgPSAwOworICAgIHNldEVuY29kZWRTaXplKDAp
OworfQorCitpbmxpbmUgdm9pZCBDYWNoZWRJbWFnZTo6Y3JlYXRlSW1hZ2UoKQoreworICAgIC8v
IENyZWF0ZSB0aGUgaW1hZ2UgaWYgaXQgZG9lc24ndCB5ZXQgZXhpc3QuCisgICAgaWYgKG1faW1h
Z2UpCisgICAgICAgIHJldHVybjsKKyNpZiBQTEFURk9STShDRykgJiYgIVVTRShXRUJLSVRfSU1B
R0VfREVDT0RFUlMpCisgICAgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAiYXBwbGljYXRp
b24vcGRmIikgeworICAgICAgICBtX2ltYWdlID0gUERGRG9jdW1lbnRJbWFnZTo6Y3JlYXRlKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUoU1ZHX0FTX0lNQUdF
KQorICAgIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImltYWdlL3N2Zyt4bWwiKSB7Cisg
ICAgICAgIG1faW1hZ2UgPSBTVkdJbWFnZTo6Y3JlYXRlKHRoaXMpOworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUodGhpcyk7
Cit9CisKK3NpemVfdCBDYWNoZWRJbWFnZTo6bWF4aW11bURlY29kZWRJbWFnZVNpemUoKQorewor
ICAgIEZyYW1lKiBmcmFtZSA9IG1fcmVxdWVzdCA/IG1fcmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKS0+ZnJhbWUoKSA6IDA7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CisgICAgcmV0dXJu
IHNldHRpbmdzID8gc2V0dGluZ3MtPm1heGltdW1EZWNvZGVkSW1hZ2VTaXplKCkgOiAwOworfQor
Cit2b2lkIENhY2hlZEltYWdlOjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBtX2RhdGEgPSBkYXRhOworCisgICAgY3JlYXRl
SW1hZ2UoKTsKKworICAgIGJvb2wgc2l6ZUF2YWlsYWJsZSA9IGZhbHNlOworCisgICAgLy8gSGF2
ZSB0aGUgaW1hZ2UgdXBkYXRlIGl0cyBkYXRhIGZyb20gaXRzIGludGVybmFsIGJ1ZmZlci4KKyAg
ICAvLyBJdCB3aWxsIG5vdCBkbyBhbnl0aGluZyBub3csIGJ1dCB3aWxsIGRlbGF5IGRlY29kaW5n
IHVudGlsIAorICAgIC8vIHF1ZXJpZWQgZm9yIGluZm8gKGxpa2Ugc2l6ZSBvciBzcGVjaWZpYyBp
bWFnZSBmcmFtZXMpLgorICAgIHNpemVBdmFpbGFibGUgPSBtX2ltYWdlLT5zZXREYXRhKG1fZGF0
YSwgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIC8vIEdvIGFoZWFkIGFuZCB0ZWxsIG91ciBvYnNl
cnZlcnMgdG8gdHJ5IHRvIGRyYXcgaWYgd2UgaGF2ZSBlaXRoZXIKKyAgICAvLyByZWNlaXZlZCBh
bGwgdGhlIGRhdGEgb3IgdGhlIHNpemUgaXMga25vd24uICBFYWNoIGNodW5rIGZyb20gdGhlCisg
ICAgLy8gbmV0d29yayBjYXVzZXMgb2JzZXJ2ZXJzIHRvIHJlcGFpbnQsIHdoaWNoIHdpbGwgZm9y
Y2UgdGhhdCBjaHVuaworICAgIC8vIHRvIGRlY29kZS4KKyAgICBpZiAoc2l6ZUF2YWlsYWJsZSB8
fCBhbGxEYXRhUmVjZWl2ZWQpIHsKKyAgICAgICAgc2l6ZV90IG1heERlY29kZWRJbWFnZVNpemUg
PSBtYXhpbXVtRGVjb2RlZEltYWdlU2l6ZSgpOworICAgICAgICBJbnRTaXplIHMgPSBpbWFnZVNp
emUoMS4wZik7CisgICAgICAgIHNpemVfdCBlc3RpbWF0ZWREZWNvZGVkSW1hZ2VTaXplID0gcy53
aWR0aCgpICogcy5oZWlnaHQoKSAqIDQ7IC8vIG5vIG92ZXJmbG93IGNoZWNrCisgICAgICAgIGlm
IChtX2ltYWdlLT5pc051bGwoKSB8fCAobWF4RGVjb2RlZEltYWdlU2l6ZSA+IDAgJiYgZXN0aW1h
dGVkRGVjb2RlZEltYWdlU2l6ZSA+IG1heERlY29kZWRJbWFnZVNpemUpKSB7CisgICAgICAgICAg
ICBlcnJvcigpOworICAgICAgICAgICAgaWYgKGluQ2FjaGUoKSkKKyAgICAgICAgICAgICAgICBj
YWNoZSgpLT5yZW1vdmUodGhpcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gb25seSByZWRyYXcgdGhlIGRl
Y29kZWQgYmFuZCBvZiB0aGUgaW1hZ2UsIGJ1dCB3aXRoIHRoZSBjdXJyZW50IGRlc2lnbgorICAg
ICAgICAvLyAoZGVjb2RpbmcgZGVsYXllZCB1bnRpbCBwYWludGluZykgdGhhdCBzZWVtcyBoYXJk
LgorICAgICAgICBub3RpZnlPYnNlcnZlcnMoKTsKKworICAgICAgICBpZiAobV9pbWFnZSkKKyAg
ICAgICAgICAgIHNldEVuY29kZWRTaXplKG1faW1hZ2UtPmRhdGEoKSA/IG1faW1hZ2UtPmRhdGEo
KS0+c2l6ZSgpIDogMCk7CisgICAgfQorICAgIAorICAgIGlmIChhbGxEYXRhUmVjZWl2ZWQpIHsK
KyAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7CisgICAgICAgIGNoZWNrTm90aWZ5KCk7CisgICAg
fQorfQorCit2b2lkIENhY2hlZEltYWdlOjplcnJvcigpCit7CisgICAgY2xlYXIoKTsKKyAgICBz
ZXRFcnJvck9jY3VycmVkKHRydWUpOworICAgIG1fZGF0YS5jbGVhcigpOworICAgIG5vdGlmeU9i
c2VydmVycygpOworICAgIHNldExvYWRpbmcoZmFsc2UpOworICAgIGNoZWNrTm90aWZ5KCk7Cit9
CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmNoZWNrTm90aWZ5KCkKK3sKKyAgICBpZiAoaXNMb2FkaW5n
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHco
bV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQo
KSkKKyAgICAgICAgYy0+bm90aWZ5RmluaXNoZWQodGhpcyk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1h
Z2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCit7CisgICAgYm9vbCBjYW5EZWxldGVJbWFnZSA9ICFt
X2ltYWdlIHx8IChtX2ltYWdlLT5oYXNPbmVSZWYoKSAmJiBtX2ltYWdlLT5pc0JpdG1hcEltYWdl
KCkpOworICAgIGlmIChpc1NhZmVUb01ha2VQdXJnZWFibGUoKSAmJiBjYW5EZWxldGVJbWFnZSAm
JiAhaXNMb2FkaW5nKCkpIHsKKyAgICAgICAgLy8gSW1hZ2UgcmVmcyB0aGUgZGF0YSBidWZmZXIg
c28gd2Ugc2hvdWxkIG5vdCBtYWtlIGl0IHB1cmdlYWJsZSB3aGlsZSB0aGUgaW1hZ2UgaXMgYWxp
dmUuIAorICAgICAgICAvLyBJbnZva2luZyBhZGRDbGllbnQoKSB3aWxsIHJlY29uc3RydWN0IHRo
ZSBpbWFnZSBvYmplY3QuCisgICAgICAgIG1faW1hZ2UgPSAwOworICAgICAgICBzZXREZWNvZGVk
U2l6ZSgwKTsKKyAgICAgICAgaWYgKCFDYWNoZTo6c2hvdWxkTWFrZVJlc291cmNlUHVyZ2VhYmxl
T25FdmljdGlvbigpKQorICAgICAgICAgICAgbWFrZVB1cmdlYWJsZSh0cnVlKTsKKyAgICB9IGVs
c2UgaWYgKG1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQoKSkKKyAgICAgICAgbV9pbWFnZS0+ZGVz
dHJveURlY29kZWREYXRhKCk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmRlY29kZWRTaXplQ2hh
bmdlZChjb25zdCBJbWFnZSogaW1hZ2UsIGludCBkZWx0YSkKK3sKKyAgICBpZiAoaW1hZ2UgIT0g
bV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHNldERlY29kZWRTaXplKGRlY29k
ZWRTaXplKCkgKyBkZWx0YSk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmRpZERyYXcoY29uc3Qg
SW1hZ2UqIGltYWdlKQoreworICAgIGlmIChpbWFnZSAhPSBtX2ltYWdlKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgZG91YmxlIHRpbWVTdGFtcCA9IEZyYW1lVmlldzo6Y3VycmVudFBhaW50
VGltZVN0YW1wKCk7CisgICAgaWYgKCF0aW1lU3RhbXApIC8vIElmIGRpZERyYXcgaXMgY2FsbGVk
IG91dHNpZGUgb2YgYSBGcmFtZSBwYWludC4KKyAgICAgICAgdGltZVN0YW1wID0gY3VycmVudFRp
bWUoKTsKKyAgICAKKyAgICBDYWNoZWRSZXNvdXJjZTo6ZGlkQWNjZXNzRGVjb2RlZERhdGEodGlt
ZVN0YW1wKTsKK30KKworYm9vbCBDYWNoZWRJbWFnZTo6c2hvdWxkUGF1c2VBbmltYXRpb24oY29u
c3QgSW1hZ2UqIGltYWdlKQoreworICAgIGlmIChpbWFnZSAhPSBtX2ltYWdlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2Ns
aWVudHMpOworICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4dCgpKSB7
CisgICAgICAgIGlmIChjLT53aWxsUmVuZGVySW1hZ2UodGhpcykpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2FjaGVkSW1h
Z2U6OmFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoaW1h
Z2UgPT0gbV9pbWFnZSkKKyAgICAgICAgbm90aWZ5T2JzZXJ2ZXJzKCk7Cit9CisKK3ZvaWQgQ2Fj
aGVkSW1hZ2U6OmNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIGlmIChpbWFnZSA9PSBtX2ltYWdlKQorICAgICAgICBub3RpZnlPYnNl
cnZlcnMoJnJlY3QpOworfQorCit9IC8vbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gNzE0OTIpCShmcm9tIFdlYkNvcmUvbG9hZGVy
L0NhY2hlZEltYWdlLmg6NzE0OTIpCisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCisgICAgQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaWZuZGVmIENhY2hlZEltYWdlX2gKKyNkZWZpbmUgQ2FjaGVkSW1hZ2VfaAorCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZFJlc291cmNlTG9h
ZGVyOworY2xhc3MgQ2FjaGU7CisKK2NsYXNzIENhY2hlZEltYWdlIDogcHVibGljIENhY2hlZFJl
c291cmNlLCBwdWJsaWMgSW1hZ2VPYnNlcnZlciB7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlOwor
CitwdWJsaWM6CisgICAgQ2FjaGVkSW1hZ2UoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIENhY2hl
ZEltYWdlKEltYWdlKik7CisgICAgdmlydHVhbCB+Q2FjaGVkSW1hZ2UoKTsKKyAgICAKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIpOworCisgICAgSW1hZ2UqIGltYWdlKCkgY29uc3Q7CisKKyAgICBib29sIGNhblJlbmRlcihm
bG9hdCBtdWx0aXBsaWVyKSBjb25zdCB7IHJldHVybiAhZXJyb3JPY2N1cnJlZCgpICYmICFpbWFn
ZVNpemUobXVsdGlwbGllcikuaXNFbXB0eSgpOyB9CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1
c2VkIGZvciBTVkdJbWFnZSByaWdodCBub3cKKyAgICB2b2lkIHNldEltYWdlQ29udGFpbmVyU2l6
ZShjb25zdCBJbnRTaXplJik7CisgICAgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXplKCkgY29u
c3Q7CisgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdDsKKyAgICBib29sIGlt
YWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdDsKKyAgICAKKyAgICAvLyBCb3RoIG9mIHRoZXNl
IG1ldGhvZHMgdGFrZSBhIHpvb20gbXVsdGlwbGllciB0aGF0IGNhbiBiZSB1c2VkIHRvIGluY3Jl
YXNlIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlIGltYWdlIGJ5IHRoZQorICAgIC8vIHpvb20uCisg
ICAgSW50U2l6ZSBpbWFnZVNpemUoZmxvYXQgbXVsdGlwbGllcikgY29uc3Q7ICAvLyByZXR1cm5z
IHRoZSBzaXplIG9mIHRoZSBjb21wbGV0ZSBpbWFnZS4KKyAgICBJbnRSZWN0IGltYWdlUmVjdChm
bG9hdCBtdWx0aXBsaWVyKSBjb25zdDsgIC8vIFRoZSBzaXplIG9mIHRoZSBjdXJyZW50bHkgZGVj
b2RlZCBwb3J0aW9uIG9mIHRoZSBpbWFnZS4KKworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRDbGll
bnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xp
ZW50c1JlbW92ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOworICAgIAorICAg
IHZpcnR1YWwgdm9pZCBodHRwU3RhdHVzQ29kZUVycm9yKCkgeyBtX2h0dHBTdGF0dXNDb2RlRXJy
b3JPY2N1cnJlZCA9IHRydWU7IH0KKyAgICBib29sIGh0dHBTdGF0dXNDb2RlRXJyb3JPY2N1cnJl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faHR0cFN0YXR1c0NvZGVFcnJvck9jY3VycmVkOyB9CisgICAg
CisgICAgdm9pZCBjaGVja05vdGlmeSgpOworICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdl
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdm9pZCBjbGVhcigpOworICAgIAorICAg
IGJvb2wgc3RpbGxOZWVkc0xvYWQoKSBjb25zdCB7IHJldHVybiAhZXJyb3JPY2N1cnJlZCgpICYm
IHN0YXR1cygpID09IFVua25vd24gJiYgIWlzTG9hZGluZygpOyB9CisgICAgdm9pZCBsb2FkKCk7
CisKKyAgICAvLyBJbWFnZU9ic2VydmVyCisgICAgdmlydHVhbCB2b2lkIGRlY29kZWRTaXplQ2hh
bmdlZChjb25zdCBJbWFnZSogaW1hZ2UsIGludCBkZWx0YSk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZERyYXcoY29uc3QgSW1hZ2UqKTsKKworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQYXVzZUFuaW1h
dGlvbihjb25zdCBJbWFnZSopOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25BZHZhbmNlZChj
b25zdCBJbWFnZSopOworICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VkSW5SZWN0KGNvbnN0IEltYWdl
KiwgY29uc3QgSW50UmVjdCYpOworCitwcml2YXRlOgorICAgIHZvaWQgY3JlYXRlSW1hZ2UoKTsK
KyAgICBzaXplX3QgbWF4aW11bURlY29kZWRJbWFnZVNpemUoKTsKKyAgICAvLyBJZiBub3QgbnVs
bCwgY2hhbmdlUmVjdCBpcyB0aGUgY2hhbmdlZCBwYXJ0IG9mIHRoZSBpbWFnZS4KKyAgICB2b2lk
IG5vdGlmeU9ic2VydmVycyhjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0ID0gMCk7CisgICAgdm9p
ZCBkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZChUaW1lcjxDYWNoZWRJbWFnZT4qKTsKKyAg
ICB2aXJ0dWFsIFB1cmdlUHJpb3JpdHkgcHVyZ2VQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIFB1
cmdlRmlyc3Q7IH0KKworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKKyAgICBUaW1lcjxDYWNo
ZWRJbWFnZT4gbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXI7CisgICAgYm9vbCBtX2h0dHBTdGF0
dXNDb2RlRXJyb3JPY2N1cnJlZDsKK307CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA3MTQ5MikJKGZyb20gV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwOjcxNDkyKQorKysgV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTY1IEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRl
KQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQor
ICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNv
bSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZS5oIgorCisjaW5jbHVkZSAiQ2FjaGUuaCIKKyNpbmNsdWRlICJD
YWNoZWRNZXRhZGF0YS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIktV
UkwuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUHVyZ2VhYmxlQnVmZmVyLmgi
CisjaW5jbHVkZSAiUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3Vu
dGVyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisj
aWZuZGVmIE5ERUJVRworc3RhdGljIFJlZkNvdW50ZWRMZWFrQ291bnRlciBjYWNoZWRSZXNvdXJj
ZUxlYWtDb3VudGVyKCJDYWNoZWRSZXNvdXJjZSIpOworI2VuZGlmCisKK0NhY2hlZFJlc291cmNl
OjpDYWNoZWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgVHlwZSB0eXBlKQorICAgIDogbV91
cmwodXJsKQorICAgICwgbV9yZXF1ZXN0KDApCisgICAgLCBtX3Jlc3BvbnNlVGltZXN0YW1wKGN1
cnJlbnRUaW1lKCkpCisgICAgLCBtX2xhc3REZWNvZGVkQWNjZXNzVGltZSgwKQorICAgICwgbV9l
bmNvZGVkU2l6ZSgwKQorICAgICwgbV9kZWNvZGVkU2l6ZSgwKQorICAgICwgbV9hY2Nlc3NDb3Vu
dCgwKQorICAgICwgbV9oYW5kbGVDb3VudCgwKQorICAgICwgbV9wcmVsb2FkQ291bnQoMCkKKyAg
ICAsIG1fcHJlbG9hZFJlc3VsdChQcmVsb2FkTm90UmVmZXJlbmNlZCkKKyAgICAsIG1faW5MaXZl
RGVjb2RlZFJlc291cmNlc0xpc3QoZmFsc2UpCisgICAgLCBtX3JlcXVlc3RlZEZyb21OZXR3b3Jr
aW5nTGF5ZXIoZmFsc2UpCisgICAgLCBtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3ModHJ1ZSkK
KyAgICAsIG1fZXJyb3JPY2N1cnJlZChmYWxzZSkKKyAgICAsIG1faW5DYWNoZShmYWxzZSkKKyAg
ICAsIG1fbG9hZGluZyhmYWxzZSkKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9zdGF0dXMo
UGVuZGluZykKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2RlbGV0ZWQoZmFsc2UpCisgICAgLCBt
X2xydUluZGV4KDApCisjZW5kaWYKKyAgICAsIG1fbmV4dEluQWxsUmVzb3VyY2VzTGlzdCgwKQor
ICAgICwgbV9wcmV2SW5BbGxSZXNvdXJjZXNMaXN0KDApCisgICAgLCBtX25leHRJbkxpdmVSZXNv
dXJjZXNMaXN0KDApCisgICAgLCBtX3ByZXZJbkxpdmVSZXNvdXJjZXNMaXN0KDApCisgICAgLCBt
X2NhY2hlZFJlc291cmNlTG9hZGVyKDApCisgICAgLCBtX3Jlc291cmNlVG9SZXZhbGlkYXRlKDAp
CisgICAgLCBtX3Byb3h5UmVzb3VyY2UoMCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgY2FjaGVk
UmVzb3VyY2VMZWFrQ291bnRlci5pbmNyZW1lbnQoKTsKKyNlbmRpZgorfQorCitDYWNoZWRSZXNv
dXJjZTo6fkNhY2hlZFJlc291cmNlKCkKK3sKKyAgICBBU1NFUlQoIW1fcmVzb3VyY2VUb1JldmFs
aWRhdGUpOyAvLyBTaG91bGQgYmUgdHJ1ZSBiZWNhdXNlIGNhbkRlbGV0ZSgpIGNoZWNrcyB0aGlz
LgorICAgIEFTU0VSVChjYW5EZWxldGUoKSk7CisgICAgQVNTRVJUKCFpbkNhY2hlKCkpOworICAg
IEFTU0VSVCghbV9kZWxldGVkKTsKKyAgICBBU1NFUlQodXJsKCkuaXNOdWxsKCkgfHwgY2FjaGUo
KS0+cmVzb3VyY2VGb3JVUkwodXJsKCkpICE9IHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBt
X2RlbGV0ZWQgPSB0cnVlOworICAgIGNhY2hlZFJlc291cmNlTGVha0NvdW50ZXIuZGVjcmVtZW50
KCk7CisjZW5kaWYKKworICAgIGlmIChtX2NhY2hlZFJlc291cmNlTG9hZGVyKQorICAgICAgICBt
X2NhY2hlZFJlc291cmNlTG9hZGVyLT5yZW1vdmVDYWNoZWRSZXNvdXJjZSh0aGlzKTsKK30KKwor
dm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVz
b3VyY2VMb2FkZXIsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3kgc2VjdXJp
dHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQoreworICAgIG1fc2VuZFJl
c291cmNlTG9hZENhbGxiYWNrcyA9IHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3M7CisgICAgY2Fj
aGUoKS0+bG9hZGVyKCktPmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIHRoaXMsIGluY3JlbWVu
dGFsLCBzZWN1cml0eUNoZWNrLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICBtX2xv
YWRpbmcgPSB0cnVlOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpkYXRhKFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKCFhbGxEYXRh
UmVjZWl2ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBDYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlciB3KG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBj
ID0gdy5uZXh0KCkpCisgICAgICAgIGMtPm5vdGlmeUZpbmlzaGVkKHRoaXMpOworfQorCit2b2lk
IENhY2hlZFJlc291cmNlOjpmaW5pc2goKQoreworICAgIG1fc3RhdHVzID0gQ2FjaGVkOworfQor
Citib29sIENhY2hlZFJlc291cmNlOjppc0V4cGlyZWQoKSBjb25zdAoreworICAgIGlmIChtX3Jl
c3BvbnNlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gY3Vy
cmVudEFnZSgpID4gZnJlc2huZXNzTGlmZXRpbWUoKTsKK30KKyAgICAKK2RvdWJsZSBDYWNoZWRS
ZXNvdXJjZTo6Y3VycmVudEFnZSgpIGNvbnN0Cit7CisgICAgLy8gUkZDMjYxNiAxMy4yLjMKKyAg
ICAvLyBObyBjb21wZW5zYXRpb24gZm9yIGxhdGVuY3kgYXMgdGhhdCBpcyBub3QgdGVycmlibHkg
aW1wb3J0YW50IGluIHByYWN0aWNlCisgICAgZG91YmxlIGRhdGVWYWx1ZSA9IG1fcmVzcG9uc2Uu
ZGF0ZSgpOworICAgIGRvdWJsZSBhcHBhcmVudEFnZSA9IGlzZmluaXRlKGRhdGVWYWx1ZSkgPyBt
YXgoMC4sIG1fcmVzcG9uc2VUaW1lc3RhbXAgLSBkYXRlVmFsdWUpIDogMDsKKyAgICBkb3VibGUg
YWdlVmFsdWUgPSBtX3Jlc3BvbnNlLmFnZSgpOworICAgIGRvdWJsZSBjb3JyZWN0ZWRSZWNlaXZl
ZEFnZSA9IGlzZmluaXRlKGFnZVZhbHVlKSA/IG1heChhcHBhcmVudEFnZSwgYWdlVmFsdWUpIDog
YXBwYXJlbnRBZ2U7CisgICAgZG91YmxlIHJlc2lkZW50VGltZSA9IGN1cnJlbnRUaW1lKCkgLSBt
X3Jlc3BvbnNlVGltZXN0YW1wOworICAgIHJldHVybiBjb3JyZWN0ZWRSZWNlaXZlZEFnZSArIHJl
c2lkZW50VGltZTsKK30KKyAgICAKK2RvdWJsZSBDYWNoZWRSZXNvdXJjZTo6ZnJlc2huZXNzTGlm
ZXRpbWUoKSBjb25zdAoreworICAgIC8vIENhY2hlIG5vbi1odHRwIHJlc291cmNlcyBsaWJlcmFs
bHkKKyAgICBpZiAoIW1fcmVzcG9uc2UudXJsKCkucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCk7CisKKyAgICAv
LyBSRkMyNjE2IDEzLjIuNAorICAgIGRvdWJsZSBtYXhBZ2VWYWx1ZSA9IG1fcmVzcG9uc2UuY2Fj
aGVDb250cm9sTWF4QWdlKCk7CisgICAgaWYgKGlzZmluaXRlKG1heEFnZVZhbHVlKSkKKyAgICAg
ICAgcmV0dXJuIG1heEFnZVZhbHVlOworICAgIGRvdWJsZSBleHBpcmVzVmFsdWUgPSBtX3Jlc3Bv
bnNlLmV4cGlyZXMoKTsKKyAgICBkb3VibGUgZGF0ZVZhbHVlID0gbV9yZXNwb25zZS5kYXRlKCk7
CisgICAgZG91YmxlIGNyZWF0aW9uVGltZSA9IGlzZmluaXRlKGRhdGVWYWx1ZSkgPyBkYXRlVmFs
dWUgOiBtX3Jlc3BvbnNlVGltZXN0YW1wOworICAgIGlmIChpc2Zpbml0ZShleHBpcmVzVmFsdWUp
KQorICAgICAgICByZXR1cm4gZXhwaXJlc1ZhbHVlIC0gY3JlYXRpb25UaW1lOworICAgIGRvdWJs
ZSBsYXN0TW9kaWZpZWRWYWx1ZSA9IG1fcmVzcG9uc2UubGFzdE1vZGlmaWVkKCk7CisgICAgaWYg
KGlzZmluaXRlKGxhc3RNb2RpZmllZFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIChjcmVhdGlvblRp
bWUgLSBsYXN0TW9kaWZpZWRWYWx1ZSkgKiAwLjE7CisgICAgLy8gSWYgbm8gY2FjaGUgaGVhZGVy
cyBhcmUgcHJlc2VudCwgdGhlIHNwZWNpZmljYXRpb24gbGVhdmVzIHRoZSBkZWNpc2lvbiB0byB0
aGUgVUEuIE90aGVyIGJyb3dzZXJzIHNlZW0gdG8gb3B0IGZvciAwLgorICAgIHJldHVybiAwOwor
fQorCit2b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKK3sKKyAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7CisgICAgbV9yZXNw
b25zZVRpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6
OnNldFNlcmlhbGl6ZWRDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6
ZSkKK3sKKyAgICAvLyBXZSBvbmx5IGV4cGVjdCB0byByZWNlaXZlIGNhY2hlZCBtZXRhZGF0YSBm
cm9tIHRoZSBwbGF0Zm9ybSBvbmNlLgorICAgIC8vIElmIHRoaXMgdHJpZ2dlcnMsIGl0IGluZGlj
YXRlcyBhbiBlZmZpY2llbmN5IHByb2JsZW0gd2hpY2ggaXMgbW9zdAorICAgIC8vIGxpa2VseSB1
bmV4cGVjdGVkIGluIGNvZGUgZGVzaWduZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4KKyAgICBB
U1NFUlQoIW1fY2FjaGVkTWV0YWRhdGEpOworCisgICAgbV9jYWNoZWRNZXRhZGF0YSA9IENhY2hl
ZE1ldGFkYXRhOjpkZXNlcmlhbGl6ZShkYXRhLCBzaXplKTsKK30KKwordm9pZCBDYWNoZWRSZXNv
dXJjZTo6c2V0Q2FjaGVkTWV0YWRhdGEodW5zaWduZWQgZGF0YVR5cGVJRCwgY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgLy8gQ3VycmVudGx5LCBvbmx5IG9uZSB0eXBlIG9m
IGNhY2hlZCBtZXRhZGF0YSBwZXIgcmVzb3VyY2UgaXMgc3VwcG9ydGVkLgorICAgIC8vIElmIHRo
ZSBuZWVkIGFyaXNlcyBmb3IgbXVsdGlwbGUgdHlwZXMgb2YgbWV0YWRhdGEgcGVyIHJlc291cmNl
IHRoaXMgY291bGQKKyAgICAvLyBiZSBlbmhhbmNlZCB0byBzdG9yZSB0eXBlcyBvZiBtZXRhZGF0
YSBpbiBhIG1hcC4KKyAgICBBU1NFUlQoIW1fY2FjaGVkTWV0YWRhdGEpOworCisgICAgbV9jYWNo
ZWRNZXRhZGF0YSA9IENhY2hlZE1ldGFkYXRhOjpjcmVhdGUoZGF0YVR5cGVJRCwgZGF0YSwgc2l6
ZSk7CisgICAgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRhdGEobV9yZXNwb25zZSwgbV9jYWNo
ZWRNZXRhZGF0YS0+c2VyaWFsaXplKCkpOworfQorCitDYWNoZWRNZXRhZGF0YSogQ2FjaGVkUmVz
b3VyY2U6OmNhY2hlZE1ldGFkYXRhKHVuc2lnbmVkIGRhdGFUeXBlSUQpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2NhY2hlZE1ldGFkYXRhIHx8IG1fY2FjaGVkTWV0YWRhdGEtPmRhdGFUeXBlSUQoKSAh
PSBkYXRhVHlwZUlEKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9jYWNoZWRNZXRh
ZGF0YS5nZXQoKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVxdWVzdChSZXF1ZXN0
KiByZXF1ZXN0KQoreworICAgIGlmIChyZXF1ZXN0ICYmICFtX3JlcXVlc3QpCisgICAgICAgIG1f
c3RhdHVzID0gUGVuZGluZzsKKyAgICBtX3JlcXVlc3QgPSByZXF1ZXN0OworICAgIGlmIChjYW5E
ZWxldGUoKSAmJiAhaW5DYWNoZSgpKQorICAgICAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBD
YWNoZWRSZXNvdXJjZTo6YWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQpCit7
CisgICAgYWRkQ2xpZW50VG9TZXQoY2xpZW50KTsKKyAgICBkaWRBZGRDbGllbnQoY2xpZW50KTsK
K30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xp
ZW50KiBjKQoreworICAgIGlmICghaXNMb2FkaW5nKCkpCisgICAgICAgIGMtPm5vdGlmeUZpbmlz
aGVkKHRoaXMpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjphZGRDbGllbnRUb1NldChDYWNo
ZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQoreworICAgIEFTU0VSVCghaXNQdXJnZWFibGUoKSk7
CisKKyAgICBpZiAobV9wcmVsb2FkUmVzdWx0ID09IFByZWxvYWROb3RSZWZlcmVuY2VkKSB7Cisg
ICAgICAgIGlmIChpc0xvYWRlZCgpKQorICAgICAgICAgICAgbV9wcmVsb2FkUmVzdWx0ID0gUHJl
bG9hZFJlZmVyZW5jZWRXaGlsZUNvbXBsZXRlOworICAgICAgICBlbHNlIGlmIChtX3JlcXVlc3Rl
ZEZyb21OZXR3b3JraW5nTGF5ZXIpCisgICAgICAgICAgICBtX3ByZWxvYWRSZXN1bHQgPSBQcmVs
b2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9w
cmVsb2FkUmVzdWx0ID0gUHJlbG9hZFJlZmVyZW5jZWQ7CisgICAgfQorICAgIGlmICghaGFzQ2xp
ZW50cygpICYmIGluQ2FjaGUoKSkKKyAgICAgICAgY2FjaGUoKS0+YWRkVG9MaXZlUmVzb3VyY2Vz
U2l6ZSh0aGlzKTsKKyAgICBtX2NsaWVudHMuYWRkKGNsaWVudCk7Cit9CisKK3ZvaWQgQ2FjaGVk
UmVzb3VyY2U6OnJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQorewor
ICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoY2xpZW50KSk7CisgICAgbV9jbGllbnRzLnJl
bW92ZShjbGllbnQpOworCisgICAgaWYgKGNhbkRlbGV0ZSgpICYmICFpbkNhY2hlKCkpCisgICAg
ICAgIGRlbGV0ZSB0aGlzOworICAgIGVsc2UgaWYgKCFoYXNDbGllbnRzKCkgJiYgaW5DYWNoZSgp
KSB7CisgICAgICAgIGNhY2hlKCktPnJlbW92ZUZyb21MaXZlUmVzb3VyY2VzU2l6ZSh0aGlzKTsK
KyAgICAgICAgY2FjaGUoKS0+cmVtb3ZlRnJvbUxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCh0aGlz
KTsKKyAgICAgICAgYWxsQ2xpZW50c1JlbW92ZWQoKTsKKyAgICAgICAgaWYgKHJlc3BvbnNlKCku
Y2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkpIHsKKyAgICAgICAgICAgIC8vIFJGQzI2MTYg
MTQuOS4yOgorICAgICAgICAgICAgLy8gIm5vLXN0b3JlOiAuLi5NVVNUIG1ha2UgYSBiZXN0LWVm
Zm9ydCBhdHRlbXB0IHRvIHJlbW92ZSB0aGUgaW5mb3JtYXRpb24gZnJvbSB2b2xhdGlsZSBzdG9y
YWdlIGFzIHByb21wdGx5IGFzIHBvc3NpYmxlIgorICAgICAgICAgICAgY2FjaGUoKS0+cmVtb3Zl
KHRoaXMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhY2hlKCktPnBydW5lKCk7Cisg
ICAgfQorICAgIC8vIFRoaXMgb2JqZWN0IG1heSBiZSBkZWFkIGhlcmUuCit9CisKK3ZvaWQgQ2Fj
aGVkUmVzb3VyY2U6OmRlbGV0ZUlmUG9zc2libGUoKQoreworICAgIGlmIChjYW5EZWxldGUoKSAm
JiAhaW5DYWNoZSgpKQorICAgICAgICBkZWxldGUgdGhpczsKK30KKyAgICAKK3ZvaWQgQ2FjaGVk
UmVzb3VyY2U6OnNldERlY29kZWRTaXplKHVuc2lnbmVkIHNpemUpCit7CisgICAgaWYgKHNpemUg
PT0gbV9kZWNvZGVkU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGRlbHRhID0gc2l6
ZSAtIG1fZGVjb2RlZFNpemU7CisKKyAgICAvLyBUaGUgb2JqZWN0IG11c3Qgbm93IGJlIG1vdmVk
IHRvIGEgZGlmZmVyZW50IHF1ZXVlLCBzaW5jZSBpdHMgc2l6ZSBoYXMgYmVlbiBjaGFuZ2VkLgor
ICAgIC8vIFdlIGhhdmUgdG8gcmVtb3ZlIGV4cGxpY2l0bHkgYmVmb3JlIHVwZGF0aW5nIG1fZGVj
b2RlZFNpemUsIHNvIHRoYXQgd2UgZmluZCB0aGUgY29ycmVjdCBwcmV2aW91cworICAgIC8vIHF1
ZXVlLgorICAgIGlmIChpbkNhY2hlKCkpCisgICAgICAgIGNhY2hlKCktPnJlbW92ZUZyb21MUlVM
aXN0KHRoaXMpOworICAgIAorICAgIG1fZGVjb2RlZFNpemUgPSBzaXplOworICAgCisgICAgaWYg
KGluQ2FjaGUoKSkgeyAKKyAgICAgICAgLy8gTm93IGluc2VydCBpbnRvIHRoZSBuZXcgTFJVIGxp
c3QuCisgICAgICAgIGNhY2hlKCktPmluc2VydEluTFJVTGlzdCh0aGlzKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIEluc2VydCBpbnRvIG9yIHJlbW92ZSBmcm9tIHRoZSBsaXZlIGRlY29kZWQgbGlz
dCBpZiBuZWNlc3NhcnkuCisgICAgICAgIC8vIFdoZW4gaW5zZXJ0aW5nIGludG8gdGhlIExpdmVE
ZWNvZGVkUmVzb3VyY2VzTGlzdCBpdCBpcyBwb3NzaWJsZQorICAgICAgICAvLyB0aGF0IHRoZSBt
X2xhc3REZWNvZGVkQWNjZXNzVGltZSBpcyBzdGlsbCB6ZXJvIG9yIHNtYWxsZXIgdGhhbgorICAg
ICAgICAvLyB0aGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUgb2YgdGhlIGN1cnJlbnQgbGlzdCBo
ZWFkLiBUaGlzIGlzIGEKKyAgICAgICAgLy8gdmlvbGF0aW9uIG9mIHRoZSBpbnZhcmlhbnQgdGhh
dCB0aGUgbGlzdCBpcyB0byBiZSBrZXB0IHNvcnRlZAorICAgICAgICAvLyBieSBhY2Nlc3MgdGlt
ZS4gVGhlIHdlYWtlbmluZyBvZiB0aGUgaW52YXJpYW50IGRvZXMgbm90IHBvc2UKKyAgICAgICAg
Ly8gYSBwcm9ibGVtLiBGb3IgbW9yZSBkZXRhaWxzIHBsZWFzZSBzZWU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDIwOQorICAgICAgICBpZiAobV9kZWNvZGVkU2l6
ZSAmJiAhbV9pbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCAmJiBoYXNDbGllbnRzKCkpCisgICAg
ICAgICAgICBjYWNoZSgpLT5pbnNlcnRJbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCh0aGlzKTsK
KyAgICAgICAgZWxzZSBpZiAoIW1fZGVjb2RlZFNpemUgJiYgbV9pbkxpdmVEZWNvZGVkUmVzb3Vy
Y2VzTGlzdCkKKyAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZUZyb21MaXZlRGVjb2RlZFJlc291
cmNlc0xpc3QodGhpcyk7CisKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBjYWNoZSdzIHNpemUgdG90
YWxzLgorICAgICAgICBjYWNoZSgpLT5hZGp1c3RTaXplKGhhc0NsaWVudHMoKSwgZGVsdGEpOwor
ICAgIH0KK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0RW5jb2RlZFNpemUodW5zaWduZWQg
c2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA9PSBtX2VuY29kZWRTaXplKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBUaGUgc2l6ZSBjYW5ub3QgZXZlciBzaHJpbmsgKHVubGVzcyBpdCBpcyBiZWlu
ZyBudWxsZWQgb3V0IGJlY2F1c2Ugb2YgYW4gZXJyb3IpLiAgSWYgaXQgZXZlciBkb2VzLCBhc3Nl
cnQuCisgICAgQVNTRVJUKHNpemUgPT0gMCB8fCBzaXplID49IG1fZW5jb2RlZFNpemUpOworICAg
IAorICAgIGludCBkZWx0YSA9IHNpemUgLSBtX2VuY29kZWRTaXplOworCisgICAgLy8gVGhlIG9i
amVjdCBtdXN0IG5vdyBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBxdWV1ZSwgc2luY2UgaXRzIHNp
emUgaGFzIGJlZW4gY2hhbmdlZC4KKyAgICAvLyBXZSBoYXZlIHRvIHJlbW92ZSBleHBsaWNpdGx5
IGJlZm9yZSB1cGRhdGluZyBtX2VuY29kZWRTaXplLCBzbyB0aGF0IHdlIGZpbmQgdGhlIGNvcnJl
Y3QgcHJldmlvdXMKKyAgICAvLyBxdWV1ZS4KKyAgICBpZiAoaW5DYWNoZSgpKQorICAgICAgICBj
YWNoZSgpLT5yZW1vdmVGcm9tTFJVTGlzdCh0aGlzKTsKKyAgICAKKyAgICBtX2VuY29kZWRTaXpl
ID0gc2l6ZTsKKyAgIAorICAgIGlmIChpbkNhY2hlKCkpIHsgCisgICAgICAgIC8vIE5vdyBpbnNl
cnQgaW50byB0aGUgbmV3IExSVSBsaXN0LgorICAgICAgICBjYWNoZSgpLT5pbnNlcnRJbkxSVUxp
c3QodGhpcyk7CisgICAgICAgIAorICAgICAgICAvLyBVcGRhdGUgdGhlIGNhY2hlJ3Mgc2l6ZSB0
b3RhbHMuCisgICAgICAgIGNhY2hlKCktPmFkanVzdFNpemUoaGFzQ2xpZW50cygpLCBkZWx0YSk7
CisgICAgfQorfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpkaWRBY2Nlc3NEZWNvZGVkRGF0YShk
b3VibGUgdGltZVN0YW1wKQoreworICAgIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lID0gdGltZVN0
YW1wOworICAgIAorICAgIGlmIChpbkNhY2hlKCkpIHsKKyAgICAgICAgaWYgKG1faW5MaXZlRGVj
b2RlZFJlc291cmNlc0xpc3QpIHsKKyAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZUZyb21MaXZl
RGVjb2RlZFJlc291cmNlc0xpc3QodGhpcyk7CisgICAgICAgICAgICBjYWNoZSgpLT5pbnNlcnRJ
bkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBjYWNo
ZSgpLT5wcnVuZSgpOworICAgIH0KK30KKyAgICAKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJl
c291cmNlVG9SZXZhbGlkYXRlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkgCit7IAorICAgIEFT
U0VSVChyZXNvdXJjZSk7CisgICAgQVNTRVJUKCFtX3Jlc291cmNlVG9SZXZhbGlkYXRlKTsKKyAg
ICBBU1NFUlQocmVzb3VyY2UgIT0gdGhpcyk7CisgICAgQVNTRVJUKG1faGFuZGxlc1RvUmV2YWxp
ZGF0ZS5pc0VtcHR5KCkpOworICAgIEFTU0VSVChyZXNvdXJjZS0+dHlwZSgpID09IHR5cGUoKSk7
CisKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2UgJXAgc2V0UmVzb3Vy
Y2VUb1JldmFsaWRhdGUgJXAiLCB0aGlzLCByZXNvdXJjZSk7CisKKyAgICAvLyBUaGUgZm9sbG93
aW5nIGFzc2VydCBzaG91bGQgYmUgaW52ZXN0aWdhdGVkIHdoZW5ldmVyIGl0IG9jY3Vycy4gQWx0
aG91Z2ggaXQgc2hvdWxkIG5ldmVyIGZpcmUsIGl0IGN1cnJlbnRseSBkb2VzIGluIHJhcmUgY2ly
Y3Vtc3RhbmNlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Mjg2MDQuCisgICAgLy8gU28gdGhlIGNvZGUgbmVlZHMgdG8gYmUgcm9idXN0IHRvIHRoaXMg
YXNzZXJ0IGZhaWxpbmcgdGh1cyB0aGUgImlmIChtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5tX3By
b3h5UmVzb3VyY2UgPT0gdGhpcykiIGluIENhY2hlZFJlc291cmNlOjpjbGVhclJlc291cmNlVG9S
ZXZhbGlkYXRlLgorICAgIEFTU0VSVCghcmVzb3VyY2UtPm1fcHJveHlSZXNvdXJjZSk7CisKKyAg
ICByZXNvdXJjZS0+bV9wcm94eVJlc291cmNlID0gdGhpczsKKyAgICBtX3Jlc291cmNlVG9SZXZh
bGlkYXRlID0gcmVzb3VyY2U7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmNsZWFyUmVzb3Vy
Y2VUb1JldmFsaWRhdGUoKSAKK3sgCisgICAgQVNTRVJUKG1fcmVzb3VyY2VUb1JldmFsaWRhdGUp
OworICAgIC8vIEEgcmVzb3VyY2UgbWF5IHN0YXJ0IHJldmFsaWRhdGlvbiBiZWZvcmUgdGhpcyBt
ZXRob2QgaGFzIGJlZW4gY2FsbGVkLCBzbyBjaGVjayB0aGF0IHRoaXMgcmVzb3VyY2UgaXMgc3Rp
bGwgdGhlIHByb3h5IHJlc291cmNlIGJlZm9yZSBjbGVhcmluZyBpdCBvdXQuCisgICAgaWYgKG1f
cmVzb3VyY2VUb1JldmFsaWRhdGUtPm1fcHJveHlSZXNvdXJjZSA9PSB0aGlzKSB7CisgICAgICAg
IG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPm1fcHJveHlSZXNvdXJjZSA9IDA7CisgICAgICAgIG1f
cmVzb3VyY2VUb1JldmFsaWRhdGUtPmRlbGV0ZUlmUG9zc2libGUoKTsKKyAgICB9CisgICAgbV9o
YW5kbGVzVG9SZXZhbGlkYXRlLmNsZWFyKCk7CisgICAgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSA9
IDA7CisgICAgZGVsZXRlSWZQb3NzaWJsZSgpOworfQorICAgIAordm9pZCBDYWNoZWRSZXNvdXJj
ZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpCit7CisgICAgQVNTRVJUKG1f
cmVzb3VyY2VUb1JldmFsaWRhdGUpOworICAgIEFTU0VSVChtX3Jlc291cmNlVG9SZXZhbGlkYXRl
LT5pbkNhY2hlKCkpOworICAgIEFTU0VSVCghaW5DYWNoZSgpKTsKKworICAgIExPRyhSZXNvdXJj
ZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZSAlcCBzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJl
c291cmNlICVwIiwgdGhpcywgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSk7CisKKyAgICBIYXNoU2V0
PENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSo+OjppdGVyYXRvciBlbmQgPSBtX2hhbmRsZXNUb1Jl
dmFsaWRhdGUuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PENhY2hlZFJlc291cmNlSGFuZGxlQmFz
ZSo+OjppdGVyYXRvciBpdCA9IG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKiBoYW5kbGUgPSAq
aXQ7CisgICAgICAgIGhhbmRsZS0+bV9yZXNvdXJjZSA9IG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7
CisgICAgICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPnJlZ2lzdGVySGFuZGxlKGhhbmRsZSk7
CisgICAgICAgIC0tbV9oYW5kbGVDb3VudDsKKyAgICB9CisgICAgQVNTRVJUKCFtX2hhbmRsZUNv
dW50KTsKKyAgICBtX2hhbmRsZXNUb1JldmFsaWRhdGUuY2xlYXIoKTsKKworICAgIFZlY3RvcjxD
YWNoZWRSZXNvdXJjZUNsaWVudCo+IGNsaWVudHNUb01vdmU7CisgICAgSGFzaENvdW50ZWRTZXQ8
Q2FjaGVkUmVzb3VyY2VDbGllbnQqPjo6aXRlcmF0b3IgZW5kMiA9IG1fY2xpZW50cy5lbmQoKTsK
KyAgICBmb3IgKEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj46Oml0ZXJhdG9y
IGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDI7ICsraXQpIHsKKyAgICAgICAgQ2Fj
aGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IGl0LT5maXJzdDsKKyAgICAgICAgdW5zaWduZWQg
Y291bnQgPSBpdC0+c2Vjb25kOworICAgICAgICB3aGlsZSAoY291bnQpIHsKKyAgICAgICAgICAg
IGNsaWVudHNUb01vdmUuYXBwZW5kKGNsaWVudCk7CisgICAgICAgICAgICAtLWNvdW50OworICAg
ICAgICB9CisgICAgfQorICAgIC8vIEVxdWl2YWxlbnQgb2YgY2FsbGluZyByZW1vdmVDbGllbnQo
KSBmb3IgYWxsIGNsaWVudHMKKyAgICBtX2NsaWVudHMuY2xlYXIoKTsKKworICAgIHVuc2lnbmVk
IG1vdmVDb3VudCA9IGNsaWVudHNUb01vdmUuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgbiA9
IDA7IG4gPCBtb3ZlQ291bnQ7ICsrbikKKyAgICAgICAgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+
YWRkQ2xpZW50VG9TZXQoY2xpZW50c1RvTW92ZVtuXSk7CisgICAgZm9yICh1bnNpZ25lZCBuID0g
MDsgbiA8IG1vdmVDb3VudDsgKytuKSB7CisgICAgICAgIC8vIENhbGxpbmcgZGlkQWRkQ2xpZW50
IGZvciBhIGNsaWVudCBtYXkgZW5kIHVwIHJlbW92aW5nIGFub3RoZXIgY2xpZW50LiBJbiB0aGF0
IGNhc2UgaXQgd29uJ3QgYmUgaW4gdGhlIHNldCBhbnltb3JlLgorICAgICAgICBpZiAobV9yZXNv
dXJjZVRvUmV2YWxpZGF0ZS0+bV9jbGllbnRzLmNvbnRhaW5zKGNsaWVudHNUb01vdmVbbl0pKQor
ICAgICAgICAgICAgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+ZGlkQWRkQ2xpZW50KGNsaWVudHNU
b01vdmVbbl0pOworICAgIH0KK30KKyAgICAKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnVwZGF0ZVJl
c3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGlu
Z1Jlc3BvbnNlKQoreworICAgIG1fcmVzcG9uc2VUaW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOwor
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGNvbnRlbnRIZWFk
ZXJQcmVmaXgsICgiY29udGVudC0iKSk7CisgICAgLy8gUkZDMjYxNiAxMC4zLjUKKyAgICAvLyBV
cGRhdGUgY2FjaGVkIGhlYWRlcnMgZnJvbSB0aGUgMzA0IHJlc3BvbnNlCisgICAgY29uc3QgSFRU
UEhlYWRlck1hcCYgbmV3SGVhZGVycyA9IHZhbGlkYXRpbmdSZXNwb25zZS5odHRwSGVhZGVyRmll
bGRzKCk7CisgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3SGVhZGVy
cy5lbmQoKTsKKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3
SGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8gRG9uJ3QgYWxs
b3cgMzA0IHJlc3BvbnNlIHRvIHVwZGF0ZSBjb250ZW50IGhlYWRlcnMsIHRoZXNlIGNhbid0IGNo
YW5nZSBidXQgc29tZSBzZXJ2ZXJzIHNlbmQgd3JvbmcgdmFsdWVzLgorICAgICAgICBpZiAoaXQt
PmZpcnN0LnN0YXJ0c1dpdGgoY29udGVudEhlYWRlclByZWZpeCwgZmFsc2UpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIG1fcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5m
aXJzdCwgaXQtPnNlY29uZCk7CisgICAgfQorfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpyZWdp
c3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpCit7CisgICAgKyttX2hhbmRs
ZUNvdW50OworICAgIGlmIChtX3Jlc291cmNlVG9SZXZhbGlkYXRlKQorICAgICAgICBtX2hhbmRs
ZXNUb1JldmFsaWRhdGUuYWRkKGgpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjp1bnJlZ2lz
dGVySGFuZGxlKENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSogaCkKK3sKKyAgICBBU1NFUlQobV9o
YW5kbGVDb3VudCA+IDApOworICAgIC0tbV9oYW5kbGVDb3VudDsKKworICAgIGlmIChtX3Jlc291
cmNlVG9SZXZhbGlkYXRlKQorICAgICAgICAgbV9oYW5kbGVzVG9SZXZhbGlkYXRlLnJlbW92ZSho
KTsKKworICAgIGlmICghbV9oYW5kbGVDb3VudCkKKyAgICAgICAgZGVsZXRlSWZQb3NzaWJsZSgp
OworfQorCitib29sIENhY2hlZFJlc291cmNlOjpjYW5Vc2VDYWNoZVZhbGlkYXRvcigpIGNvbnN0
Cit7CisgICAgaWYgKG1fbG9hZGluZyB8fCBtX2Vycm9yT2NjdXJyZWQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9y
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IEF0b21pY1N0cmluZywgbGFzdE1vZGlmaWVkSGVhZGVyLCAoImxhc3QtbW9kaWZpZWQiKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGVUYWdIZWFkZXIs
ICgiZXRhZyIpKTsKKyAgICByZXR1cm4gIW1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKGxhc3RN
b2RpZmllZEhlYWRlcikuaXNFbXB0eSgpIHx8ICFtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChl
VGFnSGVhZGVyKS5pc0VtcHR5KCk7Cit9CisgICAgCitib29sIENhY2hlZFJlc291cmNlOjptdXN0
UmV2YWxpZGF0ZShDYWNoZVBvbGljeSBjYWNoZVBvbGljeSkgY29uc3QKK3sKKyAgICBpZiAobV9l
cnJvck9jY3VycmVkKSB7CisgICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNv
dXJjZSAlcCBtdXN0UmV2YWxpZGF0ZSBiZWNhdXNlIG9mIG1fZXJyb3JPY2N1cnJlZFxuIiwgdGhp
cyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChtX2xvYWRpbmcpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9yZXNwb25zZS5jYWNoZUNvbnRy
b2xDb250YWluc05vQ2FjaGUoKSB8fCBtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9T
dG9yZSgpKSB7CisgICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZSAl
cCBtdXN0UmV2YWxpZGF0ZSBiZWNhdXNlIG9mIG1fcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFp
bnNOb0NhY2hlKCkgfHwgbV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKVxu
IiwgdGhpcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChjYWNoZVBv
bGljeSA9PSBDYWNoZVBvbGljeUNhY2hlKSB7CisgICAgICAgIGlmIChtX3Jlc3BvbnNlLmNhY2hl
Q29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRhdGUoKSAmJiBpc0V4cGlyZWQoKSkgeworICAgICAg
ICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlICVwIG11c3RSZXZhbGlk
YXRlIGJlY2F1c2Ugb2YgY2FjaGVQb2xpY3kgPT0gQ2FjaGVQb2xpY3lDYWNoZSBhbmQgbV9yZXNw
b25zZS5jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlKCkgJiYgaXNFeHBpcmVkKClc
biIsIHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChpc0V4cGlyZWQoKSkgeworICAgICAgICBM
T0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2UgJXAgbXVzdFJldmFsaWRhdGUgYmVj
YXVzZSBvZiBpc0V4cGlyZWQoKVxuIiwgdGhpcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZTo6aXNTYWZl
VG9NYWtlUHVyZ2VhYmxlKCkgY29uc3QKK3sgCisgICAgcmV0dXJuICFoYXNDbGllbnRzKCkgJiYg
IW1fcHJveHlSZXNvdXJjZSAmJiAhbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsKK30KKworYm9vbCBD
YWNoZWRSZXNvdXJjZTo6bWFrZVB1cmdlYWJsZShib29sIHB1cmdlYWJsZSkgCit7IAorICAgIGlm
IChwdXJnZWFibGUpIHsKKyAgICAgICAgQVNTRVJUKGlzU2FmZVRvTWFrZVB1cmdlYWJsZSgpKTsK
KworICAgICAgICBpZiAobV9wdXJnZWFibGVEYXRhKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1f
ZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IW1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8v
IFNob3VsZCBub3QgbWFrZSBidWZmZXIgcHVyZ2VhYmxlIGlmIGl0IGhhcyByZWZzIG90aGVyIHRo
YW4gdGhpcyBzaW5jZSB3ZSBkb24ndCB3YW50IHR3byBjb3BpZXMuCisgICAgICAgIGlmICghbV9k
YXRhLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChtX2RhdGEtPmhhc1B1cmdlYWJsZUJ1ZmZlcigpKSB7CisgICAgICAgICAgICBt
X3B1cmdlYWJsZURhdGEgPSBtX2RhdGEtPnJlbGVhc2VQdXJnZWFibGVCdWZmZXIoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcHVyZ2VhYmxlRGF0YSA9IFB1cmdlYWJsZUJ1ZmZl
cjo6Y3JlYXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7CisgICAgICAgICAgICBp
ZiAoIW1fcHVyZ2VhYmxlRGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBtX3B1cmdlYWJsZURhdGEtPnNldFB1cmdlUHJpb3JpdHkocHVyZ2VQcmlvcml0eSgp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9wdXJnZWFibGVEYXRhLT5tYWtlUHVy
Z2VhYmxlKHRydWUpOworICAgICAgICBtX2RhdGEuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgaWYgKCFtX3B1cmdlYWJsZURhdGEpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIEFTU0VSVCghbV9kYXRhKTsKKyAgICBBU1NFUlQoIWhhc0NsaWVudHMoKSk7CisK
KyAgICBpZiAoIW1fcHVyZ2VhYmxlRGF0YS0+bWFrZVB1cmdlYWJsZShmYWxzZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsgCisKKyAgICBtX2RhdGEgPSBTaGFyZWRCdWZmZXI6OmFkb3B0UHVyZ2Vh
YmxlQnVmZmVyKG1fcHVyZ2VhYmxlRGF0YS5yZWxlYXNlKCkpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIENhY2hlZFJlc291cmNlOjppc1B1cmdlYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHVyZ2VhYmxlRGF0YSAmJiBtX3B1cmdlYWJsZURhdGEtPmlzUHVyZ2VhYmxlKCk7Cit9
CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6Ondhc1B1cmdlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcHVyZ2VhYmxlRGF0YSAmJiBtX3B1cmdlYWJsZURhdGEtPndhc1B1cmdlZCgpOworfQorCit1
bnNpZ25lZCBDYWNoZWRSZXNvdXJjZTo6b3ZlcmhlYWRTaXplKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gc2l6ZW9mKENhY2hlZFJlc291cmNlKSArIG1fcmVzcG9uc2UubWVtb3J5VXNhZ2UoKSArIDU3
NjsKKyAgICAvKgorICAgICAgICA1NzYgPSAxOTIgKyAgICAgICAgICAgICAgICAgICAvLyBhdmVy
YWdlIHNpemUgb2YgbV91cmwKKyAgICAgICAgICAgICAgMzg0OyAgICAgICAgICAgICAgICAgICAg
Ly8gYXZlcmFnZSBzaXplIG9mIG1fY2xpZW50cyBoYXNoIG1hcAorICAgICovCit9CisKK30KSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24gNzE0OTIpCShm
cm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmg6NzE0OTIpCisrKyBXZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjg5
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQu
bXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2Rl
Lm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0Bn
bWFpbC5jb20pCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENhY2hlZFJlc291cmNlX2gK
KyNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VfaAorCisjaW5jbHVkZSAiQ2FjaGVQb2xpY3kuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJQdXJnZVByaW9yaXR5LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx0aW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGU7Citj
bGFzcyBDYWNoZWRNZXRhZGF0YTsKK2NsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50OworY2xhc3Mg
Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOworY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7Citj
bGFzcyBGcmFtZTsKK2NsYXNzIEluc3BlY3RvclJlc291cmNlOworY2xhc3MgUHVyZ2VhYmxlQnVm
ZmVyOworY2xhc3MgUmVxdWVzdDsKKworLy8gQSByZXNvdXJjZSB0aGF0IGlzIGhlbGQgaW4gdGhl
IGNhY2hlLiBDbGFzc2VzIHdobyB3YW50IHRvIHVzZSB0aGlzIG9iamVjdCBzaG91bGQgZGVyaXZl
CisvLyBmcm9tIENhY2hlZFJlc291cmNlQ2xpZW50LCB0byBnZXQgdGhlIGZ1bmN0aW9uIGNhbGxz
IGluIGNhc2UgdGhlIHJlcXVlc3RlZCBkYXRhIGhhcyBhcnJpdmVkLgorLy8gVGhpcyBjbGFzcyBh
bHNvIGRvZXMgdGhlIGFjdHVhbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGxvYWRlciB0byBvYnRh
aW4gdGhlIHJlc291cmNlIGZyb20gdGhlIG5ldHdvcmsuCitjbGFzcyBDYWNoZWRSZXNvdXJjZSA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlOworICAgIGZyaWVu
ZCBjbGFzcyBJbnNwZWN0b3JSZXNvdXJjZTsKKyAgICAKK3B1YmxpYzoKKyAgICBlbnVtIFR5cGUg
eworICAgICAgICBJbWFnZVJlc291cmNlLAorICAgICAgICBDU1NTdHlsZVNoZWV0LAorICAgICAg
ICBTY3JpcHQsCisgICAgICAgIEZvbnRSZXNvdXJjZQorI2lmIEVOQUJMRShYU0xUKQorICAgICAg
ICAsIFhTTFN0eWxlU2hlZXQKKyNlbmRpZgorI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQorICAg
ICAgICAsIExpbmtQcmVmZXRjaAorI2VuZGlmCisgICAgfTsKKworICAgIGVudW0gU3RhdHVzIHsK
KyAgICAgICAgVW5rbm93biwgICAgICAvLyBsZXQgY2FjaGUgZGVjaWRlIHdoYXQgdG8gZG8gd2l0
aCBpdAorICAgICAgICBQZW5kaW5nLCAgICAgIC8vIG9ubHkgcGFydGlhbGx5IGxvYWRlZAorICAg
ICAgICBDYWNoZWQgICAgICAgIC8vIHJlZ3VsYXIgY2FzZQorICAgIH07CisKKyAgICBDYWNoZWRS
ZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgVHlwZSk7CisgICAgdmlydHVhbCB+Q2FjaGVkUmVz
b3VyY2UoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpICB7IGxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGZh
bHNlLCBEb1NlY3VyaXR5Q2hlY2ssIHRydWUpOyB9CisgICAgdm9pZCBsb2FkKENhY2hlZFJlc291
cmNlTG9hZGVyKiwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSwgYm9vbCBz
ZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmNvZGlu
Zyhjb25zdCBTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0
IHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgdmlydHVhbCB2b2lkIGRhdGEoUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZXJyb3IoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaHR0cFN0YXR1c0NvZGVFcnJvcigpIHsg
ZXJyb3IoKTsgfSAvLyBJbWFnZXMga2VlcCBsb2FkaW5nIGluIHNwaXRlIG9mIEhUVFAgZXJyb3Jz
IChmb3IgbGVnYWN5IGNvbXBhdCB3aXRoIDxpbWc+LCBldGMuKS4KKworICAgIGNvbnN0IFN0cmlu
ZyAmdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9CisKKyAgICB2b2lkIGFkZENsaWVu
dChDYWNoZWRSZXNvdXJjZUNsaWVudCopOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KENhY2hlZFJl
c291cmNlQ2xpZW50Kik7CisgICAgYm9vbCBoYXNDbGllbnRzKCkgY29uc3QgeyByZXR1cm4gIW1f
Y2xpZW50cy5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIGRlbGV0ZUlmUG9zc2libGUoKTsKKworICAg
IGVudW0gUHJlbG9hZFJlc3VsdCB7CisgICAgICAgIFByZWxvYWROb3RSZWZlcmVuY2VkLAorICAg
ICAgICBQcmVsb2FkUmVmZXJlbmNlZCwKKyAgICAgICAgUHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxv
YWRpbmcsCisgICAgICAgIFByZWxvYWRSZWZlcmVuY2VkV2hpbGVDb21wbGV0ZQorICAgIH07Cisg
ICAgUHJlbG9hZFJlc3VsdCBwcmVsb2FkUmVzdWx0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8UHJlbG9hZFJlc3VsdD4obV9wcmVsb2FkUmVzdWx0KTsgfQorICAgIHZvaWQgc2V0UmVxdWVz
dGVkRnJvbU5ldHdvcmtpbmdMYXllcigpIHsgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVy
ID0gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJj
ZUNsaWVudCopOworICAgIHZpcnR1YWwgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIHsgfQorCisg
ICAgdW5zaWduZWQgY291bnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudHMuc2l6ZSgpOyB9CisK
KyAgICBTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U3RhdHVzPiht
X3N0YXR1cyk7IH0KKyAgICB2b2lkIHNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSB7IG1fc3RhdHVz
ID0gc3RhdHVzOyB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gZW5jb2Rl
ZFNpemUoKSArIGRlY29kZWRTaXplKCkgKyBvdmVyaGVhZFNpemUoKTsgfQorICAgIHVuc2lnbmVk
IGVuY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkU2l6ZTsgfQorICAgIHVuc2ln
bmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVkU2l6ZTsgfQorICAgIHVu
c2lnbmVkIG92ZXJoZWFkU2l6ZSgpIGNvbnN0OworICAgIAorICAgIGJvb2wgaXNMb2FkZWQoKSBj
b25zdCB7IHJldHVybiAhbV9sb2FkaW5nOyB9IC8vIEZJWE1FLiBNZXRob2QgbmFtZSBpcyBpbmFj
Y3VyYXRlLiBMb2FkaW5nIG1pZ2h0IG5vdCBoYXZlIHN0YXJ0ZWQgeWV0LgorCisgICAgYm9vbCBp
c0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2xvYWRpbmc7IH0KKyAgICB2b2lkIHNldExvYWRp
bmcoYm9vbCBiKSB7IG1fbG9hZGluZyA9IGI7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdl
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzUHJlZmV0Y2goKSBjb25zdAor
ICAgIHsKKyNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKKyAgICAgICAgcmV0dXJuIHR5cGUoKSA9
PSBMaW5rUHJlZmV0Y2g7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBhY2Nlc3NDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXNz
Q291bnQ7IH0KKyAgICB2b2lkIGluY3JlYXNlQWNjZXNzQ291bnQoKSB7IG1fYWNjZXNzQ291bnQr
KzsgfQorCisgICAgLy8gQ29tcHV0ZXMgdGhlIHN0YXR1cyBvZiBhbiBvYmplY3QgYWZ0ZXIgbG9h
ZGluZy4gIAorICAgIC8vIFVwZGF0ZXMgdGhlIGV4cGlyZSBkYXRlIG9uIHRoZSBjYWNoZSBlbnRy
eSBmaWxlCisgICAgdm9pZCBmaW5pc2goKTsKKworICAgIC8vIENhbGxlZCBieSB0aGUgY2FjaGUg
aWYgdGhlIG9iamVjdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNhY2hlCisgICAgLy8gd2hp
bGUgc3RpbGwgYmVpbmcgcmVmZXJlbmNlZC4gVGhpcyBtZWFucyB0aGUgb2JqZWN0IHNob3VsZCBk
ZWxldGUgaXRzZWxmCisgICAgLy8gaWYgdGhlIG51bWJlciBvZiBjbGllbnRzIG9ic2VydmluZyBp
dCBldmVyIGRyb3BzIHRvIDAuCisgICAgLy8gVGhlIHJlc291cmNlIGNhbiBiZSBicm91Z2h0IGJh
Y2sgdG8gY2FjaGUgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXZhbGlkYXRpb24uCisgICAgdm9pZCBzZXRJ
bkNhY2hlKGJvb2wgaW5DYWNoZSkgeyBtX2luQ2FjaGUgPSBpbkNhY2hlOyB9CisgICAgYm9vbCBp
bkNhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9pbkNhY2hlOyB9CisgICAgCisgICAgdm9pZCBzZXRJ
bkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChib29sIGIpIHsgbV9pbkxpdmVEZWNvZGVkUmVzb3Vy
Y2VzTGlzdCA9IGI7IH0KKyAgICBib29sIGluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KCkgeyBy
ZXR1cm4gbV9pbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdDsgfQorICAgIAorICAgIHZvaWQgc2V0
UmVxdWVzdChSZXF1ZXN0Kik7CisKKyAgICBTaGFyZWRCdWZmZXIqIGRhdGEoKSBjb25zdCB7IEFT
U0VSVCghbV9wdXJnZWFibGVEYXRhKTsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQorCisgICAgdm9p
ZCBzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CisKKyAg
ICAvLyBTZXRzIHRoZSBzZXJpYWxpemVkIG1ldGFkYXRhIHJldHJpZXZlZCBmcm9tIHRoZSBwbGF0
Zm9ybSdzIGNhY2hlLgorICAgIHZvaWQgc2V0U2VyaWFsaXplZENhY2hlZE1ldGFkYXRhKGNvbnN0
IGNoYXIqLCBzaXplX3QpOworCisgICAgLy8gQ2FjaGVzIHRoZSBnaXZlbiBtZXRhZGF0YSBpbiBh
c3NvY2lhdGlvbiB3aXRoIHRoaXMgcmVzb3VyY2UgYW5kIHN1Z2dlc3RzCisgICAgLy8gdGhhdCB0
aGUgcGxhdGZvcm0gcGVyc2lzdCBpdC4gVGhlIGRhdGFUeXBlSUQgaXMgYSBwc2V1ZG8tcmFuZG9t
bHkgY2hvc2VuCisgICAgLy8gaWRlbnRpZmllciB0aGF0IGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2gg
ZGF0YSBnZW5lcmF0ZWQgYnkgdGhlIGNhbGxlci4KKyAgICB2b2lkIHNldENhY2hlZE1ldGFkYXRh
KHVuc2lnbmVkIGRhdGFUeXBlSUQsIGNvbnN0IGNoYXIqLCBzaXplX3QpOworCisgICAgLy8gUmV0
dXJucyBjYWNoZWQgbWV0YWRhdGEgb2YgdGhlIGdpdmVuIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRo
aXMgcmVzb3VyY2UuCisgICAgQ2FjaGVkTWV0YWRhdGEqIGNhY2hlZE1ldGFkYXRhKHVuc2lnbmVk
IGRhdGFUeXBlSUQpIGNvbnN0OworCisgICAgYm9vbCBjYW5EZWxldGUoKSBjb25zdCB7IHJldHVy
biAhaGFzQ2xpZW50cygpICYmICFtX3JlcXVlc3QgJiYgIW1fcHJlbG9hZENvdW50ICYmICFtX2hh
bmRsZUNvdW50ICYmICFtX3Jlc291cmNlVG9SZXZhbGlkYXRlICYmICFtX3Byb3h5UmVzb3VyY2U7
IH0KKworICAgIGJvb2wgaXNFeHBpcmVkKCkgY29uc3Q7CisKKyAgICAvLyBMaXN0IG9mIGFjY2Vw
dGFibGUgTUlNRSB0eXBlcyBzZXBhcmF0ZWQgYnkgIiwiLgorICAgIC8vIEEgTUlNRSB0eXBlIG1h
eSBjb250YWluIGEgd2lsZGNhcmQsIGUuZy4gInRleHQvKiIuCisgICAgU3RyaW5nIGFjY2VwdCgp
IGNvbnN0IHsgcmV0dXJuIG1fYWNjZXB0OyB9CisgICAgdm9pZCBzZXRBY2NlcHQoY29uc3QgU3Ry
aW5nJiBhY2NlcHQpIHsgbV9hY2NlcHQgPSBhY2NlcHQ7IH0KKworICAgIGJvb2wgZXJyb3JPY2N1
cnJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JPY2N1cnJlZDsgfQorICAgIHZvaWQgc2V0RXJy
b3JPY2N1cnJlZChib29sIGIpIHsgbV9lcnJvck9jY3VycmVkID0gYjsgfQorCisgICAgYm9vbCBz
ZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzOyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0
YSgpIHsgfQorCisgICAgdm9pZCBzZXRDYWNoZWRSZXNvdXJjZUxvYWRlcihDYWNoZWRSZXNvdXJj
ZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpIHsgbV9jYWNoZWRSZXNvdXJjZUxvYWRlciA9
IGNhY2hlZFJlc291cmNlTG9hZGVyOyB9CisgICAgCisgICAgYm9vbCBpc1ByZWxvYWRlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJlbG9hZENvdW50OyB9CisgICAgdm9pZCBpbmNyZWFzZVByZWxvYWRD
b3VudCgpIHsgKyttX3ByZWxvYWRDb3VudDsgfQorICAgIHZvaWQgZGVjcmVhc2VQcmVsb2FkQ291
bnQoKSB7IEFTU0VSVChtX3ByZWxvYWRDb3VudCk7IC0tbV9wcmVsb2FkQ291bnQ7IH0KKyAgICAK
KyAgICB2b2lkIHJlZ2lzdGVySGFuZGxlKENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSogaCk7Cisg
ICAgdm9pZCB1bnJlZ2lzdGVySGFuZGxlKENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSogaCk7Cisg
ICAgCisgICAgYm9vbCBjYW5Vc2VDYWNoZVZhbGlkYXRvcigpIGNvbnN0OworICAgIGJvb2wgbXVz
dFJldmFsaWRhdGUoQ2FjaGVQb2xpY3kpIGNvbnN0OworICAgIGJvb2wgaXNDYWNoZVZhbGlkYXRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7IH0KKyAgICBDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2VUb1JldmFsaWRhdGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNl
VG9SZXZhbGlkYXRlOyB9CisgICAgCisgICAgYm9vbCBpc1B1cmdlYWJsZSgpIGNvbnN0OworICAg
IGJvb2wgd2FzUHVyZ2VkKCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBpcyB1c2VkIGJ5IHRo
ZSBhcmNoaXZlIG1hY2hpbmVyeSB0byBnZXQgYXQgYSBwdXJnZWQgcmVzb3VyY2Ugd2l0aG91dAor
ICAgIC8vIHRyaWdnZXJpbmcgYSBsb2FkLiBXZSBzaG91bGQgbWFrZSBpdCBwcm90ZWN0ZWQgYWdh
aW4gaWYgd2UgY2FuIGZpbmQgYQorICAgIC8vIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoZSBhcmNo
aXZlIGNhc2UuCisgICAgYm9vbCBtYWtlUHVyZ2VhYmxlKGJvb2wgcHVyZ2VhYmxlKTsKKworcHJv
dGVjdGVkOgorICAgIHZvaWQgc2V0RW5jb2RlZFNpemUodW5zaWduZWQpOworICAgIHZvaWQgc2V0
RGVjb2RlZFNpemUodW5zaWduZWQpOworICAgIHZvaWQgZGlkQWNjZXNzRGVjb2RlZERhdGEoZG91
YmxlIHRpbWVTdGFtcCk7CisKKyAgICBib29sIGlzU2FmZVRvTWFrZVB1cmdlYWJsZSgpIGNvbnN0
OworICAgIAorICAgIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj4gbV9jbGll
bnRzOworCisgICAgU3RyaW5nIG1fdXJsOworICAgIFN0cmluZyBtX2FjY2VwdDsKKyAgICBSZXF1
ZXN0KiBtX3JlcXVlc3Q7CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CisgICAg
ZG91YmxlIG1fcmVzcG9uc2VUaW1lc3RhbXA7CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBt
X2RhdGE7CisgICAgT3duUHRyPFB1cmdlYWJsZUJ1ZmZlcj4gbV9wdXJnZWFibGVEYXRhOworCitw
cml2YXRlOgorICAgIHZvaWQgYWRkQ2xpZW50VG9TZXQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvLyBUaGVzZSBh
cmUgY2FsbGVkIGJ5IHRoZSBmcmllbmRseSBDYWNoZSBvbmx5CisgICAgdm9pZCBzZXRSZXNvdXJj
ZVRvUmV2YWxpZGF0ZShDYWNoZWRSZXNvdXJjZSopOworICAgIHZvaWQgc3dpdGNoQ2xpZW50c1Rv
UmV2YWxpZGF0ZWRSZXNvdXJjZSgpOworICAgIHZvaWQgY2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0
ZSgpOworICAgIHZvaWQgdXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbihjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpOworICAgIHZpcnR1YWwgUHVyZ2VQcmlv
cml0eSBwdXJnZVByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gUHVyZ2VEZWZhdWx0OyB9CisKKyAg
ICBkb3VibGUgY3VycmVudEFnZSgpIGNvbnN0OworICAgIGRvdWJsZSBmcmVzaG5lc3NMaWZldGlt
ZSgpIGNvbnN0OworCisgICAgUmVmUHRyPENhY2hlZE1ldGFkYXRhPiBtX2NhY2hlZE1ldGFkYXRh
OworCisgICAgZG91YmxlIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lOyAvLyBVc2VkIGFzIGEgInRo
cmFzaCBndWFyZCIgaW4gdGhlIGNhY2hlCisKKyAgICB1bnNpZ25lZCBtX2VuY29kZWRTaXplOwor
ICAgIHVuc2lnbmVkIG1fZGVjb2RlZFNpemU7CisgICAgdW5zaWduZWQgbV9hY2Nlc3NDb3VudDsK
KyAgICB1bnNpZ25lZCBtX2hhbmRsZUNvdW50OworICAgIHVuc2lnbmVkIG1fcHJlbG9hZENvdW50
OworCisgICAgdW5zaWduZWQgbV9wcmVsb2FkUmVzdWx0IDogMjsgLy8gUHJlbG9hZFJlc3VsdAor
CisgICAgYm9vbCBtX2luTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0IDogMTsKKyAgICBib29sIG1f
cmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllciA6IDE7CisgICAgYm9vbCBtX3NlbmRSZXNvdXJj
ZUxvYWRDYWxsYmFja3MgOiAxOworCisgICAgYm9vbCBtX2Vycm9yT2NjdXJyZWQgOiAxOworICAg
IGJvb2wgbV9pbkNhY2hlIDogMTsKKyAgICBib29sIG1fbG9hZGluZyA6IDE7CisKKyAgICB1bnNp
Z25lZCBtX3R5cGUgOiAzOyAvLyBUeXBlCisgICAgdW5zaWduZWQgbV9zdGF0dXMgOiAyOyAvLyBT
dGF0dXMKKworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIG1fZGVsZXRlZDsKKyAgICB1bnNpZ25l
ZCBtX2xydUluZGV4OworI2VuZGlmCisKKyAgICBDYWNoZWRSZXNvdXJjZSogbV9uZXh0SW5BbGxS
ZXNvdXJjZXNMaXN0OworICAgIENhY2hlZFJlc291cmNlKiBtX3ByZXZJbkFsbFJlc291cmNlc0xp
c3Q7CisgICAgCisgICAgQ2FjaGVkUmVzb3VyY2UqIG1fbmV4dEluTGl2ZVJlc291cmNlc0xpc3Q7
CisgICAgQ2FjaGVkUmVzb3VyY2UqIG1fcHJldkluTGl2ZVJlc291cmNlc0xpc3Q7CisKKyAgICBD
YWNoZWRSZXNvdXJjZUxvYWRlciogbV9jYWNoZWRSZXNvdXJjZUxvYWRlcjsgLy8gb25seSBub24t
MCBmb3IgcmVzb3VyY2VzIHRoYXQgYXJlIG5vdCBpbiB0aGUgY2FjaGUKKyAgICAKKyAgICAvLyBJ
ZiB0aGlzIGZpZWxkIGlzIG5vbi1udWxsIHdlIGFyZSB1c2luZyB0aGUgcmVzb3VyY2UgYXMgYSBw
cm94eSBmb3IgY2hlY2tpbmcgd2hldGhlciBhbiBleGlzdGluZyByZXNvdXJjZSBpcyBzdGlsbCB1
cCB0byBkYXRlCisgICAgLy8gdXNpbmcgSFRUUCBJZi1Nb2RpZmllZC1TaW5jZS9JZi1Ob25lLU1h
dGNoIGhlYWRlcnMuIElmIHRoZSByZXNwb25zZSBpcyAzMDQgYWxsIGNsaWVudHMgb2YgdGhpcyBy
ZXNvdXJjZSBhcmUgbW92ZWQKKyAgICAvLyB0byB0byBiZSBjbGllbnRzIG9mIG1fcmVzb3VyY2VU
b1JldmFsaWRhdGUgYW5kIHRoZSByZXNvdXJjZSBpcyBkZWxldGVkLiBJZiBub3QsIHRoZSBmaWVs
ZCBpcyB6ZXJvZWQgYW5kIHRoaXMKKyAgICAvLyByZXNvdXJjZXMgYmVjb21lcyBub3JtYWwgcmVz
b3VyY2UgbG9hZC4KKyAgICBDYWNoZWRSZXNvdXJjZSogbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsK
KworICAgIC8vIElmIHRoaXMgZmllbGQgaXMgbm9uLW51bGwsIHRoZSByZXNvdXJjZSBoYXMgYSBw
cm94eSBmb3IgY2hlY2tpbmcgd2hldGhlciBpdCBpcyBzdGlsbCB1cCB0byBkYXRlIChzZWUgbV9y
ZXNvdXJjZVRvUmV2YWxpZGF0ZSkuCisgICAgQ2FjaGVkUmVzb3VyY2UqIG1fcHJveHlSZXNvdXJj
ZTsKKworICAgIC8vIFRoZXNlIGhhbmRsZXMgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8gcG9p
bnQgdG8gdGhlIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUgaW4gY2FzZSB3ZSBnZXQgMzA0IHJlc3Bv
bnNlLgorICAgIEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKj4gbV9oYW5kbGVzVG9S
ZXZhbGlkYXRlOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaAkocmV2aXNpb24gNzE0OTIpCShmcm9tIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZFJlc291cmNlQ2xpZW50Lmg6NzE0OTIpCisrKyBXZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5t
cGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUu
b3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwg
ZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5k
IGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3Ig
dGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VDbGllbnRfaAorI2Rl
ZmluZSBDYWNoZWRSZXNvdXJjZUNsaWVudF9oCisKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFz
ZS5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
ICAgIGNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7CisgICAgY2xhc3MgQ2FjaGVkRm9udDsKKyAg
ICBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKKyAgICBjbGFzcyBDYWNoZWRJbWFnZTsKKyAgICBjbGFz
cyBJbWFnZTsKKyAgICBjbGFzcyBJbnRSZWN0OworICAgIGNsYXNzIEtVUkw7CisKKyAgICAvKioK
KyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKgorICAgICAqIGEgY2xpZW50IHdobyB3YW50cyB0byBs
b2FkIHN0eWxlc2hlZXRzLCBpbWFnZXMgb3Igc2NyaXB0cyBmcm9tIHRoZSB3ZWIgaGFzIHRvCisg
ICAgICogaW5oZXJpdCBmcm9tIHRoaXMgY2xhc3MgYW5kIG92ZXJsb2FkIG9uZSBvZiB0aGUgMyBm
dW5jdGlvbnMKKyAgICAgKgorICAgICAqLworICAgIGNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50
IDogcHVibGljIEZhc3RBbGxvY0Jhc2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0
dWFsIH5DYWNoZWRSZXNvdXJjZUNsaWVudCgpIHsgfQorCisgICAgICAgIC8vIENhbGxlZCB3aGVu
ZXZlciBhIGZyYW1lIG9mIGFuIGltYWdlIGNoYW5nZXMsIGVpdGhlciBiZWNhdXNlIHdlIGdvdCBt
b3JlIGRhdGEgZnJvbSB0aGUgbmV0d29yayBvcgorICAgICAgICAvLyBiZWNhdXNlIHdlIGFyZSBh
bmltYXRpbmcuIElmIG5vdCBudWxsLCB0aGUgSW50UmVjdCBpcyB0aGUgY2hhbmdlZCByZWN0IG9m
IHRoZSBpbWFnZS4KKyAgICAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChDYWNoZWRJbWFn
ZSosIGNvbnN0IEludFJlY3QqID0gMCkgeyB9OworICAgICAgICAKKyAgICAgICAgLy8gQ2FsbGVk
IHRvIGZpbmQgb3V0IGlmIHRoaXMgY2xpZW50IHdhbnRzIHRvIGFjdHVhbGx5IGRpc3BsYXkgdGhl
IGltYWdlLiAgVXNlZCB0byB0ZWxsIHdoZW4gd2UKKyAgICAgICAgLy8gY2FuIGhhbHQgYW5pbWF0
aW9uLiAgQ29udGVudCBub2RlcyB0aGF0IGhvbGQgaW1hZ2UgcmVmcyBmb3IgZXhhbXBsZSB3b3Vs
ZCBub3QgcmVuZGVyIHRoZSBpbWFnZSwKKyAgICAgICAgLy8gYnV0IFJlbmRlckltYWdlcyB3b3Vs
ZCAoYXNzdW1pbmcgdGhleSBoYXZlIHZpc2liaWxpdHk6IHZpc2libGUgYW5kIHRoZWlyIHJlbmRl
ciB0cmVlIGlzbid0IGhpZGRlbgorICAgICAgICAvLyBlLmcuLCBpbiB0aGUgYi9mIGNhY2hlIG9y
IGluIGEgYmFja2dyb3VuZCB0YWIpLgorICAgICAgICB2aXJ0dWFsIGJvb2wgd2lsbFJlbmRlcklt
YWdlKENhY2hlZEltYWdlKikgeyByZXR1cm4gZmFsc2U7IH0KKworICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0Q1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIC8qIGhyZWYgKi8sIGNvbnN0IEtVUkwm
IC8qIGJhc2VVUkwgKi8sIGNvbnN0IFN0cmluZyYgLyogY2hhcnNldCAqLywgY29uc3QgQ2FjaGVk
Q1NTU3R5bGVTaGVldCopIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0WFNMU3R5bGVTaGVl
dChjb25zdCBTdHJpbmcmIC8qIGhyZWYgKi8sIGNvbnN0IEtVUkwmIC8qIGJhc2VVUkwgKi8sIGNv
bnN0IFN0cmluZyYgLyogc2hlZXQgKi8pIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZm9udExv
YWRlZChDYWNoZWRGb250Kikge307CisgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hl
ZChDYWNoZWRSZXNvdXJjZSopIHsgfQorICAgIH07CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuY3Bw
CShyZXZpc2lvbiA3MTQ5MikJKGZyb20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VDbGll
bnRXYWxrZXIuY3BwOjcxNDkyKQorKysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRXYWxrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisg
ICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICAg
IENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCisgICAg
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5l
ZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAorICAgIHBhZ2Vz
IGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50
V2Fsa2VyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2FjaGVkUmVzb3VyY2VDbGllbnRX
YWxrZXI6OkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyKGNvbnN0IEhhc2hDb3VudGVkU2V0PENh
Y2hlZFJlc291cmNlQ2xpZW50Kj4mIHNldCkKKyAgICA6IG1fY2xpZW50U2V0KHNldCksIG1fY2xp
ZW50VmVjdG9yKHNldC5zaXplKCkpLCBtX2luZGV4KDApCit7CisgICAgdHlwZWRlZiBIYXNoQ291
bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsK
KyAgICBJdGVyYXRvciBlbmQgPSBzZXQuZW5kKCk7CisgICAgc2l6ZV90IGNsaWVudEluZGV4ID0g
MDsKKyAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBzZXQuYmVnaW4oKTsgY3VycmVudCAhPSBl
bmQ7ICsrY3VycmVudCkKKyAgICAgICAgbV9jbGllbnRWZWN0b3JbY2xpZW50SW5kZXgrK10gPSBj
dXJyZW50LT5maXJzdDsKK30KKworQ2FjaGVkUmVzb3VyY2VDbGllbnQqIENhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyOjpuZXh0KCkKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG1fY2xpZW50VmVjdG9y
LnNpemUoKTsKKyAgICB3aGlsZSAobV9pbmRleCA8IHNpemUpIHsKKyAgICAgICAgQ2FjaGVkUmVz
b3VyY2VDbGllbnQqIG5leHQgPSBtX2NsaWVudFZlY3RvclttX2luZGV4KytdOworICAgICAgICBp
ZiAobV9jbGllbnRTZXQuY29udGFpbnMobmV4dCkpCisgICAgICAgICAgICByZXR1cm4gbmV4dDsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCShyZXZpc2lvbiA3MTQ5MikJ
KGZyb20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaDo3MTQ5MikK
KysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgg
TGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEg
RGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgICBUaGlz
IGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFn
ZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAorICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFz
IGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgorKi8KKworI2lmbmRlZiBDYWNoZWRS
ZXNvdXJjZUNsaWVudFdhbGtlcl9oCisjZGVmaW5lIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2Vy
X2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VD
bGllbnQ7CisKKyAgICAvLyBDYWxsIHRoaXMgIndhbGtlciIgaW5zdGVhZCBvZiBpdGVyYXRvciBz
byBwZW9wbGUgd29uJ3QgZXhwZWN0IFF0IG9yIFNUTC1zdHlsZSBpdGVyYXRvciBpbnRlcmZhY2Uu
CisgICAgLy8gSnVzdCBrZWVwIGNhbGxpbmcgbmV4dCgpIG9uIHRoaXMuIEl0J3Mgc2FmZSBmcm9t
IGRlbGV0aW9ucyBvZiBpdGVtcy4KKyAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtl
ciB7CisgICAgcHVibGljOgorICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcihjb25z
dCBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+Jik7CisgICAgICAgIENhY2hl
ZFJlc291cmNlQ2xpZW50KiBuZXh0KCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgSGFz
aENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiYgbV9jbGllbnRTZXQ7CisgICAgICAg
IFZlY3RvcjxDYWNoZWRSZXNvdXJjZUNsaWVudCo+IG1fY2xpZW50VmVjdG9yOworICAgICAgICBz
aXplX3QgbV9pbmRleDsKKyAgICB9OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gNzE0OTIpCShm
cm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcDo3MTQ5MikKKysrIFdl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhh
bmRsZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VIYW5k
bGVCYXNlOjpzZXRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpIAoreworICAgIGlm
IChyZXNvdXJjZSA9PSBtX3Jlc291cmNlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fcmVz
b3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2UtPnVucmVnaXN0ZXJIYW5kbGUodGhpcyk7CisgICAg
bV9yZXNvdXJjZSA9IHJlc291cmNlOworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jl
c291cmNlLT5yZWdpc3RlckhhbmRsZSh0aGlzKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lvbiA3MTQ5MikJKGZyb20g
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaDo3MTQ5MikKKysrIFdlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBDYWNoZWRSZXNvdXJjZUhhbmRsZV9oCisjZGVmaW5lIENhY2hlZFJlc291cmNl
SGFuZGxlX2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgIGNsYXNzIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSB7CisgICAgcHVibGlj
OgorICAgICAgICB+Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKCkgeyBpZiAobV9yZXNvdXJjZSkg
bV9yZXNvdXJjZS0+dW5yZWdpc3RlckhhbmRsZSh0aGlzKTsgfQorICAgICAgICBDYWNoZWRSZXNv
dXJjZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZTsgfQorICAgICAgICAKKyAgICAg
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9yZXNvdXJjZTsgfQorICAgICAg
ICAKKyAgICAgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBj
b252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgICAg
ICAvLyBQYXJlbnRoZXNpcyBpcyBuZWVkZWQgZm9yIHdpbnNjdyBjb21waWxlciB0byByZXNvbHZl
IGNsYXNzIHF1YWxpZmllciBpbiB0aGlzIGNhc2UuCisgICAgICAgIHR5cGVkZWYgQ2FjaGVkUmVz
b3VyY2UqIChDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsK
KyAgICAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVzb3VyY2UgPyAmQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjptX3Jlc291cmNlIDogMDsgfQor
CisgICAgcHJvdGVjdGVkOgorICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UoKSA6IG1f
cmVzb3VyY2UoMCkge30KKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKENhY2hlZFJl
c291cmNlKiByZXMpIHsgbV9yZXNvdXJjZSA9IHJlczsgaWYgKG1fcmVzb3VyY2UpIG1fcmVzb3Vy
Y2UtPnJlZ2lzdGVySGFuZGxlKHRoaXMpOyB9CisgICAgICAgIENhY2hlZFJlc291cmNlSGFuZGxl
QmFzZShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UmIG8pIDogbV9yZXNvdXJjZShvLm1f
cmVzb3VyY2UpIHsgaWYgKG1fcmVzb3VyY2UpIG1fcmVzb3VyY2UtPnJlZ2lzdGVySGFuZGxlKHRo
aXMpOyB9CisKKyAgICAgICAgdm9pZCBzZXRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSopOworICAg
ICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UmIG9w
ZXJhdG9yPShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UmKSB7IHJldHVybiAqdGhpczsg
fSAKKyAgICAgICAgCisgICAgICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKKworICAg
ICAgICBDYWNoZWRSZXNvdXJjZSogbV9yZXNvdXJjZTsKKyAgICB9OworICAgICAgICAKKyAgICB0
ZW1wbGF0ZSA8Y2xhc3MgUj4gY2xhc3MgQ2FjaGVkUmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGVCYXNlIHsKKyAgICBwdWJsaWM6IAorICAgICAgICBDYWNoZWRSZXNv
dXJjZUhhbmRsZSgpIHsgfQorICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZShSKiByZXMpOwor
ICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxS
PiYgbykgOiBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UobykgeyB9CisKKyAgICAgICAgUiogZ2V0
KCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSKj4oQ2FjaGVkUmVzb3VyY2VIYW5k
bGVCYXNlOjpnZXQoKSk7IH0KKyAgICAgICAgUiogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
IGdldCgpOyB9CisgICAgICAgICAgICAgICAKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGUm
IG9wZXJhdG9yPShSKiByZXMpIHsgc2V0UmVzb3VyY2UocmVzKTsgcmV0dXJuICp0aGlzOyB9IAor
ICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZSYgb3BlcmF0b3I9KGNvbnN0IENhY2hlZFJlc291
cmNlSGFuZGxlJiBvKSB7IHNldFJlc291cmNlKG8uZ2V0KCkpOyByZXR1cm4gKnRoaXM7IH0KKyAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSYgbykg
Y29uc3QgeyByZXR1cm4gZ2V0KCkgPT0gby5nZXQoKTsgfQorICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlJiBvKSBjb25zdCB7IHJldHVybiBnZXQo
KSAhPSBvLmdldCgpOyB9CisgICAgfTsKKworICAgIC8vIERvbid0IGlubGluZSBmb3Igd2luc2N3
IGNvbXBpbGVyIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIGFnZ3Jlc3NpdmVseSByZXNvbHZpbmcK
KyAgICAvLyB0aGUgYmFzZSBjbGFzcyBvZiBSKiB3aGVuIENhY2hlZFJlc291cmNlSGFuZGxlcjxU
PihSKikgaXMgaW5saW5lZC4gIFRoZSBidWcgaXMKKyAgICAvLyByZXBvcnRlZCBhdDogaHR0cHM6
Ly94ZGFidWcwMDEuZXh0Lm5va2lhLmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9OTgxMi4K
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgUj4KKyNpZiAhQ09NUElMRVIoV0lOU0NXKQorICAgIGlubGlu
ZQorI2VuZGlmCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Uj46OkNhY2hlZFJlc291cmNlSGFu
ZGxlKFIqIHJlcykgOiBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UocmVzKSAKKyAgICB7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBSUj4gYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlPFI+JiBoLCBjb25zdCBSUiogcmVzKSAKKyAgICB7
IAorICAgICAgICByZXR1cm4gaC5nZXQoKSA9PSByZXM7IAorICAgIH0KKyAgICB0ZW1wbGF0ZSA8
Y2xhc3MgUiwgY2xhc3MgUlI+IGJvb2wgb3BlcmF0b3I9PShjb25zdCBSUiogcmVzLCBjb25zdCBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxSPiYgaCkgCisgICAgeyAKKyAgICAgICAgcmV0dXJuIGguZ2V0
KCkgPT0gcmVzOyAKKyAgICB9CisgICAgdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFJSPiBib29s
IG9wZXJhdG9yIT0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Uj4mIGgsIGNvbnN0IFJSKiBy
ZXMpIAorICAgIHsgCisgICAgICAgIHJldHVybiBoLmdldCgpICE9IHJlczsgCisgICAgfQorICAg
IHRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBSUj4gYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJSKiBy
ZXMsIGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlPFI+JiBoKSAKKyAgICB7IAorICAgICAgICBy
ZXR1cm4gaC5nZXQoKSAhPSByZXM7IAorICAgIH0KK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA3MTQ5
MikJKGZyb20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOjcxNDkyKQor
KysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDk4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJz
IEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8g
QmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0
IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKwor
ICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2Fk
aW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCisgICAgcGFnZXMgZnJvbSB0aGUgd2Vi
LiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCisqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKworI2luY2x1
ZGUgImxvYWRlci5oIgorI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5
bGVTaGVldC5oIgorI2luY2x1ZGUgIkNhY2hlZEZvbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFn
ZS5oIgorI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNhY2hlZFhTTFN0eWxl
U2hlZXQuaCIKKyNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudC5oIgorI2luY2x1ZGUgIlBpbmdMb2FkZXIuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
Q29uY2F0ZW5hdGUuaD4KKworI2RlZmluZSBQUkVMT0FEX0RFQlVHIDAKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Q2FjaGVkUmVzb3VyY2VMb2FkZXIoRG9j
dW1lbnQqIGRvYykKKyAgICA6IG1fY2FjaGUoY2FjaGUoKSkKKyAgICAsIG1fZG9jKGRvYykKKyAg
ICAsIG1fcmVxdWVzdENvdW50KDApCisgICAgLCBtX2F1dG9Mb2FkSW1hZ2VzKHRydWUpCisgICAg
LCBtX2xvYWRJblByb2dyZXNzKGZhbHNlKQorICAgICwgbV9hbGxvd1N0YWxlUmVzb3VyY2VzKGZh
bHNlKQoreworICAgIG1fY2FjaGUtPmFkZENhY2hlZFJlc291cmNlTG9hZGVyKHRoaXMpOworfQor
CitDYWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9hZGVyKCkKK3sKKyAgICBp
ZiAobV9yZXF1ZXN0Q291bnQpCisgICAgICAgIG1fY2FjaGUtPmxvYWRlcigpLT5jYW5jZWxSZXF1
ZXN0cyh0aGlzKTsKKworICAgIGNsZWFyUHJlbG9hZHMoKTsKKyAgICBEb2N1bWVudFJlc291cmNl
TWFwOjppdGVyYXRvciBlbmQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOworICAgIGZvciAo
RG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+c2V0Q2FjaGVkUmVz
b3VyY2VMb2FkZXIoMCk7CisgICAgbV9jYWNoZS0+cmVtb3ZlQ2FjaGVkUmVzb3VyY2VMb2FkZXIo
dGhpcyk7CisKKyAgICAvLyBNYWtlIHN1cmUgbm8gcmVxdWVzdHMgc3RpbGwgcG9pbnQgdG8gdGhp
cyBDYWNoZWRSZXNvdXJjZUxvYWRlcgorICAgIEFTU0VSVChtX3JlcXVlc3RDb3VudCA9PSAwKTsK
K30KKworRnJhbWUqIENhY2hlZFJlc291cmNlTG9hZGVyOjpmcmFtZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZG9jLT5mcmFtZSgpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpj
aGVja0ZvclJlbG9hZChjb25zdCBLVVJMJiBmdWxsVVJMKQoreworICAgIGlmIChtX2FsbG93U3Rh
bGVSZXNvdXJjZXMpCisgICAgICAgIHJldHVybjsgLy8gRG9uJ3QgcmVsb2FkIHJlc291cmNlcyB3
aGlsZSBwYXN0aW5nCisKKyAgICBpZiAoZnVsbFVSTC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAobV9yZWxvYWRlZFVSTHMuY29udGFpbnMoZnVsbFVSTC5zdHJpbmco
KSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBDYWNoZWRSZXNvdXJjZSogZXhpc3Rpbmcg
PSBjYWNoZSgpLT5yZXNvdXJjZUZvclVSTChmdWxsVVJMLnN0cmluZygpKTsKKyAgICBpZiAoIWV4
aXN0aW5nIHx8IGV4aXN0aW5nLT5pc1ByZWxvYWRlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzd2l0Y2ggKGNhY2hlUG9saWN5KCkpIHsKKyAgICBjYXNlIENhY2hlUG9saWN5VmVyaWZ5Ogor
ICAgICAgICBpZiAoIWV4aXN0aW5nLT5tdXN0UmV2YWxpZGF0ZShDYWNoZVBvbGljeVZlcmlmeSkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhY2hlKCktPnJldmFsaWRhdGVSZXNvdXJj
ZShleGlzdGluZywgdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FjaGVQb2xpY3lD
YWNoZToKKyAgICAgICAgaWYgKCFleGlzdGluZy0+bXVzdFJldmFsaWRhdGUoQ2FjaGVQb2xpY3lD
YWNoZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhY2hlKCktPnJldmFsaWRhdGVS
ZXNvdXJjZShleGlzdGluZywgdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FjaGVQ
b2xpY3lSZWxvYWQ6CisgICAgICAgIGNhY2hlKCktPnJlbW92ZShleGlzdGluZyk7ICAgICAgICAK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZVBvbGljeVJldmFsaWRhdGU6CisgICAgICAg
IGNhY2hlKCktPnJldmFsaWRhdGVSZXNvdXJjZShleGlzdGluZywgdGhpcyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ2FjaGVQb2xpY3lBbGxvd1N0YWxlOgorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9yZWxvYWRlZFVSTHMuYWRkKGZ1bGxVUkwuc3RyaW5nKCkpOworfQorCitD
YWNoZWRJbWFnZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RJbWFnZShjb25zdCBTdHJp
bmcmIHVybCkKK3sKKyAgICBpZiAoRnJhbWUqIGYgPSBmcmFtZSgpKSB7CisgICAgICAgIFNldHRp
bmdzKiBzZXR0aW5ncyA9IGYtPnNldHRpbmdzKCk7CisgICAgICAgIGlmICghZi0+bG9hZGVyKCkt
PmNsaWVudCgpLT5hbGxvd0ltYWdlcyghc2V0dGluZ3MgfHwgc2V0dGluZ3MtPmFyZUltYWdlc0Vu
YWJsZWQoKSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAoZi0+bG9hZGVy
KCktPnBhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZCgpKSB7CisgICAgICAgICAgICBL
VVJMIGNvbXBsZXRlVVJMID0gbV9kb2MtPmNvbXBsZXRlVVJMKHVybCk7CisgICAgICAgICAgICBp
ZiAoY29tcGxldGVVUkwuaXNWYWxpZCgpICYmIGNhblJlcXVlc3QoQ2FjaGVkUmVzb3VyY2U6Oklt
YWdlUmVzb3VyY2UsIGNvbXBsZXRlVVJMKSkKKyAgICAgICAgICAgICAgICBQaW5nTG9hZGVyOjps
b2FkSW1hZ2UoZiwgY29tcGxldGVVUkwpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0KKyAgICB9CisgICAgQ2FjaGVkSW1hZ2UqIHJlc291cmNlID0gc3RhdGljX2Nhc3Q8Q2FjaGVk
SW1hZ2UqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIHVy
bCwgU3RyaW5nKCkpKTsKKyAgICBpZiAoYXV0b0xvYWRJbWFnZXMoKSAmJiByZXNvdXJjZSAmJiBy
ZXNvdXJjZS0+c3RpbGxOZWVkc0xvYWQoKSkgeworICAgICAgICByZXNvdXJjZS0+c2V0TG9hZGlu
Zyh0cnVlKTsKKyAgICAgICAgY2FjaGUoKS0+bG9hZGVyKCktPmxvYWQodGhpcywgcmVzb3VyY2Us
IHRydWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzb3VyY2U7Cit9CisKK0NhY2hlZEZvbnQqIENh
Y2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0Rm9udChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkRm9udCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRS
ZXNvdXJjZTo6Rm9udFJlc291cmNlLCB1cmwsIFN0cmluZygpKSk7Cit9CisKK0NhY2hlZENTU1N0
eWxlU2hlZXQqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0Q1NTU3R5bGVTaGVldChjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDYWNoZWRDU1NTdHlsZVNoZWV0Kj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291
cmNlOjpDU1NTdHlsZVNoZWV0LCB1cmwsIGNoYXJzZXQpKTsKK30KKworQ2FjaGVkQ1NTU3R5bGVT
aGVldCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQoreworICAgIHJldHVybiBjYWNo
ZSgpLT5yZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQodGhpcywgdXJsLCBjaGFyc2V0KTsKK30KKwor
Q2FjaGVkU2NyaXB0KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFNjcmlwdChjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDYWNoZWRTY3JpcHQqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlNjcmlw
dCwgdXJsLCBjaGFyc2V0KSk7Cit9CisKKyNpZiBFTkFCTEUoWFNMVCkKK0NhY2hlZFhTTFN0eWxl
U2hlZXQqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0WFNMU3R5bGVTaGVldChjb25zdCBT
dHJpbmcmIHVybCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkWFNMU3R5bGVTaGVl
dCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldCwgdXJsLCBT
dHJpbmcoKSkpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKK0NhY2hl
ZFJlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdExpbmtQcmVmZXRjaChjb25z
dCBTdHJpbmcmIHVybCkKK3sKKyAgICBBU1NFUlQoZnJhbWUoKSk7CisgICAgcmV0dXJuIHJlcXVl
c3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoLCB1cmwsIFN0cmluZygpKTsK
K30KKyNlbmRpZgorCitib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjpjYW5SZXF1ZXN0KENhY2hl
ZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICAvLyBTb21lIHR5
cGVzIG9mIHJlc291cmNlcyBjYW4gYmUgbG9hZGVkIG9ubHkgZnJvbSB0aGUgc2FtZSBvcmlnaW4u
ICBPdGhlcgorICAgIC8vIHR5cGVzIG9mIHJlc291cmNlcywgbGlrZSBJbWFnZXMsIFNjcmlwdHMs
IGFuZCBDU1MsIGNhbiBiZSBsb2FkZWQgZnJvbQorICAgIC8vIGFueSBVUkwuCisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgorICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OlNjcmlwdDoKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6CisjaWYg
RU5BQkxFKExJTktfUFJFRkVUQ0gpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZl
dGNoOgorI2VuZGlmCisgICAgICAgIC8vIFRoZXNlIHR5cGVzIG9mIHJlc291cmNlcyBjYW4gYmUg
bG9hZGVkIGZyb20gYW55IG9yaWdpbi4KKyAgICAgICAgLy8gRklYTUU6IEFyZSB3ZSBzdXJlIGFi
b3V0IENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U/CisgICAgICAgIGJyZWFrOworI2lmIEVO
QUJMRShYU0xUKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisgICAg
ICAgIGlmICghbV9kb2MtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkgeworICAg
ICAgICAgICAgcHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKHVybCk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgLy8gR2l2ZW4gdGhhdCB0aGUgbG9hZCBpcyBhbGxvd2VkIGJ5IHRoZSBzYW1lLW9yaWdp
biBwb2xpY3ksIHdlIHNob3VsZAorICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhlIGxvYWQgcGFzc2Vz
IHRoZSBtaXhlZC1jb250ZW50IHBvbGljeS4KKyAgICAvLworICAgIC8vIE5vdGU6IEN1cnJlbnRs
eSwgd2UgYWx3YXlzIGFsbG93IG1peGVkIGNvbnRlbnQsIGJ1dCB3ZSBnZW5lcmF0ZSBhCisgICAg
Ly8gICAgICAgY2FsbGJhY2sgdG8gdGhlIEZyYW1lTG9hZGVyQ2xpZW50IGluIGNhc2UgdGhlIGVt
YmVkZGVyIHdhbnRzIHRvCisgICAgLy8gICAgICAgdXBkYXRlIGFueSBzZWN1cml0eSBpbmRpY2F0
b3JzLgorICAgIC8vIAorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OlNjcmlwdDoKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpY
U0xTdHlsZVNoZWV0OgorI2VuZGlmCisgICAgICAgIC8vIFRoZXNlIHJlc291cmNlIGNhbiBpbmpl
Y3Qgc2NyaXB0IGludG8gdGhlIGN1cnJlbnQgZG9jdW1lbnQuCisgICAgICAgIGlmIChGcmFtZSog
ZiA9IGZyYW1lKCkpCisgICAgICAgICAgICBmLT5sb2FkZXIoKS0+Y2hlY2tJZlJ1bkluc2VjdXJl
Q29udGVudChtX2RvYy0+c2VjdXJpdHlPcmlnaW4oKSwgdXJsKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpDU1NTdHlsZVNoZWV0OgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNv
dXJjZTogeworICAgICAgICAvLyBUaGVzZSByZXNvdXJjZXMgY2FuIGNvcnJ1cHQgb25seSB0aGUg
ZnJhbWUncyBwaXhlbHMuCisgICAgICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkpIHsKKyAgICAg
ICAgICAgIEZyYW1lKiB0b3AgPSBmLT50cmVlKCktPnRvcCgpOworICAgICAgICAgICAgdG9wLT5s
b2FkZXIoKS0+Y2hlY2tJZkRpc3BsYXlJbnNlY3VyZUNvbnRlbnQodG9wLT5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLCB1cmwpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0K
KyNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5r
UHJlZmV0Y2g6CisgICAgICAgIC8vIFByZWZldGNoIGNhbm5vdCBhZmZlY3QgdGhlIGN1cnJlbnQg
ZG9jdW1lbnQuCisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBGSVhN
RTogQ29uc2lkZXIgbGV0dGluZyB0aGUgZW1iZWRkZXIgYmxvY2sgbWl4ZWQgY29udGVudCBsb2Fk
cy4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ2FjaGVkUmVzb3VyY2UqIENhY2hlZFJlc291cmNl
TG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCBpc1ByZWxvYWQpCit7Cisg
ICAgS1VSTCBmdWxsVVJMID0gbV9kb2MtPmNvbXBsZXRlVVJMKHVybCk7CisKKyAgICBpZiAoIWZ1
bGxVUkwuaXNWYWxpZCgpIHx8ICFjYW5SZXF1ZXN0KHR5cGUsIGZ1bGxVUkwpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmIChjYWNoZSgpLT5kaXNhYmxlZCgpKSB7CisgICAgICAgIERvY3Vt
ZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5maW5kKGZ1
bGxVUkwuc3RyaW5nKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGl0ICE9IG1fZG9jdW1lbnRS
ZXNvdXJjZXMuZW5kKCkpIHsKKyAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldENhY2hlZFJlc291
cmNlTG9hZGVyKDApOworICAgICAgICAgICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1vdmUoaXQp
OworICAgICAgICB9CisgICAgfQorCisgICAgY2hlY2tGb3JSZWxvYWQoZnVsbFVSTCk7CisKKyAg
ICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBjYWNoZSgpLT5yZXF1ZXN0UmVzb3VyY2UodGhp
cywgdHlwZSwgZnVsbFVSTCwgY2hhcnNldCwgaXNQcmVsb2FkKTsKKyAgICBpZiAocmVzb3VyY2Up
IHsKKyAgICAgICAgLy8gQ2hlY2sgZmluYWwgVVJMIG9mIHJlc291cmNlIHRvIGNhdGNoIHJlZGly
ZWN0cy4KKyAgICAgICAgLy8gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE5NjM+LgorICAgICAgICBpZiAoZnVsbFVSTCAhPSByZXNvdXJjZS0+dXJsKCkgJiYg
IWNhblJlcXVlc3QodHlwZSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHJlc291cmNlLT51cmwoKSkp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgbV9kb2N1bWVudFJlc291cmNlcy5z
ZXQocmVzb3VyY2UtPnVybCgpLCByZXNvdXJjZSk7CisgICAgICAgIGNoZWNrQ2FjaGVPYmplY3RT
dGF0dXMocmVzb3VyY2UpOworICAgIH0KKyAgICByZXR1cm4gcmVzb3VyY2U7Cit9CisKK3ZvaWQg
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnByaW50QWNjZXNzRGVuaWVkTWVzc2FnZShjb25zdCBLVVJM
JiB1cmwpIGNvbnN0Cit7CisgICAgaWYgKHVybC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTZXR0aW5ncyogc2V0
dGluZ3MgPSBmcmFtZSgpLT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MgfHwgc2V0dGlu
Z3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3Ry
aW5nIG1lc3NhZ2UgPSBtX2RvYy0+dXJsKCkuaXNOdWxsKCkgPworICAgICAgICBtYWtlU3RyaW5n
KCJVbnNhZmUgYXR0ZW1wdCB0byBsb2FkIFVSTCAiLCB1cmwuc3RyaW5nKCksICcuJykgOgorICAg
ICAgICBtYWtlU3RyaW5nKCJVbnNhZmUgYXR0ZW1wdCB0byBsb2FkIFVSTCAiLCB1cmwuc3RyaW5n
KCksICIgZnJvbSBmcmFtZSB3aXRoIFVSTCAiLCBtX2RvYy0+dXJsKCkuc3RyaW5nKCksICIuIERv
bWFpbnMsIHByb3RvY29scyBhbmQgcG9ydHMgbXVzdCBtYXRjaC5cbiIpOworCisgICAgLy8gRklY
TUU6IHByb3ZpZGUgYSByZWFsIGxpbmUgbnVtYmVyIGFuZCBzb3VyY2UgVVJMLgorICAgIGZyYW1l
KCktPmRvbVdpbmRvdygpLT5jb25zb2xlKCktPmFkZE1lc3NhZ2UoT3RoZXJNZXNzYWdlU291cmNl
LCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIDEsIFN0cmluZygp
KTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJbWFnZXMoYm9v
bCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSA9PSBtX2F1dG9Mb2FkSW1hZ2VzKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2F1dG9Mb2FkSW1hZ2VzID0gZW5hYmxlOworCisgICAgaWYgKCFt
X2F1dG9Mb2FkSW1hZ2VzKQorICAgICAgICByZXR1cm47CisKKyAgICBEb2N1bWVudFJlc291cmNl
TWFwOjppdGVyYXRvciBlbmQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOworICAgIGZvciAo
RG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBpZiAocmVzb3VyY2UtPnR5cGUoKSA9PSBD
YWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSkgeworICAgICAgICAgICAgQ2FjaGVkSW1hZ2Uq
IGltYWdlID0gY29uc3RfY2FzdDxDYWNoZWRJbWFnZSo+KHN0YXRpY19jYXN0PGNvbnN0IENhY2hl
ZEltYWdlKj4ocmVzb3VyY2UpKTsKKworICAgICAgICAgICAgaWYgKGltYWdlLT5zdGlsbE5lZWRz
TG9hZCgpKQorICAgICAgICAgICAgICAgIGNhY2hlKCktPmxvYWRlcigpLT5sb2FkKHRoaXMsIGlt
YWdlLCB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworQ2FjaGVQb2xpY3kgQ2FjaGVkUmVz
b3VyY2VMb2FkZXI6OmNhY2hlUG9saWN5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhbWUoKSA/
IGZyYW1lKCktPmxvYWRlcigpLT5zdWJyZXNvdXJjZUNhY2hlUG9saWN5KCkgOiBDYWNoZVBvbGlj
eVZlcmlmeTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVtb3ZlQ2FjaGVkUmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKSBjb25zdAoreworI2lmbmRlZiBOREVCVUcK
KyAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRSZXNvdXJj
ZXMuZmluZChyZXNvdXJjZS0+dXJsKCkpOworICAgIGlmIChpdCAhPSBtX2RvY3VtZW50UmVzb3Vy
Y2VzLmVuZCgpKQorICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5nZXQoKSA9PSByZXNvdXJjZSk7
CisjZW5kaWYKKyAgICBtX2RvY3VtZW50UmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZS0+dXJsKCkp
OworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpzZXRMb2FkSW5Qcm9ncmVzcyhib29s
IGxvYWQpCit7CisgICAgbV9sb2FkSW5Qcm9ncmVzcyA9IGxvYWQ7CisgICAgaWYgKCFsb2FkICYm
IGZyYW1lKCkpCisgICAgICAgIGZyYW1lKCktPmxvYWRlcigpLT5sb2FkRG9uZSgpOworfQorCit2
b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpjaGVja0NhY2hlT2JqZWN0U3RhdHVzKENhY2hlZFJl
c291cmNlKiByZXNvdXJjZSkKK3sKKyAgICAvLyBSZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24gZm9y
IG9iamVjdHMgdGhhdCB3ZSBkaWRuJ3QgbG9hZCBmcm9tIHRoZSBjYWNoZSBvciBpZiB3ZSBkb24n
dCBoYXZlIGEgZnJhbWUuCisgICAgaWYgKCFyZXNvdXJjZSB8fCAhZnJhbWUoKSB8fCByZXNvdXJj
ZS0+c3RhdHVzKCkgIT0gQ2FjaGVkUmVzb3VyY2U6OkNhY2hlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gRklYTUU6IElmIHRoZSBXZWJLaXQgY2xpZW50IGNoYW5nZXMgb3IgY2FuY2VscyB0
aGUgcmVxdWVzdCwgV2ViQ29yZSBkb2VzIG5vdCByZXNwZWN0IHRoaXMgYW5kIGNvbnRpbnVlcyB0
aGUgbG9hZC4KKyAgICBmcmFtZSgpLT5sb2FkZXIoKS0+bG9hZGVkUmVzb3VyY2VGcm9tTWVtb3J5
Q2FjaGUocmVzb3VyY2UpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjppbmNyZW1l
bnRSZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVzb3VyY2UqIHJlcykKK3sKKyAgICBpZiAocmVz
LT5pc1ByZWZldGNoKCkpCisgICAgICAgIHJldHVybjsKKworICAgICsrbV9yZXF1ZXN0Q291bnQ7
Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlY3JlbWVudFJlcXVlc3RDb3VudChj
b25zdCBDYWNoZWRSZXNvdXJjZSogcmVzKQoreworICAgIGlmIChyZXMtPmlzUHJlZmV0Y2goKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLS1tX3JlcXVlc3RDb3VudDsKKyAgICBBU1NFUlQobV9y
ZXF1ZXN0Q291bnQgPiAtMSk7Cit9CisKK2ludCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVz
dENvdW50KCkKK3sKKyAgICBpZiAobG9hZEluUHJvZ3Jlc3MoKSkKKyAgICAgICAgIHJldHVybiBt
X3JlcXVlc3RDb3VudCArIDE7CisgICAgcmV0dXJuIG1fcmVxdWVzdENvdW50OworfQorICAgIAor
dm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0
eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29sIHJlZmVy
ZW5jZWRGcm9tQm9keSkKK3sKKyAgICBib29sIGhhc1JlbmRlcmluZyA9IG1fZG9jLT5ib2R5KCkg
JiYgbV9kb2MtPmJvZHkoKS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIWhhc1JlbmRlcmluZyAmJiAo
cmVmZXJlbmNlZEZyb21Cb2R5IHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3Vy
Y2UpKSB7CisgICAgICAgIC8vIERvbid0IHByZWxvYWQgaW1hZ2VzIG9yIGJvZHkgcmVzb3VyY2Vz
IGJlZm9yZSB3ZSBoYXZlIHNvbWV0aGluZyB0byBkcmF3LiBUaGlzIHByZXZlbnRzCisgICAgICAg
IC8vIHByZWxvYWRzIGZyb20gYm9keSBkZWxheWluZyBmaXJzdCBkaXNwbGF5IHdoZW4gYmFuZHdp
ZHRoIGlzIGxpbWl0ZWQuCisgICAgICAgIFBlbmRpbmdQcmVsb2FkIHBlbmRpbmdQcmVsb2FkID0g
eyB0eXBlLCB1cmwsIGNoYXJzZXQgfTsKKyAgICAgICAgbV9wZW5kaW5nUHJlbG9hZHMuYXBwZW5k
KHBlbmRpbmdQcmVsb2FkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZXF1ZXN0UHJl
bG9hZCh0eXBlLCB1cmwsIGNoYXJzZXQpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVy
OjpjaGVja0ZvclBlbmRpbmdQcmVsb2FkcygpIAoreworICAgIHVuc2lnbmVkIGNvdW50ID0gbV9w
ZW5kaW5nUHJlbG9hZHMuc2l6ZSgpOworICAgIGlmICghY291bnQgfHwgIW1fZG9jLT5ib2R5KCkg
fHwgIW1fZG9jLT5ib2R5KCktPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBQZW5kaW5nUHJlbG9h
ZCYgcHJlbG9hZCA9IG1fcGVuZGluZ1ByZWxvYWRzW2ldOworICAgICAgICAvLyBEb24ndCByZXF1
ZXN0IHByZWxvYWQgaWYgdGhlIHJlc291cmNlIGFscmVhZHkgbG9hZGVkIG5vcm1hbGx5ICh0aGlz
IHdpbGwgcmVzdWx0IGluIGRvdWJsZSBsb2FkIGlmIHRoZSBwYWdlIGlzIGJlaW5nIHJlbG9hZGVk
IHdpdGggY2FjaGVkIHJlc3VsdHMgaWdub3JlZCkuCisgICAgICAgIGlmICghY2FjaGVkUmVzb3Vy
Y2UobV9kb2MtPmNvbXBsZXRlVVJMKHByZWxvYWQubV91cmwpKSkKKyAgICAgICAgICAgIHJlcXVl
c3RQcmVsb2FkKHByZWxvYWQubV90eXBlLCBwcmVsb2FkLm1fdXJsLCBwcmVsb2FkLm1fY2hhcnNl
dCk7CisgICAgfQorICAgIG1fcGVuZGluZ1ByZWxvYWRzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlIHR5
cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCit7CisgICAgU3Ry
aW5nIGVuY29kaW5nOworICAgIGlmICh0eXBlID09IENhY2hlZFJlc291cmNlOjpTY3JpcHQgfHwg
dHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCkKKyAgICAgICAgZW5jb2Rpbmcg
PSBjaGFyc2V0LmlzRW1wdHkoKSA/IG1fZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCkt
PmVuY29kaW5nKCkgOiBjaGFyc2V0OworCisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0g
cmVxdWVzdFJlc291cmNlKHR5cGUsIHVybCwgZW5jb2RpbmcsIHRydWUpOworICAgIGlmICghcmVz
b3VyY2UgfHwgKG1fcHJlbG9hZHMgJiYgbV9wcmVsb2Fkcy0+Y29udGFpbnMocmVzb3VyY2UpKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHJlc291cmNlLT5pbmNyZWFzZVByZWxvYWRDb3VudCgpOwor
CisgICAgaWYgKCFtX3ByZWxvYWRzKQorICAgICAgICBtX3ByZWxvYWRzID0gYWRvcHRQdHIobmV3
IExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4pOworICAgIG1fcHJlbG9hZHMtPmFkZChyZXNv
dXJjZSk7CisKKyNpZiBQUkVMT0FEX0RFQlVHCisgICAgcHJpbnRmKCJQUkVMT0FESU5HICVzXG4i
LCAgcmVzb3VyY2UtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7CisjZW5kaWYKK30KKwordm9pZCBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2xlYXJQcmVsb2FkcygpCit7CisjaWYgUFJFTE9BRF9ERUJV
RworICAgIHByaW50UHJlbG9hZFN0YXRzKCk7CisjZW5kaWYKKyAgICBpZiAoIW1fcHJlbG9hZHMp
CisgICAgICAgIHJldHVybjsKKworICAgIExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj46Oml0
ZXJhdG9yIGVuZCA9IG1fcHJlbG9hZHMtPmVuZCgpOworICAgIGZvciAoTGlzdEhhc2hTZXQ8Q2Fj
aGVkUmVzb3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX3ByZWxvYWRzLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlcyA9ICppdDsKKyAgICAgICAg
cmVzLT5kZWNyZWFzZVByZWxvYWRDb3VudCgpOworICAgICAgICBpZiAocmVzLT5jYW5EZWxldGUo
KSAmJiAhcmVzLT5pbkNhY2hlKCkpCisgICAgICAgICAgICBkZWxldGUgcmVzOworICAgICAgICBl
bHNlIGlmIChyZXMtPnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZE5v
dFJlZmVyZW5jZWQpCisgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUocmVzKTsKKyAgICB9Cisg
ICAgbV9wcmVsb2Fkcy5jbGVhcigpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpj
bGVhclBlbmRpbmdQcmVsb2FkcygpCit7CisgICAgbV9wZW5kaW5nUHJlbG9hZHMuY2xlYXIoKTsK
K30KKworI2lmIFBSRUxPQURfREVCVUcKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnByaW50
UHJlbG9hZFN0YXRzKCkKK3sKKyAgICB1bnNpZ25lZCBzY3JpcHRzID0gMDsKKyAgICB1bnNpZ25l
ZCBzY3JpcHRNaXNzZXMgPSAwOworICAgIHVuc2lnbmVkIHN0eWxlc2hlZXRzID0gMDsKKyAgICB1
bnNpZ25lZCBzdHlsZXNoZWV0TWlzc2VzID0gMDsKKyAgICB1bnNpZ25lZCBpbWFnZXMgPSAwOwor
ICAgIHVuc2lnbmVkIGltYWdlTWlzc2VzID0gMDsKKyAgICBMaXN0SGFzaFNldDxDYWNoZWRSZXNv
dXJjZSo+OjppdGVyYXRvciBlbmQgPSBtX3ByZWxvYWRzLmVuZCgpOworICAgIGZvciAoTGlzdEhh
c2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX3ByZWxvYWRzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzID0gKml0Owor
ICAgICAgICBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxv
YWROb3RSZWZlcmVuY2VkKQorICAgICAgICAgICAgcHJpbnRmKCIhISBVTlJFRkVSRU5DRUQgUFJF
TE9BRCAlc1xuIiwgcmVzLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICBlbHNlIGlm
IChyZXMtPnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVyZW5j
ZWRXaGlsZUNvbXBsZXRlKQorICAgICAgICAgICAgcHJpbnRmKCJISVQgQ09NUExFVEUgUFJFTE9B
RCAlc1xuIiwgcmVzLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICBlbHNlIGlmIChy
ZXMtPnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVyZW5jZWRX
aGlsZUxvYWRpbmcpCisgICAgICAgICAgICBwcmludGYoIkhJVCBMT0FESU5HIFBSRUxPQUQgJXNc
biIsIHJlcy0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChy
ZXMtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0KSB7CisgICAgICAgICAgICBzY3Jp
cHRzKys7CisgICAgICAgICAgICBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPCBDYWNoZWRSZXNv
dXJjZTo6UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmcpCisgICAgICAgICAgICAgICAgc2Ny
aXB0TWlzc2VzKys7CisgICAgICAgIH0gZWxzZSBpZiAocmVzLT50eXBlKCkgPT0gQ2FjaGVkUmVz
b3VyY2U6OkNTU1N0eWxlU2hlZXQpIHsKKyAgICAgICAgICAgIHN0eWxlc2hlZXRzKys7CisgICAg
ICAgICAgICBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPCBDYWNoZWRSZXNvdXJjZTo6UHJlbG9h
ZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmcpCisgICAgICAgICAgICAgICAgc3R5bGVzaGVldE1pc3Nl
cysrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW1hZ2VzKys7CisgICAgICAgICAg
ICBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPCBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVy
ZW5jZWRXaGlsZUxvYWRpbmcpCisgICAgICAgICAgICAgICAgaW1hZ2VNaXNzZXMrKzsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHJlcy0+ZXJyb3JPY2N1cnJlZCgpKQorICAgICAg
ICAgICAgY2FjaGUoKS0+cmVtb3ZlKHJlcyk7CisgICAgICAgIAorICAgICAgICByZXMtPmRlY3Jl
YXNlUHJlbG9hZENvdW50KCk7CisgICAgfQorICAgIG1fcHJlbG9hZHMuY2xlYXIoKTsKKyAgICAK
KyAgICBpZiAoc2NyaXB0cykKKyAgICAgICAgcHJpbnRmKCJTQ1JJUFRTOiAlZCAoJWQgaGl0cywg
aGl0IHJhdGUgJWQlJSlcbiIsIHNjcmlwdHMsIHNjcmlwdHMgLSBzY3JpcHRNaXNzZXMsIChzY3Jp
cHRzIC0gc2NyaXB0TWlzc2VzKSAqIDEwMCAvIHNjcmlwdHMpOworICAgIGlmIChzdHlsZXNoZWV0
cykKKyAgICAgICAgcHJpbnRmKCJTVFlMRVNIRUVUUzogJWQgKCVkIGhpdHMsIGhpdCByYXRlICVk
JSUpXG4iLCBzdHlsZXNoZWV0cywgc3R5bGVzaGVldHMgLSBzdHlsZXNoZWV0TWlzc2VzLCAoc3R5
bGVzaGVldHMgLSBzdHlsZXNoZWV0TWlzc2VzKSAqIDEwMCAvIHN0eWxlc2hlZXRzKTsKKyAgICBp
ZiAoaW1hZ2VzKQorICAgICAgICBwcmludGYoIklNQUdFUzogICVkICglZCBoaXRzLCBoaXQgcmF0
ZSAlZCUlKVxuIiwgaW1hZ2VzLCBpbWFnZXMgLSBpbWFnZU1pc3NlcywgKGltYWdlcyAtIGltYWdl
TWlzc2VzKSAqIDEwMCAvIGltYWdlcyk7Cit9CisjZW5kaWYKKyAgICAKK30KSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gNzE0OTIp
CShmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlTG9hZGVyLmg6NzE0OTIpCisrKyBX
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTM1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xs
IChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxs
ZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxl
IEluYy4gaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRl
cyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVl
dHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNo
ZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VMb2FkZXJf
aAorI2RlZmluZSBDYWNoZWRSZXNvdXJjZUxvYWRlcl9oCisKKyNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiQ2Fj
aGVQb2xpY3kuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZENTU1N0
eWxlU2hlZXQ7CitjbGFzcyBDYWNoZWRGb250OworY2xhc3MgQ2FjaGVkSW1hZ2U7CitjbGFzcyBD
YWNoZWRTY3JpcHQ7CitjbGFzcyBDYWNoZWRYU0xTdHlsZVNoZWV0OworY2xhc3MgRG9jdW1lbnQ7
CitjbGFzcyBGcmFtZTsKK2NsYXNzIEltYWdlTG9hZGVyOworY2xhc3MgS1VSTDsKKworLy8gVGhl
IENhY2hlZFJlc291cmNlTG9hZGVyIG1hbmFnZXMgdGhlIGxvYWRpbmcgb2Ygc2NyaXB0cy9pbWFn
ZXMvc3R5bGVzaGVldHMgZm9yIGEgc2luZ2xlIGRvY3VtZW50LgorY2xhc3MgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworZnJpZW5kIGNsYXNzIENhY2hlOworZnJp
ZW5kIGNsYXNzIEltYWdlTG9hZGVyOworCitwdWJsaWM6CisgICAgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoRG9jdW1lbnQqKTsKKyAgICB+Q2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKworICAgIENhY2hl
ZEltYWdlKiByZXF1ZXN0SW1hZ2UoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIENhY2hlZENTU1N0
eWxlU2hlZXQqIHJlcXVlc3RDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIGNoYXJzZXQpOworICAgIENhY2hlZENTU1N0eWxlU2hlZXQqIHJlcXVlc3RVc2VyQ1NT
U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAg
ICBDYWNoZWRTY3JpcHQqIHJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgY2hhcnNldCk7CisgICAgQ2FjaGVkRm9udCogcmVxdWVzdEZvbnQoY29uc3QgU3RyaW5n
JiB1cmwpOworCisjaWYgRU5BQkxFKFhTTFQpCisgICAgQ2FjaGVkWFNMU3R5bGVTaGVldCogcmVx
dWVzdFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwpOworI2VuZGlmCisjaWYgRU5BQkxF
KExJTktfUFJFRkVUQ0gpCisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RMaW5rUHJlZmV0Y2go
Y29uc3QgU3RyaW5nICZ1cmwpOworI2VuZGlmCisKKyAgICAvLyBMb2dzIGFuIGFjY2VzcyBkZW5p
ZWQgbWVzc2FnZSB0byB0aGUgY29uc29sZSBmb3IgdGhlIHNwZWNpZmllZCBVUkwuCisgICAgdm9p
ZCBwcmludEFjY2Vzc0RlbmllZE1lc3NhZ2UoY29uc3QgS1VSTCYgdXJsKSBjb25zdDsKKworICAg
IENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCkgY29uc3Qg
eyByZXR1cm4gbV9kb2N1bWVudFJlc291cmNlcy5nZXQodXJsKS5nZXQoKTsgfQorICAgIAorICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291
cmNlPiA+IERvY3VtZW50UmVzb3VyY2VNYXA7CisgICAgY29uc3QgRG9jdW1lbnRSZXNvdXJjZU1h
cCYgYWxsQ2FjaGVkUmVzb3VyY2VzKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudFJlc291cmNl
czsgfQorCisgICAgYm9vbCBhdXRvTG9hZEltYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b0xv
YWRJbWFnZXM7IH0KKyAgICB2b2lkIHNldEF1dG9Mb2FkSW1hZ2VzKGJvb2wpOworICAgIAorICAg
IENhY2hlUG9saWN5IGNhY2hlUG9saWN5KCkgY29uc3Q7CisgICAgCisgICAgRnJhbWUqIGZyYW1l
KCkgY29uc3Q7IC8vIENhbiBiZSBOVUxMCisgICAgRG9jdW1lbnQqIGRvYygpIGNvbnN0IHsgcmV0
dXJuIG1fZG9jOyB9CisKKyAgICB2b2lkIHJlbW92ZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291
cmNlKikgY29uc3Q7CisKKyAgICB2b2lkIHNldExvYWRJblByb2dyZXNzKGJvb2wpOworICAgIGJv
b2wgbG9hZEluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX2xvYWRJblByb2dyZXNzOyB9Cisg
ICAgCisgICAgdm9pZCBzZXRBbGxvd1N0YWxlUmVzb3VyY2VzKGJvb2wgYWxsb3dTdGFsZVJlc291
cmNlcykgeyBtX2FsbG93U3RhbGVSZXNvdXJjZXMgPSBhbGxvd1N0YWxlUmVzb3VyY2VzOyB9CisK
KyAgICB2b2lkIGluY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSopOwor
ICAgIHZvaWQgZGVjcmVtZW50UmVxdWVzdENvdW50KGNvbnN0IENhY2hlZFJlc291cmNlKik7Cisg
ICAgaW50IHJlcXVlc3RDb3VudCgpOworICAgIAorICAgIHZvaWQgY2xlYXJQcmVsb2FkcygpOwor
ICAgIHZvaWQgY2xlYXJQZW5kaW5nUHJlbG9hZHMoKTsKKyAgICB2b2lkIHByZWxvYWQoQ2FjaGVk
UmVzb3VyY2U6OlR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQs
IGJvb2wgcmVmZXJlbmNlZEZyb21Cb2R5KTsKKyAgICB2b2lkIGNoZWNrRm9yUGVuZGluZ1ByZWxv
YWRzKCk7CisgICAgdm9pZCBwcmludFByZWxvYWRTdGF0cygpOworICAgIAorcHJpdmF0ZToKKyAg
ICBDYWNoZWRSZXNvdXJjZSogcmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlLCBj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29sIGlzUHJlbG9hZCA9
IGZhbHNlKTsKKyAgICB2b2lkIHJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291cmNlOjpUeXBlLCBj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKworICAgIHZvaWQgY2hl
Y2tGb3JSZWxvYWQoY29uc3QgS1VSTCYpOworICAgIHZvaWQgY2hlY2tDYWNoZU9iamVjdFN0YXR1
cyhDYWNoZWRSZXNvdXJjZSopOworICAgIGJvb2wgY2FuUmVxdWVzdChDYWNoZWRSZXNvdXJjZTo6
VHlwZSwgY29uc3QgS1VSTCYpOworICAgIAorICAgIENhY2hlKiBtX2NhY2hlOworICAgIEhhc2hT
ZXQ8U3RyaW5nPiBtX3JlbG9hZGVkVVJMczsKKyAgICBtdXRhYmxlIERvY3VtZW50UmVzb3VyY2VN
YXAgbV9kb2N1bWVudFJlc291cmNlczsKKyAgICBEb2N1bWVudCogbV9kb2M7CisgICAgCisgICAg
aW50IG1fcmVxdWVzdENvdW50OworICAgIAorICAgIE93blB0cjxMaXN0SGFzaFNldDxDYWNoZWRS
ZXNvdXJjZSo+ID4gbV9wcmVsb2FkczsKKyAgICBzdHJ1Y3QgUGVuZGluZ1ByZWxvYWQgeworICAg
ICAgICBDYWNoZWRSZXNvdXJjZTo6VHlwZSBtX3R5cGU7CisgICAgICAgIFN0cmluZyBtX3VybDsK
KyAgICAgICAgU3RyaW5nIG1fY2hhcnNldDsKKyAgICB9OworICAgIFZlY3RvcjxQZW5kaW5nUHJl
bG9hZD4gbV9wZW5kaW5nUHJlbG9hZHM7CisgICAgCisgICAgLy8yOSBiaXRzIGxlZnQKKyAgICBi
b29sIG1fYXV0b0xvYWRJbWFnZXMgOiAxOworICAgIGJvb2wgbV9sb2FkSW5Qcm9ncmVzcyA6IDE7
CisgICAgYm9vbCBtX2FsbG93U3RhbGVSZXNvdXJjZXMgOiAxOworfTsKKworfQorCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcAkocmV2aXNpb24gNzE0OTIp
CShmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHA6NzE0OTIpCisrKyBXZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGkt
aGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBr
ZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2Vpbmln
QGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlk
ZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hl
ZXRzIGFuZCBodG1sCisgICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2Fj
aGUgZm9yIHRoZXNlIG9iamVjdHMuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ2FjaGVkU2NyaXB0LmgiCisKKyNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIu
aCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNv
ZGVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0NhY2hlZFNjcmlwdDo6Q2FjaGVkU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIGNoYXJzZXQpCisgICAgOiBDYWNoZWRSZXNvdXJjZSh1cmwsIFNjcmlwdCkKKyAgICAsIG1f
ZGVjb2RlcihUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoImFwcGxpY2F0aW9uL2phdmFzY3Jp
cHQiLCBjaGFyc2V0KSkKKyAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyKHRoaXMsICZD
YWNoZWRTY3JpcHQ6OmRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKQoreworICAgIC8vIEl0
J3MgamF2YXNjcmlwdCB3ZSB3YW50LgorICAgIC8vIEJ1dCBzb21lIHdlYnNpdGVzIHRoaW5rIHRo
ZWlyIHNjcmlwdHMgYXJlIDxzb21lIHdyb25nIG1pbWV0eXBlIGhlcmU+CisgICAgLy8gYW5kIHJl
ZnVzZSB0byBzZXJ2ZSB0aGVtIGlmIHdlIG9ubHkgYWNjZXB0IGFwcGxpY2F0aW9uL3gtamF2YXNj
cmlwdC4KKyAgICBzZXRBY2NlcHQoIiovKiIpOworfQorCitDYWNoZWRTY3JpcHQ6On5DYWNoZWRT
Y3JpcHQoKQoreworfQorCit2b2lkIENhY2hlZFNjcmlwdDo6YWxsQ2xpZW50c1JlbW92ZWQoKQor
eworICAgIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwor
dm9pZCBDYWNoZWRTY3JpcHQ6OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgY2hzKQoreworICAg
IG1fZGVjb2Rlci0+c2V0RW5jb2RpbmcoY2hzLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGlu
Z0Zyb21IVFRQSGVhZGVyKTsKK30KKworU3RyaW5nIENhY2hlZFNjcmlwdDo6ZW5jb2RpbmcoKSBj
b25zdAoreworICAgIHJldHVybiBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpOworfQorCitj
b25zdCBTdHJpbmcmIENhY2hlZFNjcmlwdDo6c2NyaXB0KCkKK3sKKyAgICBBU1NFUlQoIWlzUHVy
Z2VhYmxlKCkpOworCisgICAgaWYgKCFtX3NjcmlwdCAmJiBtX2RhdGEpIHsKKyAgICAgICAgbV9z
Y3JpcHQgPSBtX2RlY29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgZW5jb2RlZFNpemUoKSk7
CisgICAgICAgIG1fc2NyaXB0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKKyAgICAgICAgc2V0RGVj
b2RlZFNpemUobV9zY3JpcHQubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICB9CisgICAg
bV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIuc3RhcnRPbmVTaG90KDApOworICAgIHJldHVybiBt
X3NjcmlwdDsKK30KKwordm9pZCBDYWNoZWRTY3JpcHQ6OmRhdGEoUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlmICghYWxsRGF0YVJl
Y2VpdmVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEgPSBkYXRhOworICAgIHNldEVu
Y29kZWRTaXplKG1fZGF0YS5nZXQoKSA/IG1fZGF0YS0+c2l6ZSgpIDogMCk7CisgICAgc2V0TG9h
ZGluZyhmYWxzZSk7CisgICAgY2hlY2tOb3RpZnkoKTsKK30KKwordm9pZCBDYWNoZWRTY3JpcHQ6
OmNoZWNrTm90aWZ5KCkKK3sKKyAgICBpZiAoaXNMb2FkaW5nKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKKyAgICB3aGls
ZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+bm90aWZ5
RmluaXNoZWQodGhpcyk7Cit9CisKK3ZvaWQgQ2FjaGVkU2NyaXB0OjplcnJvcigpCit7CisgICAg
c2V0TG9hZGluZyhmYWxzZSk7CisgICAgc2V0RXJyb3JPY2N1cnJlZCh0cnVlKTsKKyAgICBjaGVj
a05vdGlmeSgpOworfQorCit2b2lkIENhY2hlZFNjcmlwdDo6ZGVzdHJveURlY29kZWREYXRhKCkK
K3sKKyAgICBtX3NjcmlwdCA9IFN0cmluZygpOworICAgIHNldERlY29kZWRTaXplKDApOworICAg
IGlmICghQ2FjaGU6OnNob3VsZE1ha2VSZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24oKSAmJiBp
c1NhZmVUb01ha2VQdXJnZWFibGUoKSkKKyAgICAgICAgbWFrZVB1cmdlYWJsZSh0cnVlKTsKK30K
Kwordm9pZCBDYWNoZWRTY3JpcHQ6OmRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKFRpbWVy
PENhY2hlZFNjcmlwdD4qKQoreworICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3Jp
cHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuaAko
cmV2aXNpb24gNzE0OTIpCShmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5oOjcxNDky
KQorKysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAo
a25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVy
IDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcg
KHNhbS53ZWluaWdAZ21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBj
bGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2Vz
LCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBh
IG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2FjaGVkU2Ny
aXB0X2gKKyNkZWZpbmUgQ2FjaGVkU2NyaXB0X2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xh
c3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CisgICAgY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsK
KworICAgIGNsYXNzIENhY2hlZFNjcmlwdCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7CisgICAg
cHVibGljOgorICAgICAgICBDYWNoZWRTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgY2hhcnNldCk7CisgICAgICAgIHZpcnR1YWwgfkNhY2hlZFNjcmlwdCgpOworCisgICAg
ICAgIGNvbnN0IFN0cmluZyYgc2NyaXB0KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFsbENs
aWVudHNSZW1vdmVkKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEVuY29kaW5nKGNvbnN0
IFN0cmluZyYpOworICAgICAgICB2aXJ0dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZXJyb3IoKTsKKworICAg
ICAgICB2b2lkIGNoZWNrTm90aWZ5KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lE
ZWNvZGVkRGF0YSgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBkZWNvZGVkRGF0YURl
bGV0aW9uVGltZXJGaXJlZChUaW1lcjxDYWNoZWRTY3JpcHQ+Kik7CisgICAgICAgIHZpcnR1YWwg
UHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gUHVyZ2VMYXN0OyB9
CisKKyAgICAgICAgU3RyaW5nIG1fc2NyaXB0OworICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNl
RGVjb2Rlcj4gbV9kZWNvZGVyOworICAgICAgICBUaW1lcjxDYWNoZWRTY3JpcHQ+IG1fZGVjb2Rl
ZERhdGFEZWxldGlvblRpbWVyOworICAgIH07Cit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDcxNDkyKQko
ZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcDo3MTQ5MikKKysrIFdl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwg
KGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFu
IChiYXN0aWFuQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcg
KHNhbS53ZWluaWdAZ21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBj
bGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2Vz
LCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBh
IG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJDYWNoZWRYU0xTdHlsZVNoZWV0LmgiCisKKyNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgi
CisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rl
ci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisj
aWYgRU5BQkxFKFhTTFQpCisKK0NhY2hlZFhTTFN0eWxlU2hlZXQ6OkNhY2hlZFhTTFN0eWxlU2hl
ZXQoY29uc3QgU3RyaW5nICZ1cmwpCisgICAgOiBDYWNoZWRSZXNvdXJjZSh1cmwsIFhTTFN0eWxl
U2hlZXQpCisgICAgLCBtX2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0
L3hzbCIpKQoreworICAgIC8vIEl0J3MgWE1MIHdlIHdhbnQuCisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGFjY2VwdCBtb3JlIGdlbmVyYWwgeG1sIGZvcm1hdHMgKi8qK3htbCwgaW1hZ2Uvc3Zn
K3htbCBmb3IgZXhhbXBsZS4KKyAgICBzZXRBY2NlcHQoInRleHQveG1sLCBhcHBsaWNhdGlvbi94
bWwsIGFwcGxpY2F0aW9uL3hodG1sK3htbCwgdGV4dC94c2wsIGFwcGxpY2F0aW9uL3Jzcyt4bWws
IGFwcGxpY2F0aW9uL2F0b20reG1sIik7Cit9CisKK3ZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6
ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjKQoreyAgCisgICAgaWYgKCFpc0xv
YWRpbmcoKSkKKyAgICAgICAgYy0+c2V0WFNMU3R5bGVTaGVldChtX3VybCwgbV9yZXNwb25zZS51
cmwoKSwgbV9zaGVldCk7Cit9CisKK3ZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6c2V0RW5jb2Rp
bmcoY29uc3QgU3RyaW5nJiBjaHMpCit7CisgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhjaHMs
IFRleHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOworfQorCitTdHJp
bmcgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZW5jb2RpbmcoKSBjb25zdAoreworICAgIHJldHVybiBt
X2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpOworfQorCit2b2lkIENhY2hlZFhTTFN0eWxlU2hl
ZXQ6OmRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKQoreworICAgIGlmICghYWxsRGF0YVJlY2VpdmVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2RhdGEgPSBkYXRhOyAgICAgCisgICAgc2V0RW5jb2RlZFNpemUobV9kYXRhLmdldCgpID8g
bV9kYXRhLT5zaXplKCkgOiAwKTsKKyAgICBpZiAobV9kYXRhLmdldCgpKSB7CisgICAgICAgIG1f
c2hlZXQgPSBTdHJpbmcobV9kZWNvZGVyLT5kZWNvZGUobV9kYXRhLT5kYXRhKCksIGVuY29kZWRT
aXplKCkpKTsKKyAgICAgICAgbV9zaGVldCArPSBtX2RlY29kZXItPmZsdXNoKCk7CisgICAgfQor
ICAgIHNldExvYWRpbmcoZmFsc2UpOworICAgIGNoZWNrTm90aWZ5KCk7Cit9CisKK3ZvaWQgQ2Fj
aGVkWFNMU3R5bGVTaGVldDo6Y2hlY2tOb3RpZnkoKQoreworICAgIGlmIChpc0xvYWRpbmcoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHco
bV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQgKmMgPSB3Lm5leHQo
KSkKKyAgICAgICAgYy0+c2V0WFNMU3R5bGVTaGVldChtX3VybCwgbV9yZXNwb25zZS51cmwoKSwg
bV9zaGVldCk7Cit9CisKK3ZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZXJyb3IoKQoreworICAg
IHNldExvYWRpbmcoZmFsc2UpOworICAgIHNldEVycm9yT2NjdXJyZWQodHJ1ZSk7CisgICAgY2hl
Y2tOb3RpZnkoKTsKK30KKworI2VuZGlmCisKK30KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFhTTFN0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDcxNDkyKQkoZnJvbSBXZWJDb3JlL2xv
YWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0Lmg6NzE0OTIpCisrKyBXZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5k
ZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+
CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwu
Y29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwg
ZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5k
IGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3Ig
dGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2FjaGVkWFNMU3R5bGVTaGVldF9oCisjZGVm
aW5lIENhY2hlZFhTTFN0eWxlU2hlZXRfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNs
YXNzIENhY2hlZFJlc291cmNlTG9hZGVyOworICAgIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7
CisKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICBjbGFzcyBDYWNoZWRYU0xTdHlsZVNoZWV0IDogcHVi
bGljIENhY2hlZFJlc291cmNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIENhY2hlZFhTTFN0eWxl
U2hlZXQoY29uc3QgU3RyaW5nJiB1cmwpOworCisgICAgICAgIGNvbnN0IFN0cmluZyYgc2hlZXQo
KSBjb25zdCB7IHJldHVybiBtX3NoZWV0OyB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CisgICAgICAgIAorICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZpcnR1
YWwgU3RyaW5nIGVuY29kaW5nKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhKFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOworICAgICAgICAKKyAgICAgICAgdm9pZCBjaGVja05v
dGlmeSgpOworICAgICAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFN0cmluZyBtX3NoZWV0
OworICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAgIH07
CisKKyNlbmRpZgorCit9CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73210</attachid>
            <date>2010-11-07 20:49:26 -0800</date>
            <delta_ts>2010-11-07 23:43:17 -0800</delta_ts>
            <desc>I had some unsaved changes to some build files.</desc>
            <filename>bug-49156-20101107204924.patch</filename>
            <type>text/plain</type>
            <size>253283</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTQ5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTUgQEAKKzIwMTAtMTEtMDcgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgTW92ZSB0aGUg
cmVzdCBvZiB0aGUgY2FjaGUtcmVsYXRlZCBmaWxlcyBpbnRvIGxvYWRlci9jYWNoZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkxNTYKKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbG9hZGVyL0NhY2hlUG9saWN5Lmg6IFJlbW92
ZWQuCisgICAgICAgICogbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIGxvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0Lmg6IFJlbW92ZWQuCisgICAgICAg
ICogbG9hZGVyL0NhY2hlZEZvbnQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGxvYWRlci9DYWNo
ZWRGb250Lmg6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL0NhY2hlZEltYWdlLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkSW1hZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGxvYWRlci9D
YWNoZWRSZXNvdXJjZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJj
ZUNsaWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyLmg6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlSGFu
ZGxlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2VIYW5kbGUu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZUxvYWRlci5oOiBSZW1vdmVk
LgorICAgICAgICAqIGxvYWRlci9DYWNoZWRTY3JpcHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IGxvYWRlci9DYWNoZWRTY3JpcHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVk
WFNMU3R5bGVTaGVldC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL0NhY2hlZFhTTFN0
eWxlU2hlZXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVQb2xpY3ku
aDogQ29waWVkIGZyb20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVQb2xpY3kuaC4KKyAgICAgICAgKiBs
b2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9D
YWNoZWRDU1NTdHlsZVNoZWV0Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZENT
U1N0eWxlU2hlZXQuaC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHA6IENv
cGllZCBmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwLgorICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRGb250Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZv
bnQuaC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwOiBDb3BpZWQgZnJv
bSBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAuCisgICAgICAgICogbG9hZGVyL2NhY2hl
L0NhY2hlZEltYWdlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmgu
CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDogQ29waWVkIGZyb20g
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwLgorICAgICAgICAqIGxvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNv
dXJjZS5oLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oOiBD
b3BpZWQgZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUNsaWVudC5oLgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5jcHA6IENvcGllZCBm
cm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcC4KKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaDogQ29waWVkIGZy
b20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaC4KKyAgICAgICAg
KiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwOiBDb3BpZWQgZnJvbSBXZWJD
b3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAuCisgICAgICAgICogbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvbG9hZGVyL0Nh
Y2hlZFJlc291cmNlSGFuZGxlLmguCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuY3BwLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5o
OiBDb3BpZWQgZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUxvYWRlci5oLgorICAg
ICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRTY3JpcHQuY3BwLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRT
Y3JpcHQuaDogQ29waWVkIGZyb20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmguCisgICAg
ICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcC4KKyAgICAgICAgKiBsb2FkZXIv
Y2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2xvYWRlci9D
YWNoZWRYU0xTdHlsZVNoZWV0LmguCisKIDIwMTAtMTEtMDcgIERhbmllbCBCYXRlcyAgPGRiYXRl
c0ByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJD
b3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLm1rCShyZXZpc2lv
biA3MTQ5MykKKysrIFdlYkNvcmUvQW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpAQCAtMzQzLDE2
ICszNDMsMTYgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJaHRt
bC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcCBcCiAJaHRtbC9wYXJzZXIvVGV4dFZpZXdT
b3VyY2VQYXJzZXIuY3BwIFwKIAlcCi0JbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwIFwK
LQlsb2FkZXIvQ2FjaGVkRm9udC5jcHAgXAotCWxvYWRlci9DYWNoZWRJbWFnZS5jcHAgXAotCWxv
YWRlci9DYWNoZWRSZXNvdXJjZS5jcHAgXAotCWxvYWRlci9DYWNoZWRSZXNvdXJjZUNsaWVudFdh
bGtlci5jcHAgXAotCWxvYWRlci9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgXAotCWxvYWRlci9D
YWNoZWRTY3JpcHQuY3BwIFwKKwlsb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAg
XAorCWxvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcCBcCisJbG9hZGVyL2NhY2hlL0NhY2hlZElt
YWdlLmNwcCBcCisJbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcCBcCisJbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcCBcCisJbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlSGFuZGxlLmNwcCBcCisJbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAgXAog
CWxvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwIFwKIAlsb2FkZXIvQ3Jvc3NPcmln
aW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgXAotCWxvYWRlci9DYWNoZWRSZXNvdXJjZUxvYWRl
ci5jcHAgXAorCWxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAgXAogCWxvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAgXAogCWxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIu
Y3BwIFwKIAlsb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
NzE0OTMpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMTM5
LDE3ICsxMTM5LDE3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNwZWN0b3IvU2NyaXB0
QnJlYWtwb2ludC5jcHAKICAgICBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAog
Ci0gICAgbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCi0gICAgbG9hZGVyL0NhY2hlZEZv
bnQuY3BwCi0gICAgbG9hZGVyL0NhY2hlZEltYWdlLmNwcAotICAgIGxvYWRlci9DYWNoZWRSZXNv
dXJjZS5jcHAKLSAgICBsb2FkZXIvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuY3BwCi0gICAg
bG9hZGVyL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcAotICAgIGxvYWRlci9DYWNoZWRTY3JpcHQu
Y3BwCi0gICAgbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCisgICAgbG9hZGVyL2NhY2hl
L0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCisgICAgbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3Bw
CisgICAgbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAorICAgIGxvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZS5jcHAKKyAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxr
ZXIuY3BwCisgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcAorICAgIGxv
YWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCisgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0
eWxlU2hlZXQuY3BwCiAgICAgbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAKICAg
ICBsb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKLSAgICBsb2FkZXIv
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCisgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmNwcAogICAgIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKICAgICBsb2FkZXIvRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAogICAgIGxvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAK
SW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkocmV2aXNpb24gNzE0OTMpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTA3LDI4ICsxOTA3LDI4IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2UuY3BwIFwKIAlXZWJDb3Jl
L2xvYWRlci9hcmNoaXZlL0FyY2hpdmVSZXNvdXJjZS5oIFwKIAlXZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZS5jcHAgXAotCVdlYkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwIFwK
LQlXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmggXAotCVdlYkNvcmUvbG9hZGVy
L0NhY2hlZEZvbnQuY3BwIFwKLQlXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250LmggXAotCVdlYkNv
cmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcCBcCi0JV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2Uu
aCBcCisJV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAgXAorCVdl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuaCBcCisJV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAgXAorCVdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZv
bnQuaCBcCisJV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwIFwKKwlXZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oIFwKKwlXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZUNsaWVudC5oIFwKKwlXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUNsaWVudFdhbGtlci5jcHAgXAorCVdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyLmggXAorCVdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNw
cCBcCisJV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaCBcCisJV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwIFwKKwlXZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5oIFwKKwlXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZUxvYWRlci5jcHAgXAorCVdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmggXAorCVdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAgXAor
CVdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5oIFwKKwlXZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcCBcCisJV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkWFNMU3R5bGVTaGVldC5oIFwKKwlXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZS5oIFwKKwlX
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZVBvbGljeS5oIFwKIAlXZWJDb3JlL2xvYWRlci9DYWNo
ZWRNZXRhZGF0YS5oIFwKLQlXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUNsaWVudC5oIFwK
LQlXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5jcHAgXAotCVdlYkNv
cmUvbG9hZGVyL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmggXAotCVdlYkNvcmUvbG9hZGVy
L0NhY2hlZFJlc291cmNlLmNwcCBcCi0JV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaCBc
Ci0JV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwIFwKLQlXZWJDb3JlL2xv
YWRlci9DYWNoZWRSZXNvdXJjZUhhbmRsZS5oIFwKLQlXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNv
dXJjZUxvYWRlci5jcHAgXAotCVdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlTG9hZGVyLmgg
XAotCVdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAgXAotCVdlYkNvcmUvbG9hZGVyL0Nh
Y2hlZFNjcmlwdC5oIFwKLQlXZWJDb3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcCBc
Ci0JV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5oIFwKLQlXZWJDb3JlL2xvYWRl
ci9DYWNoZS5oIFwKLQlXZWJDb3JlL2xvYWRlci9DYWNoZVBvbGljeS5oIFwKIAlXZWJDb3JlL2xv
YWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwIFwKIAlXZWJDb3JlL2xvYWRlci9Dcm9z
c09yaWdpbkFjY2Vzc0NvbnRyb2wuaCBcCiAJV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRSZXN1bHRDYWNoZS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDcxNDkzKQorKysgV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTIwMTMsNiArMjAxMywyNiBAQAogICAg
ICAgICAgICAgJ2xvYWRlci9hcmNoaXZlL0FyY2hpdmVSZXNvdXJjZUNvbGxlY3Rpb24uaCcsCiAg
ICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVy
L2NhY2hlL0NhY2hlLmgnLAorICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHls
ZVNoZWV0LmNwcCcsCisgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hl
ZXQuaCcsCisgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3BwJywKKyAgICAg
ICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oJywKKyAgICAgICAgICAgICdsb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuY3BwJywKKyAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVk
SW1hZ2UuaCcsCisgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcCcs
CisgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgnLAorICAgICAgICAg
ICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oJywKKyAgICAgICAgICAgICds
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuY3BwJywKKyAgICAgICAgICAg
ICdsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCcsCisgICAgICAgICAg
ICAnbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcCcsCisgICAgICAgICAgICAn
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmgnLAorICAgICAgICAgICAgJ2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAnLAorICAgICAgICAgICAgJ2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oJywKKyAgICAgICAgICAgICdsb2FkZXIvY2FjaGUv
Q2FjaGVkU2NyaXB0LmNwcCcsCisgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlw
dC5oJywKKyAgICAgICAgICAgICdsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAn
LAorICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmgnLAorICAg
ICAgICAgICAgJ2xvYWRlci9jYWNoZS9DYWNoZVBvbGljeS5oJywKICAgICAgICAgICAgICdsb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvaWNvbi9JY29u
RGF0YWJhc2UuaCcsCiAgICAgICAgICAgICAnbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQ2xpZW50
LmgnLApAQCAtMjAzMCwzMCArMjA1MCwxMCBAQAogICAgICAgICAgICAgJ2xvYWRlci93aW4vRG9j
dW1lbnRMb2FkZXJXaW4uY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvd2luL0ZyYW1lTG9hZGVy
V2luLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL0NhY2hlZE1ldGFkYXRhLmgnLAotICAgICAg
ICAgICAgJ2xvYWRlci9DYWNoZVBvbGljeS5oJywKLSAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVk
Q1NTU3R5bGVTaGVldC5jcHAnLAotICAgICAgICAgICAgJ2xvYWRlci9DYWNoZWRDU1NTdHlsZVNo
ZWV0LmgnLAotICAgICAgICAgICAgJ2xvYWRlci9DYWNoZWRGb250LmNwcCcsCi0gICAgICAgICAg
ICAnbG9hZGVyL0NhY2hlZEZvbnQuaCcsCi0gICAgICAgICAgICAnbG9hZGVyL0NhY2hlZEltYWdl
LmNwcCcsCi0gICAgICAgICAgICAnbG9hZGVyL0NhY2hlZEltYWdlLmgnLAotICAgICAgICAgICAg
J2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAnLAotICAgICAgICAgICAgJ2xvYWRlci9DYWNoZWRS
ZXNvdXJjZS5oJywKLSAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCcs
Ci0gICAgICAgICAgICAnbG9hZGVyL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcCcsCi0g
ICAgICAgICAgICAnbG9hZGVyL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgnLAotICAgICAg
ICAgICAgJ2xvYWRlci9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAnLAotICAgICAgICAgICAgJ2xv
YWRlci9DYWNoZWRSZXNvdXJjZUhhbmRsZS5oJywKLSAgICAgICAgICAgICdsb2FkZXIvQ2FjaGVk
U2NyaXB0LmNwcCcsCi0gICAgICAgICAgICAnbG9hZGVyL0NhY2hlZFNjcmlwdC5oJywKLSAgICAg
ICAgICAgICdsb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAnLAotICAgICAgICAgICAgJ2xv
YWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9Dcm9zc09y
aWdpbkFjY2Vzc0NvbnRyb2wuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvQ3Jvc3NPcmlnaW5B
Y2Nlc3NDb250cm9sLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGUuaCcsCi0gICAgICAgICAgICAnbG9hZGVyL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcCcsCi0gICAgICAgICAgICAnbG9hZGVyL0NhY2hlZFJlc291cmNlTG9hZGVyLmgnLAog
ICAgICAgICAgICAgJ2xvYWRlci9Eb2N1bWVudExvYWRUaW1pbmcuaCcsCiAgICAgICAgICAgICAn
bG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL0RvY3VtZW50
TG9hZGVyLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA3MTQ5MykKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTEwMzMsMTcgKzEwMzMsMTcgQEAgU09VUkNFUyArPSBcCiAgICAg
bG9hZGVyL2FyY2hpdmUvQXJjaGl2ZVJlc291cmNlLmNwcCBcCiAgICAgbG9hZGVyL2FyY2hpdmUv
QXJjaGl2ZVJlc291cmNlQ29sbGVjdGlvbi5jcHAgXAogICAgIGxvYWRlci9jYWNoZS9DYWNoZS5j
cHAgXAotICAgIGxvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcCBcCi0gICAgbG9hZGVyL0Nh
Y2hlZEZvbnQuY3BwIFwKLSAgICBsb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwIFwKLSAgICBsb2FkZXIv
Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuY3BwIFwKLSAgICBsb2FkZXIvQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGUuY3BwIFwKLSAgICBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwIFwKLSAgICBsb2Fk
ZXIvQ2FjaGVkU2NyaXB0LmNwcCBcCi0gICAgbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3Bw
IFwKKyAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAgXAorICAgIGxvYWRl
ci9jYWNoZS9DYWNoZWRGb250LmNwcCBcCisgICAgbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNw
cCBcCisgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcCBcCisg
ICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcCBcCisgICAgbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmNwcCBcCisgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5j
cHAgXAorICAgIGxvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcCBcCiAgICAgbG9h
ZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAgXAogICAgIGxvYWRlci9Dcm9zc09yaWdp
blByZWZsaWdodFJlc3VsdENhY2hlLmNwcCBcCi0gICAgbG9hZGVyL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcCBcCisgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcCBcCiAg
ICAgbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcCBcCiAgICAgbG9hZGVyL0RvY3VtZW50VGhyZWFk
YWJsZUxvYWRlci5jcHAgXAogICAgIGxvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAgXApAQCAtMTky
MywxOCArMTkyMywxOCBAQCBIRUFERVJTICs9IFwKICAgICBsb2FkZXIvYXJjaGl2ZS9BcmNoaXZl
RmFjdG9yeS5oIFwKICAgICBsb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9u
LmggXAogICAgIGxvYWRlci9hcmNoaXZlL0FyY2hpdmVSZXNvdXJjZS5oIFwKLSAgICBsb2FkZXIv
Q2FjaGVkQ1NTU3R5bGVTaGVldC5oIFwKLSAgICBsb2FkZXIvQ2FjaGVkRm9udC5oIFwKLSAgICBs
b2FkZXIvQ2FjaGVkSW1hZ2UuaCBcCi0gICAgbG9hZGVyL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fs
a2VyLmggXAotICAgIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5oIFwKLSAgICBsb2FkZXIvQ2FjaGVk
UmVzb3VyY2VIYW5kbGUuaCBcCi0gICAgbG9hZGVyL0NhY2hlZFNjcmlwdC5oIFwKLSAgICBsb2Fk
ZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5oIFwKKyAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5
bGVTaGVldC5oIFwKKyAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oIFwKKyAgICBsb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuaCBcCisgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyLmggXAorICAgIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oIFwKKyAgICBs
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCBcCisgICAgbG9hZGVyL2NhY2hlL0Nh
Y2hlZFNjcmlwdC5oIFwKKyAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5oIFwK
ICAgICBsb2FkZXIvY2FjaGUvQ2FjaGUuaCBcCiAgICAgbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNz
Q29udHJvbC5oIFwKICAgICBsb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5o
IFwKLSAgICBsb2FkZXIvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCBcCisgICAgbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlTG9hZGVyLmggXAogICAgIGxvYWRlci9Eb2N1bWVudExvYWRlci5oIFwK
ICAgICBsb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmggXAogICAgIGxvYWRlci9Gb3Jt
U3RhdGUuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlz
aW9uIDcxNDkzKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjM3MDgsODYgKzIzNzA4LDYgQEAKIAkJCU5hbWU9ImxvYWRlciINCiAJ
CQk+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ2FjaGVkQ1NTU3R5
bGVTaGVldC5jcHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxsb2FkZXJcQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIg0KLQkJCQk+DQotCQkJPC9G
aWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENhY2hlZEZvbnQu
Y3BwIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cbG9hZGVyXENhY2hlZEZvbnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0K
LQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxDYWNoZWRJbWFnZS5jcHAiDQotCQkJCT4NCi0J
CQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ2FjaGVk
SW1hZ2UuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGxvYWRlclxDYWNoZWRSZXNvdXJjZS5jcHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQot
CQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ2FjaGVkUmVzb3VyY2UuaCIN
Ci0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxv
YWRlclxDYWNoZWRSZXNvdXJjZUNsaWVudC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxG
aWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENhY2hlZFJlc291cmNlQ2xpZW50V2Fs
a2VyLmNwcCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGxvYWRlclxDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIg0KLQkJCQk+DQotCQkJ
PC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENhY2hlZFJl
c291cmNlSGFuZGxlLmNwcCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIg0KLQkJCQk+DQot
CQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENhY2hl
ZFJlc291cmNlTG9hZGVyLmNwcCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxDYWNoZWRSZXNvdXJjZUxvYWRlci5oIg0KLQkJCQk+
DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENh
Y2hlZFNjcmlwdC5jcHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxsb2FkZXJcQ2FjaGVkU2NyaXB0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+
DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcQ2FjaGVkWFNMU3R5bGVT
aGVldC5jcHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxsb2FkZXJcQ2FjaGVkWFNMU3R5bGVTaGVldC5oIg0KLQkJCQk+DQotCQkJPC9GaWxl
Pg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXENhY2hlUG9saWN5Lmgi
DQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxs
b2FkZXJcQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CkBAIC0yNDI1MCw2ICsyNDE3MCw4NiBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxj
YWNoZVxDYWNoZS5oIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorICAgICAg
ICAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcY2FjaGVcQ2FjaGVkQ1NTU3R5bGVTaGVldC5j
cHAiDQorICAgICAgICAJCQkJPg0KKyAgICAgICAgCQkJPC9GaWxlPg0KKyAgICAgICAgCQkJPEZp
bGUNCisgICAgICAgIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxjYWNoZVxDYWNoZWRDU1NT
dHlsZVNoZWV0LmgiDQorICAgICAgICAJCQkJPg0KKyAgICAgICAgCQkJPC9GaWxlPg0KKyAgICAg
ICAgCQkJPEZpbGUNCisgICAgICAgIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxjYWNoZVxD
YWNoZWRGb250LmNwcCINCisgICAgICAgIAkJCQk+DQorICAgICAgICAJCQk8L0ZpbGU+DQorICAg
ICAgICAJCQk8RmlsZQ0KKyAgICAgICAgCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGNhY2hl
XENhY2hlZEZvbnQuaCINCisgICAgICAgIAkJCQk+DQorICAgICAgICAJCQk8L0ZpbGU+DQorICAg
ICAgICAJCQk8RmlsZQ0KKyAgICAgICAgCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGNhY2hl
XENhY2hlZEltYWdlLmNwcCINCisgICAgICAgIAkJCQk+DQorICAgICAgICAJCQk8L0ZpbGU+DQor
ICAgICAgICAJCQk8RmlsZQ0KKyAgICAgICAgCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGNh
Y2hlXENhY2hlZEltYWdlLmgiDQorICAgICAgICAJCQkJPg0KKyAgICAgICAgCQkJPC9GaWxlPg0K
KyAgICAgICAgCQkJPEZpbGUNCisgICAgICAgIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxj
YWNoZVxDYWNoZWRSZXNvdXJjZS5jcHAiDQorICAgICAgICAJCQkJPg0KKyAgICAgICAgCQkJPC9G
aWxlPg0KKyAgICAgICAgCQkJPEZpbGUNCisgICAgICAgIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxv
YWRlclxjYWNoZVxDYWNoZWRSZXNvdXJjZS5oIg0KKyAgICAgICAgCQkJCT4NCisgICAgICAgIAkJ
CTwvRmlsZT4NCisgICAgICAgIAkJCTxGaWxlDQorICAgICAgICAJCQkJUmVsYXRpdmVQYXRoPSIu
Llxsb2FkZXJcY2FjaGVcQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCINCisgICAgICAgIAkJCQk+DQor
ICAgICAgICAJCQk8L0ZpbGU+DQorICAgICAgICAJCQk8RmlsZQ0KKyAgICAgICAgCQkJCVJlbGF0
aXZlUGF0aD0iLi5cbG9hZGVyXGNhY2hlXENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcCIN
CisgICAgICAgIAkJCQk+DQorICAgICAgICAJCQk8L0ZpbGU+DQorICAgICAgICAJCQk8RmlsZQ0K
KyAgICAgICAgCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGNhY2hlXENhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyLmgiDQorICAgICAgICAJCQkJPg0KKyAgICAgICAgCQkJPC9GaWxlPg0KKyAg
ICAgICAgCQkJPEZpbGUNCisgICAgICAgIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxjYWNo
ZVxDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAiDQorICAgICAgICAJCQkJPg0KKyAgICAgICAgCQkJ
PC9GaWxlPg0KKyAgICAgICAgCQkJPEZpbGUNCisgICAgICAgIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGxvYWRlclxjYWNoZVxDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIg0KKyAgICAgICAgCQkJCT4NCisg
ICAgICAgIAkJCTwvRmlsZT4NCisgICAgICAgIAkJCTxGaWxlDQorICAgICAgICAJCQkJUmVsYXRp
dmVQYXRoPSIuLlxsb2FkZXJcY2FjaGVcQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwIg0KKyAgICAg
ICAgCQkJCT4NCisgICAgICAgIAkJCTwvRmlsZT4NCisgICAgICAgIAkJCTxGaWxlDQorICAgICAg
ICAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcY2FjaGVcQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
aCINCisgICAgICAgIAkJCQk+DQorICAgICAgICAJCQk8L0ZpbGU+DQorICAgICAgICAJCQk8Rmls
ZQ0KKyAgICAgICAgCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGNhY2hlXENhY2hlZFNjcmlw
dC5jcHAiDQorICAgICAgICAJCQkJPg0KKyAgICAgICAgCQkJPC9GaWxlPg0KKyAgICAgICAgCQkJ
PEZpbGUNCisgICAgICAgIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxjYWNoZVxDYWNoZWRT
Y3JpcHQuaCINCisgICAgICAgIAkJCQk+DQorICAgICAgICAJCQk8L0ZpbGU+DQorICAgICAgICAJ
CQk8RmlsZQ0KKyAgICAgICAgCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGNhY2hlXENhY2hl
ZFhTTFN0eWxlU2hlZXQuY3BwIg0KKyAgICAgICAgCQkJCT4NCisgICAgICAgIAkJCTwvRmlsZT4N
CisgICAgICAgIAkJCTxGaWxlDQorICAgICAgICAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJc
Y2FjaGVcQ2FjaGVkWFNMU3R5bGVTaGVldC5oIg0KKyAgICAgICAgCQkJCT4NCisgICAgICAgIAkJ
CTwvRmlsZT4NCisgICAgICAgIAkJCTxGaWxlDQorICAgICAgICAJCQkJUmVsYXRpdmVQYXRoPSIu
Llxsb2FkZXJcY2FjaGVcQ2FjaGVQb2xpY3kuaCINCisgICAgICAgIAkJCQk+DQorICAgICAgICAJ
CQk8L0ZpbGU+DQogCQkJPC9GaWx0ZXI+DQogCQk8L0ZpbHRlcj4NCiAJCTxGaWx0ZXINCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzE0
OTMpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTE1MzEsNyArMTE1MzEsNiBAQAogCQlFNDQ2MTQxMjBDRDY4MjY5MDBGQURB
NzUgLyogSlNUaW1lUmFuZ2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTVGltZVJhbmdlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYx
NDEzMENENjgyNjkwMEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNUaW1lUmFuZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0NjJBNEEwMTEzRTcxQkUwMDRBNDIyMCAvKiBJbnRQb2ludEhhc2guaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50UG9pbnRIYXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUU0NzIwNTNBMEU1QTA1M0EwMDA2QkI0RCAvKiBDYWNoZWRSZXNvdXJjZUhh
bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRSZXNvdXJjZUhh
bmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDc3OEI3RDExNUE1ODFBMDBC
NUQzNzIgLyogSlNDdXN0b21FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0N1c3RvbUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQ3NzhCN0UxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3VzdG9tRXZlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDdXN0b21FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFNDdCNEJFNjBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5k
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVkUmVzb3VyY2VIYW5k
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MDI0LDYgKzE2MDIzLDI2IEBA
CiAJCUE4RDJCMjUyMTI4N0E1NjAwMEFGNEREQSAvKiBjYWNoZSAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQkNCMTZDMDAwOTc5QzNCRDAwNDY3NzQxIC8q
IENhY2hlZENTU1N0eWxlU2hlZXQuY3BwICovLAorCQkJCUJDQjE2QzAxMDk3OUMzQkQwMDQ2Nzc0
MSAvKiBDYWNoZWRDU1NTdHlsZVNoZWV0LmggKi8sCisJCQkJQkM2NEI0QzkwQ0I0Mjk1RDAwNUYy
QjYyIC8qIENhY2hlZEZvbnQuY3BwICovLAorCQkJCUJDNjRCNENBMENCNDI5NUQwMDVGMkI2MiAv
KiBDYWNoZWRGb250LmggKi8sCisJCQkJQkNCMTZDMDIwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hl
ZEltYWdlLmNwcCAqLywKKwkJCQlCQ0IxNkMwMzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkSW1h
Z2UuaCAqLywKKwkJCQlCQ0IxNkMwNjA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2Uu
Y3BwICovLAorCQkJCUJDQjE2QzA3MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRSZXNvdXJjZS5o
ICovLAorCQkJCUJDRkIyRTVEMDk3OUU0NjQwMEJBNzAzRCAvKiBDYWNoZWRSZXNvdXJjZUNsaWVu
dC5oICovLAorCQkJCUJDQjE2QzA4MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlci5jcHAgKi8sCisJCQkJQkNCMTZDMDkwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hl
ZFJlc291cmNlQ2xpZW50V2Fsa2VyLmggKi8sCisJCQkJRTQ3QjRCRTcwRTcxMjQxNjAwMDM4ODU0
IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNwcCAqLywKKwkJCQlFNDdCNEJFNjBFNzEyNDE2MDAw
Mzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCAqLywKKwkJCQlCQ0IxNkMxMDA5NzlDM0JE
MDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwICovLAorCQkJCUJDQjE2QzExMDk3
OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRSZXNvdXJjZUxvYWRlci5oICovLAorCQkJCUJDQjE2QzBB
MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRTY3JpcHQuY3BwICovLAorCQkJCUJDQjE2QzBCMDk3
OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRTY3JpcHQuaCAqLywKKwkJCQlCQ0IxNkMwRTA5NzlDM0JE
MDA0Njc3NDEgLyogQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAgKi8sCisJCQkJQkNCMTZDMEYwOTc5
QzNCRDAwNDY3NzQxIC8qIENhY2hlZFhTTFN0eWxlU2hlZXQuaCAqLywKKwkJCQlGNTg3ODY0OTAy
REUzQTlBMDFFQTQxMjIgLyogQ2FjaGVQb2xpY3kuaCAqLywKIAkJCQlCQ0IxNkJGRTA5NzlDM0JE
MDA0Njc3NDEgLyogQ2FjaGUuY3BwICovLAogCQkJCUJDQjE2QkZGMDk3OUMzQkQwMDQ2Nzc0MSAv
KiBDYWNoZS5oICovLAogCQkJKTsKQEAgLTE3MjU4LDI3ICsxNzI3Nyw2IEBACiAJCQkJNTEyREQ4
RTgwRDkxRTY5MTAwMEY4OUVFIC8qIGFyY2hpdmUgKi8sCiAJCQkJNTEyNkU2QjYwQTJFM0FFRjAw
NUMyOUZBIC8qIGljb24gKi8sCiAJCQkJOTNBMUVBQTIwQTU2MzREODAwNjk2MEEwIC8qIG1hYyAq
LywKLQkJCQlCQ0IxNkMwMDA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkQ1NTU3R5bGVTaGVldC5j
cHAgKi8sCi0JCQkJQkNCMTZDMDEwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZENTU1N0eWxlU2hl
ZXQuaCAqLywKLQkJCQlCQzY0QjRDOTBDQjQyOTVEMDA1RjJCNjIgLyogQ2FjaGVkRm9udC5jcHAg
Ki8sCi0JCQkJQkM2NEI0Q0EwQ0I0Mjk1RDAwNUYyQjYyIC8qIENhY2hlZEZvbnQuaCAqLywKLQkJ
CQlCQ0IxNkMwMjA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkSW1hZ2UuY3BwICovLAotCQkJCUJD
QjE2QzAzMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRJbWFnZS5oICovLAotCQkJCUJDQjE2QzA2
MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRSZXNvdXJjZS5jcHAgKi8sCi0JCQkJQkNCMTZDMDcw
OTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFJlc291cmNlLmggKi8sCi0JCQkJQkNGQjJFNUQwOTc5
RTQ2NDAwQkE3MDNEIC8qIENhY2hlZFJlc291cmNlQ2xpZW50LmggKi8sCi0JCQkJQkNCMTZDMDgw
OTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcCAqLywKLQkJ
CQlCQ0IxNkMwOTA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIu
aCAqLywKLQkJCQlFNDdCNEJFNzBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5k
bGUuY3BwICovLAotCQkJCUU0N0I0QkU2MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJj
ZUhhbmRsZS5oICovLAotCQkJCUU0NzIwNTNBMEU1QTA1M0EwMDA2QkI0RCAvKiBDYWNoZWRSZXNv
dXJjZUhhbmRsZS5oICovLAotCQkJCUJDQjE2QzEwMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRS
ZXNvdXJjZUxvYWRlci5jcHAgKi8sCi0JCQkJQkNCMTZDMTEwOTc5QzNCRDAwNDY3NzQxIC8qIENh
Y2hlZFJlc291cmNlTG9hZGVyLmggKi8sCi0JCQkJQkNCMTZDMEEwOTc5QzNCRDAwNDY3NzQxIC8q
IENhY2hlZFNjcmlwdC5jcHAgKi8sCi0JCQkJQkNCMTZDMEIwOTc5QzNCRDAwNDY3NzQxIC8qIENh
Y2hlZFNjcmlwdC5oICovLAotCQkJCUJDQjE2QzBFMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRY
U0xTdHlsZVNoZWV0LmNwcCAqLywKLQkJCQlCQ0IxNkMwRjA5NzlDM0JEMDA0Njc3NDEgLyogQ2Fj
aGVkWFNMU3R5bGVTaGVldC5oICovLAotCQkJCUY1ODc4NjQ5MDJERTNBOUEwMUVBNDEyMiAvKiBD
YWNoZVBvbGljeS5oICovLAogCQkJCUUxQzQxNjE2MEY2NTYzMTgwMDkyRDJGQiAvKiBDcm9zc09y
aWdpbkFjY2Vzc0NvbnRyb2wuY3BwICovLAogCQkJCUUxQzQxNjExMEY2NTYyRkQwMDkyRDJGQiAv
KiBDcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaCAqLywKIAkJCQlFMUM0MTVERDBGNjU1RDdDMDA5
MkQyRkIgLyogQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgKi8sCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9DYWNoZVBvbGljeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0NhY2hlUG9saWN5LmgJKHJldmlzaW9uIDcxNDkzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVQ
b2xpY3kuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIENhY2hlUG9saWN5X2gKLSNkZWZpbmUgQ2FjaGVQb2xpY3lfaAot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBlbnVtIENhY2hlUG9saWN5IHsKLSAgICAgICAg
Q2FjaGVQb2xpY3lDYWNoZSwKLSAgICAgICAgQ2FjaGVQb2xpY3lWZXJpZnksCi0gICAgICAgIENh
Y2hlUG9saWN5UmV2YWxpZGF0ZSwKLSAgICAgICAgQ2FjaGVQb2xpY3lSZWxvYWQsCi0gICAgICAg
IENhY2hlUG9saWN5QWxsb3dTdGFsZQotICAgIH07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gNzE0OTMpCisrKyBXZWJD
b3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwx
NTEgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxA
bXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3Rp
YW5Aa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndl
aW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0
eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSAgICBw
YWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0
cy4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNo
ZWV0LmgiCi0KLSNpbmNsdWRlICJDYWNoZS5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKLSNpbmNsdWRl
ICJIVFRQUGFyc2Vycy5oIgotI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKLSNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJsb2FkZXIuaCIKLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ2FjaGVkQ1NTU3R5bGVTaGVldDo6
Q2FjaGVkQ1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0KQotICAgIDogQ2FjaGVkUmVzb3VyY2UodXJsLCBDU1NTdHlsZVNoZWV0KQotICAgICwgbV9k
ZWNvZGVyKFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9jc3MiLCBjaGFyc2V0KSkK
LXsKLSAgICAvLyBQcmVmZXIgdGV4dC9jc3MgYnV0IGFjY2VwdCBhbnkgdHlwZSAoZGVsbC5jb20g
c2VydmVzIGEgc3R5bGVzaGVldAotICAgIC8vIGFzIHRleHQvaHRtbDsgc2VlIDxodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ1MT4pLgotICAgIHNldEFjY2VwdCgidGV4
dC9jc3MsKi8qO3E9MC4xIik7Ci19Ci0KLUNhY2hlZENTU1N0eWxlU2hlZXQ6On5DYWNoZWRDU1NT
dHlsZVNoZWV0KCkKLXsKLX0KLQotdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpkaWRBZGRDbGll
bnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQgKmMpCi17Ci0gICAgaWYgKCFpc0xvYWRpbmcoKSkKLSAg
ICAgICAgYy0+c2V0Q1NTU3R5bGVTaGVldChtX3VybCwgbV9yZXNwb25zZS51cmwoKSwgbV9kZWNv
ZGVyLT5lbmNvZGluZygpLm5hbWUoKSwgdGhpcyk7Ci19Ci0KLXZvaWQgQ2FjaGVkQ1NTU3R5bGVT
aGVldDo6YWxsQ2xpZW50c1JlbW92ZWQoKQotewotICAgIGlmICghQ2FjaGU6OnNob3VsZE1ha2VS
ZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24oKSAmJiBpc1NhZmVUb01ha2VQdXJnZWFibGUoKSkK
LSAgICAgICAgbWFrZVB1cmdlYWJsZSh0cnVlKTsKLX0KLQotdm9pZCBDYWNoZWRDU1NTdHlsZVNo
ZWV0OjpzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGNocykKLXsKLSAgICBtX2RlY29kZXItPnNl
dEVuY29kaW5nKGNocywgVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5jb2RpbmdGcm9tSFRUUEhlYWRl
cik7Ci19Ci0KLVN0cmluZyBDYWNoZWRDU1NTdHlsZVNoZWV0OjplbmNvZGluZygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCk7Ci19Ci0gICAgCi1jb25z
dCBTdHJpbmcgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6c2hlZXRUZXh0KGJvb2wgZW5mb3JjZU1JTUVU
eXBlLCBib29sKiBoYXNWYWxpZE1JTUVUeXBlKSBjb25zdCAKLXsgCi0gICAgQVNTRVJUKCFpc1B1
cmdlYWJsZSgpKTsKLQotICAgIGlmICghbV9kYXRhIHx8IG1fZGF0YS0+aXNFbXB0eSgpIHx8ICFj
YW5Vc2VTaGVldChlbmZvcmNlTUlNRVR5cGUsIGhhc1ZhbGlkTUlNRVR5cGUpKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgCi0gICAgaWYgKCFtX2RlY29kZWRTaGVldFRleHQuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBtX2RlY29kZWRTaGVldFRleHQ7Ci0gICAgCi0gICAgLy8gRG9u
J3QgY2FjaGUgdGhlIGRlY29kZWQgdGV4dCwgcmVnZW5lcmF0aW5nIGlzIGNoZWFwIGFuZCBpdCBj
YW4gdXNlIHF1aXRlIGEgYml0IG9mIG1lbW9yeQotICAgIFN0cmluZyBzaGVldFRleHQgPSBtX2Rl
Y29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwotICAgIHNoZWV0
VGV4dCArPSBtX2RlY29kZXItPmZsdXNoKCk7Ci0gICAgcmV0dXJuIHNoZWV0VGV4dDsKLX0KLQot
dm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICBpZiAoIWFsbERhdGFSZWNlaXZlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhID0gZGF0YTsKLSAgICBzZXRFbmNvZGVkU2l6
ZShtX2RhdGEuZ2V0KCkgPyBtX2RhdGEtPnNpemUoKSA6IDApOwotICAgIC8vIERlY29kZSB0aGUg
ZGF0YSB0byBmaW5kIG91dCB0aGUgZW5jb2RpbmcgYW5kIGtlZXAgdGhlIHNoZWV0IHRleHQgYXJv
dW5kIGR1cmluZyBjaGVja05vdGlmeSgpCi0gICAgaWYgKG1fZGF0YSkgewotICAgICAgICBtX2Rl
Y29kZWRTaGVldFRleHQgPSBtX2RlY29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRh
LT5zaXplKCkpOwotICAgICAgICBtX2RlY29kZWRTaGVldFRleHQgKz0gbV9kZWNvZGVyLT5mbHVz
aCgpOwotICAgIH0KLSAgICBzZXRMb2FkaW5nKGZhbHNlKTsKLSAgICBjaGVja05vdGlmeSgpOwot
ICAgIC8vIENsZWFyIHRoZSBkZWNvZGVkIHRleHQgYXMgaXQgaXMgdW5saWtlbHkgdG8gYmUgbmVl
ZGVkIGltbWVkaWF0ZWx5IGFnYWluIGFuZCBpcyBjaGVhcCB0byByZWdlbmVyYXRlLgotICAgIG1f
ZGVjb2RlZFNoZWV0VGV4dCA9IFN0cmluZygpOwotfQotCi12b2lkIENhY2hlZENTU1N0eWxlU2hl
ZXQ6OmNoZWNrTm90aWZ5KCkKLXsKLSAgICBpZiAoaXNMb2FkaW5nKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKLSAgICB3
aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQgKmMgPSB3Lm5leHQoKSkKLSAgICAgICAgYy0+c2V0
Q1NTU3R5bGVTaGVldChtX3VybCwgbV9yZXNwb25zZS51cmwoKSwgbV9kZWNvZGVyLT5lbmNvZGlu
ZygpLm5hbWUoKSwgdGhpcyk7Ci19Ci0KLXZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6ZXJyb3Io
KQotewotICAgIHNldExvYWRpbmcoZmFsc2UpOwotICAgIHNldEVycm9yT2NjdXJyZWQodHJ1ZSk7
Ci0gICAgY2hlY2tOb3RpZnkoKTsKLX0KLQotYm9vbCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpjYW5V
c2VTaGVldChib29sIGVuZm9yY2VNSU1FVHlwZSwgYm9vbCogaGFzVmFsaWRNSU1FVHlwZSkgY29u
c3QKLXsKLSAgICBpZiAoZXJyb3JPY2N1cnJlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIAotICAgIGlmICghZW5mb3JjZU1JTUVUeXBlICYmICFoYXNWYWxpZE1JTUVUeXBlKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFRoaXMgY2hlY2sgZXhhY3RseSBtYXRjaGVz
IEZpcmVmb3guICBOb3RlIHRoYXQgd2UgZ3JhYiB0aGUgQ29udGVudC1UeXBlCi0gICAgLy8gaGVh
ZGVyIGRpcmVjdGx5IGJlY2F1c2Ugd2Ugd2FudCB0byBzZWUgd2hhdCB0aGUgdmFsdWUgaXMgQkVG
T1JFIGNvbnRlbnQKLSAgICAvLyBzbmlmZmluZy4gIEZpcmVmb3ggZG9lcyB0aGlzIGJ5IHNldHRp
bmcgYSAidHlwZSBoaW50IiBvbiB0aGUgY2hhbm5lbC4KLSAgICAvLyBUaGlzIGltcGxlbWVudGF0
aW9uIHNob3VsZCBiZSBvYnNlcnZhdGlvbmFsbHkgZXF1aXZhbGVudC4KLSAgICAvLwotICAgIC8v
IFRoaXMgY29kZSBkZWZhdWx0cyB0byBhbGxvd2luZyB0aGUgc3R5bGVzaGVldCBmb3Igbm9uLUhU
VFAgcHJvdG9jb2xzIHNvCi0gICAgLy8gZm9sa3MgY2FuIHVzZSBzdGFuZGFyZHMgbW9kZSBmb3Ig
bG9jYWwgSFRNTCBkb2N1bWVudHMuCi0gICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVU
eXBlRnJvbU1lZGlhVHlwZShyZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBl
IikpOwotICAgIGJvb2wgdHlwZU9LID0gbWltZVR5cGUuaXNFbXB0eSgpIHx8IGVxdWFsSWdub3Jp
bmdDYXNlKG1pbWVUeXBlLCAidGV4dC9jc3MiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlw
ZSwgImFwcGxpY2F0aW9uL3gtdW5rbm93bi1jb250ZW50LXR5cGUiKTsKLSAgICBpZiAoaGFzVmFs
aWRNSU1FVHlwZSkKLSAgICAgICAgKmhhc1ZhbGlkTUlNRVR5cGUgPSB0eXBlT0s7Ci0gICAgaWYg
KCFlbmZvcmNlTUlNRVR5cGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiB0eXBl
T0s7Ci19Ci0gCi19CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCShyZXZp
c2lvbiA3MTQ5MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OCBM
YXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2Ft
dWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0K
LSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9h
ZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdl
Yi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgotKi8KLQotI2lmbmRl
ZiBDYWNoZWRDU1NTdHlsZVNoZWV0X2gKLSNkZWZpbmUgQ2FjaGVkQ1NTU3R5bGVTaGVldF9oCi0K
LSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xh
c3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci0gICAgY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsK
LQotICAgIGNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2Ug
ewotICAgIHB1YmxpYzoKLSAgICAgICAgQ2FjaGVkQ1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcm
IFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKLSAgICAgICAgdmlydHVhbCB+Q2FjaGVkQ1NT
U3R5bGVTaGVldCgpOwotCi0gICAgICAgIGNvbnN0IFN0cmluZyBzaGVldFRleHQoYm9vbCBlbmZv
cmNlTUlNRVR5cGUgPSB0cnVlLCBib29sKiBoYXNWYWxpZE1JTUVUeXBlID0gMCkgY29uc3Q7Ci0K
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCop
OwotICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFsbENsaWVudHNSZW1vdmVkKCk7Ci0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYpOwotICAgICAg
ICB2aXJ0dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZXJyb3IoKTsKLQotICAgICAgICB2b2lkIGNoZWNrTm90
aWZ5KCk7Ci0gICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBjYW5Vc2VTaGVldChib29s
IGVuZm9yY2VNSU1FVHlwZSwgYm9vbCogaGFzVmFsaWRNSU1FVHlwZSkgY29uc3Q7Ci0gICAgICAg
IHZpcnR1YWwgUHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gUHVy
Z2VMYXN0OyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VE
ZWNvZGVyPiBtX2RlY29kZXI7Ci0gICAgICAgIFN0cmluZyBtX2RlY29kZWRTaGVldFRleHQ7Ci0g
ICAgfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCShyZXZpc2lvbiA3
MTQ5MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDIxNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3Jj
aCBNb2JpbGUsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNh
Y2hlZEZvbnQuaCIKLQotI2lmIFBMQVRGT1JNKENHKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oR1RLKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIChPUyhXSU5ET1dTKSB8fCBPUyhMSU5V
WCkgfHwgT1MoRlJFRUJTRCkpKSB8fCBQTEFURk9STShIQUlLVSkgfHwgT1MoV0lOQ0UpIHx8IFBM
QVRGT1JNKEFORFJPSUQpIHx8IFBMQVRGT1JNKEJSRVdNUCkKLSNkZWZpbmUgU1RPUkVfRk9OVF9D
VVNUT01fUExBVEZPUk1fREFUQQotI2VuZGlmCi0KLSNpbmNsdWRlICJDYWNoZS5oIgotI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGll
bnRXYWxrZXIuaCIKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCi0jaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUg
ImxvYWRlci5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmZGVmIFNUT1JFX0ZPTlRf
Q1VTVE9NX1BMQVRGT1JNX0RBVEEKLSNpbmNsdWRlICJGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmgi
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgi
Ci0jaW5jbHVkZSAiTm9kZUxpc3QuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHRm9udEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdHRWxlbWVudC5oIgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ2FjaGVkRm9udDo6Q2FjaGVkRm9udChjb25zdCBTdHJp
bmcgJnVybCkKLSAgICA6IENhY2hlZFJlc291cmNlKHVybCwgRm9udFJlc291cmNlKQotICAgICwg
bV9mb250RGF0YSgwKQotICAgICwgbV9sb2FkSW5pdGlhdGVkKGZhbHNlKQotI2lmIEVOQUJMRShT
VkdfRk9OVFMpCi0gICAgLCBtX2lzU1ZHRm9udChmYWxzZSkKLSNlbmRpZgotewotfQotCi1DYWNo
ZWRGb250Ojp+Q2FjaGVkRm9udCgpCi17Ci0jaWZkZWYgU1RPUkVfRk9OVF9DVVNUT01fUExBVEZP
Uk1fREFUQQotICAgIGRlbGV0ZSBtX2ZvbnREYXRhOwotI2VuZGlmCi19Ci0KLXZvaWQgQ2FjaGVk
Rm9udDo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciopCi17Ci0gICAgLy8gRG9uJ3QgbG9hZCB0
aGUgZmlsZSB5ZXQuICBXYWl0IGZvciBhbiBhY2Nlc3MgYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGxv
YWQuCi0gICAgc2V0TG9hZGluZyh0cnVlKTsKLX0KLQotdm9pZCBDYWNoZWRGb250OjpkaWRBZGRD
bGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGMpCi17Ci0gICAgaWYgKCFpc0xvYWRpbmcoKSkK
LSAgICAgICAgYy0+Zm9udExvYWRlZCh0aGlzKTsKLX0KLQotdm9pZCBDYWNoZWRGb250OjpkYXRh
KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsK
LSAgICBpZiAoIWFsbERhdGFSZWNlaXZlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRh
ID0gZGF0YTsgICAgIAotICAgIHNldEVuY29kZWRTaXplKG1fZGF0YS5nZXQoKSA/IG1fZGF0YS0+
c2l6ZSgpIDogMCk7Ci0gICAgc2V0TG9hZGluZyhmYWxzZSk7Ci0gICAgY2hlY2tOb3RpZnkoKTsK
LX0KLQotdm9pZCBDYWNoZWRGb250OjpiZWdpbkxvYWRJZk5lZWRlZChDYWNoZWRSZXNvdXJjZUxv
YWRlciogZGwpCi17Ci0gICAgaWYgKCFtX2xvYWRJbml0aWF0ZWQpIHsKLSAgICAgICAgbV9sb2Fk
SW5pdGlhdGVkID0gdHJ1ZTsKLSAgICAgICAgY2FjaGUoKS0+bG9hZGVyKCktPmxvYWQoZGwsIHRo
aXMsIGZhbHNlKTsKLSAgICB9Ci19Ci0KLWJvb2wgQ2FjaGVkRm9udDo6ZW5zdXJlQ3VzdG9tRm9u
dERhdGEoKQotewotI2lmZGVmIFNUT1JFX0ZPTlRfQ1VTVE9NX1BMQVRGT1JNX0RBVEEKLSNpZiBF
TkFCTEUoU1ZHX0ZPTlRTKQotICAgIEFTU0VSVCghbV9pc1NWR0ZvbnQpOwotI2VuZGlmCi0gICAg
aWYgKCFtX2ZvbnREYXRhICYmICFlcnJvck9jY3VycmVkKCkgJiYgIWlzTG9hZGluZygpICYmIG1f
ZGF0YSkgewotICAgICAgICBtX2ZvbnREYXRhID0gY3JlYXRlRm9udEN1c3RvbVBsYXRmb3JtRGF0
YShtX2RhdGEuZ2V0KCkpOwotICAgICAgICBpZiAoIW1fZm9udERhdGEpCi0gICAgICAgICAgICBz
ZXRFcnJvck9jY3VycmVkKHRydWUpOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBtX2ZvbnRE
YXRhOwotfQotCi1Gb250UGxhdGZvcm1EYXRhIENhY2hlZEZvbnQ6OnBsYXRmb3JtRGF0YUZyb21D
dXN0b21EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIEZvbnRPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwgRm9udFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKLXsKLSNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmIChtX2V4dGVybmFsU1ZHRG9jdW1lbnQpCi0gICAg
ICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKHNpemUsIGJvbGQsIGl0YWxpYyk7Ci0jZW5kaWYK
LSNpZmRlZiBTVE9SRV9GT05UX0NVU1RPTV9QTEFURk9STV9EQVRBCi0gICAgQVNTRVJUKG1fZm9u
dERhdGEpOwotICAgIHJldHVybiBtX2ZvbnREYXRhLT5mb250UGxhdGZvcm1EYXRhKHN0YXRpY19j
YXN0PGludD4oc2l6ZSksIGJvbGQsIGl0YWxpYywgb3JpZW50YXRpb24sIHJlbmRlcmluZ01vZGUp
OwotI2Vsc2UKLSAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YSgpOwotI2VuZGlmCi19Ci0KLSNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQotYm9vbCBDYWNoZWRGb250OjplbnN1cmVTVkdGb250RGF0YSgp
Ci17Ci0gICAgQVNTRVJUKG1faXNTVkdGb250KTsKLSAgICBpZiAoIW1fZXh0ZXJuYWxTVkdEb2N1
bWVudCAmJiAhZXJyb3JPY2N1cnJlZCgpICYmICFpc0xvYWRpbmcoKSAmJiBtX2RhdGEpIHsKLSAg
ICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50ID0gU1ZHRG9jdW1lbnQ6OmNyZWF0ZSgwLCBLVVJM
KCkpOwotICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQtPm9wZW4oKTsKLQotICAgICAgICBS
ZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6
OmNyZWF0ZSgiYXBwbGljYXRpb24veG1sIik7Ci0gICAgICAgIG1fZXh0ZXJuYWxTVkdEb2N1bWVu
dC0+d3JpdGUoZGVjb2Rlci0+ZGVjb2RlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSkp
OwotICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQtPndyaXRlKGRlY29kZXItPmZsdXNoKCkp
OwotICAgICAgICBpZiAoZGVjb2Rlci0+c2F3RXJyb3IoKSkgewotICAgICAgICAgICAgbV9leHRl
cm5hbFNWR0RvY3VtZW50LmNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
fQotCi0gICAgICAgIG1fZXh0ZXJuYWxTVkdEb2N1bWVudC0+ZmluaXNoUGFyc2luZygpOwotICAg
ICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQtPmNsb3NlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IG1fZXh0ZXJuYWxTVkdEb2N1bWVudDsKLX0KLQotU1ZHRm9udEVsZW1lbnQqIENhY2hlZEZvbnQ6
OmdldFNWR0ZvbnRCeUlkKGNvbnN0IFN0cmluZyYgZm9udE5hbWUpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1faXNTVkdGb250KTsKLSAgICBSZWZQdHI8Tm9kZUxpc3Q+IGxpc3QgPSBtX2V4dGVybmFs
U1ZHRG9jdW1lbnQtPmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoU1ZHTmFtZXM6OmZvbnRUYWcubmFt
ZXNwYWNlVVJJKCksIFNWR05hbWVzOjpmb250VGFnLmxvY2FsTmFtZSgpKTsKLSAgICBpZiAoIWxp
c3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdW5zaWduZWQgbGlzdExlbmd0aCA9IGxpc3Qt
Pmxlbmd0aCgpOwotICAgIGlmICghbGlzdExlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3RMZW5ndGg7ICsr
aSkgewotICAgICAgICBBU1NFUlQobGlzdC0+aXRlbShpKSk7Ci0gICAgICAgIEFTU0VSVChsaXN0
LT5pdGVtKGkpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmb250VGFnKSk7Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICBpZiAoZm9udE5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U1ZHRm9udEVsZW1lbnQqPihsaXN0LT5pdGVtKDApKTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgU1ZHRm9udEVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdGb250RWxlbWVudCo+KGxpc3QtPml0ZW0oaSkpOwotICAg
ICAgICBpZiAoZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBmb250TmFtZSkKLSAgICAgICAg
ICAgIHJldHVybiBlbGVtZW50OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0K
LXZvaWQgQ2FjaGVkRm9udDo6YWxsQ2xpZW50c1JlbW92ZWQoKQotewotI2lmZGVmIFNUT1JFX0ZP
TlRfQ1VTVE9NX1BMQVRGT1JNX0RBVEEKLSAgICBpZiAobV9mb250RGF0YSkgewotICAgICAgICBk
ZWxldGUgbV9mb250RGF0YTsKLSAgICAgICAgbV9mb250RGF0YSA9IDA7Ci0gICAgfQotI2VuZGlm
Ci19Ci0KLXZvaWQgQ2FjaGVkRm9udDo6Y2hlY2tOb3RpZnkoKQotewotICAgIGlmIChpc0xvYWRp
bmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fs
a2VyIHcobV9jbGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQgKmMgPSB3
Lm5leHQoKSkKLSAgICAgICAgIGMtPmZvbnRMb2FkZWQodGhpcyk7Ci19Ci0KLQotdm9pZCBDYWNo
ZWRGb250OjplcnJvcigpCi17Ci0gICAgc2V0TG9hZGluZyhmYWxzZSk7Ci0gICAgc2V0RXJyb3JP
Y2N1cnJlZCh0cnVlKTsKLSAgICBjaGVja05vdGlmeSgpOwotfQotCi19CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRGb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
Rm9udC5oCShyZXZpc2lvbiA3MTQ5MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBD
YWNoZWRGb250X2gKLSNkZWZpbmUgQ2FjaGVkRm9udF9oCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZS5oIgotI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIkZvbnRSZW5k
ZXJpbmdNb2RlLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgRU5BQkxFKFNWR19G
T05UUykKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIK
LSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hlZFJlc291cmNlTG9h
ZGVyOwotY2xhc3MgQ2FjaGU7Ci1jbGFzcyBGb250UGxhdGZvcm1EYXRhOwotY2xhc3MgU1ZHRm9u
dEVsZW1lbnQ7Ci0KLXN0cnVjdCBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOwotCi1jbGFzcyBDYWNo
ZWRGb250IDogcHVibGljIENhY2hlZFJlc291cmNlIHsKLXB1YmxpYzoKLSAgICBDYWNoZWRGb250
KGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2aXJ0dWFsIH5DYWNoZWRGb250KCk7Ci0gICAgCi0g
ICAgdmlydHVhbCB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNl
TG9hZGVyKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VD
bGllbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
ZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwotICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOwot
Ci0gICAgdmlydHVhbCB2b2lkIGFsbENsaWVudHNSZW1vdmVkKCk7Ci0KLSAgICB2b2lkIGNoZWNr
Tm90aWZ5KCk7Ci0KLSAgICB2b2lkIGJlZ2luTG9hZElmTmVlZGVkKENhY2hlZFJlc291cmNlTG9h
ZGVyKiBkbCk7Ci0KLSAgICBib29sIGVuc3VyZUN1c3RvbUZvbnREYXRhKCk7Ci0gICAgRm9udFBs
YXRmb3JtRGF0YSBwbGF0Zm9ybURhdGFGcm9tQ3VzdG9tRGF0YShmbG9hdCBzaXplLCBib29sIGJv
bGQsIGJvb2wgaXRhbGljLCBGb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsLCBGb250UmVuZGVy
aW5nTW9kZSA9IE5vcm1hbFJlbmRlcmluZ01vZGUpOwotCi0jaWYgRU5BQkxFKFNWR19GT05UUykK
LSAgICBib29sIGlzU1ZHRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTVkdGb250OyB9Ci0gICAg
dm9pZCBzZXRTVkdGb250KGJvb2wgaXNTVkcpIHsgbV9pc1NWR0ZvbnQgPSBpc1NWRzsgfQotICAg
IGJvb2wgZW5zdXJlU1ZHRm9udERhdGEoKTsKLSAgICBTVkdGb250RWxlbWVudCogZ2V0U1ZHRm9u
dEJ5SWQoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBGb250
Q3VzdG9tUGxhdGZvcm1EYXRhKiBtX2ZvbnREYXRhOwotICAgIGJvb2wgbV9sb2FkSW5pdGlhdGVk
OwotCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBib29sIG1faXNTVkdGb250OwotICAgIFJl
ZlB0cjxTVkdEb2N1bWVudD4gbV9leHRlcm5hbFNWR0RvY3VtZW50OwotI2VuZGlmCi0KLSAgICBm
cmllbmQgY2xhc3MgQ2FjaGU7Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZElt
YWdlLmNwcAkocmV2aXNpb24gNzE0OTMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzg2ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChD
KSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCi0gICAgQ29weXJpZ2h0IChD
KSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykg
MjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAy
MDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICAgIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0KLSNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkNhY2hlLmgiCi0jaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VDbGllbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtl
ci5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWUu
aCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
Ci0jaW5jbHVkZSAiUmVxdWVzdC5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIFBMQVRG
T1JNKENHKQotI2luY2x1ZGUgIlBERkRvY3VtZW50SW1hZ2UuaCIKLSNlbmRpZgotCi0jaWYgRU5B
QkxFKFNWR19BU19JTUFHRSkKLSNpbmNsdWRlICJTVkdJbWFnZS5oIgotI2VuZGlmCi0KLXVzaW5n
IHN0ZDo6bWF4OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNhY2hlZEltYWdlOjpDYWNoZWRJ
bWFnZShjb25zdCBTdHJpbmcmIHVybCkKLSAgICA6IENhY2hlZFJlc291cmNlKHVybCwgSW1hZ2VS
ZXNvdXJjZSkKLSAgICAsIG1faW1hZ2UoMCkKLSAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRp
bWVyKHRoaXMsICZDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpCi0g
ICAgLCBtX2h0dHBTdGF0dXNDb2RlRXJyb3JPY2N1cnJlZChmYWxzZSkKLXsKLSAgICBzZXRTdGF0
dXMoVW5rbm93bik7Ci19Ci0KLUNhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2Up
Ci0gICAgOiBDYWNoZWRSZXNvdXJjZShTdHJpbmcoKSwgSW1hZ2VSZXNvdXJjZSkKLSAgICAsIG1f
aW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lcih0aGlzLCAmQ2Fj
aGVkSW1hZ2U6OmRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKQotICAgICwgbV9odHRwU3Rh
dHVzQ29kZUVycm9yT2NjdXJyZWQoZmFsc2UpCi17Ci0gICAgc2V0U3RhdHVzKENhY2hlZCk7Ci0g
ICAgc2V0TG9hZGluZyhmYWxzZSk7Ci19Ci0KLUNhY2hlZEltYWdlOjp+Q2FjaGVkSW1hZ2UoKQot
ewotfQotCi12b2lkIENhY2hlZEltYWdlOjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZChU
aW1lcjxDYWNoZWRJbWFnZT4qKQotewotICAgIEFTU0VSVCghaGFzQ2xpZW50cygpKTsKLSAgICBk
ZXN0cm95RGVjb2RlZERhdGEoKTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6bG9hZChDYWNoZWRS
ZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgaWYgKCFjYWNoZWRS
ZXNvdXJjZUxvYWRlciB8fCBjYWNoZWRSZXNvdXJjZUxvYWRlci0+YXV0b0xvYWRJbWFnZXMoKSkK
LSAgICAgICAgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIHRydWUs
IERvU2VjdXJpdHlDaGVjaywgdHJ1ZSk7Ci0gICAgZWxzZQotICAgICAgICBzZXRMb2FkaW5nKGZh
bHNlKTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNl
Q2xpZW50KiBjKQotewotICAgIGlmIChtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5pc0FjdGl2
ZSgpKQotICAgICAgICBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5zdG9wKCk7Ci0gICAgCi0g
ICAgaWYgKG1fZGF0YSAmJiAhbV9pbWFnZSAmJiAhZXJyb3JPY2N1cnJlZCgpKSB7Ci0gICAgICAg
IGNyZWF0ZUltYWdlKCk7Ci0gICAgICAgIG1faW1hZ2UtPnNldERhdGEobV9kYXRhLCB0cnVlKTsK
LSAgICB9Ci0KLSAgICBpZiAobV9pbWFnZSAmJiAhbV9pbWFnZS0+aXNOdWxsKCkpCi0gICAgICAg
IGMtPmltYWdlQ2hhbmdlZCh0aGlzKTsKLQotICAgIGlmICghaXNMb2FkaW5nKCkpCi0gICAgICAg
IGMtPm5vdGlmeUZpbmlzaGVkKHRoaXMpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjphbGxDbGll
bnRzUmVtb3ZlZCgpCi17Ci0gICAgaWYgKG1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQoKSkKLSAg
ICAgICAgbV9pbWFnZS0+cmVzZXRBbmltYXRpb24oKTsKLSAgICBpZiAoZG91YmxlIGludGVydmFs
ID0gY2FjaGUoKS0+ZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCgpKQotICAgICAgICBt
X2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5zdGFydE9uZVNob3QoaW50ZXJ2YWwpOwotfQotCi1z
dGF0aWMgSW1hZ2UqIGJyb2tlbkltYWdlKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJl
ZlB0cjxJbWFnZT4sIGJyb2tlbkltYWdlLCAoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJt
aXNzaW5nSW1hZ2UiKSkpOwotICAgIHJldHVybiBicm9rZW5JbWFnZS5nZXQoKTsKLX0KLQotc3Rh
dGljIEltYWdlKiBudWxsSW1hZ2UoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRy
PEJpdG1hcEltYWdlPiwgbnVsbEltYWdlLCAoQml0bWFwSW1hZ2U6OmNyZWF0ZSgpKSk7Ci0gICAg
cmV0dXJuIG51bGxJbWFnZS5nZXQoKTsKLX0KLQotSW1hZ2UqIENhY2hlZEltYWdlOjppbWFnZSgp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc1B1cmdlYWJsZSgpKTsKLQotICAgIGlmIChlcnJvck9j
Y3VycmVkKCkpCi0gICAgICAgIHJldHVybiBicm9rZW5JbWFnZSgpOwotCi0gICAgaWYgKG1faW1h
Z2UpCi0gICAgICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwotCi0gICAgcmV0dXJuIG51bGxJbWFn
ZSgpOwotfQotCi12b2lkIENhY2hlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3Qg
SW50U2l6ZSYgY29udGFpbmVyU2l6ZSkKLXsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgbV9p
bWFnZS0+c2V0Q29udGFpbmVyU2l6ZShjb250YWluZXJTaXplKTsKLX0KLQotYm9vbCBDYWNoZWRJ
bWFnZTo6dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW1hZ2Up
Ci0gICAgICAgIHJldHVybiBtX2ltYWdlLT51c2VzQ29udGFpbmVyU2l6ZSgpOwotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIENhY2hlZEltYWdlOjppbWFnZUhhc1JlbGF0aXZlV2lkdGgo
KSBjb25zdAotewotICAgIGlmIChtX2ltYWdlKQotICAgICAgICByZXR1cm4gbV9pbWFnZS0+aGFz
UmVsYXRpdmVXaWR0aCgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENhY2hlZElt
YWdlOjppbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBpZiAobV9pbWFnZSkK
LSAgICAgICAgcmV0dXJuIG1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0KCk7Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLUludFNpemUgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZShmbG9hdCBtdWx0
aXBsaWVyKSBjb25zdAotewotICAgIEFTU0VSVCghaXNQdXJnZWFibGUoKSk7Ci0KLSAgICBpZiAo
IW1faW1hZ2UpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0gICAgaWYgKG11bHRpcGxpZXIg
PT0gMS4wZikKLSAgICAgICAgcmV0dXJuIG1faW1hZ2UtPnNpemUoKTsKLSAgICAgICAgCi0gICAg
Ly8gRG9uJ3QgbGV0IGltYWdlcyB0aGF0IGhhdmUgYSB3aWR0aC9oZWlnaHQgPj0gMSBzaHJpbmsg
YmVsb3cgMSB3aGVuIHpvb21lZC4KLSAgICBib29sIGhhc1dpZHRoID0gbV9pbWFnZS0+c2l6ZSgp
LndpZHRoKCkgPiAwOwotICAgIGJvb2wgaGFzSGVpZ2h0ID0gbV9pbWFnZS0+c2l6ZSgpLmhlaWdo
dCgpID4gMDsKLSAgICBpbnQgd2lkdGggPSBtX2ltYWdlLT5zaXplKCkud2lkdGgoKSAqIChtX2lt
YWdlLT5oYXNSZWxhdGl2ZVdpZHRoKCkgPyAxLjBmIDogbXVsdGlwbGllcik7Ci0gICAgaW50IGhl
aWdodCA9IG1faW1hZ2UtPnNpemUoKS5oZWlnaHQoKSAqIChtX2ltYWdlLT5oYXNSZWxhdGl2ZUhl
aWdodCgpID8gMS4wZiA6IG11bHRpcGxpZXIpOwotICAgIGlmIChoYXNXaWR0aCkKLSAgICAgICAg
d2lkdGggPSBtYXgoMSwgd2lkdGgpOwotICAgIGlmIChoYXNIZWlnaHQpCi0gICAgICAgIGhlaWdo
dCA9IG1heCgxLCBoZWlnaHQpOwotICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwot
fQotCi1JbnRSZWN0IENhY2hlZEltYWdlOjppbWFnZVJlY3QoZmxvYXQgbXVsdGlwbGllcikgY29u
c3QKLXsKLSAgICBBU1NFUlQoIWlzUHVyZ2VhYmxlKCkpOwotCi0gICAgaWYgKCFtX2ltYWdlKQot
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIGlmIChtdWx0aXBsaWVyID09IDEuMGYgfHwg
KCFtX2ltYWdlLT5oYXNSZWxhdGl2ZVdpZHRoKCkgJiYgIW1faW1hZ2UtPmhhc1JlbGF0aXZlSGVp
Z2h0KCkpKQotICAgICAgICByZXR1cm4gbV9pbWFnZS0+cmVjdCgpOwotCi0gICAgZmxvYXQgd2lk
dGhNdWx0aXBsaWVyID0gKG1faW1hZ2UtPmhhc1JlbGF0aXZlV2lkdGgoKSA/IDEuMGYgOiBtdWx0
aXBsaWVyKTsKLSAgICBmbG9hdCBoZWlnaHRNdWx0aXBsaWVyID0gKG1faW1hZ2UtPmhhc1JlbGF0
aXZlSGVpZ2h0KCkgPyAxLjBmIDogbXVsdGlwbGllcik7Ci0KLSAgICAvLyBEb24ndCBsZXQgaW1h
Z2VzIHRoYXQgaGF2ZSBhIHdpZHRoL2hlaWdodCA+PSAxIHNocmluayBiZWxvdyAxIHdoZW4gem9v
bWVkLgotICAgIGJvb2wgaGFzV2lkdGggPSBtX2ltYWdlLT5yZWN0KCkud2lkdGgoKSA+IDA7Ci0g
ICAgYm9vbCBoYXNIZWlnaHQgPSBtX2ltYWdlLT5yZWN0KCkuaGVpZ2h0KCkgPiAwOwotCi0gICAg
aW50IHdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihtX2ltYWdlLT5yZWN0KCkud2lkdGgoKSAqIHdp
ZHRoTXVsdGlwbGllcik7Ci0gICAgaW50IGhlaWdodCA9IHN0YXRpY19jYXN0PGludD4obV9pbWFn
ZS0+cmVjdCgpLmhlaWdodCgpICogaGVpZ2h0TXVsdGlwbGllcik7Ci0gICAgaWYgKGhhc1dpZHRo
KQotICAgICAgICB3aWR0aCA9IG1heCgxLCB3aWR0aCk7Ci0gICAgaWYgKGhhc0hlaWdodCkKLSAg
ICAgICAgaGVpZ2h0ID0gbWF4KDEsIGhlaWdodCk7Ci0KLSAgICBpbnQgeCA9IHN0YXRpY19jYXN0
PGludD4obV9pbWFnZS0+cmVjdCgpLngoKSAqIHdpZHRoTXVsdGlwbGllcik7Ci0gICAgaW50IHkg
PSBzdGF0aWNfY2FzdDxpbnQ+KG1faW1hZ2UtPnJlY3QoKS55KCkgKiBoZWlnaHRNdWx0aXBsaWVy
KTsKLQotICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lk
IENhY2hlZEltYWdlOjpub3RpZnlPYnNlcnZlcnMoY29uc3QgSW50UmVjdCogY2hhbmdlUmVjdCkK
LXsKLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7Ci0gICAgd2hp
bGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCi0gICAgICAgIGMtPmltYWdl
Q2hhbmdlZCh0aGlzLCBjaGFuZ2VSZWN0KTsKLX0KLQotdm9pZCBDYWNoZWRJbWFnZTo6Y2xlYXIo
KQotewotICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOwotICAgIG1faW1hZ2UgPSAwOwotICAgIHNl
dEVuY29kZWRTaXplKDApOwotfQotCi1pbmxpbmUgdm9pZCBDYWNoZWRJbWFnZTo6Y3JlYXRlSW1h
Z2UoKQotewotICAgIC8vIENyZWF0ZSB0aGUgaW1hZ2UgaWYgaXQgZG9lc24ndCB5ZXQgZXhpc3Qu
Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSNpZiBQTEFURk9STShDRykgJiYg
IVVTRShXRUJLSVRfSU1BR0VfREVDT0RFUlMpCi0gICAgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUo
KSA9PSAiYXBwbGljYXRpb24vcGRmIikgewotICAgICAgICBtX2ltYWdlID0gUERGRG9jdW1lbnRJ
bWFnZTo6Y3JlYXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiBFTkFC
TEUoU1ZHX0FTX0lNQUdFKQotICAgIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImltYWdl
L3N2Zyt4bWwiKSB7Ci0gICAgICAgIG1faW1hZ2UgPSBTVkdJbWFnZTo6Y3JlYXRlKHRoaXMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgbV9pbWFnZSA9IEJpdG1hcEltYWdl
OjpjcmVhdGUodGhpcyk7Ci19Ci0KLXNpemVfdCBDYWNoZWRJbWFnZTo6bWF4aW11bURlY29kZWRJ
bWFnZVNpemUoKQotewotICAgIEZyYW1lKiBmcmFtZSA9IG1fcmVxdWVzdCA/IG1fcmVxdWVzdC0+
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+ZnJhbWUoKSA6IDA7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdz
KCk7Ci0gICAgcmV0dXJuIHNldHRpbmdzID8gc2V0dGluZ3MtPm1heGltdW1EZWNvZGVkSW1hZ2VT
aXplKCkgOiAwOwotfQotCi12b2lkIENhY2hlZEltYWdlOjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICBtX2RhdGEgPSBkYXRh
OwotCi0gICAgY3JlYXRlSW1hZ2UoKTsKLQotICAgIGJvb2wgc2l6ZUF2YWlsYWJsZSA9IGZhbHNl
OwotCi0gICAgLy8gSGF2ZSB0aGUgaW1hZ2UgdXBkYXRlIGl0cyBkYXRhIGZyb20gaXRzIGludGVy
bmFsIGJ1ZmZlci4KLSAgICAvLyBJdCB3aWxsIG5vdCBkbyBhbnl0aGluZyBub3csIGJ1dCB3aWxs
IGRlbGF5IGRlY29kaW5nIHVudGlsIAotICAgIC8vIHF1ZXJpZWQgZm9yIGluZm8gKGxpa2Ugc2l6
ZSBvciBzcGVjaWZpYyBpbWFnZSBmcmFtZXMpLgotICAgIHNpemVBdmFpbGFibGUgPSBtX2ltYWdl
LT5zZXREYXRhKG1fZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLQotICAgIC8vIEdvIGFoZWFkIGFu
ZCB0ZWxsIG91ciBvYnNlcnZlcnMgdG8gdHJ5IHRvIGRyYXcgaWYgd2UgaGF2ZSBlaXRoZXIKLSAg
ICAvLyByZWNlaXZlZCBhbGwgdGhlIGRhdGEgb3IgdGhlIHNpemUgaXMga25vd24uICBFYWNoIGNo
dW5rIGZyb20gdGhlCi0gICAgLy8gbmV0d29yayBjYXVzZXMgb2JzZXJ2ZXJzIHRvIHJlcGFpbnQs
IHdoaWNoIHdpbGwgZm9yY2UgdGhhdCBjaHVuawotICAgIC8vIHRvIGRlY29kZS4KLSAgICBpZiAo
c2l6ZUF2YWlsYWJsZSB8fCBhbGxEYXRhUmVjZWl2ZWQpIHsKLSAgICAgICAgc2l6ZV90IG1heERl
Y29kZWRJbWFnZVNpemUgPSBtYXhpbXVtRGVjb2RlZEltYWdlU2l6ZSgpOwotICAgICAgICBJbnRT
aXplIHMgPSBpbWFnZVNpemUoMS4wZik7Ci0gICAgICAgIHNpemVfdCBlc3RpbWF0ZWREZWNvZGVk
SW1hZ2VTaXplID0gcy53aWR0aCgpICogcy5oZWlnaHQoKSAqIDQ7IC8vIG5vIG92ZXJmbG93IGNo
ZWNrCi0gICAgICAgIGlmIChtX2ltYWdlLT5pc051bGwoKSB8fCAobWF4RGVjb2RlZEltYWdlU2l6
ZSA+IDAgJiYgZXN0aW1hdGVkRGVjb2RlZEltYWdlU2l6ZSA+IG1heERlY29kZWRJbWFnZVNpemUp
KSB7Ci0gICAgICAgICAgICBlcnJvcigpOwotICAgICAgICAgICAgaWYgKGluQ2FjaGUoKSkKLSAg
ICAgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUodGhpcyk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gb25s
eSByZWRyYXcgdGhlIGRlY29kZWQgYmFuZCBvZiB0aGUgaW1hZ2UsIGJ1dCB3aXRoIHRoZSBjdXJy
ZW50IGRlc2lnbgotICAgICAgICAvLyAoZGVjb2RpbmcgZGVsYXllZCB1bnRpbCBwYWludGluZykg
dGhhdCBzZWVtcyBoYXJkLgotICAgICAgICBub3RpZnlPYnNlcnZlcnMoKTsKLQotICAgICAgICBp
ZiAobV9pbWFnZSkKLSAgICAgICAgICAgIHNldEVuY29kZWRTaXplKG1faW1hZ2UtPmRhdGEoKSA/
IG1faW1hZ2UtPmRhdGEoKS0+c2l6ZSgpIDogMCk7Ci0gICAgfQotICAgIAotICAgIGlmIChhbGxE
YXRhUmVjZWl2ZWQpIHsKLSAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7Ci0gICAgICAgIGNoZWNr
Tm90aWZ5KCk7Ci0gICAgfQotfQotCi12b2lkIENhY2hlZEltYWdlOjplcnJvcigpCi17Ci0gICAg
Y2xlYXIoKTsKLSAgICBzZXRFcnJvck9jY3VycmVkKHRydWUpOwotICAgIG1fZGF0YS5jbGVhcigp
OwotICAgIG5vdGlmeU9ic2VydmVycygpOwotICAgIHNldExvYWRpbmcoZmFsc2UpOwotICAgIGNo
ZWNrTm90aWZ5KCk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmNoZWNrTm90aWZ5KCkKLXsKLSAg
ICBpZiAoaXNMb2FkaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGll
bnQqIGMgPSB3Lm5leHQoKSkKLSAgICAgICAgYy0+bm90aWZ5RmluaXNoZWQodGhpcyk7Ci19Ci0K
LXZvaWQgQ2FjaGVkSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCi17Ci0gICAgYm9vbCBjYW5E
ZWxldGVJbWFnZSA9ICFtX2ltYWdlIHx8IChtX2ltYWdlLT5oYXNPbmVSZWYoKSAmJiBtX2ltYWdl
LT5pc0JpdG1hcEltYWdlKCkpOwotICAgIGlmIChpc1NhZmVUb01ha2VQdXJnZWFibGUoKSAmJiBj
YW5EZWxldGVJbWFnZSAmJiAhaXNMb2FkaW5nKCkpIHsKLSAgICAgICAgLy8gSW1hZ2UgcmVmcyB0
aGUgZGF0YSBidWZmZXIgc28gd2Ugc2hvdWxkIG5vdCBtYWtlIGl0IHB1cmdlYWJsZSB3aGlsZSB0
aGUgaW1hZ2UgaXMgYWxpdmUuIAotICAgICAgICAvLyBJbnZva2luZyBhZGRDbGllbnQoKSB3aWxs
IHJlY29uc3RydWN0IHRoZSBpbWFnZSBvYmplY3QuCi0gICAgICAgIG1faW1hZ2UgPSAwOwotICAg
ICAgICBzZXREZWNvZGVkU2l6ZSgwKTsKLSAgICAgICAgaWYgKCFDYWNoZTo6c2hvdWxkTWFrZVJl
c291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpKQotICAgICAgICAgICAgbWFrZVB1cmdlYWJsZSh0
cnVlKTsKLSAgICB9IGVsc2UgaWYgKG1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQoKSkKLSAgICAg
ICAgbV9pbWFnZS0+ZGVzdHJveURlY29kZWREYXRhKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6
OmRlY29kZWRTaXplQ2hhbmdlZChjb25zdCBJbWFnZSogaW1hZ2UsIGludCBkZWx0YSkKLXsKLSAg
ICBpZiAoaW1hZ2UgIT0gbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHNldERl
Y29kZWRTaXplKGRlY29kZWRTaXplKCkgKyBkZWx0YSk7Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6
OmRpZERyYXcoY29uc3QgSW1hZ2UqIGltYWdlKQotewotICAgIGlmIChpbWFnZSAhPSBtX2ltYWdl
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZG91YmxlIHRpbWVTdGFtcCA9IEZyYW1lVmll
dzo6Y3VycmVudFBhaW50VGltZVN0YW1wKCk7Ci0gICAgaWYgKCF0aW1lU3RhbXApIC8vIElmIGRp
ZERyYXcgaXMgY2FsbGVkIG91dHNpZGUgb2YgYSBGcmFtZSBwYWludC4KLSAgICAgICAgdGltZVN0
YW1wID0gY3VycmVudFRpbWUoKTsKLSAgICAKLSAgICBDYWNoZWRSZXNvdXJjZTo6ZGlkQWNjZXNz
RGVjb2RlZERhdGEodGltZVN0YW1wKTsKLX0KLQotYm9vbCBDYWNoZWRJbWFnZTo6c2hvdWxkUGF1
c2VBbmltYXRpb24oY29uc3QgSW1hZ2UqIGltYWdlKQotewotICAgIGlmIChpbWFnZSAhPSBtX2lt
YWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgQ2FjaGVkUmVzb3VyY2VDbGll
bnRXYWxrZXIgdyhtX2NsaWVudHMpOwotICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCog
YyA9IHcubmV4dCgpKSB7Ci0gICAgICAgIGlmIChjLT53aWxsUmVuZGVySW1hZ2UodGhpcykpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgQ2FjaGVkSW1hZ2U6OmFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKiBpbWFnZSkK
LXsKLSAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZSkKLSAgICAgICAgbm90aWZ5T2JzZXJ2ZXJzKCk7
Ci19Ci0KLXZvaWQgQ2FjaGVkSW1hZ2U6OmNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqIGltYWdl
LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChpbWFnZSA9PSBtX2ltYWdlKQotICAg
ICAgICBub3RpZnlPYnNlcnZlcnMoJnJlY3QpOwotfQotCi19IC8vbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gNzE0OTMpCisrKyBXZWJDb3JlL2xvYWRl
ci9DYWNoZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICAg
IENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAg
IENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0g
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIENhY2hlZEltYWdlX2gKLSNkZWZpbmUgQ2FjaGVk
SW1hZ2VfaAotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJJbWFnZU9i
c2VydmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hl
ZFJlc291cmNlTG9hZGVyOwotY2xhc3MgQ2FjaGU7Ci0KLWNsYXNzIENhY2hlZEltYWdlIDogcHVi
bGljIENhY2hlZFJlc291cmNlLCBwdWJsaWMgSW1hZ2VPYnNlcnZlciB7Ci0gICAgZnJpZW5kIGNs
YXNzIENhY2hlOwotCi1wdWJsaWM6Ci0gICAgQ2FjaGVkSW1hZ2UoY29uc3QgU3RyaW5nJiB1cmwp
OwotICAgIENhY2hlZEltYWdlKEltYWdlKik7Ci0gICAgdmlydHVhbCB+Q2FjaGVkSW1hZ2UoKTsK
LSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVk
UmVzb3VyY2VMb2FkZXIpOwotCi0gICAgSW1hZ2UqIGltYWdlKCkgY29uc3Q7Ci0KLSAgICBib29s
IGNhblJlbmRlcihmbG9hdCBtdWx0aXBsaWVyKSBjb25zdCB7IHJldHVybiAhZXJyb3JPY2N1cnJl
ZCgpICYmICFpbWFnZVNpemUobXVsdGlwbGllcikuaXNFbXB0eSgpOyB9Ci0KLSAgICAvLyBUaGVz
ZSBhcmUgb25seSB1c2VkIGZvciBTVkdJbWFnZSByaWdodCBub3cKLSAgICB2b2lkIHNldEltYWdl
Q29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJik7Ci0gICAgYm9vbCB1c2VzSW1hZ2VDb250YWlu
ZXJTaXplKCkgY29uc3Q7Ci0gICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdDsK
LSAgICBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdDsKLSAgICAKLSAgICAvLyBC
b3RoIG9mIHRoZXNlIG1ldGhvZHMgdGFrZSBhIHpvb20gbXVsdGlwbGllciB0aGF0IGNhbiBiZSB1
c2VkIHRvIGluY3JlYXNlIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlIGltYWdlIGJ5IHRoZQotICAg
IC8vIHpvb20uCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoZmxvYXQgbXVsdGlwbGllcikgY29uc3Q7
ICAvLyByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb21wbGV0ZSBpbWFnZS4KLSAgICBJbnRSZWN0
IGltYWdlUmVjdChmbG9hdCBtdWx0aXBsaWVyKSBjb25zdDsgIC8vIFRoZSBzaXplIG9mIHRoZSBj
dXJyZW50bHkgZGVjb2RlZCBwb3J0aW9uIG9mIHRoZSBpbWFnZS4KLQotICAgIHZpcnR1YWwgdm9p
ZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKLSAgICAKLSAgICB2aXJ0dWFs
IHZvaWQgYWxsQ2xpZW50c1JlbW92ZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29k
ZWREYXRhKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwotICAgIHZpcnR1YWwgdm9pZCBlcnJvcigp
OwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBodHRwU3RhdHVzQ29kZUVycm9yKCkgeyBtX2h0dHBT
dGF0dXNDb2RlRXJyb3JPY2N1cnJlZCA9IHRydWU7IH0KLSAgICBib29sIGh0dHBTdGF0dXNDb2Rl
RXJyb3JPY2N1cnJlZCgpIGNvbnN0IHsgcmV0dXJuIG1faHR0cFN0YXR1c0NvZGVFcnJvck9jY3Vy
cmVkOyB9Ci0gICAgCi0gICAgdm9pZCBjaGVja05vdGlmeSgpOwotICAgIAotICAgIHZpcnR1YWwg
Ym9vbCBpc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCBjbGVhcigp
OwotICAgIAotICAgIGJvb2wgc3RpbGxOZWVkc0xvYWQoKSBjb25zdCB7IHJldHVybiAhZXJyb3JP
Y2N1cnJlZCgpICYmIHN0YXR1cygpID09IFVua25vd24gJiYgIWlzTG9hZGluZygpOyB9Ci0gICAg
dm9pZCBsb2FkKCk7Ci0KLSAgICAvLyBJbWFnZU9ic2VydmVyCi0gICAgdmlydHVhbCB2b2lkIGRl
Y29kZWRTaXplQ2hhbmdlZChjb25zdCBJbWFnZSogaW1hZ2UsIGludCBkZWx0YSk7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZERyYXcoY29uc3QgSW1hZ2UqKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRQYXVzZUFuaW1hdGlvbihjb25zdCBJbWFnZSopOwotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRp
b25BZHZhbmNlZChjb25zdCBJbWFnZSopOwotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VkSW5SZWN0
KGNvbnN0IEltYWdlKiwgY29uc3QgSW50UmVjdCYpOwotCi1wcml2YXRlOgotICAgIHZvaWQgY3Jl
YXRlSW1hZ2UoKTsKLSAgICBzaXplX3QgbWF4aW11bURlY29kZWRJbWFnZVNpemUoKTsKLSAgICAv
LyBJZiBub3QgbnVsbCwgY2hhbmdlUmVjdCBpcyB0aGUgY2hhbmdlZCBwYXJ0IG9mIHRoZSBpbWFn
ZS4KLSAgICB2b2lkIG5vdGlmeU9ic2VydmVycyhjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0ID0g
MCk7Ci0gICAgdm9pZCBkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZChUaW1lcjxDYWNoZWRJ
bWFnZT4qKTsKLSAgICB2aXJ0dWFsIFB1cmdlUHJpb3JpdHkgcHVyZ2VQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIFB1cmdlRmlyc3Q7IH0KLQotICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKLSAg
ICBUaW1lcjxDYWNoZWRJbWFnZT4gbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXI7Ci0gICAgYm9v
bCBtX2h0dHBTdGF0dXNDb2RlRXJyb3JPY2N1cnJlZDsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA3MTQ5MykKKysrIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1NjUgKzAsMCBA
QAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1w
Zy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9y
ZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFp
bC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLQotI2luY2x1ZGUgIkNhY2hlLmgiCi0jaW5jbHVk
ZSAiQ2FjaGVkTWV0YWRhdGEuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgot
I2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgiCi0jaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRl
ICJLVVJMLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlB1cmdlYWJsZUJ1ZmZl
ci5oIgotI2luY2x1ZGUgIlJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgot
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFr
Q291bnRlci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotI2lmbmRlZiBOREVCVUcKLXN0YXRpYyBSZWZDb3VudGVkTGVha0NvdW50ZXIgY2FjaGVkUmVz
b3VyY2VMZWFrQ291bnRlcigiQ2FjaGVkUmVzb3VyY2UiKTsKLSNlbmRpZgotCi1DYWNoZWRSZXNv
dXJjZTo6Q2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIFR5cGUgdHlwZSkKLSAgICA6
IG1fdXJsKHVybCkKLSAgICAsIG1fcmVxdWVzdCgwKQotICAgICwgbV9yZXNwb25zZVRpbWVzdGFt
cChjdXJyZW50VGltZSgpKQotICAgICwgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUoMCkKLSAgICAs
IG1fZW5jb2RlZFNpemUoMCkKLSAgICAsIG1fZGVjb2RlZFNpemUoMCkKLSAgICAsIG1fYWNjZXNz
Q291bnQoMCkKLSAgICAsIG1faGFuZGxlQ291bnQoMCkKLSAgICAsIG1fcHJlbG9hZENvdW50KDAp
Ci0gICAgLCBtX3ByZWxvYWRSZXN1bHQoUHJlbG9hZE5vdFJlZmVyZW5jZWQpCi0gICAgLCBtX2lu
TGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KGZhbHNlKQotICAgICwgbV9yZXF1ZXN0ZWRGcm9tTmV0
d29ya2luZ0xheWVyKGZhbHNlKQotICAgICwgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHRy
dWUpCi0gICAgLCBtX2Vycm9yT2NjdXJyZWQoZmFsc2UpCi0gICAgLCBtX2luQ2FjaGUoZmFsc2Up
Ci0gICAgLCBtX2xvYWRpbmcoZmFsc2UpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fc3Rh
dHVzKFBlbmRpbmcpCi0jaWZuZGVmIE5ERUJVRwotICAgICwgbV9kZWxldGVkKGZhbHNlKQotICAg
ICwgbV9scnVJbmRleCgwKQotI2VuZGlmCi0gICAgLCBtX25leHRJbkFsbFJlc291cmNlc0xpc3Qo
MCkKLSAgICAsIG1fcHJldkluQWxsUmVzb3VyY2VzTGlzdCgwKQotICAgICwgbV9uZXh0SW5MaXZl
UmVzb3VyY2VzTGlzdCgwKQotICAgICwgbV9wcmV2SW5MaXZlUmVzb3VyY2VzTGlzdCgwKQotICAg
ICwgbV9jYWNoZWRSZXNvdXJjZUxvYWRlcigwKQotICAgICwgbV9yZXNvdXJjZVRvUmV2YWxpZGF0
ZSgwKQotICAgICwgbV9wcm94eVJlc291cmNlKDApCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIGNh
Y2hlZFJlc291cmNlTGVha0NvdW50ZXIuaW5jcmVtZW50KCk7Ci0jZW5kaWYKLX0KLQotQ2FjaGVk
UmVzb3VyY2U6On5DYWNoZWRSZXNvdXJjZSgpCi17Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNlVG9S
ZXZhbGlkYXRlKTsgLy8gU2hvdWxkIGJlIHRydWUgYmVjYXVzZSBjYW5EZWxldGUoKSBjaGVja3Mg
dGhpcy4KLSAgICBBU1NFUlQoY2FuRGVsZXRlKCkpOwotICAgIEFTU0VSVCghaW5DYWNoZSgpKTsK
LSAgICBBU1NFUlQoIW1fZGVsZXRlZCk7Ci0gICAgQVNTRVJUKHVybCgpLmlzTnVsbCgpIHx8IGNh
Y2hlKCktPnJlc291cmNlRm9yVVJMKHVybCgpKSAhPSB0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgbV9kZWxldGVkID0gdHJ1ZTsKLSAgICBjYWNoZWRSZXNvdXJjZUxlYWtDb3VudGVyLmRlY3Jl
bWVudCgpOwotI2VuZGlmCi0KLSAgICBpZiAobV9jYWNoZWRSZXNvdXJjZUxvYWRlcikKLSAgICAg
ICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlci0+cmVtb3ZlQ2FjaGVkUmVzb3VyY2UodGhpcyk7Ci19
Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNl
Y3VyaXR5Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKLXsKLSAgICBtX3Nl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgPSBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOwotICAg
IGNhY2hlKCktPmxvYWRlcigpLT5sb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLCB0aGlzLCBpbmNy
ZW1lbnRhbCwgc2VjdXJpdHlDaGVjaywgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7Ci0gICAg
bV9sb2FkaW5nID0gdHJ1ZTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6ZGF0YShQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewotICAgIGlmICghYWxs
RGF0YVJlY2VpdmVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQ2FjaGVkUmVzb3VyY2VD
bGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOwotICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVu
dCogYyA9IHcubmV4dCgpKQotICAgICAgICBjLT5ub3RpZnlGaW5pc2hlZCh0aGlzKTsKLX0KLQot
dm9pZCBDYWNoZWRSZXNvdXJjZTo6ZmluaXNoKCkKLXsKLSAgICBtX3N0YXR1cyA9IENhY2hlZDsK
LX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZTo6aXNFeHBpcmVkKCkgY29uc3QKLXsKLSAgICBpZiAo
bV9yZXNwb25zZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IGN1cnJlbnRBZ2UoKSA+IGZyZXNobmVzc0xpZmV0aW1lKCk7Ci19Ci0gICAgCi1kb3VibGUgQ2Fj
aGVkUmVzb3VyY2U6OmN1cnJlbnRBZ2UoKSBjb25zdAotewotICAgIC8vIFJGQzI2MTYgMTMuMi4z
Ci0gICAgLy8gTm8gY29tcGVuc2F0aW9uIGZvciBsYXRlbmN5IGFzIHRoYXQgaXMgbm90IHRlcnJp
Ymx5IGltcG9ydGFudCBpbiBwcmFjdGljZQotICAgIGRvdWJsZSBkYXRlVmFsdWUgPSBtX3Jlc3Bv
bnNlLmRhdGUoKTsKLSAgICBkb3VibGUgYXBwYXJlbnRBZ2UgPSBpc2Zpbml0ZShkYXRlVmFsdWUp
ID8gbWF4KDAuLCBtX3Jlc3BvbnNlVGltZXN0YW1wIC0gZGF0ZVZhbHVlKSA6IDA7Ci0gICAgZG91
YmxlIGFnZVZhbHVlID0gbV9yZXNwb25zZS5hZ2UoKTsKLSAgICBkb3VibGUgY29ycmVjdGVkUmVj
ZWl2ZWRBZ2UgPSBpc2Zpbml0ZShhZ2VWYWx1ZSkgPyBtYXgoYXBwYXJlbnRBZ2UsIGFnZVZhbHVl
KSA6IGFwcGFyZW50QWdlOwotICAgIGRvdWJsZSByZXNpZGVudFRpbWUgPSBjdXJyZW50VGltZSgp
IC0gbV9yZXNwb25zZVRpbWVzdGFtcDsKLSAgICByZXR1cm4gY29ycmVjdGVkUmVjZWl2ZWRBZ2Ug
KyByZXNpZGVudFRpbWU7Ci19Ci0gICAgCi1kb3VibGUgQ2FjaGVkUmVzb3VyY2U6OmZyZXNobmVz
c0xpZmV0aW1lKCkgY29uc3QKLXsKLSAgICAvLyBDYWNoZSBub24taHR0cCByZXNvdXJjZXMgbGli
ZXJhbGx5Ci0gICAgaWYgKCFtX3Jlc3BvbnNlLnVybCgpLnByb3RvY29sSW5IVFRQRmFtaWx5KCkp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpOwotCi0g
ICAgLy8gUkZDMjYxNiAxMy4yLjQKLSAgICBkb3VibGUgbWF4QWdlVmFsdWUgPSBtX3Jlc3BvbnNl
LmNhY2hlQ29udHJvbE1heEFnZSgpOwotICAgIGlmIChpc2Zpbml0ZShtYXhBZ2VWYWx1ZSkpCi0g
ICAgICAgIHJldHVybiBtYXhBZ2VWYWx1ZTsKLSAgICBkb3VibGUgZXhwaXJlc1ZhbHVlID0gbV9y
ZXNwb25zZS5leHBpcmVzKCk7Ci0gICAgZG91YmxlIGRhdGVWYWx1ZSA9IG1fcmVzcG9uc2UuZGF0
ZSgpOwotICAgIGRvdWJsZSBjcmVhdGlvblRpbWUgPSBpc2Zpbml0ZShkYXRlVmFsdWUpID8gZGF0
ZVZhbHVlIDogbV9yZXNwb25zZVRpbWVzdGFtcDsKLSAgICBpZiAoaXNmaW5pdGUoZXhwaXJlc1Zh
bHVlKSkKLSAgICAgICAgcmV0dXJuIGV4cGlyZXNWYWx1ZSAtIGNyZWF0aW9uVGltZTsKLSAgICBk
b3VibGUgbGFzdE1vZGlmaWVkVmFsdWUgPSBtX3Jlc3BvbnNlLmxhc3RNb2RpZmllZCgpOwotICAg
IGlmIChpc2Zpbml0ZShsYXN0TW9kaWZpZWRWYWx1ZSkpCi0gICAgICAgIHJldHVybiAoY3JlYXRp
b25UaW1lIC0gbGFzdE1vZGlmaWVkVmFsdWUpICogMC4xOwotICAgIC8vIElmIG5vIGNhY2hlIGhl
YWRlcnMgYXJlIHByZXNlbnQsIHRoZSBzcGVjaWZpY2F0aW9uIGxlYXZlcyB0aGUgZGVjaXNpb24g
dG8gdGhlIFVBLiBPdGhlciBicm93c2VycyBzZWVtIHRvIG9wdCBmb3IgMC4KLSAgICByZXR1cm4g
MDsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgbV9yZXNwb25zZSA9IHJlc3BvbnNlOwotICAgIG1f
cmVzcG9uc2VUaW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOwotfQotCi12b2lkIENhY2hlZFJlc291
cmNlOjpzZXRTZXJpYWxpemVkQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
IHNpemUpCi17Ci0gICAgLy8gV2Ugb25seSBleHBlY3QgdG8gcmVjZWl2ZSBjYWNoZWQgbWV0YWRh
dGEgZnJvbSB0aGUgcGxhdGZvcm0gb25jZS4KLSAgICAvLyBJZiB0aGlzIHRyaWdnZXJzLCBpdCBp
bmRpY2F0ZXMgYW4gZWZmaWNpZW5jeSBwcm9ibGVtIHdoaWNoIGlzIG1vc3QKLSAgICAvLyBsaWtl
bHkgdW5leHBlY3RlZCBpbiBjb2RlIGRlc2lnbmVkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCi0g
ICAgQVNTRVJUKCFtX2NhY2hlZE1ldGFkYXRhKTsKLQotICAgIG1fY2FjaGVkTWV0YWRhdGEgPSBD
YWNoZWRNZXRhZGF0YTo6ZGVzZXJpYWxpemUoZGF0YSwgc2l6ZSk7Ci19Ci0KLXZvaWQgQ2FjaGVk
UmVzb3VyY2U6OnNldENhY2hlZE1ldGFkYXRhKHVuc2lnbmVkIGRhdGFUeXBlSUQsIGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIC8vIEN1cnJlbnRseSwgb25seSBvbmUgdHlw
ZSBvZiBjYWNoZWQgbWV0YWRhdGEgcGVyIHJlc291cmNlIGlzIHN1cHBvcnRlZC4KLSAgICAvLyBJ
ZiB0aGUgbmVlZCBhcmlzZXMgZm9yIG11bHRpcGxlIHR5cGVzIG9mIG1ldGFkYXRhIHBlciByZXNv
dXJjZSB0aGlzIGNvdWxkCi0gICAgLy8gYmUgZW5oYW5jZWQgdG8gc3RvcmUgdHlwZXMgb2YgbWV0
YWRhdGEgaW4gYSBtYXAuCi0gICAgQVNTRVJUKCFtX2NhY2hlZE1ldGFkYXRhKTsKLQotICAgIG1f
Y2FjaGVkTWV0YWRhdGEgPSBDYWNoZWRNZXRhZGF0YTo6Y3JlYXRlKGRhdGFUeXBlSUQsIGRhdGEs
IHNpemUpOwotICAgIFJlc291cmNlSGFuZGxlOjpjYWNoZU1ldGFkYXRhKG1fcmVzcG9uc2UsIG1f
Y2FjaGVkTWV0YWRhdGEtPnNlcmlhbGl6ZSgpKTsKLX0KLQotQ2FjaGVkTWV0YWRhdGEqIENhY2hl
ZFJlc291cmNlOjpjYWNoZWRNZXRhZGF0YSh1bnNpZ25lZCBkYXRhVHlwZUlEKSBjb25zdAotewot
ICAgIGlmICghbV9jYWNoZWRNZXRhZGF0YSB8fCBtX2NhY2hlZE1ldGFkYXRhLT5kYXRhVHlwZUlE
KCkgIT0gZGF0YVR5cGVJRCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fY2FjaGVk
TWV0YWRhdGEuZ2V0KCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJlcXVlc3QoUmVx
dWVzdCogcmVxdWVzdCkKLXsKLSAgICBpZiAocmVxdWVzdCAmJiAhbV9yZXF1ZXN0KQotICAgICAg
ICBtX3N0YXR1cyA9IFBlbmRpbmc7Ci0gICAgbV9yZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICBpZiAo
Y2FuRGVsZXRlKCkgJiYgIWluQ2FjaGUoKSkKLSAgICAgICAgZGVsZXRlIHRoaXM7Ci19Ci0KLXZv
aWQgQ2FjaGVkUmVzb3VyY2U6OmFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50
KQotewotICAgIGFkZENsaWVudFRvU2V0KGNsaWVudCk7Ci0gICAgZGlkQWRkQ2xpZW50KGNsaWVu
dCk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJj
ZUNsaWVudCogYykKLXsKLSAgICBpZiAoIWlzTG9hZGluZygpKQotICAgICAgICBjLT5ub3RpZnlG
aW5pc2hlZCh0aGlzKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6YWRkQ2xpZW50VG9TZXQo
Q2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCkKLXsKLSAgICBBU1NFUlQoIWlzUHVyZ2VhYmxl
KCkpOwotCi0gICAgaWYgKG1fcHJlbG9hZFJlc3VsdCA9PSBQcmVsb2FkTm90UmVmZXJlbmNlZCkg
ewotICAgICAgICBpZiAoaXNMb2FkZWQoKSkKLSAgICAgICAgICAgIG1fcHJlbG9hZFJlc3VsdCA9
IFByZWxvYWRSZWZlcmVuY2VkV2hpbGVDb21wbGV0ZTsKLSAgICAgICAgZWxzZSBpZiAobV9yZXF1
ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKQotICAgICAgICAgICAgbV9wcmVsb2FkUmVzdWx0ID0g
UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fcHJlbG9hZFJlc3VsdCA9IFByZWxvYWRSZWZlcmVuY2VkOwotICAgIH0KLSAgICBpZiAoIWhh
c0NsaWVudHMoKSAmJiBpbkNhY2hlKCkpCi0gICAgICAgIGNhY2hlKCktPmFkZFRvTGl2ZVJlc291
cmNlc1NpemUodGhpcyk7Ci0gICAgbV9jbGllbnRzLmFkZChjbGllbnQpOwotfQotCi12b2lkIENh
Y2hlZFJlc291cmNlOjpyZW1vdmVDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCkK
LXsKLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKGNsaWVudCkpOwotICAgIG1fY2xpZW50
cy5yZW1vdmUoY2xpZW50KTsKLQotICAgIGlmIChjYW5EZWxldGUoKSAmJiAhaW5DYWNoZSgpKQot
ICAgICAgICBkZWxldGUgdGhpczsKLSAgICBlbHNlIGlmICghaGFzQ2xpZW50cygpICYmIGluQ2Fj
aGUoKSkgewotICAgICAgICBjYWNoZSgpLT5yZW1vdmVGcm9tTGl2ZVJlc291cmNlc1NpemUodGhp
cyk7Ci0gICAgICAgIGNhY2hlKCktPnJlbW92ZUZyb21MaXZlRGVjb2RlZFJlc291cmNlc0xpc3Qo
dGhpcyk7Ci0gICAgICAgIGFsbENsaWVudHNSZW1vdmVkKCk7Ci0gICAgICAgIGlmIChyZXNwb25z
ZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKSB7Ci0gICAgICAgICAgICAvLyBSRkMy
NjE2IDE0LjkuMjoKLSAgICAgICAgICAgIC8vICJuby1zdG9yZTogLi4uTVVTVCBtYWtlIGEgYmVz
dC1lZmZvcnQgYXR0ZW1wdCB0byByZW1vdmUgdGhlIGluZm9ybWF0aW9uIGZyb20gdm9sYXRpbGUg
c3RvcmFnZSBhcyBwcm9tcHRseSBhcyBwb3NzaWJsZSIKLSAgICAgICAgICAgIGNhY2hlKCktPnJl
bW92ZSh0aGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYWNoZSgpLT5wcnVuZSgp
OwotICAgIH0KLSAgICAvLyBUaGlzIG9iamVjdCBtYXkgYmUgZGVhZCBoZXJlLgotfQotCi12b2lk
IENhY2hlZFJlc291cmNlOjpkZWxldGVJZlBvc3NpYmxlKCkKLXsKLSAgICBpZiAoY2FuRGVsZXRl
KCkgJiYgIWluQ2FjaGUoKSkKLSAgICAgICAgZGVsZXRlIHRoaXM7Ci19Ci0gICAgCi12b2lkIENh
Y2hlZFJlc291cmNlOjpzZXREZWNvZGVkU2l6ZSh1bnNpZ25lZCBzaXplKQotewotICAgIGlmIChz
aXplID09IG1fZGVjb2RlZFNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBkZWx0YSA9
IHNpemUgLSBtX2RlY29kZWRTaXplOwotCi0gICAgLy8gVGhlIG9iamVjdCBtdXN0IG5vdyBiZSBt
b3ZlZCB0byBhIGRpZmZlcmVudCBxdWV1ZSwgc2luY2UgaXRzIHNpemUgaGFzIGJlZW4gY2hhbmdl
ZC4KLSAgICAvLyBXZSBoYXZlIHRvIHJlbW92ZSBleHBsaWNpdGx5IGJlZm9yZSB1cGRhdGluZyBt
X2RlY29kZWRTaXplLCBzbyB0aGF0IHdlIGZpbmQgdGhlIGNvcnJlY3QgcHJldmlvdXMKLSAgICAv
LyBxdWV1ZS4KLSAgICBpZiAoaW5DYWNoZSgpKQotICAgICAgICBjYWNoZSgpLT5yZW1vdmVGcm9t
TFJVTGlzdCh0aGlzKTsKLSAgICAKLSAgICBtX2RlY29kZWRTaXplID0gc2l6ZTsKLSAgIAotICAg
IGlmIChpbkNhY2hlKCkpIHsgCi0gICAgICAgIC8vIE5vdyBpbnNlcnQgaW50byB0aGUgbmV3IExS
VSBsaXN0LgotICAgICAgICBjYWNoZSgpLT5pbnNlcnRJbkxSVUxpc3QodGhpcyk7Ci0gICAgICAg
IAotICAgICAgICAvLyBJbnNlcnQgaW50byBvciByZW1vdmUgZnJvbSB0aGUgbGl2ZSBkZWNvZGVk
IGxpc3QgaWYgbmVjZXNzYXJ5LgotICAgICAgICAvLyBXaGVuIGluc2VydGluZyBpbnRvIHRoZSBM
aXZlRGVjb2RlZFJlc291cmNlc0xpc3QgaXQgaXMgcG9zc2libGUKLSAgICAgICAgLy8gdGhhdCB0
aGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUgaXMgc3RpbGwgemVybyBvciBzbWFsbGVyIHRoYW4K
LSAgICAgICAgLy8gdGhlIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lIG9mIHRoZSBjdXJyZW50IGxp
c3QgaGVhZC4gVGhpcyBpcyBhCi0gICAgICAgIC8vIHZpb2xhdGlvbiBvZiB0aGUgaW52YXJpYW50
IHRoYXQgdGhlIGxpc3QgaXMgdG8gYmUga2VwdCBzb3J0ZWQKLSAgICAgICAgLy8gYnkgYWNjZXNz
IHRpbWUuIFRoZSB3ZWFrZW5pbmcgb2YgdGhlIGludmFyaWFudCBkb2VzIG5vdCBwb3NlCi0gICAg
ICAgIC8vIGEgcHJvYmxlbS4gRm9yIG1vcmUgZGV0YWlscyBwbGVhc2Ugc2VlOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAyMDkKLSAgICAgICAgaWYgKG1fZGVjb2Rl
ZFNpemUgJiYgIW1faW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QgJiYgaGFzQ2xpZW50cygpKQot
ICAgICAgICAgICAgY2FjaGUoKS0+aW5zZXJ0SW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QodGhp
cyk7Ci0gICAgICAgIGVsc2UgaWYgKCFtX2RlY29kZWRTaXplICYmIG1faW5MaXZlRGVjb2RlZFJl
c291cmNlc0xpc3QpCi0gICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmVGcm9tTGl2ZURlY29kZWRS
ZXNvdXJjZXNMaXN0KHRoaXMpOwotCi0gICAgICAgIC8vIFVwZGF0ZSB0aGUgY2FjaGUncyBzaXpl
IHRvdGFscy4KLSAgICAgICAgY2FjaGUoKS0+YWRqdXN0U2l6ZShoYXNDbGllbnRzKCksIGRlbHRh
KTsKLSAgICB9Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldEVuY29kZWRTaXplKHVuc2ln
bmVkIHNpemUpCi17Ci0gICAgaWYgKHNpemUgPT0gbV9lbmNvZGVkU2l6ZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gVGhlIHNpemUgY2Fubm90IGV2ZXIgc2hyaW5rICh1bmxlc3MgaXQgaXMg
YmVpbmcgbnVsbGVkIG91dCBiZWNhdXNlIG9mIGFuIGVycm9yKS4gIElmIGl0IGV2ZXIgZG9lcywg
YXNzZXJ0LgotICAgIEFTU0VSVChzaXplID09IDAgfHwgc2l6ZSA+PSBtX2VuY29kZWRTaXplKTsK
LSAgICAKLSAgICBpbnQgZGVsdGEgPSBzaXplIC0gbV9lbmNvZGVkU2l6ZTsKLQotICAgIC8vIFRo
ZSBvYmplY3QgbXVzdCBub3cgYmUgbW92ZWQgdG8gYSBkaWZmZXJlbnQgcXVldWUsIHNpbmNlIGl0
cyBzaXplIGhhcyBiZWVuIGNoYW5nZWQuCi0gICAgLy8gV2UgaGF2ZSB0byByZW1vdmUgZXhwbGlj
aXRseSBiZWZvcmUgdXBkYXRpbmcgbV9lbmNvZGVkU2l6ZSwgc28gdGhhdCB3ZSBmaW5kIHRoZSBj
b3JyZWN0IHByZXZpb3VzCi0gICAgLy8gcXVldWUuCi0gICAgaWYgKGluQ2FjaGUoKSkKLSAgICAg
ICAgY2FjaGUoKS0+cmVtb3ZlRnJvbUxSVUxpc3QodGhpcyk7Ci0gICAgCi0gICAgbV9lbmNvZGVk
U2l6ZSA9IHNpemU7Ci0gICAKLSAgICBpZiAoaW5DYWNoZSgpKSB7IAotICAgICAgICAvLyBOb3cg
aW5zZXJ0IGludG8gdGhlIG5ldyBMUlUgbGlzdC4KLSAgICAgICAgY2FjaGUoKS0+aW5zZXJ0SW5M
UlVMaXN0KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgLy8gVXBkYXRlIHRoZSBjYWNoZSdzIHNp
emUgdG90YWxzLgotICAgICAgICBjYWNoZSgpLT5hZGp1c3RTaXplKGhhc0NsaWVudHMoKSwgZGVs
dGEpOwotICAgIH0KLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6ZGlkQWNjZXNzRGVjb2RlZERh
dGEoZG91YmxlIHRpbWVTdGFtcCkKLXsKLSAgICBtX2xhc3REZWNvZGVkQWNjZXNzVGltZSA9IHRp
bWVTdGFtcDsKLSAgICAKLSAgICBpZiAoaW5DYWNoZSgpKSB7Ci0gICAgICAgIGlmIChtX2luTGl2
ZURlY29kZWRSZXNvdXJjZXNMaXN0KSB7Ci0gICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmVGcm9t
TGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KHRoaXMpOwotICAgICAgICAgICAgY2FjaGUoKS0+aW5z
ZXJ0SW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FjaGUoKS0+cHJ1bmUoKTsKLSAgICB9Ci19Ci0gICAgCi12b2lkIENhY2hlZFJlc291cmNlOjpz
ZXRSZXNvdXJjZVRvUmV2YWxpZGF0ZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpIAoteyAKLSAg
ICBBU1NFUlQocmVzb3VyY2UpOwotICAgIEFTU0VSVCghbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSk7
Ci0gICAgQVNTRVJUKHJlc291cmNlICE9IHRoaXMpOwotICAgIEFTU0VSVChtX2hhbmRsZXNUb1Jl
dmFsaWRhdGUuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQocmVzb3VyY2UtPnR5cGUoKSA9PSB0eXBl
KCkpOwotCi0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlICVwIHNldFJl
c291cmNlVG9SZXZhbGlkYXRlICVwIiwgdGhpcywgcmVzb3VyY2UpOwotCi0gICAgLy8gVGhlIGZv
bGxvd2luZyBhc3NlcnQgc2hvdWxkIGJlIGludmVzdGlnYXRlZCB3aGVuZXZlciBpdCBvY2N1cnMu
IEFsdGhvdWdoIGl0IHNob3VsZCBuZXZlciBmaXJlLCBpdCBjdXJyZW50bHkgZG9lcyBpbiByYXJl
IGNpcmN1bXN0YW5jZXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI4NjA0LgotICAgIC8vIFNvIHRoZSBjb2RlIG5lZWRzIHRvIGJlIHJvYnVzdCB0byB0
aGlzIGFzc2VydCBmYWlsaW5nIHRodXMgdGhlICJpZiAobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+
bV9wcm94eVJlc291cmNlID09IHRoaXMpIiBpbiBDYWNoZWRSZXNvdXJjZTo6Y2xlYXJSZXNvdXJj
ZVRvUmV2YWxpZGF0ZS4KLSAgICBBU1NFUlQoIXJlc291cmNlLT5tX3Byb3h5UmVzb3VyY2UpOwot
Ci0gICAgcmVzb3VyY2UtPm1fcHJveHlSZXNvdXJjZSA9IHRoaXM7Ci0gICAgbV9yZXNvdXJjZVRv
UmV2YWxpZGF0ZSA9IHJlc291cmNlOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlOjpjbGVhclJl
c291cmNlVG9SZXZhbGlkYXRlKCkgCi17IAotICAgIEFTU0VSVChtX3Jlc291cmNlVG9SZXZhbGlk
YXRlKTsKLSAgICAvLyBBIHJlc291cmNlIG1heSBzdGFydCByZXZhbGlkYXRpb24gYmVmb3JlIHRo
aXMgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCwgc28gY2hlY2sgdGhhdCB0aGlzIHJlc291cmNlIGlz
IHN0aWxsIHRoZSBwcm94eSByZXNvdXJjZSBiZWZvcmUgY2xlYXJpbmcgaXQgb3V0LgotICAgIGlm
IChtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5tX3Byb3h5UmVzb3VyY2UgPT0gdGhpcykgewotICAg
ICAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5tX3Byb3h5UmVzb3VyY2UgPSAwOwotICAgICAg
ICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5kZWxldGVJZlBvc3NpYmxlKCk7Ci0gICAgfQotICAg
IG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5jbGVhcigpOwotICAgIG1fcmVzb3VyY2VUb1JldmFsaWRh
dGUgPSAwOwotICAgIGRlbGV0ZUlmUG9zc2libGUoKTsKLX0KLSAgICAKLXZvaWQgQ2FjaGVkUmVz
b3VyY2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKQotewotICAgIEFTU0VS
VChtX3Jlc291cmNlVG9SZXZhbGlkYXRlKTsKLSAgICBBU1NFUlQobV9yZXNvdXJjZVRvUmV2YWxp
ZGF0ZS0+aW5DYWNoZSgpKTsKLSAgICBBU1NFUlQoIWluQ2FjaGUoKSk7Ci0KLSAgICBMT0coUmVz
b3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2UgJXAgc3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0
ZWRSZXNvdXJjZSAlcCIsIHRoaXMsIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUpOwotCi0gICAgSGFz
aFNldDxDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqPjo6aXRlcmF0b3IgZW5kID0gbV9oYW5kbGVz
VG9SZXZhbGlkYXRlLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxDYWNoZWRSZXNvdXJjZUhhbmRs
ZUJhc2UqPjo6aXRlcmF0b3IgaXQgPSBtX2hhbmRsZXNUb1JldmFsaWRhdGUuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSogaGFuZGxl
ID0gKml0OwotICAgICAgICBoYW5kbGUtPm1fcmVzb3VyY2UgPSBtX3Jlc291cmNlVG9SZXZhbGlk
YXRlOwotICAgICAgICBtX3Jlc291cmNlVG9SZXZhbGlkYXRlLT5yZWdpc3RlckhhbmRsZShoYW5k
bGUpOwotICAgICAgICAtLW1faGFuZGxlQ291bnQ7Ci0gICAgfQotICAgIEFTU0VSVCghbV9oYW5k
bGVDb3VudCk7Ci0gICAgbV9oYW5kbGVzVG9SZXZhbGlkYXRlLmNsZWFyKCk7Ci0KLSAgICBWZWN0
b3I8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiBjbGllbnRzVG9Nb3ZlOwotICAgIEhhc2hDb3VudGVk
U2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj46Oml0ZXJhdG9yIGVuZDIgPSBtX2NsaWVudHMuZW5k
KCk7Ci0gICAgZm9yIChIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+OjppdGVy
YXRvciBpdCA9IG1fY2xpZW50cy5iZWdpbigpOyBpdCAhPSBlbmQyOyArK2l0KSB7Ci0gICAgICAg
IENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGllbnQgPSBpdC0+Zmlyc3Q7Ci0gICAgICAgIHVuc2ln
bmVkIGNvdW50ID0gaXQtPnNlY29uZDsKLSAgICAgICAgd2hpbGUgKGNvdW50KSB7Ci0gICAgICAg
ICAgICBjbGllbnRzVG9Nb3ZlLmFwcGVuZChjbGllbnQpOwotICAgICAgICAgICAgLS1jb3VudDsK
LSAgICAgICAgfQotICAgIH0KLSAgICAvLyBFcXVpdmFsZW50IG9mIGNhbGxpbmcgcmVtb3ZlQ2xp
ZW50KCkgZm9yIGFsbCBjbGllbnRzCi0gICAgbV9jbGllbnRzLmNsZWFyKCk7Ci0KLSAgICB1bnNp
Z25lZCBtb3ZlQ291bnQgPSBjbGllbnRzVG9Nb3ZlLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IG4gPSAwOyBuIDwgbW92ZUNvdW50OyArK24pCi0gICAgICAgIG1fcmVzb3VyY2VUb1JldmFsaWRh
dGUtPmFkZENsaWVudFRvU2V0KGNsaWVudHNUb01vdmVbbl0pOwotICAgIGZvciAodW5zaWduZWQg
biA9IDA7IG4gPCBtb3ZlQ291bnQ7ICsrbikgewotICAgICAgICAvLyBDYWxsaW5nIGRpZEFkZENs
aWVudCBmb3IgYSBjbGllbnQgbWF5IGVuZCB1cCByZW1vdmluZyBhbm90aGVyIGNsaWVudC4gSW4g
dGhhdCBjYXNlIGl0IHdvbid0IGJlIGluIHRoZSBzZXQgYW55bW9yZS4KLSAgICAgICAgaWYgKG1f
cmVzb3VyY2VUb1JldmFsaWRhdGUtPm1fY2xpZW50cy5jb250YWlucyhjbGllbnRzVG9Nb3ZlW25d
KSkKLSAgICAgICAgICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPmRpZEFkZENsaWVudChjbGll
bnRzVG9Nb3ZlW25dKTsKLSAgICB9Ci19Ci0gICAgCi12b2lkIENhY2hlZFJlc291cmNlOjp1cGRh
dGVSZXNwb25zZUFmdGVyUmV2YWxpZGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHZhbGlk
YXRpbmdSZXNwb25zZSkKLXsKLSAgICBtX3Jlc3BvbnNlVGltZXN0YW1wID0gY3VycmVudFRpbWUo
KTsKLQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBjb250ZW50
SGVhZGVyUHJlZml4LCAoImNvbnRlbnQtIikpOwotICAgIC8vIFJGQzI2MTYgMTAuMy41Ci0gICAg
Ly8gVXBkYXRlIGNhY2hlZCBoZWFkZXJzIGZyb20gdGhlIDMwNCByZXNwb25zZQotICAgIGNvbnN0
IEhUVFBIZWFkZXJNYXAmIG5ld0hlYWRlcnMgPSB2YWxpZGF0aW5nUmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkcygpOwotICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld0hl
YWRlcnMuZW5kKCk7Ci0gICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG5ld0hlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIC8vIERvbid0
IGFsbG93IDMwNCByZXNwb25zZSB0byB1cGRhdGUgY29udGVudCBoZWFkZXJzLCB0aGVzZSBjYW4n
dCBjaGFuZ2UgYnV0IHNvbWUgc2VydmVycyBzZW5kIHdyb25nIHZhbHVlcy4KLSAgICAgICAgaWYg
KGl0LT5maXJzdC5zdGFydHNXaXRoKGNvbnRlbnRIZWFkZXJQcmVmaXgsIGZhbHNlKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChp
dC0+Zmlyc3QsIGl0LT5zZWNvbmQpOwotICAgIH0KLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6
cmVnaXN0ZXJIYW5kbGUoQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKiBoKQotewotICAgICsrbV9o
YW5kbGVDb3VudDsKLSAgICBpZiAobV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSkKLSAgICAgICAgbV9o
YW5kbGVzVG9SZXZhbGlkYXRlLmFkZChoKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZTo6dW5y
ZWdpc3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpCi17Ci0gICAgQVNTRVJU
KG1faGFuZGxlQ291bnQgPiAwKTsKLSAgICAtLW1faGFuZGxlQ291bnQ7Ci0KLSAgICBpZiAobV9y
ZXNvdXJjZVRvUmV2YWxpZGF0ZSkKLSAgICAgICAgIG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5yZW1v
dmUoaCk7Ci0KLSAgICBpZiAoIW1faGFuZGxlQ291bnQpCi0gICAgICAgIGRlbGV0ZUlmUG9zc2li
bGUoKTsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZTo6Y2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSBj
b25zdAotewotICAgIGlmIChtX2xvYWRpbmcgfHwgbV9lcnJvck9jY3VycmVkKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05v
U3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBBdG9taWNTdHJpbmcsIGxhc3RNb2RpZmllZEhlYWRlciwgKCJsYXN0LW1vZGlmaWVk
IikpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBlVGFnSGVh
ZGVyLCAoImV0YWciKSk7Ci0gICAgcmV0dXJuICFtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChs
YXN0TW9kaWZpZWRIZWFkZXIpLmlzRW1wdHkoKSB8fCAhbV9yZXNwb25zZS5odHRwSGVhZGVyRmll
bGQoZVRhZ0hlYWRlcikuaXNFbXB0eSgpOwotfQotICAgIAotYm9vbCBDYWNoZWRSZXNvdXJjZTo6
bXVzdFJldmFsaWRhdGUoQ2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpIGNvbnN0Ci17Ci0gICAgaWYg
KG1fZXJyb3JPY2N1cnJlZCkgewotICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVk
UmVzb3VyY2UgJXAgbXVzdFJldmFsaWRhdGUgYmVjYXVzZSBvZiBtX2Vycm9yT2NjdXJyZWRcbiIs
IHRoaXMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobV9sb2FkaW5n
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKG1fcmVzcG9uc2UuY2FjaGVD
b250cm9sQ29udGFpbnNOb0NhY2hlKCkgfHwgbV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWlu
c05vU3RvcmUoKSkgewotICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3Vy
Y2UgJXAgbXVzdFJldmFsaWRhdGUgYmVjYXVzZSBvZiBtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENv
bnRhaW5zTm9DYWNoZSgpIHx8IG1fcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3Jl
KClcbiIsIHRoaXMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoY2Fj
aGVQb2xpY3kgPT0gQ2FjaGVQb2xpY3lDYWNoZSkgewotICAgICAgICBpZiAobV9yZXNwb25zZS5j
YWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlKCkgJiYgaXNFeHBpcmVkKCkpIHsKLSAg
ICAgICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZSAlcCBtdXN0UmV2
YWxpZGF0ZSBiZWNhdXNlIG9mIGNhY2hlUG9saWN5ID09IENhY2hlUG9saWN5Q2FjaGUgYW5kIG1f
cmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNNdXN0UmV2YWxpZGF0ZSgpICYmIGlzRXhwaXJl
ZCgpXG4iLCB0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoaXNFeHBpcmVkKCkpIHsKLSAgICAg
ICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlICVwIG11c3RSZXZhbGlkYXRl
IGJlY2F1c2Ugb2YgaXNFeHBpcmVkKClcbiIsIHRoaXMpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ2FjaGVkUmVzb3VyY2U6Omlz
U2FmZVRvTWFrZVB1cmdlYWJsZSgpIGNvbnN0Ci17IAotICAgIHJldHVybiAhaGFzQ2xpZW50cygp
ICYmICFtX3Byb3h5UmVzb3VyY2UgJiYgIW1fcmVzb3VyY2VUb1JldmFsaWRhdGU7Ci19Ci0KLWJv
b2wgQ2FjaGVkUmVzb3VyY2U6Om1ha2VQdXJnZWFibGUoYm9vbCBwdXJnZWFibGUpIAoteyAKLSAg
ICBpZiAocHVyZ2VhYmxlKSB7Ci0gICAgICAgIEFTU0VSVChpc1NhZmVUb01ha2VQdXJnZWFibGUo
KSk7Ci0KLSAgICAgICAgaWYgKG1fcHVyZ2VhYmxlRGF0YSkgewotICAgICAgICAgICAgQVNTRVJU
KCFtX2RhdGEpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCFtX2RhdGEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAg
ICAvLyBTaG91bGQgbm90IG1ha2UgYnVmZmVyIHB1cmdlYWJsZSBpZiBpdCBoYXMgcmVmcyBvdGhl
ciB0aGFuIHRoaXMgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0d28gY29waWVzLgotICAgICAgICBpZiAo
IW1fZGF0YS0+aGFzT25lUmVmKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IAotICAgICAgICBpZiAobV9kYXRhLT5oYXNQdXJnZWFibGVCdWZmZXIoKSkgewotICAgICAgICAg
ICAgbV9wdXJnZWFibGVEYXRhID0gbV9kYXRhLT5yZWxlYXNlUHVyZ2VhYmxlQnVmZmVyKCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX3B1cmdlYWJsZURhdGEgPSBQdXJnZWFibGVC
dWZmZXI6OmNyZWF0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwotICAgICAgICAg
ICAgaWYgKCFtX3B1cmdlYWJsZURhdGEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgbV9wdXJnZWFibGVEYXRhLT5zZXRQdXJnZVByaW9yaXR5KHB1cmdlUHJpb3Jp
dHkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fcHVyZ2VhYmxlRGF0YS0+bWFr
ZVB1cmdlYWJsZSh0cnVlKTsKLSAgICAgICAgbV9kYXRhLmNsZWFyKCk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGlmICghbV9wdXJnZWFibGVEYXRhKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBBU1NFUlQoIW1fZGF0YSk7Ci0gICAgQVNTRVJUKCFoYXNDbGllbnRzKCkp
OwotCi0gICAgaWYgKCFtX3B1cmdlYWJsZURhdGEtPm1ha2VQdXJnZWFibGUoZmFsc2UpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7IAotCi0gICAgbV9kYXRhID0gU2hhcmVkQnVmZmVyOjphZG9wdFB1
cmdlYWJsZUJ1ZmZlcihtX3B1cmdlYWJsZURhdGEucmVsZWFzZSgpKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBDYWNoZWRSZXNvdXJjZTo6aXNQdXJnZWFibGUoKSBjb25zdAotewotICAg
IHJldHVybiBtX3B1cmdlYWJsZURhdGEgJiYgbV9wdXJnZWFibGVEYXRhLT5pc1B1cmdlYWJsZSgp
OwotfQotCi1ib29sIENhY2hlZFJlc291cmNlOjp3YXNQdXJnZWQoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3B1cmdlYWJsZURhdGEgJiYgbV9wdXJnZWFibGVEYXRhLT53YXNQdXJnZWQoKTsKLX0K
LQotdW5zaWduZWQgQ2FjaGVkUmVzb3VyY2U6Om92ZXJoZWFkU2l6ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHNpemVvZihDYWNoZWRSZXNvdXJjZSkgKyBtX3Jlc3BvbnNlLm1lbW9yeVVzYWdlKCkg
KyA1NzY7Ci0gICAgLyoKLSAgICAgICAgNTc2ID0gMTkyICsgICAgICAgICAgICAgICAgICAgLy8g
YXZlcmFnZSBzaXplIG9mIG1fdXJsCi0gICAgICAgICAgICAgIDM4NDsgICAgICAgICAgICAgICAg
ICAgIC8vIGF2ZXJhZ2Ugc2l6ZSBvZiBtX2NsaWVudHMgaGFzaCBtYXAKLSAgICAqLwotfQotCi19
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9uIDcxNDkzKQorKysgV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyODkgKzAsMCBA
QAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1w
Zy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5v
cmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21h
aWwuY29tKQotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBDYWNoZWRSZXNvdXJjZV9oCi0j
ZGVmaW5lIENhY2hlZFJlc291cmNlX2gKLQotI2luY2x1ZGUgIkNhY2hlUG9saWN5LmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0j
aW5jbHVkZSAiUHVyZ2VQcmlvcml0eS5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIK
LSNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5j
bHVkZSA8dGltZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhY2hlOwotY2xh
c3MgQ2FjaGVkTWV0YWRhdGE7Ci1jbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVudDsKLWNsYXNzIENh
Y2hlZFJlc291cmNlSGFuZGxlQmFzZTsKLWNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwotY2xh
c3MgRnJhbWU7Ci1jbGFzcyBJbnNwZWN0b3JSZXNvdXJjZTsKLWNsYXNzIFB1cmdlYWJsZUJ1ZmZl
cjsKLWNsYXNzIFJlcXVlc3Q7Ci0KLS8vIEEgcmVzb3VyY2UgdGhhdCBpcyBoZWxkIGluIHRoZSBj
YWNoZS4gQ2xhc3NlcyB3aG8gd2FudCB0byB1c2UgdGhpcyBvYmplY3Qgc2hvdWxkIGRlcml2ZQot
Ly8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudCwgdG8gZ2V0IHRoZSBmdW5jdGlvbiBjYWxscyBp
biBjYXNlIHRoZSByZXF1ZXN0ZWQgZGF0YSBoYXMgYXJyaXZlZC4KLS8vIFRoaXMgY2xhc3MgYWxz
byBkb2VzIHRoZSBhY3R1YWwgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBsb2FkZXIgdG8gb2J0YWlu
IHRoZSByZXNvdXJjZSBmcm9tIHRoZSBuZXR3b3JrLgotY2xhc3MgQ2FjaGVkUmVzb3VyY2UgOiBw
dWJsaWMgTm9uY29weWFibGUgewotICAgIGZyaWVuZCBjbGFzcyBDYWNoZTsKLSAgICBmcmllbmQg
Y2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7Ci0gICAgCi1wdWJsaWM6Ci0gICAgZW51bSBUeXBlIHsK
LSAgICAgICAgSW1hZ2VSZXNvdXJjZSwKLSAgICAgICAgQ1NTU3R5bGVTaGVldCwKLSAgICAgICAg
U2NyaXB0LAotICAgICAgICBGb250UmVzb3VyY2UKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICAgICAg
LCBYU0xTdHlsZVNoZWV0Ci0jZW5kaWYKLSNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKLSAgICAg
ICAgLCBMaW5rUHJlZmV0Y2gKLSNlbmRpZgotICAgIH07Ci0KLSAgICBlbnVtIFN0YXR1cyB7Ci0g
ICAgICAgIFVua25vd24sICAgICAgLy8gbGV0IGNhY2hlIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGgg
aXQKLSAgICAgICAgUGVuZGluZywgICAgICAvLyBvbmx5IHBhcnRpYWxseSBsb2FkZWQKLSAgICAg
ICAgQ2FjaGVkICAgICAgICAvLyByZWd1bGFyIGNhc2UKLSAgICB9OwotCi0gICAgQ2FjaGVkUmVz
b3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIFR5cGUpOwotICAgIHZpcnR1YWwgfkNhY2hlZFJlc291
cmNlKCk7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGxvYWQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGNhY2hlZFJlc291cmNlTG9hZGVyKSAgeyBsb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLCBmYWxz
ZSwgRG9TZWN1cml0eUNoZWNrLCB0cnVlKTsgfQotICAgIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJj
ZUxvYWRlciosIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3ksIGJvb2wgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RW5jb2Rpbmco
Y29uc3QgU3RyaW5nJikgeyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7
IHJldHVybiBTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkYXRhKFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0gICAgdmlydHVhbCB2b2lk
IGVycm9yKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGh0dHBTdGF0dXNDb2RlRXJyb3IoKSB7IGVy
cm9yKCk7IH0gLy8gSW1hZ2VzIGtlZXAgbG9hZGluZyBpbiBzcGl0ZSBvZiBIVFRQIGVycm9ycyAo
Zm9yIGxlZ2FjeSBjb21wYXQgd2l0aCA8aW1nPiwgZXRjLikuCi0KLSAgICBjb25zdCBTdHJpbmcg
JnVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQotCi0gICAgdm9pZCBhZGRDbGllbnQo
Q2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChDYWNoZWRSZXNv
dXJjZUNsaWVudCopOwotICAgIGJvb2wgaGFzQ2xpZW50cygpIGNvbnN0IHsgcmV0dXJuICFtX2Ns
aWVudHMuaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCBkZWxldGVJZlBvc3NpYmxlKCk7Ci0KLSAgICBl
bnVtIFByZWxvYWRSZXN1bHQgewotICAgICAgICBQcmVsb2FkTm90UmVmZXJlbmNlZCwKLSAgICAg
ICAgUHJlbG9hZFJlZmVyZW5jZWQsCi0gICAgICAgIFByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2Fk
aW5nLAotICAgICAgICBQcmVsb2FkUmVmZXJlbmNlZFdoaWxlQ29tcGxldGUKLSAgICB9OwotICAg
IFByZWxvYWRSZXN1bHQgcHJlbG9hZFJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PFByZWxvYWRSZXN1bHQ+KG1fcHJlbG9hZFJlc3VsdCk7IH0KLSAgICB2b2lkIHNldFJlcXVlc3Rl
ZEZyb21OZXR3b3JraW5nTGF5ZXIoKSB7IG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllciA9
IHRydWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VD
bGllbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWxsQ2xpZW50c1JlbW92ZWQoKSB7IH0KLQotICAg
IHVuc2lnbmVkIGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRzLnNpemUoKTsgfQotCi0g
ICAgU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFN0YXR1cz4obV9z
dGF0dXMpOyB9Ci0gICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9
IHN0YXR1czsgfQotCi0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGVuY29kZWRT
aXplKCkgKyBkZWNvZGVkU2l6ZSgpICsgb3ZlcmhlYWRTaXplKCk7IH0KLSAgICB1bnNpZ25lZCBl
bmNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZFNpemU7IH0KLSAgICB1bnNpZ25l
ZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RlZFNpemU7IH0KLSAgICB1bnNp
Z25lZCBvdmVyaGVhZFNpemUoKSBjb25zdDsKLSAgICAKLSAgICBib29sIGlzTG9hZGVkKCkgY29u
c3QgeyByZXR1cm4gIW1fbG9hZGluZzsgfSAvLyBGSVhNRS4gTWV0aG9kIG5hbWUgaXMgaW5hY2N1
cmF0ZS4gTG9hZGluZyBtaWdodCBub3QgaGF2ZSBzdGFydGVkIHlldC4KLQotICAgIGJvb2wgaXNM
b2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkaW5nOyB9Ci0gICAgdm9pZCBzZXRMb2FkaW5n
KGJvb2wgYikgeyBtX2xvYWRpbmcgPSBiOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBpc1ByZWZldGNoKCkgY29uc3QKLSAg
ICB7Ci0jaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCi0gICAgICAgIHJldHVybiB0eXBlKCkgPT0g
TGlua1ByZWZldGNoOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0gICAg
fQotCi0gICAgdW5zaWduZWQgYWNjZXNzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2FjY2Vzc0Nv
dW50OyB9Ci0gICAgdm9pZCBpbmNyZWFzZUFjY2Vzc0NvdW50KCkgeyBtX2FjY2Vzc0NvdW50Kys7
IH0KLQotICAgIC8vIENvbXB1dGVzIHRoZSBzdGF0dXMgb2YgYW4gb2JqZWN0IGFmdGVyIGxvYWRp
bmcuICAKLSAgICAvLyBVcGRhdGVzIHRoZSBleHBpcmUgZGF0ZSBvbiB0aGUgY2FjaGUgZW50cnkg
ZmlsZQotICAgIHZvaWQgZmluaXNoKCk7Ci0KLSAgICAvLyBDYWxsZWQgYnkgdGhlIGNhY2hlIGlm
IHRoZSBvYmplY3QgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZQotICAgIC8vIHdoaWxl
IHN0aWxsIGJlaW5nIHJlZmVyZW5jZWQuIFRoaXMgbWVhbnMgdGhlIG9iamVjdCBzaG91bGQgZGVs
ZXRlIGl0c2VsZgotICAgIC8vIGlmIHRoZSBudW1iZXIgb2YgY2xpZW50cyBvYnNlcnZpbmcgaXQg
ZXZlciBkcm9wcyB0byAwLgotICAgIC8vIFRoZSByZXNvdXJjZSBjYW4gYmUgYnJvdWdodCBiYWNr
IHRvIGNhY2hlIGFmdGVyIHN1Y2Nlc3NmdWwgcmV2YWxpZGF0aW9uLgotICAgIHZvaWQgc2V0SW5D
YWNoZShib29sIGluQ2FjaGUpIHsgbV9pbkNhY2hlID0gaW5DYWNoZTsgfQotICAgIGJvb2wgaW5D
YWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5DYWNoZTsgfQotICAgIAotICAgIHZvaWQgc2V0SW5M
aXZlRGVjb2RlZFJlc291cmNlc0xpc3QoYm9vbCBiKSB7IG1faW5MaXZlRGVjb2RlZFJlc291cmNl
c0xpc3QgPSBiOyB9Ci0gICAgYm9vbCBpbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCgpIHsgcmV0
dXJuIG1faW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3Q7IH0KLSAgICAKLSAgICB2b2lkIHNldFJl
cXVlc3QoUmVxdWVzdCopOwotCi0gICAgU2hhcmVkQnVmZmVyKiBkYXRhKCkgY29uc3QgeyBBU1NF
UlQoIW1fcHVyZ2VhYmxlRGF0YSk7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KLQotICAgIHZvaWQg
c2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQotCi0gICAg
Ly8gU2V0cyB0aGUgc2VyaWFsaXplZCBtZXRhZGF0YSByZXRyaWV2ZWQgZnJvbSB0aGUgcGxhdGZv
cm0ncyBjYWNoZS4KLSAgICB2b2lkIHNldFNlcmlhbGl6ZWRDYWNoZWRNZXRhZGF0YShjb25zdCBj
aGFyKiwgc2l6ZV90KTsKLQotICAgIC8vIENhY2hlcyB0aGUgZ2l2ZW4gbWV0YWRhdGEgaW4gYXNz
b2NpYXRpb24gd2l0aCB0aGlzIHJlc291cmNlIGFuZCBzdWdnZXN0cwotICAgIC8vIHRoYXQgdGhl
IHBsYXRmb3JtIHBlcnNpc3QgaXQuIFRoZSBkYXRhVHlwZUlEIGlzIGEgcHNldWRvLXJhbmRvbWx5
IGNob3NlbgotICAgIC8vIGlkZW50aWZpZXIgdGhhdCBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGRh
dGEgZ2VuZXJhdGVkIGJ5IHRoZSBjYWxsZXIuCi0gICAgdm9pZCBzZXRDYWNoZWRNZXRhZGF0YSh1
bnNpZ25lZCBkYXRhVHlwZUlELCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKLQotICAgIC8vIFJldHVy
bnMgY2FjaGVkIG1ldGFkYXRhIG9mIHRoZSBnaXZlbiB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGlz
IHJlc291cmNlLgotICAgIENhY2hlZE1ldGFkYXRhKiBjYWNoZWRNZXRhZGF0YSh1bnNpZ25lZCBk
YXRhVHlwZUlEKSBjb25zdDsKLQotICAgIGJvb2wgY2FuRGVsZXRlKCkgY29uc3QgeyByZXR1cm4g
IWhhc0NsaWVudHMoKSAmJiAhbV9yZXF1ZXN0ICYmICFtX3ByZWxvYWRDb3VudCAmJiAhbV9oYW5k
bGVDb3VudCAmJiAhbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSAmJiAhbV9wcm94eVJlc291cmNlOyB9
Ci0KLSAgICBib29sIGlzRXhwaXJlZCgpIGNvbnN0OwotCi0gICAgLy8gTGlzdCBvZiBhY2NlcHRh
YmxlIE1JTUUgdHlwZXMgc2VwYXJhdGVkIGJ5ICIsIi4KLSAgICAvLyBBIE1JTUUgdHlwZSBtYXkg
Y29udGFpbiBhIHdpbGRjYXJkLCBlLmcuICJ0ZXh0LyoiLgotICAgIFN0cmluZyBhY2NlcHQoKSBj
b25zdCB7IHJldHVybiBtX2FjY2VwdDsgfQotICAgIHZvaWQgc2V0QWNjZXB0KGNvbnN0IFN0cmlu
ZyYgYWNjZXB0KSB7IG1fYWNjZXB0ID0gYWNjZXB0OyB9Ci0KLSAgICBib29sIGVycm9yT2NjdXJy
ZWQoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yT2NjdXJyZWQ7IH0KLSAgICB2b2lkIHNldEVycm9y
T2NjdXJyZWQoYm9vbCBiKSB7IG1fZXJyb3JPY2N1cnJlZCA9IGI7IH0KLQotICAgIGJvb2wgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZFJlc291cmNlTG9h
ZENhbGxiYWNrczsgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEo
KSB7IH0KLQotICAgIHZvaWQgc2V0Q2FjaGVkUmVzb3VyY2VMb2FkZXIoQ2FjaGVkUmVzb3VyY2VM
b2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKSB7IG1fY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBj
YWNoZWRSZXNvdXJjZUxvYWRlcjsgfQotICAgIAotICAgIGJvb2wgaXNQcmVsb2FkZWQoKSBjb25z
dCB7IHJldHVybiBtX3ByZWxvYWRDb3VudDsgfQotICAgIHZvaWQgaW5jcmVhc2VQcmVsb2FkQ291
bnQoKSB7ICsrbV9wcmVsb2FkQ291bnQ7IH0KLSAgICB2b2lkIGRlY3JlYXNlUHJlbG9hZENvdW50
KCkgeyBBU1NFUlQobV9wcmVsb2FkQ291bnQpOyAtLW1fcHJlbG9hZENvdW50OyB9Ci0gICAgCi0g
ICAgdm9pZCByZWdpc3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpOwotICAg
IHZvaWQgdW5yZWdpc3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpOwotICAg
IAotICAgIGJvb2wgY2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSBjb25zdDsKLSAgICBib29sIG11c3RS
ZXZhbGlkYXRlKENhY2hlUG9saWN5KSBjb25zdDsKLSAgICBib29sIGlzQ2FjaGVWYWxpZGF0b3Io
KSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlVG9SZXZhbGlkYXRlOyB9Ci0gICAgQ2FjaGVkUmVz
b3VyY2UqIHJlc291cmNlVG9SZXZhbGlkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVRv
UmV2YWxpZGF0ZTsgfQotICAgIAotICAgIGJvb2wgaXNQdXJnZWFibGUoKSBjb25zdDsKLSAgICBi
b29sIHdhc1B1cmdlZCgpIGNvbnN0OwotICAgIAotICAgIC8vIFRoaXMgaXMgdXNlZCBieSB0aGUg
YXJjaGl2ZSBtYWNoaW5lcnkgdG8gZ2V0IGF0IGEgcHVyZ2VkIHJlc291cmNlIHdpdGhvdXQKLSAg
ICAvLyB0cmlnZ2VyaW5nIGEgbG9hZC4gV2Ugc2hvdWxkIG1ha2UgaXQgcHJvdGVjdGVkIGFnYWlu
IGlmIHdlIGNhbiBmaW5kIGEKLSAgICAvLyBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGUgYXJjaGl2
ZSBjYXNlLgotICAgIGJvb2wgbWFrZVB1cmdlYWJsZShib29sIHB1cmdlYWJsZSk7Ci0KLXByb3Rl
Y3RlZDoKLSAgICB2b2lkIHNldEVuY29kZWRTaXplKHVuc2lnbmVkKTsKLSAgICB2b2lkIHNldERl
Y29kZWRTaXplKHVuc2lnbmVkKTsKLSAgICB2b2lkIGRpZEFjY2Vzc0RlY29kZWREYXRhKGRvdWJs
ZSB0aW1lU3RhbXApOwotCi0gICAgYm9vbCBpc1NhZmVUb01ha2VQdXJnZWFibGUoKSBjb25zdDsK
LSAgICAKLSAgICBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+IG1fY2xpZW50
czsKLQotICAgIFN0cmluZyBtX3VybDsKLSAgICBTdHJpbmcgbV9hY2NlcHQ7Ci0gICAgUmVxdWVz
dCogbV9yZXF1ZXN0OwotCi0gICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgIGRv
dWJsZSBtX3Jlc3BvbnNlVGltZXN0YW1wOwotCi0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9k
YXRhOwotICAgIE93blB0cjxQdXJnZWFibGVCdWZmZXI+IG1fcHVyZ2VhYmxlRGF0YTsKLQotcHJp
dmF0ZToKLSAgICB2b2lkIGFkZENsaWVudFRvU2V0KENhY2hlZFJlc291cmNlQ2xpZW50Kik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgLy8gVGhlc2UgYXJl
IGNhbGxlZCBieSB0aGUgZnJpZW5kbHkgQ2FjaGUgb25seQotICAgIHZvaWQgc2V0UmVzb3VyY2VU
b1JldmFsaWRhdGUoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICB2b2lkIHN3aXRjaENsaWVudHNUb1Jl
dmFsaWRhdGVkUmVzb3VyY2UoKTsKLSAgICB2b2lkIGNsZWFyUmVzb3VyY2VUb1JldmFsaWRhdGUo
KTsKLSAgICB2b2lkIHVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24oY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKTsKLSAgICB2aXJ0dWFsIFB1cmdlUHJpb3Jp
dHkgcHVyZ2VQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIFB1cmdlRGVmYXVsdDsgfQotCi0gICAg
ZG91YmxlIGN1cnJlbnRBZ2UoKSBjb25zdDsKLSAgICBkb3VibGUgZnJlc2huZXNzTGlmZXRpbWUo
KSBjb25zdDsKLQotICAgIFJlZlB0cjxDYWNoZWRNZXRhZGF0YT4gbV9jYWNoZWRNZXRhZGF0YTsK
LQotICAgIGRvdWJsZSBtX2xhc3REZWNvZGVkQWNjZXNzVGltZTsgLy8gVXNlZCBhcyBhICJ0aHJh
c2ggZ3VhcmQiIGluIHRoZSBjYWNoZQotCi0gICAgdW5zaWduZWQgbV9lbmNvZGVkU2l6ZTsKLSAg
ICB1bnNpZ25lZCBtX2RlY29kZWRTaXplOwotICAgIHVuc2lnbmVkIG1fYWNjZXNzQ291bnQ7Ci0g
ICAgdW5zaWduZWQgbV9oYW5kbGVDb3VudDsKLSAgICB1bnNpZ25lZCBtX3ByZWxvYWRDb3VudDsK
LQotICAgIHVuc2lnbmVkIG1fcHJlbG9hZFJlc3VsdCA6IDI7IC8vIFByZWxvYWRSZXN1bHQKLQot
ICAgIGJvb2wgbV9pbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCA6IDE7Ci0gICAgYm9vbCBtX3Jl
cXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIgOiAxOwotICAgIGJvb2wgbV9zZW5kUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzIDogMTsKLQotICAgIGJvb2wgbV9lcnJvck9jY3VycmVkIDogMTsKLSAgICBi
b29sIG1faW5DYWNoZSA6IDE7Ci0gICAgYm9vbCBtX2xvYWRpbmcgOiAxOwotCi0gICAgdW5zaWdu
ZWQgbV90eXBlIDogMzsgLy8gVHlwZQotICAgIHVuc2lnbmVkIG1fc3RhdHVzIDogMjsgLy8gU3Rh
dHVzCi0KLSNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBtX2RlbGV0ZWQ7Ci0gICAgdW5zaWduZWQg
bV9scnVJbmRleDsKLSNlbmRpZgotCi0gICAgQ2FjaGVkUmVzb3VyY2UqIG1fbmV4dEluQWxsUmVz
b3VyY2VzTGlzdDsKLSAgICBDYWNoZWRSZXNvdXJjZSogbV9wcmV2SW5BbGxSZXNvdXJjZXNMaXN0
OwotICAgIAotICAgIENhY2hlZFJlc291cmNlKiBtX25leHRJbkxpdmVSZXNvdXJjZXNMaXN0Owot
ICAgIENhY2hlZFJlc291cmNlKiBtX3ByZXZJbkxpdmVSZXNvdXJjZXNMaXN0OwotCi0gICAgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIqIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXI7IC8vIG9ubHkgbm9uLTAg
Zm9yIHJlc291cmNlcyB0aGF0IGFyZSBub3QgaW4gdGhlIGNhY2hlCi0gICAgCi0gICAgLy8gSWYg
dGhpcyBmaWVsZCBpcyBub24tbnVsbCB3ZSBhcmUgdXNpbmcgdGhlIHJlc291cmNlIGFzIGEgcHJv
eHkgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gZXhpc3RpbmcgcmVzb3VyY2UgaXMgc3RpbGwgdXAg
dG8gZGF0ZQotICAgIC8vIHVzaW5nIEhUVFAgSWYtTW9kaWZpZWQtU2luY2UvSWYtTm9uZS1NYXRj
aCBoZWFkZXJzLiBJZiB0aGUgcmVzcG9uc2UgaXMgMzA0IGFsbCBjbGllbnRzIG9mIHRoaXMgcmVz
b3VyY2UgYXJlIG1vdmVkCi0gICAgLy8gdG8gdG8gYmUgY2xpZW50cyBvZiBtX3Jlc291cmNlVG9S
ZXZhbGlkYXRlIGFuZCB0aGUgcmVzb3VyY2UgaXMgZGVsZXRlZC4gSWYgbm90LCB0aGUgZmllbGQg
aXMgemVyb2VkIGFuZCB0aGlzCi0gICAgLy8gcmVzb3VyY2VzIGJlY29tZXMgbm9ybWFsIHJlc291
cmNlIGxvYWQuCi0gICAgQ2FjaGVkUmVzb3VyY2UqIG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7Ci0K
LSAgICAvLyBJZiB0aGlzIGZpZWxkIGlzIG5vbi1udWxsLCB0aGUgcmVzb3VyY2UgaGFzIGEgcHJv
eHkgZm9yIGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgc3RpbGwgdXAgdG8gZGF0ZSAoc2VlIG1fcmVz
b3VyY2VUb1JldmFsaWRhdGUpLgotICAgIENhY2hlZFJlc291cmNlKiBtX3Byb3h5UmVzb3VyY2U7
Ci0KLSAgICAvLyBUaGVzZSBoYW5kbGVzIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHBvaW50
IHRvIHRoZSBtX3Jlc291cmNlVG9SZXZhbGlkYXRlIGluIGNhc2Ugd2UgZ2V0IDMwNCByZXNwb25z
ZS4KLSAgICBIYXNoU2V0PENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSo+IG1faGFuZGxlc1RvUmV2
YWxpZGF0ZTsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRS
ZXNvdXJjZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291
cmNlQ2xpZW50LmgJKHJldmlzaW9uIDcxNDkzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVz
b3VyY2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICAgIENv
cHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENv
cHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkg
bmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFn
ZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMu
Ci0qLwotCi0jaWZuZGVmIENhY2hlZFJlc291cmNlQ2xpZW50X2gKLSNkZWZpbmUgQ2FjaGVkUmVz
b3VyY2VDbGllbnRfaAotCi0jaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KLSNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBDYWNo
ZWRDU1NTdHlsZVNoZWV0OwotICAgIGNsYXNzIENhY2hlZEZvbnQ7Ci0gICAgY2xhc3MgQ2FjaGVk
UmVzb3VyY2U7Ci0gICAgY2xhc3MgQ2FjaGVkSW1hZ2U7Ci0gICAgY2xhc3MgSW1hZ2U7Ci0gICAg
Y2xhc3MgSW50UmVjdDsKLSAgICBjbGFzcyBLVVJMOwotCi0gICAgLyoqCi0gICAgICogQGludGVy
bmFsCi0gICAgICoKLSAgICAgKiBhIGNsaWVudCB3aG8gd2FudHMgdG8gbG9hZCBzdHlsZXNoZWV0
cywgaW1hZ2VzIG9yIHNjcmlwdHMgZnJvbSB0aGUgd2ViIGhhcyB0bwotICAgICAqIGluaGVyaXQg
ZnJvbSB0aGlzIGNsYXNzIGFuZCBvdmVybG9hZCBvbmUgb2YgdGhlIDMgZnVuY3Rpb25zCi0gICAg
ICoKLSAgICAgKi8KLSAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVudCA6IHB1YmxpYyBGYXN0
QWxsb2NCYXNlCi0gICAgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+Q2FjaGVkUmVz
b3VyY2VDbGllbnQoKSB7IH0KLQotICAgICAgICAvLyBDYWxsZWQgd2hlbmV2ZXIgYSBmcmFtZSBv
ZiBhbiBpbWFnZSBjaGFuZ2VzLCBlaXRoZXIgYmVjYXVzZSB3ZSBnb3QgbW9yZSBkYXRhIGZyb20g
dGhlIG5ldHdvcmsgb3IKLSAgICAgICAgLy8gYmVjYXVzZSB3ZSBhcmUgYW5pbWF0aW5nLiBJZiBu
b3QgbnVsbCwgdGhlIEludFJlY3QgaXMgdGhlIGNoYW5nZWQgcmVjdCBvZiB0aGUgaW1hZ2UuCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRS
ZWN0KiA9IDApIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIENhbGxlZCB0byBmaW5kIG91dCBp
ZiB0aGlzIGNsaWVudCB3YW50cyB0byBhY3R1YWxseSBkaXNwbGF5IHRoZSBpbWFnZS4gIFVzZWQg
dG8gdGVsbCB3aGVuIHdlCi0gICAgICAgIC8vIGNhbiBoYWx0IGFuaW1hdGlvbi4gIENvbnRlbnQg
bm9kZXMgdGhhdCBob2xkIGltYWdlIHJlZnMgZm9yIGV4YW1wbGUgd291bGQgbm90IHJlbmRlciB0
aGUgaW1hZ2UsCi0gICAgICAgIC8vIGJ1dCBSZW5kZXJJbWFnZXMgd291bGQgKGFzc3VtaW5nIHRo
ZXkgaGF2ZSB2aXNpYmlsaXR5OiB2aXNpYmxlIGFuZCB0aGVpciByZW5kZXIgdHJlZSBpc24ndCBo
aWRkZW4KLSAgICAgICAgLy8gZS5nLiwgaW4gdGhlIGIvZiBjYWNoZSBvciBpbiBhIGJhY2tncm91
bmQgdGFiKS4KLSAgICAgICAgdmlydHVhbCBib29sIHdpbGxSZW5kZXJJbWFnZShDYWNoZWRJbWFn
ZSopIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxl
U2hlZXQoY29uc3QgU3RyaW5nJiAvKiBocmVmICovLCBjb25zdCBLVVJMJiAvKiBiYXNlVVJMICov
LCBjb25zdCBTdHJpbmcmIC8qIGNoYXJzZXQgKi8sIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQq
KSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5n
JiAvKiBocmVmICovLCBjb25zdCBLVVJMJiAvKiBiYXNlVVJMICovLCBjb25zdCBTdHJpbmcmIC8q
IHNoZWV0ICovKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9u
dCopIHt9OwotICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3Vy
Y2UqKSB7IH0KLSAgICB9OwotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2Fj
aGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmNwcAkocmV2aXNpb24gNzE0OTMpCisrKyBXZWJD
b3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNTMgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAo
a25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVy
IChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4g
KGJhc3RpYW5Aa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
Ci0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlk
ZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hl
ZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2Fj
aGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcjo6Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIo
Y29uc3QgSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiYgc2V0KQotICAgIDog
bV9jbGllbnRTZXQoc2V0KSwgbV9jbGllbnRWZWN0b3Ioc2V0LnNpemUoKSksIG1faW5kZXgoMCkK
LXsKLSAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj46OmNv
bnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwotICAgIEl0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKLSAg
ICBzaXplX3QgY2xpZW50SW5kZXggPSAwOwotICAgIGZvciAoSXRlcmF0b3IgY3VycmVudCA9IHNl
dC5iZWdpbigpOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50KQotICAgICAgICBtX2NsaWVudFZl
Y3RvcltjbGllbnRJbmRleCsrXSA9IGN1cnJlbnQtPmZpcnN0OwotfQotCi1DYWNoZWRSZXNvdXJj
ZUNsaWVudCogQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI6Om5leHQoKQotewotICAgIHNpemVf
dCBzaXplID0gbV9jbGllbnRWZWN0b3Iuc2l6ZSgpOwotICAgIHdoaWxlIChtX2luZGV4IDwgc2l6
ZSkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudCogbmV4dCA9IG1fY2xpZW50VmVjdG9y
W21faW5kZXgrK107Ci0gICAgICAgIGlmIChtX2NsaWVudFNldC5jb250YWlucyhuZXh0KSkKLSAg
ICAgICAgICAgIHJldHVybiBuZXh0OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi19Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyLmgJKHJldmlz
aW9uIDcxNDkzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykg
MTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQotICAgIENvcHlyaWdodCAoQykg
MjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAgICBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAg
IFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5n
IGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJ
dCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwotCi0jaWZuZGVmIENh
Y2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyX2gKLSNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VDbGllbnRX
YWxrZXJfaAotCi0jaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBDYWNoZWRSZXNv
dXJjZUNsaWVudDsKLQotICAgIC8vIENhbGwgdGhpcyAid2Fsa2VyIiBpbnN0ZWFkIG9mIGl0ZXJh
dG9yIHNvIHBlb3BsZSB3b24ndCBleHBlY3QgUXQgb3IgU1RMLXN0eWxlIGl0ZXJhdG9yIGludGVy
ZmFjZS4KLSAgICAvLyBKdXN0IGtlZXAgY2FsbGluZyBuZXh0KCkgb24gdGhpcy4gSXQncyBzYWZl
IGZyb20gZGVsZXRpb25zIG9mIGl0ZW1zLgotICAgIGNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50
V2Fsa2VyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2Vy
KGNvbnN0IEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj4mKTsKLSAgICAgICAg
Q2FjaGVkUmVzb3VyY2VDbGllbnQqIG5leHQoKTsKLSAgICBwcml2YXRlOgotICAgICAgICBjb25z
dCBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+JiBtX2NsaWVudFNldDsKLSAg
ICAgICAgVmVjdG9yPENhY2hlZFJlc291cmNlQ2xpZW50Kj4gbV9jbGllbnRWZWN0b3I7Ci0gICAg
ICAgIHNpemVfdCBtX2luZGV4OwotICAgIH07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA3MTQ5MykKKysrIFdlYkNv
cmUvbG9hZGVyL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjpz
ZXRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpIAotewotICAgIGlmIChyZXNvdXJj
ZSA9PSBtX3Jlc291cmNlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fcmVzb3VyY2UpCi0g
ICAgICAgIG1fcmVzb3VyY2UtPnVucmVnaXN0ZXJIYW5kbGUodGhpcyk7Ci0gICAgbV9yZXNvdXJj
ZSA9IHJlc291cmNlOwotICAgIGlmIChtX3Jlc291cmNlKQotICAgICAgICBtX3Jlc291cmNlLT5y
ZWdpc3RlckhhbmRsZSh0aGlzKTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
UmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNv
dXJjZUhhbmRsZS5oCShyZXZpc2lvbiA3MTQ5MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJl
c291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDYWNoZWRSZXNv
dXJjZUhhbmRsZV9oCi0jZGVmaW5lIENhY2hlZFJlc291cmNlSGFuZGxlX2gKLQotI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIENh
Y2hlZFJlc291cmNlSGFuZGxlQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICB+Q2FjaGVkUmVz
b3VyY2VIYW5kbGVCYXNlKCkgeyBpZiAobV9yZXNvdXJjZSkgbV9yZXNvdXJjZS0+dW5yZWdpc3Rl
ckhhbmRsZSh0aGlzKTsgfQotICAgICAgICBDYWNoZWRSZXNvdXJjZSogZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXNvdXJjZTsgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiAhbV9yZXNvdXJjZTsgfQotICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBj
b252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0
IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgotICAgICAgICAvLyBQYXJlbnRoZXNpcyBpcyBu
ZWVkZWQgZm9yIHdpbnNjdyBjb21waWxlciB0byByZXNvbHZlIGNsYXNzIHF1YWxpZmllciBpbiB0
aGlzIGNhc2UuCi0gICAgICAgIHR5cGVkZWYgQ2FjaGVkUmVzb3VyY2UqIChDYWNoZWRSZXNvdXJj
ZUhhbmRsZUJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKLSAgICAgICAgb3BlcmF0b3IgVW5z
cGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2UgPyAmQ2FjaGVkUmVz
b3VyY2VIYW5kbGVCYXNlOjptX3Jlc291cmNlIDogMDsgfQotCi0gICAgcHJvdGVjdGVkOgotICAg
ICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UoKSA6IG1fcmVzb3VyY2UoMCkge30KLSAgICAg
ICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKENhY2hlZFJlc291cmNlKiByZXMpIHsgbV9yZXNv
dXJjZSA9IHJlczsgaWYgKG1fcmVzb3VyY2UpIG1fcmVzb3VyY2UtPnJlZ2lzdGVySGFuZGxlKHRo
aXMpOyB9Ci0gICAgICAgIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZShjb25zdCBDYWNoZWRSZXNv
dXJjZUhhbmRsZUJhc2UmIG8pIDogbV9yZXNvdXJjZShvLm1fcmVzb3VyY2UpIHsgaWYgKG1fcmVz
b3VyY2UpIG1fcmVzb3VyY2UtPnJlZ2lzdGVySGFuZGxlKHRoaXMpOyB9Ci0KLSAgICAgICAgdm9p
ZCBzZXRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSopOwotICAgICAgICAKLSAgICBwcml2YXRlOgot
ICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UmIG9wZXJhdG9yPShjb25zdCBDYWNoZWRS
ZXNvdXJjZUhhbmRsZUJhc2UmKSB7IHJldHVybiAqdGhpczsgfSAKLSAgICAgICAgCi0gICAgICAg
IGZyaWVuZCBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKLQotICAgICAgICBDYWNoZWRSZXNvdXJjZSog
bV9yZXNvdXJjZTsKLSAgICB9OwotICAgICAgICAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgUj4gY2xh
c3MgQ2FjaGVkUmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNl
IHsKLSAgICBwdWJsaWM6IAotICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZSgpIHsgfQotICAg
ICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZShSKiByZXMpOwotICAgICAgICBDYWNoZWRSZXNvdXJj
ZUhhbmRsZShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxSPiYgbykgOiBDYWNoZWRSZXNvdXJj
ZUhhbmRsZUJhc2UobykgeyB9Ci0KLSAgICAgICAgUiogZ2V0KCkgY29uc3QgeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxSKj4oQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjpnZXQoKSk7IH0KLSAg
ICAgICAgUiogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9Ci0gICAgICAgICAg
ICAgICAKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGUmIG9wZXJhdG9yPShSKiByZXMpIHsg
c2V0UmVzb3VyY2UocmVzKTsgcmV0dXJuICp0aGlzOyB9IAotICAgICAgICBDYWNoZWRSZXNvdXJj
ZUhhbmRsZSYgb3BlcmF0b3I9KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlJiBvKSB7IHNldFJl
c291cmNlKG8uZ2V0KCkpOyByZXR1cm4gKnRoaXM7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSYgbykgY29uc3QgeyByZXR1cm4gZ2V0KCkg
PT0gby5nZXQoKTsgfQotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGVCYXNlJiBvKSBjb25zdCB7IHJldHVybiBnZXQoKSAhPSBvLmdldCgpOyB9Ci0gICAg
fTsKLQotICAgIC8vIERvbid0IGlubGluZSBmb3Igd2luc2N3IGNvbXBpbGVyIHRvIHByZXZlbnQg
dGhlIGNvbXBpbGVyIGFnZ3Jlc3NpdmVseSByZXNvbHZpbmcKLSAgICAvLyB0aGUgYmFzZSBjbGFz
cyBvZiBSKiB3aGVuIENhY2hlZFJlc291cmNlSGFuZGxlcjxUPihSKikgaXMgaW5saW5lZC4gIFRo
ZSBidWcgaXMKLSAgICAvLyByZXBvcnRlZCBhdDogaHR0cHM6Ly94ZGFidWcwMDEuZXh0Lm5va2lh
LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9OTgxMi4KLSAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
Uj4KLSNpZiAhQ09NUElMRVIoV0lOU0NXKQotICAgIGlubGluZQotI2VuZGlmCi0gICAgQ2FjaGVk
UmVzb3VyY2VIYW5kbGU8Uj46OkNhY2hlZFJlc291cmNlSGFuZGxlKFIqIHJlcykgOiBDYWNoZWRS
ZXNvdXJjZUhhbmRsZUJhc2UocmVzKSAKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRl
IDxjbGFzcyBSLCBjbGFzcyBSUj4gYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhY2hlZFJlc291cmNl
SGFuZGxlPFI+JiBoLCBjb25zdCBSUiogcmVzKSAKLSAgICB7IAotICAgICAgICByZXR1cm4gaC5n
ZXQoKSA9PSByZXM7IAotICAgIH0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUlI+IGJv
b2wgb3BlcmF0b3I9PShjb25zdCBSUiogcmVzLCBjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxS
PiYgaCkgCi0gICAgeyAKLSAgICAgICAgcmV0dXJuIGguZ2V0KCkgPT0gcmVzOyAKLSAgICB9Ci0g
ICAgdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFJSPiBib29sIG9wZXJhdG9yIT0oY29uc3QgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Uj4mIGgsIGNvbnN0IFJSKiByZXMpIAotICAgIHsgCi0gICAgICAg
IHJldHVybiBoLmdldCgpICE9IHJlczsgCi0gICAgfQotICAgIHRlbXBsYXRlIDxjbGFzcyBSLCBj
bGFzcyBSUj4gYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJSKiByZXMsIGNvbnN0IENhY2hlZFJlc291
cmNlSGFuZGxlPFI+JiBoKSAKLSAgICB7IAotICAgICAgICByZXR1cm4gaC5nZXQoKSAhPSByZXM7
IAotICAgIH0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuY3BwCShyZXZpc2lvbiA3MTQ5MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0OTggKzAsMCBAQAotLyoKLSAgICBD
b3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICAgIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlv
bmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAot
ICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBv
YmplY3RzLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlTG9hZGVyLmgiCi0KLSNpbmNsdWRlICJsb2FkZXIuaCIKLSNpbmNsdWRlICJDYWNoZS5oIgot
I2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJDYWNoZWRGb250Lmgi
Ci0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKLSNp
bmNsdWRlICJDYWNoZWRYU0xTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ29uc29sZS5oIgotI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiSFRN
TEVsZW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJQaW5nTG9hZGVyLmgi
Ci0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+Ci0KLSNkZWZpbmUgUFJFTE9BRF9E
RUJVRyAwCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkNh
Y2hlZFJlc291cmNlTG9hZGVyKERvY3VtZW50KiBkb2MpCi0gICAgOiBtX2NhY2hlKGNhY2hlKCkp
Ci0gICAgLCBtX2RvYyhkb2MpCi0gICAgLCBtX3JlcXVlc3RDb3VudCgwKQotICAgICwgbV9hdXRv
TG9hZEltYWdlcyh0cnVlKQotICAgICwgbV9sb2FkSW5Qcm9ncmVzcyhmYWxzZSkKLSAgICAsIG1f
YWxsb3dTdGFsZVJlc291cmNlcyhmYWxzZSkKLXsKLSAgICBtX2NhY2hlLT5hZGRDYWNoZWRSZXNv
dXJjZUxvYWRlcih0aGlzKTsKLX0KLQotQ2FjaGVkUmVzb3VyY2VMb2FkZXI6On5DYWNoZWRSZXNv
dXJjZUxvYWRlcigpCi17Ci0gICAgaWYgKG1fcmVxdWVzdENvdW50KQotICAgICAgICBtX2NhY2hl
LT5sb2FkZXIoKS0+Y2FuY2VsUmVxdWVzdHModGhpcyk7Ci0KLSAgICBjbGVhclByZWxvYWRzKCk7
Ci0gICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFJlc291
cmNlcy5lbmQoKTsKLSAgICBmb3IgKERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0
LT5zZWNvbmQtPnNldENhY2hlZFJlc291cmNlTG9hZGVyKDApOwotICAgIG1fY2FjaGUtPnJlbW92
ZUNhY2hlZFJlc291cmNlTG9hZGVyKHRoaXMpOwotCi0gICAgLy8gTWFrZSBzdXJlIG5vIHJlcXVl
c3RzIHN0aWxsIHBvaW50IHRvIHRoaXMgQ2FjaGVkUmVzb3VyY2VMb2FkZXIKLSAgICBBU1NFUlQo
bV9yZXF1ZXN0Q291bnQgPT0gMCk7Ci19Ci0KLUZyYW1lKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
ZnJhbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX2RvYy0+ZnJhbWUoKTsKLX0KLQotdm9pZCBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tGb3JSZWxvYWQoY29uc3QgS1VSTCYgZnVsbFVSTCkK
LXsKLSAgICBpZiAobV9hbGxvd1N0YWxlUmVzb3VyY2VzKQotICAgICAgICByZXR1cm47IC8vIERv
bid0IHJlbG9hZCByZXNvdXJjZXMgd2hpbGUgcGFzdGluZwotCi0gICAgaWYgKGZ1bGxVUkwuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKG1fcmVsb2FkZWRVUkxzLmNv
bnRhaW5zKGZ1bGxVUkwuc3RyaW5nKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQ2Fj
aGVkUmVzb3VyY2UqIGV4aXN0aW5nID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwoZnVsbFVSTC5z
dHJpbmcoKSk7Ci0gICAgaWYgKCFleGlzdGluZyB8fCBleGlzdGluZy0+aXNQcmVsb2FkZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChjYWNoZVBvbGljeSgpKSB7Ci0gICAgY2Fz
ZSBDYWNoZVBvbGljeVZlcmlmeToKLSAgICAgICAgaWYgKCFleGlzdGluZy0+bXVzdFJldmFsaWRh
dGUoQ2FjaGVQb2xpY3lWZXJpZnkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYWNo
ZSgpLT5yZXZhbGlkYXRlUmVzb3VyY2UoZXhpc3RpbmcsIHRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENhY2hlUG9saWN5Q2FjaGU6Ci0gICAgICAgIGlmICghZXhpc3RpbmctPm11c3RS
ZXZhbGlkYXRlKENhY2hlUG9saWN5Q2FjaGUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjYWNoZSgpLT5yZXZhbGlkYXRlUmVzb3VyY2UoZXhpc3RpbmcsIHRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENhY2hlUG9saWN5UmVsb2FkOgotICAgICAgICBjYWNoZSgpLT5yZW1v
dmUoZXhpc3RpbmcpOyAgICAgICAgCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FjaGVQb2xp
Y3lSZXZhbGlkYXRlOgotICAgICAgICBjYWNoZSgpLT5yZXZhbGlkYXRlUmVzb3VyY2UoZXhpc3Rp
bmcsIHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENhY2hlUG9saWN5QWxsb3dTdGFs
ZToKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcmVsb2FkZWRVUkxzLmFkZChmdWxs
VVJMLnN0cmluZygpKTsKLX0KLQotQ2FjaGVkSW1hZ2UqIENhY2hlZFJlc291cmNlTG9hZGVyOjpy
ZXF1ZXN0SW1hZ2UoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgaWYgKEZyYW1lKiBmID0gZnJh
bWUoKSkgewotICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmLT5zZXR0aW5ncygpOwotICAg
ICAgICBpZiAoIWYtPmxvYWRlcigpLT5jbGllbnQoKS0+YWxsb3dJbWFnZXMoIXNldHRpbmdzIHx8
IHNldHRpbmdzLT5hcmVJbWFnZXNFbmFibGVkKCkpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAgICAgaWYgKGYtPmxvYWRlcigpLT5wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNo
ZWQoKSkgewotICAgICAgICAgICAgS1VSTCBjb21wbGV0ZVVSTCA9IG1fZG9jLT5jb21wbGV0ZVVS
TCh1cmwpOwotICAgICAgICAgICAgaWYgKGNvbXBsZXRlVVJMLmlzVmFsaWQoKSAmJiBjYW5SZXF1
ZXN0KENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlLCBjb21wbGV0ZVVSTCkpCi0gICAgICAg
ICAgICAgICAgUGluZ0xvYWRlcjo6bG9hZEltYWdlKGYsIGNvbXBsZXRlVVJMKTsKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotICAgIENhY2hlZEltYWdlKiByZXNvdXJj
ZSA9IHN0YXRpY19jYXN0PENhY2hlZEltYWdlKj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291
cmNlOjpJbWFnZVJlc291cmNlLCB1cmwsIFN0cmluZygpKSk7Ci0gICAgaWYgKGF1dG9Mb2FkSW1h
Z2VzKCkgJiYgcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnN0aWxsTmVlZHNMb2FkKCkpIHsKLSAgICAg
ICAgcmVzb3VyY2UtPnNldExvYWRpbmcodHJ1ZSk7Ci0gICAgICAgIGNhY2hlKCktPmxvYWRlcigp
LT5sb2FkKHRoaXMsIHJlc291cmNlLCB0cnVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc291cmNl
OwotfQotCi1DYWNoZWRGb250KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdEZvbnQoY29u
c3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZEZvbnQqPihy
ZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZSwgdXJsLCBTdHJpbmco
KSkpOwotfQotCi1DYWNoZWRDU1NTdHlsZVNoZWV0KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVx
dWVzdENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNl
dCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkQ1NTU3R5bGVTaGVldCo+KHJlcXVl
c3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCwgdXJsLCBjaGFyc2V0KSk7
Ci19Ci0KLUNhY2hlZENTU1N0eWxlU2hlZXQqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0
VXNlckNTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNl
dCkKLXsKLSAgICByZXR1cm4gY2FjaGUoKS0+cmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KHRoaXMs
IHVybCwgY2hhcnNldCk7Ci19Ci0KLUNhY2hlZFNjcmlwdCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OnJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkK
LXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkU2NyaXB0Kj4ocmVxdWVzdFJlc291cmNl
KENhY2hlZFJlc291cmNlOjpTY3JpcHQsIHVybCwgY2hhcnNldCkpOwotfQotCi0jaWYgRU5BQkxF
KFhTTFQpCi1DYWNoZWRYU0xTdHlsZVNoZWV0KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVz
dFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PENhY2hlZFhTTFN0eWxlU2hlZXQqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6
OlhTTFN0eWxlU2hlZXQsIHVybCwgU3RyaW5nKCkpKTsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxF
KExJTktfUFJFRkVUQ0gpCi1DYWNoZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJl
cXVlc3RMaW5rUHJlZmV0Y2goY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgQVNTRVJUKGZyYW1l
KCkpOwotICAgIHJldHVybiByZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVm
ZXRjaCwgdXJsLCBTdHJpbmcoKSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6Y2FuUmVxdWVzdChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiB1
cmwpCi17Ci0gICAgLy8gU29tZSB0eXBlcyBvZiByZXNvdXJjZXMgY2FuIGJlIGxvYWRlZCBvbmx5
IGZyb20gdGhlIHNhbWUgb3JpZ2luLiAgT3RoZXIKLSAgICAvLyB0eXBlcyBvZiByZXNvdXJjZXMs
IGxpa2UgSW1hZ2VzLCBTY3JpcHRzLCBhbmQgQ1NTLCBjYW4gYmUgbG9hZGVkIGZyb20KLSAgICAv
LyBhbnkgVVJMLgotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkltYWdlUmVzb3VyY2U6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoK
LSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6Rm9udFJlc291cmNlOgotI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKLSNlbmRpZgotICAgICAgICAvLyBUaGVzZSB0eXBl
cyBvZiByZXNvdXJjZXMgY2FuIGJlIGxvYWRlZCBmcm9tIGFueSBvcmlnaW4uCi0gICAgICAgIC8v
IEZJWE1FOiBBcmUgd2Ugc3VyZSBhYm91dCBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlPwot
ICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoWFNMVCkKLSAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpYU0xTdHlsZVNoZWV0OgotICAgICAgICBpZiAoIW1fZG9jLT5zZWN1cml0eU9yaWdpbigpLT5j
YW5SZXF1ZXN0KHVybCkpIHsKLSAgICAgICAgICAgIHByaW50QWNjZXNzRGVuaWVkTWVzc2FnZSh1
cmwpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vIEdpdmVuIHRoYXQgdGhlIGxvYWQgaXMgYWxs
b3dlZCBieSB0aGUgc2FtZS1vcmlnaW4gcG9saWN5LCB3ZSBzaG91bGQKLSAgICAvLyBjaGVjayB3
aGV0aGVyIHRoZSBsb2FkIHBhc3NlcyB0aGUgbWl4ZWQtY29udGVudCBwb2xpY3kuCi0gICAgLy8K
LSAgICAvLyBOb3RlOiBDdXJyZW50bHksIHdlIGFsd2F5cyBhbGxvdyBtaXhlZCBjb250ZW50LCBi
dXQgd2UgZ2VuZXJhdGUgYQotICAgIC8vICAgICAgIGNhbGxiYWNrIHRvIHRoZSBGcmFtZUxvYWRl
ckNsaWVudCBpbiBjYXNlIHRoZSBlbWJlZGRlciB3YW50cyB0bwotICAgIC8vICAgICAgIHVwZGF0
ZSBhbnkgc2VjdXJpdHkgaW5kaWNhdG9ycy4KLSAgICAvLyAKLSAgICBzd2l0Y2ggKHR5cGUpIHsK
LSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6Ci0jaWYgRU5BQkxFKFhTTFQpCi0gICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKLSNlbmRpZgotICAgICAgICAvLyBU
aGVzZSByZXNvdXJjZSBjYW4gaW5qZWN0IHNjcmlwdCBpbnRvIHRoZSBjdXJyZW50IGRvY3VtZW50
LgotICAgICAgICBpZiAoRnJhbWUqIGYgPSBmcmFtZSgpKQotICAgICAgICAgICAgZi0+bG9hZGVy
KCktPmNoZWNrSWZSdW5JbnNlY3VyZUNvbnRlbnQobV9kb2MtPnNlY3VyaXR5T3JpZ2luKCksIHVy
bCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3Vy
Y2U6Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKLSAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6IHsKLSAgICAgICAgLy8gVGhlc2UgcmVzb3VyY2Vz
IGNhbiBjb3JydXB0IG9ubHkgdGhlIGZyYW1lJ3MgcGl4ZWxzLgotICAgICAgICBpZiAoRnJhbWUq
IGYgPSBmcmFtZSgpKSB7Ci0gICAgICAgICAgICBGcmFtZSogdG9wID0gZi0+dHJlZSgpLT50b3Ao
KTsKLSAgICAgICAgICAgIHRvcC0+bG9hZGVyKCktPmNoZWNrSWZEaXNwbGF5SW5zZWN1cmVDb250
ZW50KHRvcC0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgdXJsKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICB9Ci0jaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCi0gICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgotICAgICAgICAvLyBQcmVmZXRjaCBjYW5u
b3QgYWZmZWN0IHRoZSBjdXJyZW50IGRvY3VtZW50LgotICAgICAgICBicmVhazsKLSNlbmRpZgot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgLy8gRklYTUU6IENvbnNpZGVyIGxldHRpbmcgdGhlIGVtYmVkZGVyIGJs
b2NrIG1peGVkIGNvbnRlbnQgbG9hZHMuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUNhY2hlZFJl
c291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291
cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQs
IGJvb2wgaXNQcmVsb2FkKQotewotICAgIEtVUkwgZnVsbFVSTCA9IG1fZG9jLT5jb21wbGV0ZVVS
TCh1cmwpOwotCi0gICAgaWYgKCFmdWxsVVJMLmlzVmFsaWQoKSB8fCAhY2FuUmVxdWVzdCh0eXBl
LCBmdWxsVVJMKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoY2FjaGUoKS0+ZGlzYWJs
ZWQoKSkgewotICAgICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9j
dW1lbnRSZXNvdXJjZXMuZmluZChmdWxsVVJMLnN0cmluZygpKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChpdCAhPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgICAgICBpdC0+
c2Vjb25kLT5zZXRDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKLSAgICAgICAgICAgIG1fZG9jdW1l
bnRSZXNvdXJjZXMucmVtb3ZlKGl0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNoZWNrRm9y
UmVsb2FkKGZ1bGxVUkwpOwotCi0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gY2FjaGUo
KS0+cmVxdWVzdFJlc291cmNlKHRoaXMsIHR5cGUsIGZ1bGxVUkwsIGNoYXJzZXQsIGlzUHJlbG9h
ZCk7Ci0gICAgaWYgKHJlc291cmNlKSB7Ci0gICAgICAgIC8vIENoZWNrIGZpbmFsIFVSTCBvZiBy
ZXNvdXJjZSB0byBjYXRjaCByZWRpcmVjdHMuCi0gICAgICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTYzPi4KLSAgICAgICAgaWYgKGZ1bGxVUkwg
IT0gcmVzb3VyY2UtPnVybCgpICYmICFjYW5SZXF1ZXN0KHR5cGUsIEtVUkwoUGFyc2VkVVJMU3Ry
aW5nLCByZXNvdXJjZS0+dXJsKCkpKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAg
IG1fZG9jdW1lbnRSZXNvdXJjZXMuc2V0KHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UpOwotICAg
ICAgICBjaGVja0NhY2hlT2JqZWN0U3RhdHVzKHJlc291cmNlKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlc291cmNlOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpwcmludEFjY2Vzc0Rl
bmllZE1lc3NhZ2UoY29uc3QgS1VSTCYgdXJsKSBjb25zdAotewotICAgIGlmICh1cmwuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghZnJhbWUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUoKS0+c2V0dGluZ3MoKTsKLSAgICBp
ZiAoIXNldHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFN0cmluZyBtZXNzYWdlID0gbV9kb2MtPnVybCgpLmlzTnVsbCgp
ID8KLSAgICAgICAgbWFrZVN0cmluZygiVW5zYWZlIGF0dGVtcHQgdG8gbG9hZCBVUkwgIiwgdXJs
LnN0cmluZygpLCAnLicpIDoKLSAgICAgICAgbWFrZVN0cmluZygiVW5zYWZlIGF0dGVtcHQgdG8g
bG9hZCBVUkwgIiwgdXJsLnN0cmluZygpLCAiIGZyb20gZnJhbWUgd2l0aCBVUkwgIiwgbV9kb2Mt
PnVybCgpLnN0cmluZygpLCAiLiBEb21haW5zLCBwcm90b2NvbHMgYW5kIHBvcnRzIG11c3QgbWF0
Y2guXG4iKTsKLQotICAgIC8vIEZJWE1FOiBwcm92aWRlIGEgcmVhbCBsaW5lIG51bWJlciBhbmQg
c291cmNlIFVSTC4KLSAgICBmcmFtZSgpLT5kb21XaW5kb3coKS0+Y29uc29sZSgpLT5hZGRNZXNz
YWdlKE90aGVyTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVs
LCBtZXNzYWdlLCAxLCBTdHJpbmcoKSk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OnNldEF1dG9Mb2FkSW1hZ2VzKGJvb2wgZW5hYmxlKQotewotICAgIGlmIChlbmFibGUgPT0gbV9h
dXRvTG9hZEltYWdlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hdXRvTG9hZEltYWdlcyA9
IGVuYWJsZTsKLQotICAgIGlmICghbV9hdXRvTG9hZEltYWdlcykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFJlc291
cmNlcy5lbmQoKTsKLSAgICBmb3IgKERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9kb2N1bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
Q2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKLSAgICAgICAgaWYg
KHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UpIHsKLSAg
ICAgICAgICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IGNvbnN0X2Nhc3Q8Q2FjaGVkSW1hZ2UqPihz
dGF0aWNfY2FzdDxjb25zdCBDYWNoZWRJbWFnZSo+KHJlc291cmNlKSk7Ci0KLSAgICAgICAgICAg
IGlmIChpbWFnZS0+c3RpbGxOZWVkc0xvYWQoKSkKLSAgICAgICAgICAgICAgICBjYWNoZSgpLT5s
b2FkZXIoKS0+bG9hZCh0aGlzLCBpbWFnZSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LUNhY2hlUG9saWN5IENhY2hlZFJlc291cmNlTG9hZGVyOjpjYWNoZVBvbGljeSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGZyYW1lKCkgPyBmcmFtZSgpLT5sb2FkZXIoKS0+c3VicmVzb3VyY2VDYWNo
ZVBvbGljeSgpIDogQ2FjaGVQb2xpY3lWZXJpZnk7Ci19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OnJlbW92ZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkgY29u
c3QKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmZpbmQocmVzb3VyY2UtPnVybCgpKTsKLSAgICBpZiAo
aXQgIT0gbV9kb2N1bWVudFJlc291cmNlcy5lbmQoKSkKLSAgICAgICAgQVNTRVJUKGl0LT5zZWNv
bmQuZ2V0KCkgPT0gcmVzb3VyY2UpOwotI2VuZGlmCi0gICAgbV9kb2N1bWVudFJlc291cmNlcy5y
ZW1vdmUocmVzb3VyY2UtPnVybCgpKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
c2V0TG9hZEluUHJvZ3Jlc3MoYm9vbCBsb2FkKQotewotICAgIG1fbG9hZEluUHJvZ3Jlc3MgPSBs
b2FkOwotICAgIGlmICghbG9hZCAmJiBmcmFtZSgpKQotICAgICAgICBmcmFtZSgpLT5sb2FkZXIo
KS0+bG9hZERvbmUoKTsKLX0KLQotdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tDYWNo
ZU9iamVjdFN0YXR1cyhDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCi17Ci0gICAgLy8gUmV0dXJu
IGZyb20gdGhlIGZ1bmN0aW9uIGZvciBvYmplY3RzIHRoYXQgd2UgZGlkbid0IGxvYWQgZnJvbSB0
aGUgY2FjaGUgb3IgaWYgd2UgZG9uJ3QgaGF2ZSBhIGZyYW1lLgotICAgIGlmICghcmVzb3VyY2Ug
fHwgIWZyYW1lKCkgfHwgcmVzb3VyY2UtPnN0YXR1cygpICE9IENhY2hlZFJlc291cmNlOjpDYWNo
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBJZiB0aGUgV2ViS2l0IGNsaWVu
dCBjaGFuZ2VzIG9yIGNhbmNlbHMgdGhlIHJlcXVlc3QsIFdlYkNvcmUgZG9lcyBub3QgcmVzcGVj
dCB0aGlzIGFuZCBjb250aW51ZXMgdGhlIGxvYWQuCi0gICAgZnJhbWUoKS0+bG9hZGVyKCktPmxv
YWRlZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKHJlc291cmNlKTsKLX0KLQotdm9pZCBDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6aW5jcmVtZW50UmVxdWVzdENvdW50KGNvbnN0IENhY2hlZFJlc291cmNl
KiByZXMpCi17Ci0gICAgaWYgKHJlcy0+aXNQcmVmZXRjaCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICArK21fcmVxdWVzdENvdW50OwotfQotCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpk
ZWNyZW1lbnRSZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVzb3VyY2UqIHJlcykKLXsKLSAgICBp
ZiAocmVzLT5pc1ByZWZldGNoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC0tbV9yZXF1ZXN0
Q291bnQ7Ci0gICAgQVNTRVJUKG1fcmVxdWVzdENvdW50ID4gLTEpOwotfQotCi1pbnQgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RDb3VudCgpCi17Ci0gICAgaWYgKGxvYWRJblByb2dyZXNz
KCkpCi0gICAgICAgICByZXR1cm4gbV9yZXF1ZXN0Q291bnQgKyAxOwotICAgIHJldHVybiBtX3Jl
cXVlc3RDb3VudDsKLX0KLSAgICAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnByZWxvYWQo
Q2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY2hhcnNldCwgYm9vbCByZWZlcmVuY2VkRnJvbUJvZHkpCi17Ci0gICAgYm9vbCBoYXNSZW5k
ZXJpbmcgPSBtX2RvYy0+Ym9keSgpICYmIG1fZG9jLT5ib2R5KCktPnJlbmRlcmVyKCk7Ci0gICAg
aWYgKCFoYXNSZW5kZXJpbmcgJiYgKHJlZmVyZW5jZWRGcm9tQm9keSB8fCB0eXBlID09IENhY2hl
ZFJlc291cmNlOjpJbWFnZVJlc291cmNlKSkgewotICAgICAgICAvLyBEb24ndCBwcmVsb2FkIGlt
YWdlcyBvciBib2R5IHJlc291cmNlcyBiZWZvcmUgd2UgaGF2ZSBzb21ldGhpbmcgdG8gZHJhdy4g
VGhpcyBwcmV2ZW50cwotICAgICAgICAvLyBwcmVsb2FkcyBmcm9tIGJvZHkgZGVsYXlpbmcgZmly
c3QgZGlzcGxheSB3aGVuIGJhbmR3aWR0aCBpcyBsaW1pdGVkLgotICAgICAgICBQZW5kaW5nUHJl
bG9hZCBwZW5kaW5nUHJlbG9hZCA9IHsgdHlwZSwgdXJsLCBjaGFyc2V0IH07Ci0gICAgICAgIG1f
cGVuZGluZ1ByZWxvYWRzLmFwcGVuZChwZW5kaW5nUHJlbG9hZCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgcmVxdWVzdFByZWxvYWQodHlwZSwgdXJsLCBjaGFyc2V0KTsKLX0KLQotdm9p
ZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tGb3JQZW5kaW5nUHJlbG9hZHMoKSAKLXsKLSAg
ICB1bnNpZ25lZCBjb3VudCA9IG1fcGVuZGluZ1ByZWxvYWRzLnNpemUoKTsKLSAgICBpZiAoIWNv
dW50IHx8ICFtX2RvYy0+Ym9keSgpIHx8ICFtX2RvYy0+Ym9keSgpLT5yZW5kZXJlcigpKQotICAg
ICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
LSAgICAgICAgUGVuZGluZ1ByZWxvYWQmIHByZWxvYWQgPSBtX3BlbmRpbmdQcmVsb2Fkc1tpXTsK
LSAgICAgICAgLy8gRG9uJ3QgcmVxdWVzdCBwcmVsb2FkIGlmIHRoZSByZXNvdXJjZSBhbHJlYWR5
IGxvYWRlZCBub3JtYWxseSAodGhpcyB3aWxsIHJlc3VsdCBpbiBkb3VibGUgbG9hZCBpZiB0aGUg
cGFnZSBpcyBiZWluZyByZWxvYWRlZCB3aXRoIGNhY2hlZCByZXN1bHRzIGlnbm9yZWQpLgotICAg
ICAgICBpZiAoIWNhY2hlZFJlc291cmNlKG1fZG9jLT5jb21wbGV0ZVVSTChwcmVsb2FkLm1fdXJs
KSkpCi0gICAgICAgICAgICByZXF1ZXN0UHJlbG9hZChwcmVsb2FkLm1fdHlwZSwgcHJlbG9hZC5t
X3VybCwgcHJlbG9hZC5tX2NoYXJzZXQpOwotICAgIH0KLSAgICBtX3BlbmRpbmdQcmVsb2Fkcy5j
bGVhcigpOwotfQotCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UHJlbG9hZChD
YWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBjaGFyc2V0KQotewotICAgIFN0cmluZyBlbmNvZGluZzsKLSAgICBpZiAodHlwZSA9PSBDYWNo
ZWRSZXNvdXJjZTo6U2NyaXB0IHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hl
ZXQpCi0gICAgICAgIGVuY29kaW5nID0gY2hhcnNldC5pc0VtcHR5KCkgPyBtX2RvYy0+ZnJhbWUo
KS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGluZygpIDogY2hhcnNldDsKLQotICAgIENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSA9IHJlcXVlc3RSZXNvdXJjZSh0eXBlLCB1cmwsIGVuY29kaW5n
LCB0cnVlKTsKLSAgICBpZiAoIXJlc291cmNlIHx8IChtX3ByZWxvYWRzICYmIG1fcHJlbG9hZHMt
PmNvbnRhaW5zKHJlc291cmNlKSkpCi0gICAgICAgIHJldHVybjsKLSAgICByZXNvdXJjZS0+aW5j
cmVhc2VQcmVsb2FkQ291bnQoKTsKLQotICAgIGlmICghbV9wcmVsb2FkcykKLSAgICAgICAgbV9w
cmVsb2FkcyA9IGFkb3B0UHRyKG5ldyBMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+KTsKLSAg
ICBtX3ByZWxvYWRzLT5hZGQocmVzb3VyY2UpOwotCi0jaWYgUFJFTE9BRF9ERUJVRwotICAgIHBy
aW50ZigiUFJFTE9BRElORyAlc1xuIiwgIHJlc291cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkp
OwotI2VuZGlmCi19Ci0KLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNsZWFyUHJlbG9hZHMo
KQotewotI2lmIFBSRUxPQURfREVCVUcKLSAgICBwcmludFByZWxvYWRTdGF0cygpOwotI2VuZGlm
Ci0gICAgaWYgKCFtX3ByZWxvYWRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMaXN0SGFzaFNl
dDxDYWNoZWRSZXNvdXJjZSo+OjppdGVyYXRvciBlbmQgPSBtX3ByZWxvYWRzLT5lbmQoKTsKLSAg
ICBmb3IgKExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj46Oml0ZXJhdG9yIGl0ID0gbV9wcmVs
b2Fkcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNl
KiByZXMgPSAqaXQ7Ci0gICAgICAgIHJlcy0+ZGVjcmVhc2VQcmVsb2FkQ291bnQoKTsKLSAgICAg
ICAgaWYgKHJlcy0+Y2FuRGVsZXRlKCkgJiYgIXJlcy0+aW5DYWNoZSgpKQotICAgICAgICAgICAg
ZGVsZXRlIHJlczsKLSAgICAgICAgZWxzZSBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2Fj
aGVkUmVzb3VyY2U6OlByZWxvYWROb3RSZWZlcmVuY2VkKQotICAgICAgICAgICAgY2FjaGUoKS0+
cmVtb3ZlKHJlcyk7Ci0gICAgfQotICAgIG1fcHJlbG9hZHMuY2xlYXIoKTsKLX0KLQotdm9pZCBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2xlYXJQZW5kaW5nUHJlbG9hZHMoKQotewotICAgIG1fcGVu
ZGluZ1ByZWxvYWRzLmNsZWFyKCk7Ci19Ci0KLSNpZiBQUkVMT0FEX0RFQlVHCi12b2lkIENhY2hl
ZFJlc291cmNlTG9hZGVyOjpwcmludFByZWxvYWRTdGF0cygpCi17Ci0gICAgdW5zaWduZWQgc2Ny
aXB0cyA9IDA7Ci0gICAgdW5zaWduZWQgc2NyaXB0TWlzc2VzID0gMDsKLSAgICB1bnNpZ25lZCBz
dHlsZXNoZWV0cyA9IDA7Ci0gICAgdW5zaWduZWQgc3R5bGVzaGVldE1pc3NlcyA9IDA7Ci0gICAg
dW5zaWduZWQgaW1hZ2VzID0gMDsKLSAgICB1bnNpZ25lZCBpbWFnZU1pc3NlcyA9IDA7Ci0gICAg
TGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPjo6aXRlcmF0b3IgZW5kID0gbV9wcmVsb2Fkcy5l
bmQoKTsKLSAgICBmb3IgKExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj46Oml0ZXJhdG9yIGl0
ID0gbV9wcmVsb2Fkcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVk
UmVzb3VyY2UqIHJlcyA9ICppdDsKLSAgICAgICAgaWYgKHJlcy0+cHJlbG9hZFJlc3VsdCgpID09
IENhY2hlZFJlc291cmNlOjpQcmVsb2FkTm90UmVmZXJlbmNlZCkKLSAgICAgICAgICAgIHByaW50
ZigiISEgVU5SRUZFUkVOQ0VEIFBSRUxPQUQgJXNcbiIsIHJlcy0+dXJsKCkubGF0aW4xKCkuZGF0
YSgpKTsKLSAgICAgICAgZWxzZSBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVz
b3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVDb21wbGV0ZSkKLSAgICAgICAgICAgIHByaW50
ZigiSElUIENPTVBMRVRFIFBSRUxPQUQgJXNcbiIsIHJlcy0+dXJsKCkubGF0aW4xKCkuZGF0YSgp
KTsKLSAgICAgICAgZWxzZSBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3Vy
Y2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5nKQotICAgICAgICAgICAgcHJpbnRmKCJI
SVQgTE9BRElORyBQUkVMT0FEICVzXG4iLCByZXMtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAocmVzLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlw
dCkgewotICAgICAgICAgICAgc2NyaXB0cysrOwotICAgICAgICAgICAgaWYgKHJlcy0+cHJlbG9h
ZFJlc3VsdCgpIDwgQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5n
KQotICAgICAgICAgICAgICAgIHNjcmlwdE1pc3NlcysrOwotICAgICAgICB9IGVsc2UgaWYgKHJl
cy0+dHlwZSgpID09IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KSB7Ci0gICAgICAgICAg
ICBzdHlsZXNoZWV0cysrOwotICAgICAgICAgICAgaWYgKHJlcy0+cHJlbG9hZFJlc3VsdCgpIDwg
Q2FjaGVkUmVzb3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5nKQotICAgICAgICAg
ICAgICAgIHN0eWxlc2hlZXRNaXNzZXMrKzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGltYWdlcysrOwotICAgICAgICAgICAgaWYgKHJlcy0+cHJlbG9hZFJlc3VsdCgpIDwgQ2FjaGVk
UmVzb3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5nKQotICAgICAgICAgICAgICAg
IGltYWdlTWlzc2VzKys7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChyZXMtPmVy
cm9yT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZShyZXMpOwotICAgICAg
ICAKLSAgICAgICAgcmVzLT5kZWNyZWFzZVByZWxvYWRDb3VudCgpOwotICAgIH0KLSAgICBtX3By
ZWxvYWRzLmNsZWFyKCk7Ci0gICAgCi0gICAgaWYgKHNjcmlwdHMpCi0gICAgICAgIHByaW50Zigi
U0NSSVBUUzogJWQgKCVkIGhpdHMsIGhpdCByYXRlICVkJSUpXG4iLCBzY3JpcHRzLCBzY3JpcHRz
IC0gc2NyaXB0TWlzc2VzLCAoc2NyaXB0cyAtIHNjcmlwdE1pc3NlcykgKiAxMDAgLyBzY3JpcHRz
KTsKLSAgICBpZiAoc3R5bGVzaGVldHMpCi0gICAgICAgIHByaW50ZigiU1RZTEVTSEVFVFM6ICVk
ICglZCBoaXRzLCBoaXQgcmF0ZSAlZCUlKVxuIiwgc3R5bGVzaGVldHMsIHN0eWxlc2hlZXRzIC0g
c3R5bGVzaGVldE1pc3NlcywgKHN0eWxlc2hlZXRzIC0gc3R5bGVzaGVldE1pc3NlcykgKiAxMDAg
LyBzdHlsZXNoZWV0cyk7Ci0gICAgaWYgKGltYWdlcykKLSAgICAgICAgcHJpbnRmKCJJTUFHRVM6
ICAlZCAoJWQgaGl0cywgaGl0IHJhdGUgJWQlJSlcbiIsIGltYWdlcywgaW1hZ2VzIC0gaW1hZ2VN
aXNzZXMsIChpbWFnZXMgLSBpbWFnZU1pc3NlcykgKiAxMDAgLyBpbWFnZXMpOwotfQotI2VuZGlm
Ci0gICAgCi19CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlTG9hZGVyLmgJKHJldmlz
aW9uIDcxNDkzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMzUgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTgg
TGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEg
RGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5IFRv
cmNoIE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFRoaXMgY2xh
c3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywg
c3R5bGUgc2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBt
ZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwotCi0jaWZuZGVmIENhY2hlZFJlc291
cmNlTG9hZGVyX2gKLSNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VMb2FkZXJfaAotCi0jaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgotI2lu
Y2x1ZGUgIkNhY2hlUG9saWN5LmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBD
YWNoZWRDU1NTdHlsZVNoZWV0OwotY2xhc3MgQ2FjaGVkRm9udDsKLWNsYXNzIENhY2hlZEltYWdl
OwotY2xhc3MgQ2FjaGVkU2NyaXB0OwotY2xhc3MgQ2FjaGVkWFNMU3R5bGVTaGVldDsKLWNsYXNz
IERvY3VtZW50OwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBJbWFnZUxvYWRlcjsKLWNsYXNzIEtVUkw7
Ci0KLS8vIFRoZSBDYWNoZWRSZXNvdXJjZUxvYWRlciBtYW5hZ2VzIHRoZSBsb2FkaW5nIG9mIHNj
cmlwdHMvaW1hZ2VzL3N0eWxlc2hlZXRzIGZvciBhIHNpbmdsZSBkb2N1bWVudC4KLWNsYXNzIENh
Y2hlZFJlc291cmNlTG9hZGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLWZyaWVuZCBjbGFzcyBD
YWNoZTsKLWZyaWVuZCBjbGFzcyBJbWFnZUxvYWRlcjsKLQotcHVibGljOgotICAgIENhY2hlZFJl
c291cmNlTG9hZGVyKERvY3VtZW50Kik7Ci0gICAgfkNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0K
LSAgICBDYWNoZWRJbWFnZSogcmVxdWVzdEltYWdlKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICBD
YWNoZWRDU1NTdHlsZVNoZWV0KiByZXF1ZXN0Q1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKLSAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiByZXF1
ZXN0VXNlckNTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hh
cnNldCk7Ci0gICAgQ2FjaGVkU2NyaXB0KiByZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwotICAgIENhY2hlZEZvbnQqIHJlcXVlc3RGb250KGNv
bnN0IFN0cmluZyYgdXJsKTsKLQotI2lmIEVOQUJMRShYU0xUKQotICAgIENhY2hlZFhTTFN0eWxl
U2hlZXQqIHJlcXVlc3RYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsKTsKLSNlbmRpZgot
I2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgIENhY2hlZFJlc291cmNlKiByZXF1ZXN0TGlu
a1ByZWZldGNoKGNvbnN0IFN0cmluZyAmdXJsKTsKLSNlbmRpZgotCi0gICAgLy8gTG9ncyBhbiBh
Y2Nlc3MgZGVuaWVkIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUgZm9yIHRoZSBzcGVjaWZpZWQgVVJM
LgotICAgIHZvaWQgcHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKGNvbnN0IEtVUkwmIHVybCkgY29u
c3Q7Ci0KLSAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1
cmwpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRSZXNvdXJjZXMuZ2V0KHVybCkuZ2V0KCk7IH0K
LSAgICAKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxD
YWNoZWRSZXNvdXJjZT4gPiBEb2N1bWVudFJlc291cmNlTWFwOwotICAgIGNvbnN0IERvY3VtZW50
UmVzb3VyY2VNYXAmIGFsbENhY2hlZFJlc291cmNlcygpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1l
bnRSZXNvdXJjZXM7IH0KLQotICAgIGJvb2wgYXV0b0xvYWRJbWFnZXMoKSBjb25zdCB7IHJldHVy
biBtX2F1dG9Mb2FkSW1hZ2VzOyB9Ci0gICAgdm9pZCBzZXRBdXRvTG9hZEltYWdlcyhib29sKTsK
LSAgICAKLSAgICBDYWNoZVBvbGljeSBjYWNoZVBvbGljeSgpIGNvbnN0OwotICAgIAotICAgIEZy
YW1lKiBmcmFtZSgpIGNvbnN0OyAvLyBDYW4gYmUgTlVMTAotICAgIERvY3VtZW50KiBkb2MoKSBj
b25zdCB7IHJldHVybiBtX2RvYzsgfQotCi0gICAgdm9pZCByZW1vdmVDYWNoZWRSZXNvdXJjZShD
YWNoZWRSZXNvdXJjZSopIGNvbnN0OwotCi0gICAgdm9pZCBzZXRMb2FkSW5Qcm9ncmVzcyhib29s
KTsKLSAgICBib29sIGxvYWRJblByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkSW5Qcm9n
cmVzczsgfQotICAgIAotICAgIHZvaWQgc2V0QWxsb3dTdGFsZVJlc291cmNlcyhib29sIGFsbG93
U3RhbGVSZXNvdXJjZXMpIHsgbV9hbGxvd1N0YWxlUmVzb3VyY2VzID0gYWxsb3dTdGFsZVJlc291
cmNlczsgfQotCi0gICAgdm9pZCBpbmNyZW1lbnRSZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVz
b3VyY2UqKTsKLSAgICB2b2lkIGRlY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNv
dXJjZSopOwotICAgIGludCByZXF1ZXN0Q291bnQoKTsKLSAgICAKLSAgICB2b2lkIGNsZWFyUHJl
bG9hZHMoKTsKLSAgICB2b2lkIGNsZWFyUGVuZGluZ1ByZWxvYWRzKCk7Ci0gICAgdm9pZCBwcmVs
b2FkKENhY2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBjaGFyc2V0LCBib29sIHJlZmVyZW5jZWRGcm9tQm9keSk7Ci0gICAgdm9pZCBjaGVja0ZvclBl
bmRpbmdQcmVsb2FkcygpOwotICAgIHZvaWQgcHJpbnRQcmVsb2FkU3RhdHMoKTsKLSAgICAKLXBy
aXZhdGU6Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZTo6VHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCBp
c1ByZWxvYWQgPSBmYWxzZSk7Ci0gICAgdm9pZCByZXF1ZXN0UHJlbG9hZChDYWNoZWRSZXNvdXJj
ZTo6VHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7Ci0KLSAg
ICB2b2lkIGNoZWNrRm9yUmVsb2FkKGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIGNoZWNrQ2FjaGVP
YmplY3RTdGF0dXMoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICBib29sIGNhblJlcXVlc3QoQ2FjaGVk
UmVzb3VyY2U6OlR5cGUsIGNvbnN0IEtVUkwmKTsKLSAgICAKLSAgICBDYWNoZSogbV9jYWNoZTsK
LSAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWxvYWRlZFVSTHM7Ci0gICAgbXV0YWJsZSBEb2N1bWVu
dFJlc291cmNlTWFwIG1fZG9jdW1lbnRSZXNvdXJjZXM7Ci0gICAgRG9jdW1lbnQqIG1fZG9jOwot
ICAgIAotICAgIGludCBtX3JlcXVlc3RDb3VudDsKLSAgICAKLSAgICBPd25QdHI8TGlzdEhhc2hT
ZXQ8Q2FjaGVkUmVzb3VyY2UqPiA+IG1fcHJlbG9hZHM7Ci0gICAgc3RydWN0IFBlbmRpbmdQcmVs
b2FkIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2U6OlR5cGUgbV90eXBlOwotICAgICAgICBTdHJp
bmcgbV91cmw7Ci0gICAgICAgIFN0cmluZyBtX2NoYXJzZXQ7Ci0gICAgfTsKLSAgICBWZWN0b3I8
UGVuZGluZ1ByZWxvYWQ+IG1fcGVuZGluZ1ByZWxvYWRzOwotICAgIAotICAgIC8vMjkgYml0cyBs
ZWZ0Ci0gICAgYm9vbCBtX2F1dG9Mb2FkSW1hZ2VzIDogMTsKLSAgICBib29sIG1fbG9hZEluUHJv
Z3Jlc3MgOiAxOwotICAgIGJvb2wgbV9hbGxvd1N0YWxlUmVzb3VyY2VzIDogMTsKLX07Ci0KLX0K
LQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAJKHJldmlzaW9uIDcxNDkzKQor
KysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MjMgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxA
bXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3Rp
YW5Aa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndl
aW5pZ0BnbWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHBy
b3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxl
IHNoZWV0cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5
IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotCi0jaW5jbHVkZSAiQ2FjaGUuaCIKLSNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fs
a2VyLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNl
RGVjb2Rlci5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1DYWNoZWRTY3JpcHQ6OkNhY2hlZFNjcmlwdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBjaGFyc2V0KQotICAgIDogQ2FjaGVkUmVzb3VyY2UodXJsLCBTY3JpcHQpCi0gICAg
LCBtX2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJhcHBsaWNhdGlvbi9qYXZh
c2NyaXB0IiwgY2hhcnNldCkpCi0gICAgLCBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lcih0aGlz
LCAmQ2FjaGVkU2NyaXB0OjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZCkKLXsKLSAgICAv
LyBJdCdzIGphdmFzY3JpcHQgd2Ugd2FudC4KLSAgICAvLyBCdXQgc29tZSB3ZWJzaXRlcyB0aGlu
ayB0aGVpciBzY3JpcHRzIGFyZSA8c29tZSB3cm9uZyBtaW1ldHlwZSBoZXJlPgotICAgIC8vIGFu
ZCByZWZ1c2UgdG8gc2VydmUgdGhlbSBpZiB3ZSBvbmx5IGFjY2VwdCBhcHBsaWNhdGlvbi94LWph
dmFzY3JpcHQuCi0gICAgc2V0QWNjZXB0KCIqLyoiKTsKLX0KLQotQ2FjaGVkU2NyaXB0Ojp+Q2Fj
aGVkU2NyaXB0KCkKLXsKLX0KLQotdm9pZCBDYWNoZWRTY3JpcHQ6OmFsbENsaWVudHNSZW1vdmVk
KCkKLXsKLSAgICBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7Ci19
Ci0KLXZvaWQgQ2FjaGVkU2NyaXB0OjpzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGNocykKLXsK
LSAgICBtX2RlY29kZXItPnNldEVuY29kaW5nKGNocywgVGV4dFJlc291cmNlRGVjb2Rlcjo6RW5j
b2RpbmdGcm9tSFRUUEhlYWRlcik7Ci19Ci0KLVN0cmluZyBDYWNoZWRTY3JpcHQ6OmVuY29kaW5n
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKTsKLX0K
LQotY29uc3QgU3RyaW5nJiBDYWNoZWRTY3JpcHQ6OnNjcmlwdCgpCi17Ci0gICAgQVNTRVJUKCFp
c1B1cmdlYWJsZSgpKTsKLQotICAgIGlmICghbV9zY3JpcHQgJiYgbV9kYXRhKSB7Ci0gICAgICAg
IG1fc2NyaXB0ID0gbV9kZWNvZGVyLT5kZWNvZGUobV9kYXRhLT5kYXRhKCksIGVuY29kZWRTaXpl
KCkpOwotICAgICAgICBtX3NjcmlwdCArPSBtX2RlY29kZXItPmZsdXNoKCk7Ci0gICAgICAgIHNl
dERlY29kZWRTaXplKG1fc2NyaXB0Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgfQot
ICAgIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICByZXR1
cm4gbV9zY3JpcHQ7Ci19Ci0KLXZvaWQgQ2FjaGVkU2NyaXB0OjpkYXRhKFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICBpZiAoIWFsbERh
dGFSZWNlaXZlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhID0gZGF0YTsKLSAgICBz
ZXRFbmNvZGVkU2l6ZShtX2RhdGEuZ2V0KCkgPyBtX2RhdGEtPnNpemUoKSA6IDApOwotICAgIHNl
dExvYWRpbmcoZmFsc2UpOwotICAgIGNoZWNrTm90aWZ5KCk7Ci19Ci0KLXZvaWQgQ2FjaGVkU2Ny
aXB0OjpjaGVja05vdGlmeSgpCi17Ci0gICAgaWYgKGlzTG9hZGluZygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7Ci0gICAg
d2hpbGUgKENhY2hlZFJlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCi0gICAgICAgIGMtPm5v
dGlmeUZpbmlzaGVkKHRoaXMpOwotfQotCi12b2lkIENhY2hlZFNjcmlwdDo6ZXJyb3IoKQotewot
ICAgIHNldExvYWRpbmcoZmFsc2UpOwotICAgIHNldEVycm9yT2NjdXJyZWQodHJ1ZSk7Ci0gICAg
Y2hlY2tOb3RpZnkoKTsKLX0KLQotdm9pZCBDYWNoZWRTY3JpcHQ6OmRlc3Ryb3lEZWNvZGVkRGF0
YSgpCi17Ci0gICAgbV9zY3JpcHQgPSBTdHJpbmcoKTsKLSAgICBzZXREZWNvZGVkU2l6ZSgwKTsK
LSAgICBpZiAoIUNhY2hlOjpzaG91bGRNYWtlUmVzb3VyY2VQdXJnZWFibGVPbkV2aWN0aW9uKCkg
JiYgaXNTYWZlVG9NYWtlUHVyZ2VhYmxlKCkpCi0gICAgICAgIG1ha2VQdXJnZWFibGUodHJ1ZSk7
Ci19Ci0KLXZvaWQgQ2FjaGVkU2NyaXB0OjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZChU
aW1lcjxDYWNoZWRTY3JpcHQ+KikKLXsKLSAgICBkZXN0cm95RGVjb2RlZERhdGEoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmgJKHJldmlzaW9u
IDcxNDkzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNjUgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAo
a25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVy
IDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcg
KHNhbS53ZWluaWdAZ21haWwuY29tKQotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0gICAgVGhpcyBj
bGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2Vz
LCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBh
IG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KLSovCi0KLSNpZm5kZWYgQ2FjaGVkU2Ny
aXB0X2gKLSNkZWZpbmUgQ2FjaGVkU2NyaXB0X2gKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xh
c3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci0gICAgY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsK
LQotICAgIGNsYXNzIENhY2hlZFNjcmlwdCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7Ci0gICAg
cHVibGljOgotICAgICAgICBDYWNoZWRTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgY2hhcnNldCk7Ci0gICAgICAgIHZpcnR1YWwgfkNhY2hlZFNjcmlwdCgpOwotCi0gICAg
ICAgIGNvbnN0IFN0cmluZyYgc2NyaXB0KCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFsbENs
aWVudHNSZW1vdmVkKCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldEVuY29kaW5nKGNvbnN0
IFN0cmluZyYpOwotICAgICAgICB2aXJ0dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZXJyb3IoKTsKLQotICAg
ICAgICB2b2lkIGNoZWNrTm90aWZ5KCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lE
ZWNvZGVkRGF0YSgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBkZWNvZGVkRGF0YURl
bGV0aW9uVGltZXJGaXJlZChUaW1lcjxDYWNoZWRTY3JpcHQ+Kik7Ci0gICAgICAgIHZpcnR1YWwg
UHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gUHVyZ2VMYXN0OyB9
Ci0KLSAgICAgICAgU3RyaW5nIG1fc2NyaXB0OwotICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNl
RGVjb2Rlcj4gbV9kZWNvZGVyOwotICAgICAgICBUaW1lcjxDYWNoZWRTY3JpcHQ+IG1fZGVjb2Rl
ZERhdGFEZWxldGlvblRpbWVyOwotICAgIH07Ci19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDcxNDkzKQorKysgV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTkgKzAs
MCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhk
Lm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2Rl
Lm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0Bn
bWFpbC5jb20pCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQot
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVz
IGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0
cyBhbmQgaHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hl
IGZvciB0aGVzZSBvYmplY3RzLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkNhY2hlZFhTTFN0eWxlU2hlZXQuaCIKLQotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50
LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKLSNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBFTkFCTEUoWFNM
VCkKLQotQ2FjaGVkWFNMU3R5bGVTaGVldDo6Q2FjaGVkWFNMU3R5bGVTaGVldChjb25zdCBTdHJp
bmcgJnVybCkKLSAgICA6IENhY2hlZFJlc291cmNlKHVybCwgWFNMU3R5bGVTaGVldCkKLSAgICAs
IG1fZGVjb2RlcihUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQveHNsIikpCi17Ci0g
ICAgLy8gSXQncyBYTUwgd2Ugd2FudC4KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWNjZXB0
IG1vcmUgZ2VuZXJhbCB4bWwgZm9ybWF0cyAqLyoreG1sLCBpbWFnZS9zdmcreG1sIGZvciBleGFt
cGxlLgotICAgIHNldEFjY2VwdCgidGV4dC94bWwsIGFwcGxpY2F0aW9uL3htbCwgYXBwbGljYXRp
b24veGh0bWwreG1sLCB0ZXh0L3hzbCwgYXBwbGljYXRpb24vcnNzK3htbCwgYXBwbGljYXRpb24v
YXRvbSt4bWwiKTsKLX0KLQotdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpkaWRBZGRDbGllbnQo
Q2FjaGVkUmVzb3VyY2VDbGllbnQqIGMpCi17ICAKLSAgICBpZiAoIWlzTG9hZGluZygpKQotICAg
ICAgICBjLT5zZXRYU0xTdHlsZVNoZWV0KG1fdXJsLCBtX3Jlc3BvbnNlLnVybCgpLCBtX3NoZWV0
KTsKLX0KLQotdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpzZXRFbmNvZGluZyhjb25zdCBTdHJp
bmcmIGNocykKLXsKLSAgICBtX2RlY29kZXItPnNldEVuY29kaW5nKGNocywgVGV4dFJlc291cmNl
RGVjb2Rlcjo6RW5jb2RpbmdGcm9tSFRUUEhlYWRlcik7Ci19Ci0KLVN0cmluZyBDYWNoZWRYU0xT
dHlsZVNoZWV0OjplbmNvZGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVjb2Rlci0+ZW5j
b2RpbmcoKS5uYW1lKCk7Ci19Ci0KLXZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZGF0YShQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAg
aWYgKCFhbGxEYXRhUmVjZWl2ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YSA9IGRh
dGE7ICAgICAKLSAgICBzZXRFbmNvZGVkU2l6ZShtX2RhdGEuZ2V0KCkgPyBtX2RhdGEtPnNpemUo
KSA6IDApOwotICAgIGlmIChtX2RhdGEuZ2V0KCkpIHsKLSAgICAgICAgbV9zaGVldCA9IFN0cmlu
ZyhtX2RlY29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgZW5jb2RlZFNpemUoKSkpOwotICAg
ICAgICBtX3NoZWV0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKLSAgICB9Ci0gICAgc2V0TG9hZGlu
ZyhmYWxzZSk7Ci0gICAgY2hlY2tOb3RpZnkoKTsKLX0KLQotdm9pZCBDYWNoZWRYU0xTdHlsZVNo
ZWV0OjpjaGVja05vdGlmeSgpCi17Ci0gICAgaWYgKGlzTG9hZGluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOwot
ICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCAqYyA9IHcubmV4dCgpKQotICAgICAgICBj
LT5zZXRYU0xTdHlsZVNoZWV0KG1fdXJsLCBtX3Jlc3BvbnNlLnVybCgpLCBtX3NoZWV0KTsKLX0K
LQotdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjplcnJvcigpCi17Ci0gICAgc2V0TG9hZGluZyhm
YWxzZSk7Ci0gICAgc2V0RXJyb3JPY2N1cnJlZCh0cnVlKTsKLSAgICBjaGVja05vdGlmeSgpOwot
fQotCi0jZW5kaWYKLQotfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuaAko
cmV2aXNpb24gNzE0OTMpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5
OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA2
IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICAgIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9y
IGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSAgICBwYWdlcyBmcm9tIHRo
ZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KLSovCi0KLSNp
Zm5kZWYgQ2FjaGVkWFNMU3R5bGVTaGVldF9oCi0jZGVmaW5lIENhY2hlZFhTTFN0eWxlU2hlZXRf
aAotCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVy
OwotICAgIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7Ci0KLSNpZiBFTkFCTEUoWFNMVCkKLSAg
ICBjbGFzcyBDYWNoZWRYU0xTdHlsZVNoZWV0IDogcHVibGljIENhY2hlZFJlc291cmNlIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIENhY2hlZFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwp
OwotCi0gICAgICAgIGNvbnN0IFN0cmluZyYgc2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0
OyB9Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJl
c291cmNlQ2xpZW50Kik7Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5jb2Rp
bmcoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGVuY29kaW5nKCkgY29u
c3Q7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBlcnJvcigp
OwotICAgICAgICAKLSAgICAgICAgdm9pZCBjaGVja05vdGlmeSgpOwotICAgICAgICAKLSAgICBw
cm90ZWN0ZWQ6Ci0gICAgICAgIFN0cmluZyBtX3NoZWV0OwotICAgICAgICBSZWZQdHI8VGV4dFJl
c291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwotICAgIH07Ci0KLSNlbmRpZgotCi19Ci0KLSNlbmRp
ZgpJbmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVQb2xpY3kuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZVBvbGljeS5oCShyZXZpc2lvbiA3MTQ5MikJKGZy
b20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVQb2xpY3kuaDo3MTQ5MikKKysrIFdlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlUG9saWN5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDYWNoZVBvbGljeV9oCisjZGVmaW5lIENh
Y2hlUG9saWN5X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgZW51bSBDYWNoZVBvbGlj
eSB7CisgICAgICAgIENhY2hlUG9saWN5Q2FjaGUsCisgICAgICAgIENhY2hlUG9saWN5VmVyaWZ5
LAorICAgICAgICBDYWNoZVBvbGljeVJldmFsaWRhdGUsCisgICAgICAgIENhY2hlUG9saWN5UmVs
b2FkLAorICAgICAgICBDYWNoZVBvbGljeUFsbG93U3RhbGUKKyAgICB9OworCit9CisKKyNlbmRp
ZgpJbmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJ
KHJldmlzaW9uIDcxNDkyKQkoZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0
LmNwcDo3MTQ5MikKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykg
MjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0
eWxlIHNoZWV0cyBhbmQgaHRtbAorICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVt
b3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKKworI2luY2x1ZGUgIkNhY2hlLmgiCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUNsaWVudFdhbGtlci5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCisjaW5jbHVkZSAiVGV4
dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUg
ImxvYWRlci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitDYWNoZWRDU1NTdHlsZVNoZWV0OjpDYWNoZWRDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCisgICAgOiBDYWNoZWRSZXNvdXJjZSh1cmws
IENTU1N0eWxlU2hlZXQpCisgICAgLCBtX2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3Jl
YXRlKCJ0ZXh0L2NzcyIsIGNoYXJzZXQpKQoreworICAgIC8vIFByZWZlciB0ZXh0L2NzcyBidXQg
YWNjZXB0IGFueSB0eXBlIChkZWxsLmNvbSBzZXJ2ZXMgYSBzdHlsZXNoZWV0CisgICAgLy8gYXMg
dGV4dC9odG1sOyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
NDUxPikuCisgICAgc2V0QWNjZXB0KCJ0ZXh0L2NzcywqLyo7cT0wLjEiKTsKK30KKworQ2FjaGVk
Q1NTU3R5bGVTaGVldDo6fkNhY2hlZENTU1N0eWxlU2hlZXQoKQoreworfQorCit2b2lkIENhY2hl
ZENTU1N0eWxlU2hlZXQ6OmRpZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCAqYykKK3sK
KyAgICBpZiAoIWlzTG9hZGluZygpKQorICAgICAgICBjLT5zZXRDU1NTdHlsZVNoZWV0KG1fdXJs
LCBtX3Jlc3BvbnNlLnVybCgpLCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpLCB0aGlzKTsK
K30KKwordm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjphbGxDbGllbnRzUmVtb3ZlZCgpCit7Cisg
ICAgaWYgKCFDYWNoZTo6c2hvdWxkTWFrZVJlc291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpICYm
IGlzU2FmZVRvTWFrZVB1cmdlYWJsZSgpKQorICAgICAgICBtYWtlUHVyZ2VhYmxlKHRydWUpOwor
fQorCit2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYg
Y2hzKQoreworICAgIG1fZGVjb2Rlci0+c2V0RW5jb2RpbmcoY2hzLCBUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsKK30KKworU3RyaW5nIENhY2hlZENTU1N0eWxl
U2hlZXQ6OmVuY29kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5lbmNvZGlu
ZygpLm5hbWUoKTsKK30KKyAgICAKK2NvbnN0IFN0cmluZyBDYWNoZWRDU1NTdHlsZVNoZWV0Ojpz
aGVldFRleHQoYm9vbCBlbmZvcmNlTUlNRVR5cGUsIGJvb2wqIGhhc1ZhbGlkTUlNRVR5cGUpIGNv
bnN0IAoreyAKKyAgICBBU1NFUlQoIWlzUHVyZ2VhYmxlKCkpOworCisgICAgaWYgKCFtX2RhdGEg
fHwgbV9kYXRhLT5pc0VtcHR5KCkgfHwgIWNhblVzZVNoZWV0KGVuZm9yY2VNSU1FVHlwZSwgaGFz
VmFsaWRNSU1FVHlwZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAKKyAgICBpZiAo
IW1fZGVjb2RlZFNoZWV0VGV4dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG1fZGVjb2RlZFNo
ZWV0VGV4dDsKKyAgICAKKyAgICAvLyBEb24ndCBjYWNoZSB0aGUgZGVjb2RlZCB0ZXh0LCByZWdl
bmVyYXRpbmcgaXMgY2hlYXAgYW5kIGl0IGNhbiB1c2UgcXVpdGUgYSBiaXQgb2YgbWVtb3J5Cisg
ICAgU3RyaW5nIHNoZWV0VGV4dCA9IG1fZGVjb2Rlci0+ZGVjb2RlKG1fZGF0YS0+ZGF0YSgpLCBt
X2RhdGEtPnNpemUoKSk7CisgICAgc2hlZXRUZXh0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKKyAg
ICByZXR1cm4gc2hlZXRUZXh0OworfQorCit2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmRhdGEo
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQorewor
ICAgIGlmICghYWxsRGF0YVJlY2VpdmVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEg
PSBkYXRhOworICAgIHNldEVuY29kZWRTaXplKG1fZGF0YS5nZXQoKSA/IG1fZGF0YS0+c2l6ZSgp
IDogMCk7CisgICAgLy8gRGVjb2RlIHRoZSBkYXRhIHRvIGZpbmQgb3V0IHRoZSBlbmNvZGluZyBh
bmQga2VlcCB0aGUgc2hlZXQgdGV4dCBhcm91bmQgZHVyaW5nIGNoZWNrTm90aWZ5KCkKKyAgICBp
ZiAobV9kYXRhKSB7CisgICAgICAgIG1fZGVjb2RlZFNoZWV0VGV4dCA9IG1fZGVjb2Rlci0+ZGVj
b2RlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7CisgICAgICAgIG1fZGVjb2RlZFNo
ZWV0VGV4dCArPSBtX2RlY29kZXItPmZsdXNoKCk7CisgICAgfQorICAgIHNldExvYWRpbmcoZmFs
c2UpOworICAgIGNoZWNrTm90aWZ5KCk7CisgICAgLy8gQ2xlYXIgdGhlIGRlY29kZWQgdGV4dCBh
cyBpdCBpcyB1bmxpa2VseSB0byBiZSBuZWVkZWQgaW1tZWRpYXRlbHkgYWdhaW4gYW5kIGlzIGNo
ZWFwIHRvIHJlZ2VuZXJhdGUuCisgICAgbV9kZWNvZGVkU2hlZXRUZXh0ID0gU3RyaW5nKCk7Cit9
CisKK3ZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Y2hlY2tOb3RpZnkoKQoreworICAgIGlmIChp
c0xvYWRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRX
YWxrZXIgdyhtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCAqYyA9
IHcubmV4dCgpKQorICAgICAgICBjLT5zZXRDU1NTdHlsZVNoZWV0KG1fdXJsLCBtX3Jlc3BvbnNl
LnVybCgpLCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpLCB0aGlzKTsKK30KKwordm9pZCBD
YWNoZWRDU1NTdHlsZVNoZWV0OjplcnJvcigpCit7CisgICAgc2V0TG9hZGluZyhmYWxzZSk7Cisg
ICAgc2V0RXJyb3JPY2N1cnJlZCh0cnVlKTsKKyAgICBjaGVja05vdGlmeSgpOworfQorCitib29s
IENhY2hlZENTU1N0eWxlU2hlZXQ6OmNhblVzZVNoZWV0KGJvb2wgZW5mb3JjZU1JTUVUeXBlLCBi
b29sKiBoYXNWYWxpZE1JTUVUeXBlKSBjb25zdAoreworICAgIGlmIChlcnJvck9jY3VycmVkKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgaWYgKCFlbmZvcmNlTUlNRVR5
cGUgJiYgIWhhc1ZhbGlkTUlNRVR5cGUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8g
VGhpcyBjaGVjayBleGFjdGx5IG1hdGNoZXMgRmlyZWZveC4gIE5vdGUgdGhhdCB3ZSBncmFiIHRo
ZSBDb250ZW50LVR5cGUKKyAgICAvLyBoZWFkZXIgZGlyZWN0bHkgYmVjYXVzZSB3ZSB3YW50IHRv
IHNlZSB3aGF0IHRoZSB2YWx1ZSBpcyBCRUZPUkUgY29udGVudAorICAgIC8vIHNuaWZmaW5nLiAg
RmlyZWZveCBkb2VzIHRoaXMgYnkgc2V0dGluZyBhICJ0eXBlIGhpbnQiIG9uIHRoZSBjaGFubmVs
LgorICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIG9ic2VydmF0aW9uYWxseSBl
cXVpdmFsZW50LgorICAgIC8vCisgICAgLy8gVGhpcyBjb2RlIGRlZmF1bHRzIHRvIGFsbG93aW5n
IHRoZSBzdHlsZXNoZWV0IGZvciBub24tSFRUUCBwcm90b2NvbHMgc28KKyAgICAvLyBmb2xrcyBj
YW4gdXNlIHN0YW5kYXJkcyBtb2RlIGZvciBsb2NhbCBIVE1MIGRvY3VtZW50cy4KKyAgICBTdHJp
bmcgbWltZVR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKHJlc3BvbnNlKCkuaHR0
cEhlYWRlckZpZWxkKCJDb250ZW50LVR5cGUiKSk7CisgICAgYm9vbCB0eXBlT0sgPSBtaW1lVHlw
ZS5pc0VtcHR5KCkgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJ0ZXh0L2NzcyIpIHx8
IGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCAiYXBwbGljYXRpb24veC11bmtub3duLWNvbnRl
bnQtdHlwZSIpOworICAgIGlmIChoYXNWYWxpZE1JTUVUeXBlKQorICAgICAgICAqaGFzVmFsaWRN
SU1FVHlwZSA9IHR5cGVPSzsKKyAgICBpZiAoIWVuZm9yY2VNSU1FVHlwZSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHR5cGVPSzsKK30KKyAKK30KSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDcxNDkyKQkoZnJvbSBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0Lmg6NzE0OTIpCisrKyBXZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBp
LWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVy
QGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWlu
aWdAZ21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBwcm92
aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBz
aGVldHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBj
YWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2FjaGVkQ1NTU3R5bGVTaGVl
dF9oCisjZGVmaW5lIENhY2hlZENTU1N0eWxlU2hlZXRfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2UuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIENhY2hlZFJlc291cmNlTG9h
ZGVyOworICAgIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CisKKyAgICBjbGFzcyBDYWNoZWRD
U1NTdHlsZVNoZWV0IDogcHVibGljIENhY2hlZFJlc291cmNlIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIENhY2hlZENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBVUkwsIGNvbnN0IFN0cmluZyYg
Y2hhcnNldCk7CisgICAgICAgIHZpcnR1YWwgfkNhY2hlZENTU1N0eWxlU2hlZXQoKTsKKworICAg
ICAgICBjb25zdCBTdHJpbmcgc2hlZXRUZXh0KGJvb2wgZW5mb3JjZU1JTUVUeXBlID0gdHJ1ZSwg
Ym9vbCogaGFzVmFsaWRNSU1FVHlwZSA9IDApIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKKyAgICAgICAgCisgICAgICAg
IHZpcnR1YWwgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpOworCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZW5j
b2RpbmcoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGEoUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGVycm9yKCk7CisKKyAgICAgICAgdm9pZCBjaGVja05vdGlmeSgpOworICAgIAorICAgIHBy
aXZhdGU6CisgICAgICAgIGJvb2wgY2FuVXNlU2hlZXQoYm9vbCBlbmZvcmNlTUlNRVR5cGUsIGJv
b2wqIGhhc1ZhbGlkTUlNRVR5cGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFB1cmdlUHJpb3Jp
dHkgcHVyZ2VQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIFB1cmdlTGFzdDsgfQorCisgICAgcHJv
dGVjdGVkOgorICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwor
ICAgICAgICBTdHJpbmcgbV9kZWNvZGVkU2hlZXRUZXh0OworICAgIH07CisKK30KKworI2VuZGlm
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcAkocmV2aXNpb24gNzE0OTIpCShm
cm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEZvbnQuY3BwOjcxNDkyKQorKysgV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgorCisj
aWYgUExBVEZPUk0oQ0cpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspIHx8IChQTEFU
Rk9STShDSFJPTUlVTSkgJiYgKE9TKFdJTkRPV1MpIHx8IE9TKExJTlVYKSB8fCBPUyhGUkVFQlNE
KSkpIHx8IFBMQVRGT1JNKEhBSUtVKSB8fCBPUyhXSU5DRSkgfHwgUExBVEZPUk0oQU5EUk9JRCkg
fHwgUExBVEZPUk0oQlJFV01QKQorI2RlZmluZSBTVE9SRV9GT05UX0NVU1RPTV9QTEFURk9STV9E
QVRBCisjZW5kaWYKKworI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgorI2lu
Y2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWZkZWYgU1RPUkVfRk9OVF9DVVNUT01fUExBVEZPUk1f
REFUQQorI2luY2x1ZGUgIkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKKyNlbmRpZgorCisjaWYg
RU5BQkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJOb2Rl
TGlzdC5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGb250RWxlbWVu
dC5oIgorI2luY2x1ZGUgIlNWR0dFbGVtZW50LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitDYWNoZWRGb250OjpDYWNoZWRGb250KGNvbnN0IFN0cmluZyAmdXJsKQorICAgIDog
Q2FjaGVkUmVzb3VyY2UodXJsLCBGb250UmVzb3VyY2UpCisgICAgLCBtX2ZvbnREYXRhKDApCisg
ICAgLCBtX2xvYWRJbml0aWF0ZWQoZmFsc2UpCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICAs
IG1faXNTVkdGb250KGZhbHNlKQorI2VuZGlmCit7Cit9CisKK0NhY2hlZEZvbnQ6On5DYWNoZWRG
b250KCkKK3sKKyNpZmRlZiBTVE9SRV9GT05UX0NVU1RPTV9QTEFURk9STV9EQVRBCisgICAgZGVs
ZXRlIG1fZm9udERhdGE7CisjZW5kaWYKK30KKwordm9pZCBDYWNoZWRGb250Ojpsb2FkKENhY2hl
ZFJlc291cmNlTG9hZGVyKikKK3sKKyAgICAvLyBEb24ndCBsb2FkIHRoZSBmaWxlIHlldC4gIFdh
aXQgZm9yIGFuIGFjY2VzcyBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgbG9hZC4KKyAgICBzZXRMb2Fk
aW5nKHRydWUpOworfQorCit2b2lkIENhY2hlZEZvbnQ6OmRpZEFkZENsaWVudChDYWNoZWRSZXNv
dXJjZUNsaWVudCogYykKK3sKKyAgICBpZiAoIWlzTG9hZGluZygpKQorICAgICAgICBjLT5mb250
TG9hZGVkKHRoaXMpOworfQorCit2b2lkIENhY2hlZEZvbnQ6OmRhdGEoUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlmICghYWxsRGF0
YVJlY2VpdmVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEgPSBkYXRhOyAgICAgCisg
ICAgc2V0RW5jb2RlZFNpemUobV9kYXRhLmdldCgpID8gbV9kYXRhLT5zaXplKCkgOiAwKTsKKyAg
ICBzZXRMb2FkaW5nKGZhbHNlKTsKKyAgICBjaGVja05vdGlmeSgpOworfQorCit2b2lkIENhY2hl
ZEZvbnQ6OmJlZ2luTG9hZElmTmVlZGVkKENhY2hlZFJlc291cmNlTG9hZGVyKiBkbCkKK3sKKyAg
ICBpZiAoIW1fbG9hZEluaXRpYXRlZCkgeworICAgICAgICBtX2xvYWRJbml0aWF0ZWQgPSB0cnVl
OworICAgICAgICBjYWNoZSgpLT5sb2FkZXIoKS0+bG9hZChkbCwgdGhpcywgZmFsc2UpOworICAg
IH0KK30KKworYm9vbCBDYWNoZWRGb250OjplbnN1cmVDdXN0b21Gb250RGF0YSgpCit7CisjaWZk
ZWYgU1RPUkVfRk9OVF9DVVNUT01fUExBVEZPUk1fREFUQQorI2lmIEVOQUJMRShTVkdfRk9OVFMp
CisgICAgQVNTRVJUKCFtX2lzU1ZHRm9udCk7CisjZW5kaWYKKyAgICBpZiAoIW1fZm9udERhdGEg
JiYgIWVycm9yT2NjdXJyZWQoKSAmJiAhaXNMb2FkaW5nKCkgJiYgbV9kYXRhKSB7CisgICAgICAg
IG1fZm9udERhdGEgPSBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKG1fZGF0YS5nZXQoKSk7
CisgICAgICAgIGlmICghbV9mb250RGF0YSkKKyAgICAgICAgICAgIHNldEVycm9yT2NjdXJyZWQo
dHJ1ZSk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIG1fZm9udERhdGE7Cit9CisKK0ZvbnRQ
bGF0Zm9ybURhdGEgQ2FjaGVkRm9udDo6cGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoZmxvYXQg
c2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9u
LCBGb250UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQoreworI2lmIEVOQUJMRShTVkdfRk9O
VFMpCisgICAgaWYgKG1fZXh0ZXJuYWxTVkdEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIEZvbnRQ
bGF0Zm9ybURhdGEoc2l6ZSwgYm9sZCwgaXRhbGljKTsKKyNlbmRpZgorI2lmZGVmIFNUT1JFX0ZP
TlRfQ1VTVE9NX1BMQVRGT1JNX0RBVEEKKyAgICBBU1NFUlQobV9mb250RGF0YSk7CisgICAgcmV0
dXJuIG1fZm9udERhdGEtPmZvbnRQbGF0Zm9ybURhdGEoc3RhdGljX2Nhc3Q8aW50PihzaXplKSwg
Ym9sZCwgaXRhbGljLCBvcmllbnRhdGlvbiwgcmVuZGVyaW5nTW9kZSk7CisjZWxzZQorICAgIHJl
dHVybiBGb250UGxhdGZvcm1EYXRhKCk7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShTVkdfRk9O
VFMpCitib29sIENhY2hlZEZvbnQ6OmVuc3VyZVNWR0ZvbnREYXRhKCkKK3sKKyAgICBBU1NFUlQo
bV9pc1NWR0ZvbnQpOworICAgIGlmICghbV9leHRlcm5hbFNWR0RvY3VtZW50ICYmICFlcnJvck9j
Y3VycmVkKCkgJiYgIWlzTG9hZGluZygpICYmIG1fZGF0YSkgeworICAgICAgICBtX2V4dGVybmFs
U1ZHRG9jdW1lbnQgPSBTVkdEb2N1bWVudDo6Y3JlYXRlKDAsIEtVUkwoKSk7CisgICAgICAgIG1f
ZXh0ZXJuYWxTVkdEb2N1bWVudC0+b3BlbigpOworCisgICAgICAgIFJlZlB0cjxUZXh0UmVzb3Vy
Y2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJhcHBsaWNh
dGlvbi94bWwiKTsKKyAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50LT53cml0ZShkZWNvZGVy
LT5kZWNvZGUobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKSk7CisgICAgICAgIG1fZXh0
ZXJuYWxTVkdEb2N1bWVudC0+d3JpdGUoZGVjb2Rlci0+Zmx1c2goKSk7CisgICAgICAgIGlmIChk
ZWNvZGVyLT5zYXdFcnJvcigpKSB7CisgICAgICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQu
Y2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgbV9l
eHRlcm5hbFNWR0RvY3VtZW50LT5maW5pc2hQYXJzaW5nKCk7CisgICAgICAgIG1fZXh0ZXJuYWxT
VkdEb2N1bWVudC0+Y2xvc2UoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9leHRlcm5hbFNWR0Rv
Y3VtZW50OworfQorCitTVkdGb250RWxlbWVudCogQ2FjaGVkRm9udDo6Z2V0U1ZHRm9udEJ5SWQo
Y29uc3QgU3RyaW5nJiBmb250TmFtZSkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pc1NWR0ZvbnQp
OworICAgIFJlZlB0cjxOb2RlTGlzdD4gbGlzdCA9IG1fZXh0ZXJuYWxTVkdEb2N1bWVudC0+Z2V0
RWxlbWVudHNCeVRhZ05hbWVOUyhTVkdOYW1lczo6Zm9udFRhZy5uYW1lc3BhY2VVUkkoKSwgU1ZH
TmFtZXM6OmZvbnRUYWcubG9jYWxOYW1lKCkpOworICAgIGlmICghbGlzdCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICB1bnNpZ25lZCBsaXN0TGVuZ3RoID0gbGlzdC0+bGVuZ3RoKCk7CisgICAg
aWYgKCFsaXN0TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworI2lmbmRlZiBOREVCVUcKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgKytpKSB7CisgICAgICAgIEFT
U0VSVChsaXN0LT5pdGVtKGkpKTsKKyAgICAgICAgQVNTRVJUKGxpc3QtPml0ZW0oaSktPmhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OmZvbnRUYWcpKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChmb250
TmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdGb250RWxlbWVu
dCo+KGxpc3QtPml0ZW0oMCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3RM
ZW5ndGg7ICsraSkgeworICAgICAgICBTVkdGb250RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR0ZvbnRFbGVtZW50Kj4obGlzdC0+aXRlbShpKSk7CisgICAgICAgIGlmIChlbGVtZW50
LT5nZXRJZEF0dHJpYnV0ZSgpID09IGZvbnROYW1lKQorICAgICAgICAgICAgcmV0dXJuIGVsZW1l
bnQ7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwordm9pZCBDYWNoZWRGb250
OjphbGxDbGllbnRzUmVtb3ZlZCgpCit7CisjaWZkZWYgU1RPUkVfRk9OVF9DVVNUT01fUExBVEZP
Uk1fREFUQQorICAgIGlmIChtX2ZvbnREYXRhKSB7CisgICAgICAgIGRlbGV0ZSBtX2ZvbnREYXRh
OworICAgICAgICBtX2ZvbnREYXRhID0gMDsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBDYWNo
ZWRGb250OjpjaGVja05vdGlmeSgpCit7CisgICAgaWYgKGlzTG9hZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMp
OworICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCAqYyA9IHcubmV4dCgpKQorICAgICAg
ICAgYy0+Zm9udExvYWRlZCh0aGlzKTsKK30KKworCit2b2lkIENhY2hlZEZvbnQ6OmVycm9yKCkK
K3sKKyAgICBzZXRMb2FkaW5nKGZhbHNlKTsKKyAgICBzZXRFcnJvck9jY3VycmVkKHRydWUpOwor
ICAgIGNoZWNrTm90aWZ5KCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250
LmgJKHJldmlzaW9uIDcxNDkyKQkoZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250Lmg6NzE0
OTIpCisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FjaGVkRm9udF9oCisj
ZGVmaW5lIENhY2hlZEZvbnRfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNs
dWRlICJGb250T3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisjaW5jbHVk
ZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKK2NsYXNzIENh
Y2hlOworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIFNWR0ZvbnRFbGVtZW50OworCitz
dHJ1Y3QgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTsKKworY2xhc3MgQ2FjaGVkRm9udCA6IHB1Ymxp
YyBDYWNoZWRSZXNvdXJjZSB7CitwdWJsaWM6CisgICAgQ2FjaGVkRm9udChjb25zdCBTdHJpbmcm
IHVybCk7CisgICAgdmlydHVhbCB+Q2FjaGVkRm9udCgpOworICAgIAorICAgIHZpcnR1YWwgdm9p
ZCBsb2FkKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlcik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CisgICAg
dmlydHVhbCB2b2lkIGRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXJyb3IoKTsKKworICAgIHZpcnR1YWwg
dm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpOworCisgICAgdm9pZCBjaGVja05vdGlmeSgpOworCisg
ICAgdm9pZCBiZWdpbkxvYWRJZk5lZWRlZChDYWNoZWRSZXNvdXJjZUxvYWRlciogZGwpOworCisg
ICAgYm9vbCBlbnN1cmVDdXN0b21Gb250RGF0YSgpOworICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxh
dGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxp
YywgRm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbCwgRm9udFJlbmRlcmluZ01vZGUgPSBOb3Jt
YWxSZW5kZXJpbmdNb2RlKTsKKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgYm9vbCBpc1NW
R0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX2lzU1ZHRm9udDsgfQorICAgIHZvaWQgc2V0U1ZHRm9u
dChib29sIGlzU1ZHKSB7IG1faXNTVkdGb250ID0gaXNTVkc7IH0KKyAgICBib29sIGVuc3VyZVNW
R0ZvbnREYXRhKCk7CisgICAgU1ZHRm9udEVsZW1lbnQqIGdldFNWR0ZvbnRCeUlkKGNvbnN0IFN0
cmluZyYpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YSogbV9mb250RGF0YTsKKyAgICBib29sIG1fbG9hZEluaXRpYXRlZDsKKworI2lmIEVOQUJM
RShTVkdfRk9OVFMpCisgICAgYm9vbCBtX2lzU1ZHRm9udDsKKyAgICBSZWZQdHI8U1ZHRG9jdW1l
bnQ+IG1fZXh0ZXJuYWxTVkdEb2N1bWVudDsKKyNlbmRpZgorCisgICAgZnJpZW5kIGNsYXNzIENh
Y2hlOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5jcHAJKHJldmlzaW9uIDcxNDkyKQkoZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5j
cHA6NzE0OTIpCisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzODYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExh
cnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERp
cmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxk
byBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVl
bCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisKKyNpbmNsdWRlICJC
aXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgorI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVk
ZSAiUmVxdWVzdC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIFBMQVRGT1JNKENHKQor
I2luY2x1ZGUgIlBERkRvY3VtZW50SW1hZ2UuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWR19B
U19JTUFHRSkKKyNpbmNsdWRlICJTVkdJbWFnZS5oIgorI2VuZGlmCisKK3VzaW5nIHN0ZDo6bWF4
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25z
dCBTdHJpbmcmIHVybCkKKyAgICA6IENhY2hlZFJlc291cmNlKHVybCwgSW1hZ2VSZXNvdXJjZSkK
KyAgICAsIG1faW1hZ2UoMCkKKyAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyKHRoaXMs
ICZDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpCisgICAgLCBtX2h0
dHBTdGF0dXNDb2RlRXJyb3JPY2N1cnJlZChmYWxzZSkKK3sKKyAgICBzZXRTdGF0dXMoVW5rbm93
bik7Cit9CisKK0NhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2UpCisgICAgOiBD
YWNoZWRSZXNvdXJjZShTdHJpbmcoKSwgSW1hZ2VSZXNvdXJjZSkKKyAgICAsIG1faW1hZ2UoaW1h
Z2UpCisgICAgLCBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lcih0aGlzLCAmQ2FjaGVkSW1hZ2U6
OmRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKQorICAgICwgbV9odHRwU3RhdHVzQ29kZUVy
cm9yT2NjdXJyZWQoZmFsc2UpCit7CisgICAgc2V0U3RhdHVzKENhY2hlZCk7CisgICAgc2V0TG9h
ZGluZyhmYWxzZSk7Cit9CisKK0NhY2hlZEltYWdlOjp+Q2FjaGVkSW1hZ2UoKQoreworfQorCit2
b2lkIENhY2hlZEltYWdlOjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZChUaW1lcjxDYWNo
ZWRJbWFnZT4qKQoreworICAgIEFTU0VSVCghaGFzQ2xpZW50cygpKTsKKyAgICBkZXN0cm95RGVj
b2RlZERhdGEoKTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxv
YWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpCit7CisgICAgaWYgKCFjYWNoZWRSZXNvdXJjZUxv
YWRlciB8fCBjYWNoZWRSZXNvdXJjZUxvYWRlci0+YXV0b0xvYWRJbWFnZXMoKSkKKyAgICAgICAg
Q2FjaGVkUmVzb3VyY2U6OmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIHRydWUsIERvU2VjdXJp
dHlDaGVjaywgdHJ1ZSk7CisgICAgZWxzZQorICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTsKK30K
Kwordm9pZCBDYWNoZWRJbWFnZTo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBj
KQoreworICAgIGlmIChtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5zdG9wKCk7CisgICAgCisgICAgaWYgKG1f
ZGF0YSAmJiAhbV9pbWFnZSAmJiAhZXJyb3JPY2N1cnJlZCgpKSB7CisgICAgICAgIGNyZWF0ZUlt
YWdlKCk7CisgICAgICAgIG1faW1hZ2UtPnNldERhdGEobV9kYXRhLCB0cnVlKTsKKyAgICB9CisK
KyAgICBpZiAobV9pbWFnZSAmJiAhbV9pbWFnZS0+aXNOdWxsKCkpCisgICAgICAgIGMtPmltYWdl
Q2hhbmdlZCh0aGlzKTsKKworICAgIGlmICghaXNMb2FkaW5nKCkpCisgICAgICAgIGMtPm5vdGlm
eUZpbmlzaGVkKHRoaXMpOworfQorCit2b2lkIENhY2hlZEltYWdlOjphbGxDbGllbnRzUmVtb3Zl
ZCgpCit7CisgICAgaWYgKG1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQoKSkKKyAgICAgICAgbV9p
bWFnZS0+cmVzZXRBbmltYXRpb24oKTsKKyAgICBpZiAoZG91YmxlIGludGVydmFsID0gY2FjaGUo
KS0+ZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCgpKQorICAgICAgICBtX2RlY29kZWRE
YXRhRGVsZXRpb25UaW1lci5zdGFydE9uZVNob3QoaW50ZXJ2YWwpOworfQorCitzdGF0aWMgSW1h
Z2UqIGJyb2tlbkltYWdlKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxJbWFn
ZT4sIGJyb2tlbkltYWdlLCAoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtaXNzaW5nSW1h
Z2UiKSkpOworICAgIHJldHVybiBicm9rZW5JbWFnZS5nZXQoKTsKK30KKworc3RhdGljIEltYWdl
KiBudWxsSW1hZ2UoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPEJpdG1hcElt
YWdlPiwgbnVsbEltYWdlLCAoQml0bWFwSW1hZ2U6OmNyZWF0ZSgpKSk7CisgICAgcmV0dXJuIG51
bGxJbWFnZS5nZXQoKTsKK30KKworSW1hZ2UqIENhY2hlZEltYWdlOjppbWFnZSgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFpc1B1cmdlYWJsZSgpKTsKKworICAgIGlmIChlcnJvck9jY3VycmVkKCkp
CisgICAgICAgIHJldHVybiBicm9rZW5JbWFnZSgpOworCisgICAgaWYgKG1faW1hZ2UpCisgICAg
ICAgIHJldHVybiBtX2ltYWdlLmdldCgpOworCisgICAgcmV0dXJuIG51bGxJbWFnZSgpOworfQor
Cit2b2lkIENhY2hlZEltYWdlOjpzZXRJbWFnZUNvbnRhaW5lclNpemUoY29uc3QgSW50U2l6ZSYg
Y29udGFpbmVyU2l6ZSkKK3sKKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgbV9pbWFnZS0+c2V0
Q29udGFpbmVyU2l6ZShjb250YWluZXJTaXplKTsKK30KKworYm9vbCBDYWNoZWRJbWFnZTo6dXNl
c0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1faW1hZ2UpCisgICAgICAg
IHJldHVybiBtX2ltYWdlLT51c2VzQ29udGFpbmVyU2l6ZSgpOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIENhY2hlZEltYWdlOjppbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdAor
eworICAgIGlmIChtX2ltYWdlKQorICAgICAgICByZXR1cm4gbV9pbWFnZS0+aGFzUmVsYXRpdmVX
aWR0aCgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENhY2hlZEltYWdlOjppbWFn
ZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAg
cmV0dXJuIG1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0KCk7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK0ludFNpemUgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZShmbG9hdCBtdWx0aXBsaWVyKSBj
b25zdAoreworICAgIEFTU0VSVCghaXNQdXJnZWFibGUoKSk7CisKKyAgICBpZiAoIW1faW1hZ2Up
CisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisgICAgaWYgKG11bHRpcGxpZXIgPT0gMS4wZikK
KyAgICAgICAgcmV0dXJuIG1faW1hZ2UtPnNpemUoKTsKKyAgICAgICAgCisgICAgLy8gRG9uJ3Qg
bGV0IGltYWdlcyB0aGF0IGhhdmUgYSB3aWR0aC9oZWlnaHQgPj0gMSBzaHJpbmsgYmVsb3cgMSB3
aGVuIHpvb21lZC4KKyAgICBib29sIGhhc1dpZHRoID0gbV9pbWFnZS0+c2l6ZSgpLndpZHRoKCkg
PiAwOworICAgIGJvb2wgaGFzSGVpZ2h0ID0gbV9pbWFnZS0+c2l6ZSgpLmhlaWdodCgpID4gMDsK
KyAgICBpbnQgd2lkdGggPSBtX2ltYWdlLT5zaXplKCkud2lkdGgoKSAqIChtX2ltYWdlLT5oYXNS
ZWxhdGl2ZVdpZHRoKCkgPyAxLjBmIDogbXVsdGlwbGllcik7CisgICAgaW50IGhlaWdodCA9IG1f
aW1hZ2UtPnNpemUoKS5oZWlnaHQoKSAqIChtX2ltYWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgpID8g
MS4wZiA6IG11bHRpcGxpZXIpOworICAgIGlmIChoYXNXaWR0aCkKKyAgICAgICAgd2lkdGggPSBt
YXgoMSwgd2lkdGgpOworICAgIGlmIChoYXNIZWlnaHQpCisgICAgICAgIGhlaWdodCA9IG1heCgx
LCBoZWlnaHQpOworICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworfQorCitJbnRS
ZWN0IENhY2hlZEltYWdlOjppbWFnZVJlY3QoZmxvYXQgbXVsdGlwbGllcikgY29uc3QKK3sKKyAg
ICBBU1NFUlQoIWlzUHVyZ2VhYmxlKCkpOworCisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICBy
ZXR1cm4gSW50UmVjdCgpOworICAgIGlmIChtdWx0aXBsaWVyID09IDEuMGYgfHwgKCFtX2ltYWdl
LT5oYXNSZWxhdGl2ZVdpZHRoKCkgJiYgIW1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0KCkpKQor
ICAgICAgICByZXR1cm4gbV9pbWFnZS0+cmVjdCgpOworCisgICAgZmxvYXQgd2lkdGhNdWx0aXBs
aWVyID0gKG1faW1hZ2UtPmhhc1JlbGF0aXZlV2lkdGgoKSA/IDEuMGYgOiBtdWx0aXBsaWVyKTsK
KyAgICBmbG9hdCBoZWlnaHRNdWx0aXBsaWVyID0gKG1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0
KCkgPyAxLjBmIDogbXVsdGlwbGllcik7CisKKyAgICAvLyBEb24ndCBsZXQgaW1hZ2VzIHRoYXQg
aGF2ZSBhIHdpZHRoL2hlaWdodCA+PSAxIHNocmluayBiZWxvdyAxIHdoZW4gem9vbWVkLgorICAg
IGJvb2wgaGFzV2lkdGggPSBtX2ltYWdlLT5yZWN0KCkud2lkdGgoKSA+IDA7CisgICAgYm9vbCBo
YXNIZWlnaHQgPSBtX2ltYWdlLT5yZWN0KCkuaGVpZ2h0KCkgPiAwOworCisgICAgaW50IHdpZHRo
ID0gc3RhdGljX2Nhc3Q8aW50PihtX2ltYWdlLT5yZWN0KCkud2lkdGgoKSAqIHdpZHRoTXVsdGlw
bGllcik7CisgICAgaW50IGhlaWdodCA9IHN0YXRpY19jYXN0PGludD4obV9pbWFnZS0+cmVjdCgp
LmhlaWdodCgpICogaGVpZ2h0TXVsdGlwbGllcik7CisgICAgaWYgKGhhc1dpZHRoKQorICAgICAg
ICB3aWR0aCA9IG1heCgxLCB3aWR0aCk7CisgICAgaWYgKGhhc0hlaWdodCkKKyAgICAgICAgaGVp
Z2h0ID0gbWF4KDEsIGhlaWdodCk7CisKKyAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4obV9p
bWFnZS0+cmVjdCgpLngoKSAqIHdpZHRoTXVsdGlwbGllcik7CisgICAgaW50IHkgPSBzdGF0aWNf
Y2FzdDxpbnQ+KG1faW1hZ2UtPnJlY3QoKS55KCkgKiBoZWlnaHRNdWx0aXBsaWVyKTsKKworICAg
IHJldHVybiBJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIENhY2hlZElt
YWdlOjpub3RpZnlPYnNlcnZlcnMoY29uc3QgSW50UmVjdCogY2hhbmdlUmVjdCkKK3sKKyAgICBD
YWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hl
ZFJlc291cmNlQ2xpZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgIGMtPmltYWdlQ2hhbmdlZCh0
aGlzLCBjaGFuZ2VSZWN0KTsKK30KKwordm9pZCBDYWNoZWRJbWFnZTo6Y2xlYXIoKQoreworICAg
IGRlc3Ryb3lEZWNvZGVkRGF0YSgpOworICAgIG1faW1hZ2UgPSAwOworICAgIHNldEVuY29kZWRT
aXplKDApOworfQorCitpbmxpbmUgdm9pZCBDYWNoZWRJbWFnZTo6Y3JlYXRlSW1hZ2UoKQorewor
ICAgIC8vIENyZWF0ZSB0aGUgaW1hZ2UgaWYgaXQgZG9lc24ndCB5ZXQgZXhpc3QuCisgICAgaWYg
KG1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKyNpZiBQTEFURk9STShDRykgJiYgIVVTRShXRUJL
SVRfSU1BR0VfREVDT0RFUlMpCisgICAgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAiYXBw
bGljYXRpb24vcGRmIikgeworICAgICAgICBtX2ltYWdlID0gUERGRG9jdW1lbnRJbWFnZTo6Y3Jl
YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUoU1ZHX0FT
X0lNQUdFKQorICAgIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImltYWdlL3N2Zyt4bWwi
KSB7CisgICAgICAgIG1faW1hZ2UgPSBTVkdJbWFnZTo6Y3JlYXRlKHRoaXMpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUo
dGhpcyk7Cit9CisKK3NpemVfdCBDYWNoZWRJbWFnZTo6bWF4aW11bURlY29kZWRJbWFnZVNpemUo
KQoreworICAgIEZyYW1lKiBmcmFtZSA9IG1fcmVxdWVzdCA/IG1fcmVxdWVzdC0+Y2FjaGVkUmVz
b3VyY2VMb2FkZXIoKS0+ZnJhbWUoKSA6IDA7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CisgICAg
cmV0dXJuIHNldHRpbmdzID8gc2V0dGluZ3MtPm1heGltdW1EZWNvZGVkSW1hZ2VTaXplKCkgOiAw
OworfQorCit2b2lkIENhY2hlZEltYWdlOjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBtX2RhdGEgPSBkYXRhOworCisgICAg
Y3JlYXRlSW1hZ2UoKTsKKworICAgIGJvb2wgc2l6ZUF2YWlsYWJsZSA9IGZhbHNlOworCisgICAg
Ly8gSGF2ZSB0aGUgaW1hZ2UgdXBkYXRlIGl0cyBkYXRhIGZyb20gaXRzIGludGVybmFsIGJ1ZmZl
ci4KKyAgICAvLyBJdCB3aWxsIG5vdCBkbyBhbnl0aGluZyBub3csIGJ1dCB3aWxsIGRlbGF5IGRl
Y29kaW5nIHVudGlsIAorICAgIC8vIHF1ZXJpZWQgZm9yIGluZm8gKGxpa2Ugc2l6ZSBvciBzcGVj
aWZpYyBpbWFnZSBmcmFtZXMpLgorICAgIHNpemVBdmFpbGFibGUgPSBtX2ltYWdlLT5zZXREYXRh
KG1fZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIC8vIEdvIGFoZWFkIGFuZCB0ZWxsIG91
ciBvYnNlcnZlcnMgdG8gdHJ5IHRvIGRyYXcgaWYgd2UgaGF2ZSBlaXRoZXIKKyAgICAvLyByZWNl
aXZlZCBhbGwgdGhlIGRhdGEgb3IgdGhlIHNpemUgaXMga25vd24uICBFYWNoIGNodW5rIGZyb20g
dGhlCisgICAgLy8gbmV0d29yayBjYXVzZXMgb2JzZXJ2ZXJzIHRvIHJlcGFpbnQsIHdoaWNoIHdp
bGwgZm9yY2UgdGhhdCBjaHVuaworICAgIC8vIHRvIGRlY29kZS4KKyAgICBpZiAoc2l6ZUF2YWls
YWJsZSB8fCBhbGxEYXRhUmVjZWl2ZWQpIHsKKyAgICAgICAgc2l6ZV90IG1heERlY29kZWRJbWFn
ZVNpemUgPSBtYXhpbXVtRGVjb2RlZEltYWdlU2l6ZSgpOworICAgICAgICBJbnRTaXplIHMgPSBp
bWFnZVNpemUoMS4wZik7CisgICAgICAgIHNpemVfdCBlc3RpbWF0ZWREZWNvZGVkSW1hZ2VTaXpl
ID0gcy53aWR0aCgpICogcy5oZWlnaHQoKSAqIDQ7IC8vIG5vIG92ZXJmbG93IGNoZWNrCisgICAg
ICAgIGlmIChtX2ltYWdlLT5pc051bGwoKSB8fCAobWF4RGVjb2RlZEltYWdlU2l6ZSA+IDAgJiYg
ZXN0aW1hdGVkRGVjb2RlZEltYWdlU2l6ZSA+IG1heERlY29kZWRJbWFnZVNpemUpKSB7CisgICAg
ICAgICAgICBlcnJvcigpOworICAgICAgICAgICAgaWYgKGluQ2FjaGUoKSkKKyAgICAgICAgICAg
ICAgICBjYWNoZSgpLT5yZW1vdmUodGhpcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gb25seSByZWRyYXcg
dGhlIGRlY29kZWQgYmFuZCBvZiB0aGUgaW1hZ2UsIGJ1dCB3aXRoIHRoZSBjdXJyZW50IGRlc2ln
bgorICAgICAgICAvLyAoZGVjb2RpbmcgZGVsYXllZCB1bnRpbCBwYWludGluZykgdGhhdCBzZWVt
cyBoYXJkLgorICAgICAgICBub3RpZnlPYnNlcnZlcnMoKTsKKworICAgICAgICBpZiAobV9pbWFn
ZSkKKyAgICAgICAgICAgIHNldEVuY29kZWRTaXplKG1faW1hZ2UtPmRhdGEoKSA/IG1faW1hZ2Ut
PmRhdGEoKS0+c2l6ZSgpIDogMCk7CisgICAgfQorICAgIAorICAgIGlmIChhbGxEYXRhUmVjZWl2
ZWQpIHsKKyAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7CisgICAgICAgIGNoZWNrTm90aWZ5KCk7
CisgICAgfQorfQorCit2b2lkIENhY2hlZEltYWdlOjplcnJvcigpCit7CisgICAgY2xlYXIoKTsK
KyAgICBzZXRFcnJvck9jY3VycmVkKHRydWUpOworICAgIG1fZGF0YS5jbGVhcigpOworICAgIG5v
dGlmeU9ic2VydmVycygpOworICAgIHNldExvYWRpbmcoZmFsc2UpOworICAgIGNoZWNrTm90aWZ5
KCk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmNoZWNrTm90aWZ5KCkKK3sKKyAgICBpZiAoaXNM
b2FkaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fs
a2VyIHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGMgPSB3
Lm5leHQoKSkKKyAgICAgICAgYy0+bm90aWZ5RmluaXNoZWQodGhpcyk7Cit9CisKK3ZvaWQgQ2Fj
aGVkSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCit7CisgICAgYm9vbCBjYW5EZWxldGVJbWFn
ZSA9ICFtX2ltYWdlIHx8IChtX2ltYWdlLT5oYXNPbmVSZWYoKSAmJiBtX2ltYWdlLT5pc0JpdG1h
cEltYWdlKCkpOworICAgIGlmIChpc1NhZmVUb01ha2VQdXJnZWFibGUoKSAmJiBjYW5EZWxldGVJ
bWFnZSAmJiAhaXNMb2FkaW5nKCkpIHsKKyAgICAgICAgLy8gSW1hZ2UgcmVmcyB0aGUgZGF0YSBi
dWZmZXIgc28gd2Ugc2hvdWxkIG5vdCBtYWtlIGl0IHB1cmdlYWJsZSB3aGlsZSB0aGUgaW1hZ2Ug
aXMgYWxpdmUuIAorICAgICAgICAvLyBJbnZva2luZyBhZGRDbGllbnQoKSB3aWxsIHJlY29uc3Ry
dWN0IHRoZSBpbWFnZSBvYmplY3QuCisgICAgICAgIG1faW1hZ2UgPSAwOworICAgICAgICBzZXRE
ZWNvZGVkU2l6ZSgwKTsKKyAgICAgICAgaWYgKCFDYWNoZTo6c2hvdWxkTWFrZVJlc291cmNlUHVy
Z2VhYmxlT25FdmljdGlvbigpKQorICAgICAgICAgICAgbWFrZVB1cmdlYWJsZSh0cnVlKTsKKyAg
ICB9IGVsc2UgaWYgKG1faW1hZ2UgJiYgIWVycm9yT2NjdXJyZWQoKSkKKyAgICAgICAgbV9pbWFn
ZS0+ZGVzdHJveURlY29kZWREYXRhKCk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmRlY29kZWRT
aXplQ2hhbmdlZChjb25zdCBJbWFnZSogaW1hZ2UsIGludCBkZWx0YSkKK3sKKyAgICBpZiAoaW1h
Z2UgIT0gbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHNldERlY29kZWRTaXpl
KGRlY29kZWRTaXplKCkgKyBkZWx0YSk7Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmRpZERyYXco
Y29uc3QgSW1hZ2UqIGltYWdlKQoreworICAgIGlmIChpbWFnZSAhPSBtX2ltYWdlKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgZG91YmxlIHRpbWVTdGFtcCA9IEZyYW1lVmlldzo6Y3VycmVu
dFBhaW50VGltZVN0YW1wKCk7CisgICAgaWYgKCF0aW1lU3RhbXApIC8vIElmIGRpZERyYXcgaXMg
Y2FsbGVkIG91dHNpZGUgb2YgYSBGcmFtZSBwYWludC4KKyAgICAgICAgdGltZVN0YW1wID0gY3Vy
cmVudFRpbWUoKTsKKyAgICAKKyAgICBDYWNoZWRSZXNvdXJjZTo6ZGlkQWNjZXNzRGVjb2RlZERh
dGEodGltZVN0YW1wKTsKK30KKworYm9vbCBDYWNoZWRJbWFnZTo6c2hvdWxkUGF1c2VBbmltYXRp
b24oY29uc3QgSW1hZ2UqIGltYWdlKQoreworICAgIGlmIChpbWFnZSAhPSBtX2ltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIg
dyhtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNoZWRSZXNvdXJjZUNsaWVudCogYyA9IHcubmV4
dCgpKSB7CisgICAgICAgIGlmIChjLT53aWxsUmVuZGVySW1hZ2UodGhpcykpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2Fj
aGVkSW1hZ2U6OmFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKiBpbWFnZSkKK3sKKyAgICBp
ZiAoaW1hZ2UgPT0gbV9pbWFnZSkKKyAgICAgICAgbm90aWZ5T2JzZXJ2ZXJzKCk7Cit9CisKK3Zv
aWQgQ2FjaGVkSW1hZ2U6OmNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmIChpbWFnZSA9PSBtX2ltYWdlKQorICAgICAgICBub3Rp
ZnlPYnNlcnZlcnMoJnJlY3QpOworfQorCit9IC8vbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gNzE0OTIpCShmcm9tIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZEltYWdlLmg6NzE0OTIpCisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICAgIENvcHly
aWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHly
aWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmln
aHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaWZuZGVmIENhY2hlZEltYWdlX2gKKyNkZWZpbmUgQ2FjaGVkSW1hZ2Vf
aAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJJbWFnZU9ic2VydmVy
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZFJlc291
cmNlTG9hZGVyOworY2xhc3MgQ2FjaGU7CisKK2NsYXNzIENhY2hlZEltYWdlIDogcHVibGljIENh
Y2hlZFJlc291cmNlLCBwdWJsaWMgSW1hZ2VPYnNlcnZlciB7CisgICAgZnJpZW5kIGNsYXNzIENh
Y2hlOworCitwdWJsaWM6CisgICAgQ2FjaGVkSW1hZ2UoY29uc3QgU3RyaW5nJiB1cmwpOworICAg
IENhY2hlZEltYWdlKEltYWdlKik7CisgICAgdmlydHVhbCB+Q2FjaGVkSW1hZ2UoKTsKKyAgICAK
KyAgICB2aXJ0dWFsIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIpOworCisgICAgSW1hZ2UqIGltYWdlKCkgY29uc3Q7CisKKyAgICBib29sIGNhblJl
bmRlcihmbG9hdCBtdWx0aXBsaWVyKSBjb25zdCB7IHJldHVybiAhZXJyb3JPY2N1cnJlZCgpICYm
ICFpbWFnZVNpemUobXVsdGlwbGllcikuaXNFbXB0eSgpOyB9CisKKyAgICAvLyBUaGVzZSBhcmUg
b25seSB1c2VkIGZvciBTVkdJbWFnZSByaWdodCBub3cKKyAgICB2b2lkIHNldEltYWdlQ29udGFp
bmVyU2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgYm9vbCB1c2VzSW1hZ2VDb250YWluZXJTaXpl
KCkgY29uc3Q7CisgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdDsKKyAgICBi
b29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdDsKKyAgICAKKyAgICAvLyBCb3RoIG9m
IHRoZXNlIG1ldGhvZHMgdGFrZSBhIHpvb20gbXVsdGlwbGllciB0aGF0IGNhbiBiZSB1c2VkIHRv
IGluY3JlYXNlIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlIGltYWdlIGJ5IHRoZQorICAgIC8vIHpv
b20uCisgICAgSW50U2l6ZSBpbWFnZVNpemUoZmxvYXQgbXVsdGlwbGllcikgY29uc3Q7ICAvLyBy
ZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb21wbGV0ZSBpbWFnZS4KKyAgICBJbnRSZWN0IGltYWdl
UmVjdChmbG9hdCBtdWx0aXBsaWVyKSBjb25zdDsgIC8vIFRoZSBzaXplIG9mIHRoZSBjdXJyZW50
bHkgZGVjb2RlZCBwb3J0aW9uIG9mIHRoZSBpbWFnZS4KKworICAgIHZpcnR1YWwgdm9pZCBkaWRB
ZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
YWxsQ2xpZW50c1JlbW92ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRh
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOworICAg
IAorICAgIHZpcnR1YWwgdm9pZCBodHRwU3RhdHVzQ29kZUVycm9yKCkgeyBtX2h0dHBTdGF0dXND
b2RlRXJyb3JPY2N1cnJlZCA9IHRydWU7IH0KKyAgICBib29sIGh0dHBTdGF0dXNDb2RlRXJyb3JP
Y2N1cnJlZCgpIGNvbnN0IHsgcmV0dXJuIG1faHR0cFN0YXR1c0NvZGVFcnJvck9jY3VycmVkOyB9
CisgICAgCisgICAgdm9pZCBjaGVja05vdGlmeSgpOworICAgIAorICAgIHZpcnR1YWwgYm9vbCBp
c0ltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdm9pZCBjbGVhcigpOworICAg
IAorICAgIGJvb2wgc3RpbGxOZWVkc0xvYWQoKSBjb25zdCB7IHJldHVybiAhZXJyb3JPY2N1cnJl
ZCgpICYmIHN0YXR1cygpID09IFVua25vd24gJiYgIWlzTG9hZGluZygpOyB9CisgICAgdm9pZCBs
b2FkKCk7CisKKyAgICAvLyBJbWFnZU9ic2VydmVyCisgICAgdmlydHVhbCB2b2lkIGRlY29kZWRT
aXplQ2hhbmdlZChjb25zdCBJbWFnZSogaW1hZ2UsIGludCBkZWx0YSk7CisgICAgdmlydHVhbCB2
b2lkIGRpZERyYXcoY29uc3QgSW1hZ2UqKTsKKworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQYXVz
ZUFuaW1hdGlvbihjb25zdCBJbWFnZSopOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25BZHZh
bmNlZChjb25zdCBJbWFnZSopOworICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VkSW5SZWN0KGNvbnN0
IEltYWdlKiwgY29uc3QgSW50UmVjdCYpOworCitwcml2YXRlOgorICAgIHZvaWQgY3JlYXRlSW1h
Z2UoKTsKKyAgICBzaXplX3QgbWF4aW11bURlY29kZWRJbWFnZVNpemUoKTsKKyAgICAvLyBJZiBu
b3QgbnVsbCwgY2hhbmdlUmVjdCBpcyB0aGUgY2hhbmdlZCBwYXJ0IG9mIHRoZSBpbWFnZS4KKyAg
ICB2b2lkIG5vdGlmeU9ic2VydmVycyhjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0ID0gMCk7Cisg
ICAgdm9pZCBkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZChUaW1lcjxDYWNoZWRJbWFnZT4q
KTsKKyAgICB2aXJ0dWFsIFB1cmdlUHJpb3JpdHkgcHVyZ2VQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIFB1cmdlRmlyc3Q7IH0KKworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKKyAgICBUaW1l
cjxDYWNoZWRJbWFnZT4gbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXI7CisgICAgYm9vbCBtX2h0
dHBTdGF0dXNDb2RlRXJyb3JPY2N1cnJlZDsKK307CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA3MTQ5MikJKGZyb20g
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwOjcxNDkyKQorKysgV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTY1
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQu
bXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUu
b3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdt
YWlsLmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorCisjaW5jbHVkZSAiQ2FjaGUuaCIKKyNpbmNs
dWRlICJDYWNoZWRNZXRhZGF0YS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50Lmgi
CisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKKyNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1
ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUHVyZ2VhYmxlQnVm
ZmVyLmgiCisjaW5jbHVkZSAiUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgi
CisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExl
YWtDb3VudGVyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisjaWZuZGVmIE5ERUJVRworc3RhdGljIFJlZkNvdW50ZWRMZWFrQ291bnRlciBjYWNoZWRS
ZXNvdXJjZUxlYWtDb3VudGVyKCJDYWNoZWRSZXNvdXJjZSIpOworI2VuZGlmCisKK0NhY2hlZFJl
c291cmNlOjpDYWNoZWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgVHlwZSB0eXBlKQorICAg
IDogbV91cmwodXJsKQorICAgICwgbV9yZXF1ZXN0KDApCisgICAgLCBtX3Jlc3BvbnNlVGltZXN0
YW1wKGN1cnJlbnRUaW1lKCkpCisgICAgLCBtX2xhc3REZWNvZGVkQWNjZXNzVGltZSgwKQorICAg
ICwgbV9lbmNvZGVkU2l6ZSgwKQorICAgICwgbV9kZWNvZGVkU2l6ZSgwKQorICAgICwgbV9hY2Nl
c3NDb3VudCgwKQorICAgICwgbV9oYW5kbGVDb3VudCgwKQorICAgICwgbV9wcmVsb2FkQ291bnQo
MCkKKyAgICAsIG1fcHJlbG9hZFJlc3VsdChQcmVsb2FkTm90UmVmZXJlbmNlZCkKKyAgICAsIG1f
aW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoZmFsc2UpCisgICAgLCBtX3JlcXVlc3RlZEZyb21O
ZXR3b3JraW5nTGF5ZXIoZmFsc2UpCisgICAgLCBtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Mo
dHJ1ZSkKKyAgICAsIG1fZXJyb3JPY2N1cnJlZChmYWxzZSkKKyAgICAsIG1faW5DYWNoZShmYWxz
ZSkKKyAgICAsIG1fbG9hZGluZyhmYWxzZSkKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9z
dGF0dXMoUGVuZGluZykKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2RlbGV0ZWQoZmFsc2UpCisg
ICAgLCBtX2xydUluZGV4KDApCisjZW5kaWYKKyAgICAsIG1fbmV4dEluQWxsUmVzb3VyY2VzTGlz
dCgwKQorICAgICwgbV9wcmV2SW5BbGxSZXNvdXJjZXNMaXN0KDApCisgICAgLCBtX25leHRJbkxp
dmVSZXNvdXJjZXNMaXN0KDApCisgICAgLCBtX3ByZXZJbkxpdmVSZXNvdXJjZXNMaXN0KDApCisg
ICAgLCBtX2NhY2hlZFJlc291cmNlTG9hZGVyKDApCisgICAgLCBtX3Jlc291cmNlVG9SZXZhbGlk
YXRlKDApCisgICAgLCBtX3Byb3h5UmVzb3VyY2UoMCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAg
Y2FjaGVkUmVzb3VyY2VMZWFrQ291bnRlci5pbmNyZW1lbnQoKTsKKyNlbmRpZgorfQorCitDYWNo
ZWRSZXNvdXJjZTo6fkNhY2hlZFJlc291cmNlKCkKK3sKKyAgICBBU1NFUlQoIW1fcmVzb3VyY2VU
b1JldmFsaWRhdGUpOyAvLyBTaG91bGQgYmUgdHJ1ZSBiZWNhdXNlIGNhbkRlbGV0ZSgpIGNoZWNr
cyB0aGlzLgorICAgIEFTU0VSVChjYW5EZWxldGUoKSk7CisgICAgQVNTRVJUKCFpbkNhY2hlKCkp
OworICAgIEFTU0VSVCghbV9kZWxldGVkKTsKKyAgICBBU1NFUlQodXJsKCkuaXNOdWxsKCkgfHwg
Y2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwodXJsKCkpICE9IHRoaXMpOworI2lmbmRlZiBOREVCVUcK
KyAgICBtX2RlbGV0ZWQgPSB0cnVlOworICAgIGNhY2hlZFJlc291cmNlTGVha0NvdW50ZXIuZGVj
cmVtZW50KCk7CisjZW5kaWYKKworICAgIGlmIChtX2NhY2hlZFJlc291cmNlTG9hZGVyKQorICAg
ICAgICBtX2NhY2hlZFJlc291cmNlTG9hZGVyLT5yZW1vdmVDYWNoZWRSZXNvdXJjZSh0aGlzKTsK
K30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2Fj
aGVkUmVzb3VyY2VMb2FkZXIsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3kg
c2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQoreworICAgIG1f
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3M7Cisg
ICAgY2FjaGUoKS0+bG9hZGVyKCktPmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIHRoaXMsIGlu
Y3JlbWVudGFsLCBzZWN1cml0eUNoZWNrLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAg
ICBtX2xvYWRpbmcgPSB0cnVlOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpkYXRhKFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgaWYgKCFh
bGxEYXRhUmVjZWl2ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBDYWNoZWRSZXNvdXJj
ZUNsaWVudFdhbGtlciB3KG1fY2xpZW50cyk7CisgICAgd2hpbGUgKENhY2hlZFJlc291cmNlQ2xp
ZW50KiBjID0gdy5uZXh0KCkpCisgICAgICAgIGMtPm5vdGlmeUZpbmlzaGVkKHRoaXMpOworfQor
Cit2b2lkIENhY2hlZFJlc291cmNlOjpmaW5pc2goKQoreworICAgIG1fc3RhdHVzID0gQ2FjaGVk
OworfQorCitib29sIENhY2hlZFJlc291cmNlOjppc0V4cGlyZWQoKSBjb25zdAoreworICAgIGlm
IChtX3Jlc3BvbnNlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gY3VycmVudEFnZSgpID4gZnJlc2huZXNzTGlmZXRpbWUoKTsKK30KKyAgICAKK2RvdWJsZSBD
YWNoZWRSZXNvdXJjZTo6Y3VycmVudEFnZSgpIGNvbnN0Cit7CisgICAgLy8gUkZDMjYxNiAxMy4y
LjMKKyAgICAvLyBObyBjb21wZW5zYXRpb24gZm9yIGxhdGVuY3kgYXMgdGhhdCBpcyBub3QgdGVy
cmlibHkgaW1wb3J0YW50IGluIHByYWN0aWNlCisgICAgZG91YmxlIGRhdGVWYWx1ZSA9IG1fcmVz
cG9uc2UuZGF0ZSgpOworICAgIGRvdWJsZSBhcHBhcmVudEFnZSA9IGlzZmluaXRlKGRhdGVWYWx1
ZSkgPyBtYXgoMC4sIG1fcmVzcG9uc2VUaW1lc3RhbXAgLSBkYXRlVmFsdWUpIDogMDsKKyAgICBk
b3VibGUgYWdlVmFsdWUgPSBtX3Jlc3BvbnNlLmFnZSgpOworICAgIGRvdWJsZSBjb3JyZWN0ZWRS
ZWNlaXZlZEFnZSA9IGlzZmluaXRlKGFnZVZhbHVlKSA/IG1heChhcHBhcmVudEFnZSwgYWdlVmFs
dWUpIDogYXBwYXJlbnRBZ2U7CisgICAgZG91YmxlIHJlc2lkZW50VGltZSA9IGN1cnJlbnRUaW1l
KCkgLSBtX3Jlc3BvbnNlVGltZXN0YW1wOworICAgIHJldHVybiBjb3JyZWN0ZWRSZWNlaXZlZEFn
ZSArIHJlc2lkZW50VGltZTsKK30KKyAgICAKK2RvdWJsZSBDYWNoZWRSZXNvdXJjZTo6ZnJlc2hu
ZXNzTGlmZXRpbWUoKSBjb25zdAoreworICAgIC8vIENhY2hlIG5vbi1odHRwIHJlc291cmNlcyBs
aWJlcmFsbHkKKyAgICBpZiAoIW1fcmVzcG9uc2UudXJsKCkucHJvdG9jb2xJbkhUVFBGYW1pbHko
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCk7CisK
KyAgICAvLyBSRkMyNjE2IDEzLjIuNAorICAgIGRvdWJsZSBtYXhBZ2VWYWx1ZSA9IG1fcmVzcG9u
c2UuY2FjaGVDb250cm9sTWF4QWdlKCk7CisgICAgaWYgKGlzZmluaXRlKG1heEFnZVZhbHVlKSkK
KyAgICAgICAgcmV0dXJuIG1heEFnZVZhbHVlOworICAgIGRvdWJsZSBleHBpcmVzVmFsdWUgPSBt
X3Jlc3BvbnNlLmV4cGlyZXMoKTsKKyAgICBkb3VibGUgZGF0ZVZhbHVlID0gbV9yZXNwb25zZS5k
YXRlKCk7CisgICAgZG91YmxlIGNyZWF0aW9uVGltZSA9IGlzZmluaXRlKGRhdGVWYWx1ZSkgPyBk
YXRlVmFsdWUgOiBtX3Jlc3BvbnNlVGltZXN0YW1wOworICAgIGlmIChpc2Zpbml0ZShleHBpcmVz
VmFsdWUpKQorICAgICAgICByZXR1cm4gZXhwaXJlc1ZhbHVlIC0gY3JlYXRpb25UaW1lOworICAg
IGRvdWJsZSBsYXN0TW9kaWZpZWRWYWx1ZSA9IG1fcmVzcG9uc2UubGFzdE1vZGlmaWVkKCk7Cisg
ICAgaWYgKGlzZmluaXRlKGxhc3RNb2RpZmllZFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIChjcmVh
dGlvblRpbWUgLSBsYXN0TW9kaWZpZWRWYWx1ZSkgKiAwLjE7CisgICAgLy8gSWYgbm8gY2FjaGUg
aGVhZGVycyBhcmUgcHJlc2VudCwgdGhlIHNwZWNpZmljYXRpb24gbGVhdmVzIHRoZSBkZWNpc2lv
biB0byB0aGUgVUEuIE90aGVyIGJyb3dzZXJzIHNlZW0gdG8gb3B0IGZvciAwLgorICAgIHJldHVy
biAwOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXNwb25zZShjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7CisgICAg
bV9yZXNwb25zZVRpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVz
b3VyY2U6OnNldFNlcmlhbGl6ZWRDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXpl
X3Qgc2l6ZSkKK3sKKyAgICAvLyBXZSBvbmx5IGV4cGVjdCB0byByZWNlaXZlIGNhY2hlZCBtZXRh
ZGF0YSBmcm9tIHRoZSBwbGF0Zm9ybSBvbmNlLgorICAgIC8vIElmIHRoaXMgdHJpZ2dlcnMsIGl0
IGluZGljYXRlcyBhbiBlZmZpY2llbmN5IHByb2JsZW0gd2hpY2ggaXMgbW9zdAorICAgIC8vIGxp
a2VseSB1bmV4cGVjdGVkIGluIGNvZGUgZGVzaWduZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4K
KyAgICBBU1NFUlQoIW1fY2FjaGVkTWV0YWRhdGEpOworCisgICAgbV9jYWNoZWRNZXRhZGF0YSA9
IENhY2hlZE1ldGFkYXRhOjpkZXNlcmlhbGl6ZShkYXRhLCBzaXplKTsKK30KKwordm9pZCBDYWNo
ZWRSZXNvdXJjZTo6c2V0Q2FjaGVkTWV0YWRhdGEodW5zaWduZWQgZGF0YVR5cGVJRCwgY29uc3Qg
Y2hhciogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgLy8gQ3VycmVudGx5LCBvbmx5IG9uZSB0
eXBlIG9mIGNhY2hlZCBtZXRhZGF0YSBwZXIgcmVzb3VyY2UgaXMgc3VwcG9ydGVkLgorICAgIC8v
IElmIHRoZSBuZWVkIGFyaXNlcyBmb3IgbXVsdGlwbGUgdHlwZXMgb2YgbWV0YWRhdGEgcGVyIHJl
c291cmNlIHRoaXMgY291bGQKKyAgICAvLyBiZSBlbmhhbmNlZCB0byBzdG9yZSB0eXBlcyBvZiBt
ZXRhZGF0YSBpbiBhIG1hcC4KKyAgICBBU1NFUlQoIW1fY2FjaGVkTWV0YWRhdGEpOworCisgICAg
bV9jYWNoZWRNZXRhZGF0YSA9IENhY2hlZE1ldGFkYXRhOjpjcmVhdGUoZGF0YVR5cGVJRCwgZGF0
YSwgc2l6ZSk7CisgICAgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRhdGEobV9yZXNwb25zZSwg
bV9jYWNoZWRNZXRhZGF0YS0+c2VyaWFsaXplKCkpOworfQorCitDYWNoZWRNZXRhZGF0YSogQ2Fj
aGVkUmVzb3VyY2U6OmNhY2hlZE1ldGFkYXRhKHVuc2lnbmVkIGRhdGFUeXBlSUQpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2NhY2hlZE1ldGFkYXRhIHx8IG1fY2FjaGVkTWV0YWRhdGEtPmRhdGFUeXBl
SUQoKSAhPSBkYXRhVHlwZUlEKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9jYWNo
ZWRNZXRhZGF0YS5nZXQoKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVxdWVzdChS
ZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGlmIChyZXF1ZXN0ICYmICFtX3JlcXVlc3QpCisgICAg
ICAgIG1fc3RhdHVzID0gUGVuZGluZzsKKyAgICBtX3JlcXVlc3QgPSByZXF1ZXN0OworICAgIGlm
IChjYW5EZWxldGUoKSAmJiAhaW5DYWNoZSgpKQorICAgICAgICBkZWxldGUgdGhpczsKK30KKwor
dm9pZCBDYWNoZWRSZXNvdXJjZTo6YWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjbGll
bnQpCit7CisgICAgYWRkQ2xpZW50VG9TZXQoY2xpZW50KTsKKyAgICBkaWRBZGRDbGllbnQoY2xp
ZW50KTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291
cmNlQ2xpZW50KiBjKQoreworICAgIGlmICghaXNMb2FkaW5nKCkpCisgICAgICAgIGMtPm5vdGlm
eUZpbmlzaGVkKHRoaXMpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjphZGRDbGllbnRUb1Nl
dChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50KQoreworICAgIEFTU0VSVCghaXNQdXJnZWFi
bGUoKSk7CisKKyAgICBpZiAobV9wcmVsb2FkUmVzdWx0ID09IFByZWxvYWROb3RSZWZlcmVuY2Vk
KSB7CisgICAgICAgIGlmIChpc0xvYWRlZCgpKQorICAgICAgICAgICAgbV9wcmVsb2FkUmVzdWx0
ID0gUHJlbG9hZFJlZmVyZW5jZWRXaGlsZUNvbXBsZXRlOworICAgICAgICBlbHNlIGlmIChtX3Jl
cXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIpCisgICAgICAgICAgICBtX3ByZWxvYWRSZXN1bHQg
PSBQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZzsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9wcmVsb2FkUmVzdWx0ID0gUHJlbG9hZFJlZmVyZW5jZWQ7CisgICAgfQorICAgIGlmICgh
aGFzQ2xpZW50cygpICYmIGluQ2FjaGUoKSkKKyAgICAgICAgY2FjaGUoKS0+YWRkVG9MaXZlUmVz
b3VyY2VzU2l6ZSh0aGlzKTsKKyAgICBtX2NsaWVudHMuYWRkKGNsaWVudCk7Cit9CisKK3ZvaWQg
Q2FjaGVkUmVzb3VyY2U6OnJlbW92ZUNsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogY2xpZW50
KQoreworICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoY2xpZW50KSk7CisgICAgbV9jbGll
bnRzLnJlbW92ZShjbGllbnQpOworCisgICAgaWYgKGNhbkRlbGV0ZSgpICYmICFpbkNhY2hlKCkp
CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIGVsc2UgaWYgKCFoYXNDbGllbnRzKCkgJiYgaW5D
YWNoZSgpKSB7CisgICAgICAgIGNhY2hlKCktPnJlbW92ZUZyb21MaXZlUmVzb3VyY2VzU2l6ZSh0
aGlzKTsKKyAgICAgICAgY2FjaGUoKS0+cmVtb3ZlRnJvbUxpdmVEZWNvZGVkUmVzb3VyY2VzTGlz
dCh0aGlzKTsKKyAgICAgICAgYWxsQ2xpZW50c1JlbW92ZWQoKTsKKyAgICAgICAgaWYgKHJlc3Bv
bnNlKCkuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkpIHsKKyAgICAgICAgICAgIC8vIFJG
QzI2MTYgMTQuOS4yOgorICAgICAgICAgICAgLy8gIm5vLXN0b3JlOiAuLi5NVVNUIG1ha2UgYSBi
ZXN0LWVmZm9ydCBhdHRlbXB0IHRvIHJlbW92ZSB0aGUgaW5mb3JtYXRpb24gZnJvbSB2b2xhdGls
ZSBzdG9yYWdlIGFzIHByb21wdGx5IGFzIHBvc3NpYmxlIgorICAgICAgICAgICAgY2FjaGUoKS0+
cmVtb3ZlKHRoaXMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhY2hlKCktPnBydW5l
KCk7CisgICAgfQorICAgIC8vIFRoaXMgb2JqZWN0IG1heSBiZSBkZWFkIGhlcmUuCit9CisKK3Zv
aWQgQ2FjaGVkUmVzb3VyY2U6OmRlbGV0ZUlmUG9zc2libGUoKQoreworICAgIGlmIChjYW5EZWxl
dGUoKSAmJiAhaW5DYWNoZSgpKQorICAgICAgICBkZWxldGUgdGhpczsKK30KKyAgICAKK3ZvaWQg
Q2FjaGVkUmVzb3VyY2U6OnNldERlY29kZWRTaXplKHVuc2lnbmVkIHNpemUpCit7CisgICAgaWYg
KHNpemUgPT0gbV9kZWNvZGVkU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGRlbHRh
ID0gc2l6ZSAtIG1fZGVjb2RlZFNpemU7CisKKyAgICAvLyBUaGUgb2JqZWN0IG11c3Qgbm93IGJl
IG1vdmVkIHRvIGEgZGlmZmVyZW50IHF1ZXVlLCBzaW5jZSBpdHMgc2l6ZSBoYXMgYmVlbiBjaGFu
Z2VkLgorICAgIC8vIFdlIGhhdmUgdG8gcmVtb3ZlIGV4cGxpY2l0bHkgYmVmb3JlIHVwZGF0aW5n
IG1fZGVjb2RlZFNpemUsIHNvIHRoYXQgd2UgZmluZCB0aGUgY29ycmVjdCBwcmV2aW91cworICAg
IC8vIHF1ZXVlLgorICAgIGlmIChpbkNhY2hlKCkpCisgICAgICAgIGNhY2hlKCktPnJlbW92ZUZy
b21MUlVMaXN0KHRoaXMpOworICAgIAorICAgIG1fZGVjb2RlZFNpemUgPSBzaXplOworICAgCisg
ICAgaWYgKGluQ2FjaGUoKSkgeyAKKyAgICAgICAgLy8gTm93IGluc2VydCBpbnRvIHRoZSBuZXcg
TFJVIGxpc3QuCisgICAgICAgIGNhY2hlKCktPmluc2VydEluTFJVTGlzdCh0aGlzKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIEluc2VydCBpbnRvIG9yIHJlbW92ZSBmcm9tIHRoZSBsaXZlIGRlY29k
ZWQgbGlzdCBpZiBuZWNlc3NhcnkuCisgICAgICAgIC8vIFdoZW4gaW5zZXJ0aW5nIGludG8gdGhl
IExpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCBpdCBpcyBwb3NzaWJsZQorICAgICAgICAvLyB0aGF0
IHRoZSBtX2xhc3REZWNvZGVkQWNjZXNzVGltZSBpcyBzdGlsbCB6ZXJvIG9yIHNtYWxsZXIgdGhh
bgorICAgICAgICAvLyB0aGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUgb2YgdGhlIGN1cnJlbnQg
bGlzdCBoZWFkLiBUaGlzIGlzIGEKKyAgICAgICAgLy8gdmlvbGF0aW9uIG9mIHRoZSBpbnZhcmlh
bnQgdGhhdCB0aGUgbGlzdCBpcyB0byBiZSBrZXB0IHNvcnRlZAorICAgICAgICAvLyBieSBhY2Nl
c3MgdGltZS4gVGhlIHdlYWtlbmluZyBvZiB0aGUgaW52YXJpYW50IGRvZXMgbm90IHBvc2UKKyAg
ICAgICAgLy8gYSBwcm9ibGVtLiBGb3IgbW9yZSBkZXRhaWxzIHBsZWFzZSBzZWU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDIwOQorICAgICAgICBpZiAobV9kZWNv
ZGVkU2l6ZSAmJiAhbV9pbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCAmJiBoYXNDbGllbnRzKCkp
CisgICAgICAgICAgICBjYWNoZSgpLT5pbnNlcnRJbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCh0
aGlzKTsKKyAgICAgICAgZWxzZSBpZiAoIW1fZGVjb2RlZFNpemUgJiYgbV9pbkxpdmVEZWNvZGVk
UmVzb3VyY2VzTGlzdCkKKyAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZUZyb21MaXZlRGVjb2Rl
ZFJlc291cmNlc0xpc3QodGhpcyk7CisKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBjYWNoZSdzIHNp
emUgdG90YWxzLgorICAgICAgICBjYWNoZSgpLT5hZGp1c3RTaXplKGhhc0NsaWVudHMoKSwgZGVs
dGEpOworICAgIH0KK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0RW5jb2RlZFNpemUodW5z
aWduZWQgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA9PSBtX2VuY29kZWRTaXplKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBUaGUgc2l6ZSBjYW5ub3QgZXZlciBzaHJpbmsgKHVubGVzcyBpdCBp
cyBiZWluZyBudWxsZWQgb3V0IGJlY2F1c2Ugb2YgYW4gZXJyb3IpLiAgSWYgaXQgZXZlciBkb2Vz
LCBhc3NlcnQuCisgICAgQVNTRVJUKHNpemUgPT0gMCB8fCBzaXplID49IG1fZW5jb2RlZFNpemUp
OworICAgIAorICAgIGludCBkZWx0YSA9IHNpemUgLSBtX2VuY29kZWRTaXplOworCisgICAgLy8g
VGhlIG9iamVjdCBtdXN0IG5vdyBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBxdWV1ZSwgc2luY2Ug
aXRzIHNpemUgaGFzIGJlZW4gY2hhbmdlZC4KKyAgICAvLyBXZSBoYXZlIHRvIHJlbW92ZSBleHBs
aWNpdGx5IGJlZm9yZSB1cGRhdGluZyBtX2VuY29kZWRTaXplLCBzbyB0aGF0IHdlIGZpbmQgdGhl
IGNvcnJlY3QgcHJldmlvdXMKKyAgICAvLyBxdWV1ZS4KKyAgICBpZiAoaW5DYWNoZSgpKQorICAg
ICAgICBjYWNoZSgpLT5yZW1vdmVGcm9tTFJVTGlzdCh0aGlzKTsKKyAgICAKKyAgICBtX2VuY29k
ZWRTaXplID0gc2l6ZTsKKyAgIAorICAgIGlmIChpbkNhY2hlKCkpIHsgCisgICAgICAgIC8vIE5v
dyBpbnNlcnQgaW50byB0aGUgbmV3IExSVSBsaXN0LgorICAgICAgICBjYWNoZSgpLT5pbnNlcnRJ
bkxSVUxpc3QodGhpcyk7CisgICAgICAgIAorICAgICAgICAvLyBVcGRhdGUgdGhlIGNhY2hlJ3Mg
c2l6ZSB0b3RhbHMuCisgICAgICAgIGNhY2hlKCktPmFkanVzdFNpemUoaGFzQ2xpZW50cygpLCBk
ZWx0YSk7CisgICAgfQorfQorCit2b2lkIENhY2hlZFJlc291cmNlOjpkaWRBY2Nlc3NEZWNvZGVk
RGF0YShkb3VibGUgdGltZVN0YW1wKQoreworICAgIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lID0g
dGltZVN0YW1wOworICAgIAorICAgIGlmIChpbkNhY2hlKCkpIHsKKyAgICAgICAgaWYgKG1faW5M
aXZlRGVjb2RlZFJlc291cmNlc0xpc3QpIHsKKyAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZUZy
b21MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QodGhpcyk7CisgICAgICAgICAgICBjYWNoZSgpLT5p
bnNlcnRJbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdCh0aGlzKTsKKyAgICAgICAgfQorICAgICAg
ICBjYWNoZSgpLT5wcnVuZSgpOworICAgIH0KK30KKyAgICAKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6
OnNldFJlc291cmNlVG9SZXZhbGlkYXRlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkgCit7IAor
ICAgIEFTU0VSVChyZXNvdXJjZSk7CisgICAgQVNTRVJUKCFtX3Jlc291cmNlVG9SZXZhbGlkYXRl
KTsKKyAgICBBU1NFUlQocmVzb3VyY2UgIT0gdGhpcyk7CisgICAgQVNTRVJUKG1faGFuZGxlc1Rv
UmV2YWxpZGF0ZS5pc0VtcHR5KCkpOworICAgIEFTU0VSVChyZXNvdXJjZS0+dHlwZSgpID09IHR5
cGUoKSk7CisKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2UgJXAgc2V0
UmVzb3VyY2VUb1JldmFsaWRhdGUgJXAiLCB0aGlzLCByZXNvdXJjZSk7CisKKyAgICAvLyBUaGUg
Zm9sbG93aW5nIGFzc2VydCBzaG91bGQgYmUgaW52ZXN0aWdhdGVkIHdoZW5ldmVyIGl0IG9jY3Vy
cy4gQWx0aG91Z2ggaXQgc2hvdWxkIG5ldmVyIGZpcmUsIGl0IGN1cnJlbnRseSBkb2VzIGluIHJh
cmUgY2lyY3Vtc3RhbmNlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mjg2MDQuCisgICAgLy8gU28gdGhlIGNvZGUgbmVlZHMgdG8gYmUgcm9idXN0IHRv
IHRoaXMgYXNzZXJ0IGZhaWxpbmcgdGh1cyB0aGUgImlmIChtX3Jlc291cmNlVG9SZXZhbGlkYXRl
LT5tX3Byb3h5UmVzb3VyY2UgPT0gdGhpcykiIGluIENhY2hlZFJlc291cmNlOjpjbGVhclJlc291
cmNlVG9SZXZhbGlkYXRlLgorICAgIEFTU0VSVCghcmVzb3VyY2UtPm1fcHJveHlSZXNvdXJjZSk7
CisKKyAgICByZXNvdXJjZS0+bV9wcm94eVJlc291cmNlID0gdGhpczsKKyAgICBtX3Jlc291cmNl
VG9SZXZhbGlkYXRlID0gcmVzb3VyY2U7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OmNsZWFy
UmVzb3VyY2VUb1JldmFsaWRhdGUoKSAKK3sgCisgICAgQVNTRVJUKG1fcmVzb3VyY2VUb1JldmFs
aWRhdGUpOworICAgIC8vIEEgcmVzb3VyY2UgbWF5IHN0YXJ0IHJldmFsaWRhdGlvbiBiZWZvcmUg
dGhpcyBtZXRob2QgaGFzIGJlZW4gY2FsbGVkLCBzbyBjaGVjayB0aGF0IHRoaXMgcmVzb3VyY2Ug
aXMgc3RpbGwgdGhlIHByb3h5IHJlc291cmNlIGJlZm9yZSBjbGVhcmluZyBpdCBvdXQuCisgICAg
aWYgKG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPm1fcHJveHlSZXNvdXJjZSA9PSB0aGlzKSB7Cisg
ICAgICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPm1fcHJveHlSZXNvdXJjZSA9IDA7CisgICAg
ICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPmRlbGV0ZUlmUG9zc2libGUoKTsKKyAgICB9Cisg
ICAgbV9oYW5kbGVzVG9SZXZhbGlkYXRlLmNsZWFyKCk7CisgICAgbV9yZXNvdXJjZVRvUmV2YWxp
ZGF0ZSA9IDA7CisgICAgZGVsZXRlSWZQb3NzaWJsZSgpOworfQorICAgIAordm9pZCBDYWNoZWRS
ZXNvdXJjZTo6c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpCit7CisgICAgQVNT
RVJUKG1fcmVzb3VyY2VUb1JldmFsaWRhdGUpOworICAgIEFTU0VSVChtX3Jlc291cmNlVG9SZXZh
bGlkYXRlLT5pbkNhY2hlKCkpOworICAgIEFTU0VSVCghaW5DYWNoZSgpKTsKKworICAgIExPRyhS
ZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZSAlcCBzd2l0Y2hDbGllbnRzVG9SZXZhbGlk
YXRlZFJlc291cmNlICVwIiwgdGhpcywgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSk7CisKKyAgICBI
YXNoU2V0PENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSo+OjppdGVyYXRvciBlbmQgPSBtX2hhbmRs
ZXNUb1JldmFsaWRhdGUuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PENhY2hlZFJlc291cmNlSGFu
ZGxlQmFzZSo+OjppdGVyYXRvciBpdCA9IG1faGFuZGxlc1RvUmV2YWxpZGF0ZS5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKiBoYW5k
bGUgPSAqaXQ7CisgICAgICAgIGhhbmRsZS0+bV9yZXNvdXJjZSA9IG1fcmVzb3VyY2VUb1JldmFs
aWRhdGU7CisgICAgICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPnJlZ2lzdGVySGFuZGxlKGhh
bmRsZSk7CisgICAgICAgIC0tbV9oYW5kbGVDb3VudDsKKyAgICB9CisgICAgQVNTRVJUKCFtX2hh
bmRsZUNvdW50KTsKKyAgICBtX2hhbmRsZXNUb1JldmFsaWRhdGUuY2xlYXIoKTsKKworICAgIFZl
Y3RvcjxDYWNoZWRSZXNvdXJjZUNsaWVudCo+IGNsaWVudHNUb01vdmU7CisgICAgSGFzaENvdW50
ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPjo6aXRlcmF0b3IgZW5kMiA9IG1fY2xpZW50cy5l
bmQoKTsKKyAgICBmb3IgKEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj46Oml0
ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDI7ICsraXQpIHsKKyAgICAg
ICAgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGNsaWVudCA9IGl0LT5maXJzdDsKKyAgICAgICAgdW5z
aWduZWQgY291bnQgPSBpdC0+c2Vjb25kOworICAgICAgICB3aGlsZSAoY291bnQpIHsKKyAgICAg
ICAgICAgIGNsaWVudHNUb01vdmUuYXBwZW5kKGNsaWVudCk7CisgICAgICAgICAgICAtLWNvdW50
OworICAgICAgICB9CisgICAgfQorICAgIC8vIEVxdWl2YWxlbnQgb2YgY2FsbGluZyByZW1vdmVD
bGllbnQoKSBmb3IgYWxsIGNsaWVudHMKKyAgICBtX2NsaWVudHMuY2xlYXIoKTsKKworICAgIHVu
c2lnbmVkIG1vdmVDb3VudCA9IGNsaWVudHNUb01vdmUuc2l6ZSgpOworICAgIGZvciAodW5zaWdu
ZWQgbiA9IDA7IG4gPCBtb3ZlQ291bnQ7ICsrbikKKyAgICAgICAgbV9yZXNvdXJjZVRvUmV2YWxp
ZGF0ZS0+YWRkQ2xpZW50VG9TZXQoY2xpZW50c1RvTW92ZVtuXSk7CisgICAgZm9yICh1bnNpZ25l
ZCBuID0gMDsgbiA8IG1vdmVDb3VudDsgKytuKSB7CisgICAgICAgIC8vIENhbGxpbmcgZGlkQWRk
Q2xpZW50IGZvciBhIGNsaWVudCBtYXkgZW5kIHVwIHJlbW92aW5nIGFub3RoZXIgY2xpZW50LiBJ
biB0aGF0IGNhc2UgaXQgd29uJ3QgYmUgaW4gdGhlIHNldCBhbnltb3JlLgorICAgICAgICBpZiAo
bV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+bV9jbGllbnRzLmNvbnRhaW5zKGNsaWVudHNUb01vdmVb
bl0pKQorICAgICAgICAgICAgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+ZGlkQWRkQ2xpZW50KGNs
aWVudHNUb01vdmVbbl0pOworICAgIH0KK30KKyAgICAKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnVw
ZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFs
aWRhdGluZ1Jlc3BvbnNlKQoreworICAgIG1fcmVzcG9uc2VUaW1lc3RhbXAgPSBjdXJyZW50VGlt
ZSgpOworCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGNvbnRl
bnRIZWFkZXJQcmVmaXgsICgiY29udGVudC0iKSk7CisgICAgLy8gUkZDMjYxNiAxMC4zLjUKKyAg
ICAvLyBVcGRhdGUgY2FjaGVkIGhlYWRlcnMgZnJvbSB0aGUgMzA0IHJlc3BvbnNlCisgICAgY29u
c3QgSFRUUEhlYWRlck1hcCYgbmV3SGVhZGVycyA9IHZhbGlkYXRpbmdSZXNwb25zZS5odHRwSGVh
ZGVyRmllbGRzKCk7CisgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3
SGVhZGVycy5lbmQoKTsKKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbmV3SGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8gRG9u
J3QgYWxsb3cgMzA0IHJlc3BvbnNlIHRvIHVwZGF0ZSBjb250ZW50IGhlYWRlcnMsIHRoZXNlIGNh
bid0IGNoYW5nZSBidXQgc29tZSBzZXJ2ZXJzIHNlbmQgd3JvbmcgdmFsdWVzLgorICAgICAgICBp
ZiAoaXQtPmZpcnN0LnN0YXJ0c1dpdGgoY29udGVudEhlYWRlclByZWZpeCwgZmFsc2UpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxk
KGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisgICAgfQorfQorCit2b2lkIENhY2hlZFJlc291cmNl
OjpyZWdpc3RlckhhbmRsZShDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqIGgpCit7CisgICAgKytt
X2hhbmRsZUNvdW50OworICAgIGlmIChtX3Jlc291cmNlVG9SZXZhbGlkYXRlKQorICAgICAgICBt
X2hhbmRsZXNUb1JldmFsaWRhdGUuYWRkKGgpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlOjp1
bnJlZ2lzdGVySGFuZGxlKENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSogaCkKK3sKKyAgICBBU1NF
UlQobV9oYW5kbGVDb3VudCA+IDApOworICAgIC0tbV9oYW5kbGVDb3VudDsKKworICAgIGlmICht
X3Jlc291cmNlVG9SZXZhbGlkYXRlKQorICAgICAgICAgbV9oYW5kbGVzVG9SZXZhbGlkYXRlLnJl
bW92ZShoKTsKKworICAgIGlmICghbV9oYW5kbGVDb3VudCkKKyAgICAgICAgZGVsZXRlSWZQb3Nz
aWJsZSgpOworfQorCitib29sIENhY2hlZFJlc291cmNlOjpjYW5Vc2VDYWNoZVZhbGlkYXRvcigp
IGNvbnN0Cit7CisgICAgaWYgKG1fbG9hZGluZyB8fCBtX2Vycm9yT2NjdXJyZWQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5z
Tm9TdG9yZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IEF0b21pY1N0cmluZywgbGFzdE1vZGlmaWVkSGVhZGVyLCAoImxhc3QtbW9kaWZp
ZWQiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGVUYWdI
ZWFkZXIsICgiZXRhZyIpKTsKKyAgICByZXR1cm4gIW1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
KGxhc3RNb2RpZmllZEhlYWRlcikuaXNFbXB0eSgpIHx8ICFtX3Jlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChlVGFnSGVhZGVyKS5pc0VtcHR5KCk7Cit9CisgICAgCitib29sIENhY2hlZFJlc291cmNl
OjptdXN0UmV2YWxpZGF0ZShDYWNoZVBvbGljeSBjYWNoZVBvbGljeSkgY29uc3QKK3sKKyAgICBp
ZiAobV9lcnJvck9jY3VycmVkKSB7CisgICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNo
ZWRSZXNvdXJjZSAlcCBtdXN0UmV2YWxpZGF0ZSBiZWNhdXNlIG9mIG1fZXJyb3JPY2N1cnJlZFxu
IiwgdGhpcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChtX2xvYWRp
bmcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9yZXNwb25zZS5jYWNo
ZUNvbnRyb2xDb250YWluc05vQ2FjaGUoKSB8fCBtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRh
aW5zTm9TdG9yZSgpKSB7CisgICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNv
dXJjZSAlcCBtdXN0UmV2YWxpZGF0ZSBiZWNhdXNlIG9mIG1fcmVzcG9uc2UuY2FjaGVDb250cm9s
Q29udGFpbnNOb0NhY2hlKCkgfHwgbV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vU3Rv
cmUoKVxuIiwgdGhpcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChj
YWNoZVBvbGljeSA9PSBDYWNoZVBvbGljeUNhY2hlKSB7CisgICAgICAgIGlmIChtX3Jlc3BvbnNl
LmNhY2hlQ29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRhdGUoKSAmJiBpc0V4cGlyZWQoKSkgewor
ICAgICAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlICVwIG11c3RS
ZXZhbGlkYXRlIGJlY2F1c2Ugb2YgY2FjaGVQb2xpY3kgPT0gQ2FjaGVQb2xpY3lDYWNoZSBhbmQg
bV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlKCkgJiYgaXNFeHBp
cmVkKClcbiIsIHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChpc0V4cGlyZWQoKSkgeworICAg
ICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2UgJXAgbXVzdFJldmFsaWRh
dGUgYmVjYXVzZSBvZiBpc0V4cGlyZWQoKVxuIiwgdGhpcyk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZTo6
aXNTYWZlVG9NYWtlUHVyZ2VhYmxlKCkgY29uc3QKK3sgCisgICAgcmV0dXJuICFoYXNDbGllbnRz
KCkgJiYgIW1fcHJveHlSZXNvdXJjZSAmJiAhbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsKK30KKwor
Ym9vbCBDYWNoZWRSZXNvdXJjZTo6bWFrZVB1cmdlYWJsZShib29sIHB1cmdlYWJsZSkgCit7IAor
ICAgIGlmIChwdXJnZWFibGUpIHsKKyAgICAgICAgQVNTRVJUKGlzU2FmZVRvTWFrZVB1cmdlYWJs
ZSgpKTsKKworICAgICAgICBpZiAobV9wdXJnZWFibGVEYXRhKSB7CisgICAgICAgICAgICBBU1NF
UlQoIW1fZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFNob3VsZCBub3QgbWFrZSBidWZmZXIgcHVyZ2VhYmxlIGlmIGl0IGhhcyByZWZzIG90
aGVyIHRoYW4gdGhpcyBzaW5jZSB3ZSBkb24ndCB3YW50IHR3byBjb3BpZXMuCisgICAgICAgIGlm
ICghbV9kYXRhLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChtX2RhdGEtPmhhc1B1cmdlYWJsZUJ1ZmZlcigpKSB7CisgICAgICAg
ICAgICBtX3B1cmdlYWJsZURhdGEgPSBtX2RhdGEtPnJlbGVhc2VQdXJnZWFibGVCdWZmZXIoKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcHVyZ2VhYmxlRGF0YSA9IFB1cmdlYWJs
ZUJ1ZmZlcjo6Y3JlYXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7CisgICAgICAg
ICAgICBpZiAoIW1fcHVyZ2VhYmxlRGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBtX3B1cmdlYWJsZURhdGEtPnNldFB1cmdlUHJpb3JpdHkocHVyZ2VQcmlv
cml0eSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9wdXJnZWFibGVEYXRhLT5t
YWtlUHVyZ2VhYmxlKHRydWUpOworICAgICAgICBtX2RhdGEuY2xlYXIoKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCFtX3B1cmdlYWJsZURhdGEpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIEFTU0VSVCghbV9kYXRhKTsKKyAgICBBU1NFUlQoIWhhc0NsaWVudHMo
KSk7CisKKyAgICBpZiAoIW1fcHVyZ2VhYmxlRGF0YS0+bWFrZVB1cmdlYWJsZShmYWxzZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsgCisKKyAgICBtX2RhdGEgPSBTaGFyZWRCdWZmZXI6OmFkb3B0
UHVyZ2VhYmxlQnVmZmVyKG1fcHVyZ2VhYmxlRGF0YS5yZWxlYXNlKCkpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIENhY2hlZFJlc291cmNlOjppc1B1cmdlYWJsZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHVyZ2VhYmxlRGF0YSAmJiBtX3B1cmdlYWJsZURhdGEtPmlzUHVyZ2VhYmxl
KCk7Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6Ondhc1B1cmdlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHVyZ2VhYmxlRGF0YSAmJiBtX3B1cmdlYWJsZURhdGEtPndhc1B1cmdlZCgpOwor
fQorCit1bnNpZ25lZCBDYWNoZWRSZXNvdXJjZTo6b3ZlcmhlYWRTaXplKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc2l6ZW9mKENhY2hlZFJlc291cmNlKSArIG1fcmVzcG9uc2UubWVtb3J5VXNhZ2Uo
KSArIDU3NjsKKyAgICAvKgorICAgICAgICA1NzYgPSAxOTIgKyAgICAgICAgICAgICAgICAgICAv
LyBhdmVyYWdlIHNpemUgb2YgbV91cmwKKyAgICAgICAgICAgICAgMzg0OyAgICAgICAgICAgICAg
ICAgICAgLy8gYXZlcmFnZSBzaXplIG9mIG1fY2xpZW50cyBoYXNoIG1hcAorICAgICovCit9CisK
K30KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24gNzE0
OTIpCShmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmg6NzE0OTIpCisrKyBXZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjg5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBt
cGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxs
ZXJAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndl
aW5pZ0BnbWFpbC5jb20pCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENhY2hlZFJlc291
cmNlX2gKKyNkZWZpbmUgQ2FjaGVkUmVzb3VyY2VfaAorCisjaW5jbHVkZSAiQ2FjaGVQb2xpY3ku
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJQdXJnZVByaW9yaXR5LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNw
b25zZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2Fj
aGU7CitjbGFzcyBDYWNoZWRNZXRhZGF0YTsKK2NsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50Owor
Y2xhc3MgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOworY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI7CitjbGFzcyBGcmFtZTsKK2NsYXNzIEluc3BlY3RvclJlc291cmNlOworY2xhc3MgUHVyZ2Vh
YmxlQnVmZmVyOworY2xhc3MgUmVxdWVzdDsKKworLy8gQSByZXNvdXJjZSB0aGF0IGlzIGhlbGQg
aW4gdGhlIGNhY2hlLiBDbGFzc2VzIHdobyB3YW50IHRvIHVzZSB0aGlzIG9iamVjdCBzaG91bGQg
ZGVyaXZlCisvLyBmcm9tIENhY2hlZFJlc291cmNlQ2xpZW50LCB0byBnZXQgdGhlIGZ1bmN0aW9u
IGNhbGxzIGluIGNhc2UgdGhlIHJlcXVlc3RlZCBkYXRhIGhhcyBhcnJpdmVkLgorLy8gVGhpcyBj
bGFzcyBhbHNvIGRvZXMgdGhlIGFjdHVhbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGxvYWRlciB0
byBvYnRhaW4gdGhlIHJlc291cmNlIGZyb20gdGhlIG5ldHdvcmsuCitjbGFzcyBDYWNoZWRSZXNv
dXJjZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlOworICAg
IGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JSZXNvdXJjZTsKKyAgICAKK3B1YmxpYzoKKyAgICBlbnVt
IFR5cGUgeworICAgICAgICBJbWFnZVJlc291cmNlLAorICAgICAgICBDU1NTdHlsZVNoZWV0LAor
ICAgICAgICBTY3JpcHQsCisgICAgICAgIEZvbnRSZXNvdXJjZQorI2lmIEVOQUJMRShYU0xUKQor
ICAgICAgICAsIFhTTFN0eWxlU2hlZXQKKyNlbmRpZgorI2lmIEVOQUJMRShMSU5LX1BSRUZFVENI
KQorICAgICAgICAsIExpbmtQcmVmZXRjaAorI2VuZGlmCisgICAgfTsKKworICAgIGVudW0gU3Rh
dHVzIHsKKyAgICAgICAgVW5rbm93biwgICAgICAvLyBsZXQgY2FjaGUgZGVjaWRlIHdoYXQgdG8g
ZG8gd2l0aCBpdAorICAgICAgICBQZW5kaW5nLCAgICAgIC8vIG9ubHkgcGFydGlhbGx5IGxvYWRl
ZAorICAgICAgICBDYWNoZWQgICAgICAgIC8vIHJlZ3VsYXIgY2FzZQorICAgIH07CisKKyAgICBD
YWNoZWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCwgVHlwZSk7CisgICAgdmlydHVhbCB+Q2Fj
aGVkUmVzb3VyY2UoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZChDYWNoZWRSZXNvdXJj
ZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpICB7IGxvYWQoY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIsIGZhbHNlLCBEb1NlY3VyaXR5Q2hlY2ssIHRydWUpOyB9CisgICAgdm9pZCBsb2FkKENhY2hl
ZFJlc291cmNlTG9hZGVyKiwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSwg
Ym9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRF
bmNvZGluZyhjb25zdCBTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBlbmNvZGluZygp
IGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgdmlydHVhbCB2b2lkIGRhdGEoUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZXJyb3IoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaHR0cFN0YXR1c0NvZGVFcnJv
cigpIHsgZXJyb3IoKTsgfSAvLyBJbWFnZXMga2VlcCBsb2FkaW5nIGluIHNwaXRlIG9mIEhUVFAg
ZXJyb3JzIChmb3IgbGVnYWN5IGNvbXBhdCB3aXRoIDxpbWc+LCBldGMuKS4KKworICAgIGNvbnN0
IFN0cmluZyAmdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KKyAgICBUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9CisKKyAgICB2b2lkIGFk
ZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KENh
Y2hlZFJlc291cmNlQ2xpZW50Kik7CisgICAgYm9vbCBoYXNDbGllbnRzKCkgY29uc3QgeyByZXR1
cm4gIW1fY2xpZW50cy5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIGRlbGV0ZUlmUG9zc2libGUoKTsK
KworICAgIGVudW0gUHJlbG9hZFJlc3VsdCB7CisgICAgICAgIFByZWxvYWROb3RSZWZlcmVuY2Vk
LAorICAgICAgICBQcmVsb2FkUmVmZXJlbmNlZCwKKyAgICAgICAgUHJlbG9hZFJlZmVyZW5jZWRX
aGlsZUxvYWRpbmcsCisgICAgICAgIFByZWxvYWRSZWZlcmVuY2VkV2hpbGVDb21wbGV0ZQorICAg
IH07CisgICAgUHJlbG9hZFJlc3VsdCBwcmVsb2FkUmVzdWx0KCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8UHJlbG9hZFJlc3VsdD4obV9wcmVsb2FkUmVzdWx0KTsgfQorICAgIHZvaWQgc2V0
UmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllcigpIHsgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2lu
Z0xheWVyID0gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZEFkZENsaWVudChDYWNoZWRS
ZXNvdXJjZUNsaWVudCopOworICAgIHZpcnR1YWwgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpIHsg
fQorCisgICAgdW5zaWduZWQgY291bnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudHMuc2l6ZSgp
OyB9CisKKyAgICBTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U3Rh
dHVzPihtX3N0YXR1cyk7IH0KKyAgICB2b2lkIHNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSB7IG1f
c3RhdHVzID0gc3RhdHVzOyB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
ZW5jb2RlZFNpemUoKSArIGRlY29kZWRTaXplKCkgKyBvdmVyaGVhZFNpemUoKTsgfQorICAgIHVu
c2lnbmVkIGVuY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkU2l6ZTsgfQorICAg
IHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVkU2l6ZTsgfQor
ICAgIHVuc2lnbmVkIG92ZXJoZWFkU2l6ZSgpIGNvbnN0OworICAgIAorICAgIGJvb2wgaXNMb2Fk
ZWQoKSBjb25zdCB7IHJldHVybiAhbV9sb2FkaW5nOyB9IC8vIEZJWE1FLiBNZXRob2QgbmFtZSBp
cyBpbmFjY3VyYXRlLiBMb2FkaW5nIG1pZ2h0IG5vdCBoYXZlIHN0YXJ0ZWQgeWV0LgorCisgICAg
Ym9vbCBpc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2xvYWRpbmc7IH0KKyAgICB2b2lkIHNl
dExvYWRpbmcoYm9vbCBiKSB7IG1fbG9hZGluZyA9IGI7IH0KKworICAgIHZpcnR1YWwgYm9vbCBp
c0ltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzUHJlZmV0Y2goKSBj
b25zdAorICAgIHsKKyNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKKyAgICAgICAgcmV0dXJuIHR5
cGUoKSA9PSBMaW5rUHJlZmV0Y2g7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhY2Nlc3NDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
YWNjZXNzQ291bnQ7IH0KKyAgICB2b2lkIGluY3JlYXNlQWNjZXNzQ291bnQoKSB7IG1fYWNjZXNz
Q291bnQrKzsgfQorCisgICAgLy8gQ29tcHV0ZXMgdGhlIHN0YXR1cyBvZiBhbiBvYmplY3QgYWZ0
ZXIgbG9hZGluZy4gIAorICAgIC8vIFVwZGF0ZXMgdGhlIGV4cGlyZSBkYXRlIG9uIHRoZSBjYWNo
ZSBlbnRyeSBmaWxlCisgICAgdm9pZCBmaW5pc2goKTsKKworICAgIC8vIENhbGxlZCBieSB0aGUg
Y2FjaGUgaWYgdGhlIG9iamVjdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNhY2hlCisgICAg
Ly8gd2hpbGUgc3RpbGwgYmVpbmcgcmVmZXJlbmNlZC4gVGhpcyBtZWFucyB0aGUgb2JqZWN0IHNo
b3VsZCBkZWxldGUgaXRzZWxmCisgICAgLy8gaWYgdGhlIG51bWJlciBvZiBjbGllbnRzIG9ic2Vy
dmluZyBpdCBldmVyIGRyb3BzIHRvIDAuCisgICAgLy8gVGhlIHJlc291cmNlIGNhbiBiZSBicm91
Z2h0IGJhY2sgdG8gY2FjaGUgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXZhbGlkYXRpb24uCisgICAgdm9p
ZCBzZXRJbkNhY2hlKGJvb2wgaW5DYWNoZSkgeyBtX2luQ2FjaGUgPSBpbkNhY2hlOyB9CisgICAg
Ym9vbCBpbkNhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9pbkNhY2hlOyB9CisgICAgCisgICAgdm9p
ZCBzZXRJbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChib29sIGIpIHsgbV9pbkxpdmVEZWNvZGVk
UmVzb3VyY2VzTGlzdCA9IGI7IH0KKyAgICBib29sIGluTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0
KCkgeyByZXR1cm4gbV9pbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdDsgfQorICAgIAorICAgIHZv
aWQgc2V0UmVxdWVzdChSZXF1ZXN0Kik7CisKKyAgICBTaGFyZWRCdWZmZXIqIGRhdGEoKSBjb25z
dCB7IEFTU0VSVCghbV9wdXJnZWFibGVEYXRhKTsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQorCisg
ICAgdm9pZCBzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9
CisKKyAgICAvLyBTZXRzIHRoZSBzZXJpYWxpemVkIG1ldGFkYXRhIHJldHJpZXZlZCBmcm9tIHRo
ZSBwbGF0Zm9ybSdzIGNhY2hlLgorICAgIHZvaWQgc2V0U2VyaWFsaXplZENhY2hlZE1ldGFkYXRh
KGNvbnN0IGNoYXIqLCBzaXplX3QpOworCisgICAgLy8gQ2FjaGVzIHRoZSBnaXZlbiBtZXRhZGF0
YSBpbiBhc3NvY2lhdGlvbiB3aXRoIHRoaXMgcmVzb3VyY2UgYW5kIHN1Z2dlc3RzCisgICAgLy8g
dGhhdCB0aGUgcGxhdGZvcm0gcGVyc2lzdCBpdC4gVGhlIGRhdGFUeXBlSUQgaXMgYSBwc2V1ZG8t
cmFuZG9tbHkgY2hvc2VuCisgICAgLy8gaWRlbnRpZmllciB0aGF0IGlzIHVzZWQgdG8gZGlzdGlu
Z3Vpc2ggZGF0YSBnZW5lcmF0ZWQgYnkgdGhlIGNhbGxlci4KKyAgICB2b2lkIHNldENhY2hlZE1l
dGFkYXRhKHVuc2lnbmVkIGRhdGFUeXBlSUQsIGNvbnN0IGNoYXIqLCBzaXplX3QpOworCisgICAg
Ly8gUmV0dXJucyBjYWNoZWQgbWV0YWRhdGEgb2YgdGhlIGdpdmVuIHR5cGUgYXNzb2NpYXRlZCB3
aXRoIHRoaXMgcmVzb3VyY2UuCisgICAgQ2FjaGVkTWV0YWRhdGEqIGNhY2hlZE1ldGFkYXRhKHVu
c2lnbmVkIGRhdGFUeXBlSUQpIGNvbnN0OworCisgICAgYm9vbCBjYW5EZWxldGUoKSBjb25zdCB7
IHJldHVybiAhaGFzQ2xpZW50cygpICYmICFtX3JlcXVlc3QgJiYgIW1fcHJlbG9hZENvdW50ICYm
ICFtX2hhbmRsZUNvdW50ICYmICFtX3Jlc291cmNlVG9SZXZhbGlkYXRlICYmICFtX3Byb3h5UmVz
b3VyY2U7IH0KKworICAgIGJvb2wgaXNFeHBpcmVkKCkgY29uc3Q7CisKKyAgICAvLyBMaXN0IG9m
IGFjY2VwdGFibGUgTUlNRSB0eXBlcyBzZXBhcmF0ZWQgYnkgIiwiLgorICAgIC8vIEEgTUlNRSB0
eXBlIG1heSBjb250YWluIGEgd2lsZGNhcmQsIGUuZy4gInRleHQvKiIuCisgICAgU3RyaW5nIGFj
Y2VwdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXB0OyB9CisgICAgdm9pZCBzZXRBY2NlcHQoY29u
c3QgU3RyaW5nJiBhY2NlcHQpIHsgbV9hY2NlcHQgPSBhY2NlcHQ7IH0KKworICAgIGJvb2wgZXJy
b3JPY2N1cnJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JPY2N1cnJlZDsgfQorICAgIHZvaWQg
c2V0RXJyb3JPY2N1cnJlZChib29sIGIpIHsgbV9lcnJvck9jY3VycmVkID0gYjsgfQorCisgICAg
Ym9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzOyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNv
ZGVkRGF0YSgpIHsgfQorCisgICAgdm9pZCBzZXRDYWNoZWRSZXNvdXJjZUxvYWRlcihDYWNoZWRS
ZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpIHsgbV9jYWNoZWRSZXNvdXJjZUxv
YWRlciA9IGNhY2hlZFJlc291cmNlTG9hZGVyOyB9CisgICAgCisgICAgYm9vbCBpc1ByZWxvYWRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbG9hZENvdW50OyB9CisgICAgdm9pZCBpbmNyZWFzZVBy
ZWxvYWRDb3VudCgpIHsgKyttX3ByZWxvYWRDb3VudDsgfQorICAgIHZvaWQgZGVjcmVhc2VQcmVs
b2FkQ291bnQoKSB7IEFTU0VSVChtX3ByZWxvYWRDb3VudCk7IC0tbV9wcmVsb2FkQ291bnQ7IH0K
KyAgICAKKyAgICB2b2lkIHJlZ2lzdGVySGFuZGxlKENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSog
aCk7CisgICAgdm9pZCB1bnJlZ2lzdGVySGFuZGxlKENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSog
aCk7CisgICAgCisgICAgYm9vbCBjYW5Vc2VDYWNoZVZhbGlkYXRvcigpIGNvbnN0OworICAgIGJv
b2wgbXVzdFJldmFsaWRhdGUoQ2FjaGVQb2xpY3kpIGNvbnN0OworICAgIGJvb2wgaXNDYWNoZVZh
bGlkYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7IH0KKyAgICBD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2VUb1JldmFsaWRhdGUoKSBjb25zdCB7IHJldHVybiBtX3Jl
c291cmNlVG9SZXZhbGlkYXRlOyB9CisgICAgCisgICAgYm9vbCBpc1B1cmdlYWJsZSgpIGNvbnN0
OworICAgIGJvb2wgd2FzUHVyZ2VkKCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhpcyBpcyB1c2Vk
IGJ5IHRoZSBhcmNoaXZlIG1hY2hpbmVyeSB0byBnZXQgYXQgYSBwdXJnZWQgcmVzb3VyY2Ugd2l0
aG91dAorICAgIC8vIHRyaWdnZXJpbmcgYSBsb2FkLiBXZSBzaG91bGQgbWFrZSBpdCBwcm90ZWN0
ZWQgYWdhaW4gaWYgd2UgY2FuIGZpbmQgYQorICAgIC8vIGJldHRlciB3YXkgdG8gaGFuZGxlIHRo
ZSBhcmNoaXZlIGNhc2UuCisgICAgYm9vbCBtYWtlUHVyZ2VhYmxlKGJvb2wgcHVyZ2VhYmxlKTsK
KworcHJvdGVjdGVkOgorICAgIHZvaWQgc2V0RW5jb2RlZFNpemUodW5zaWduZWQpOworICAgIHZv
aWQgc2V0RGVjb2RlZFNpemUodW5zaWduZWQpOworICAgIHZvaWQgZGlkQWNjZXNzRGVjb2RlZERh
dGEoZG91YmxlIHRpbWVTdGFtcCk7CisKKyAgICBib29sIGlzU2FmZVRvTWFrZVB1cmdlYWJsZSgp
IGNvbnN0OworICAgIAorICAgIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj4g
bV9jbGllbnRzOworCisgICAgU3RyaW5nIG1fdXJsOworICAgIFN0cmluZyBtX2FjY2VwdDsKKyAg
ICBSZXF1ZXN0KiBtX3JlcXVlc3Q7CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7
CisgICAgZG91YmxlIG1fcmVzcG9uc2VUaW1lc3RhbXA7CisKKyAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBtX2RhdGE7CisgICAgT3duUHRyPFB1cmdlYWJsZUJ1ZmZlcj4gbV9wdXJnZWFibGVEYXRh
OworCitwcml2YXRlOgorICAgIHZvaWQgYWRkQ2xpZW50VG9TZXQoQ2FjaGVkUmVzb3VyY2VDbGll
bnQqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvLyBU
aGVzZSBhcmUgY2FsbGVkIGJ5IHRoZSBmcmllbmRseSBDYWNoZSBvbmx5CisgICAgdm9pZCBzZXRS
ZXNvdXJjZVRvUmV2YWxpZGF0ZShDYWNoZWRSZXNvdXJjZSopOworICAgIHZvaWQgc3dpdGNoQ2xp
ZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpOworICAgIHZvaWQgY2xlYXJSZXNvdXJjZVRvUmV2
YWxpZGF0ZSgpOworICAgIHZvaWQgdXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbihjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpOworICAgIHZpcnR1YWwgUHVy
Z2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gUHVyZ2VEZWZhdWx0OyB9
CisKKyAgICBkb3VibGUgY3VycmVudEFnZSgpIGNvbnN0OworICAgIGRvdWJsZSBmcmVzaG5lc3NM
aWZldGltZSgpIGNvbnN0OworCisgICAgUmVmUHRyPENhY2hlZE1ldGFkYXRhPiBtX2NhY2hlZE1l
dGFkYXRhOworCisgICAgZG91YmxlIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lOyAvLyBVc2VkIGFz
IGEgInRocmFzaCBndWFyZCIgaW4gdGhlIGNhY2hlCisKKyAgICB1bnNpZ25lZCBtX2VuY29kZWRT
aXplOworICAgIHVuc2lnbmVkIG1fZGVjb2RlZFNpemU7CisgICAgdW5zaWduZWQgbV9hY2Nlc3ND
b3VudDsKKyAgICB1bnNpZ25lZCBtX2hhbmRsZUNvdW50OworICAgIHVuc2lnbmVkIG1fcHJlbG9h
ZENvdW50OworCisgICAgdW5zaWduZWQgbV9wcmVsb2FkUmVzdWx0IDogMjsgLy8gUHJlbG9hZFJl
c3VsdAorCisgICAgYm9vbCBtX2luTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0IDogMTsKKyAgICBi
b29sIG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllciA6IDE7CisgICAgYm9vbCBtX3NlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3MgOiAxOworCisgICAgYm9vbCBtX2Vycm9yT2NjdXJyZWQgOiAx
OworICAgIGJvb2wgbV9pbkNhY2hlIDogMTsKKyAgICBib29sIG1fbG9hZGluZyA6IDE7CisKKyAg
ICB1bnNpZ25lZCBtX3R5cGUgOiAzOyAvLyBUeXBlCisgICAgdW5zaWduZWQgbV9zdGF0dXMgOiAy
OyAvLyBTdGF0dXMKKworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIG1fZGVsZXRlZDsKKyAgICB1
bnNpZ25lZCBtX2xydUluZGV4OworI2VuZGlmCisKKyAgICBDYWNoZWRSZXNvdXJjZSogbV9uZXh0
SW5BbGxSZXNvdXJjZXNMaXN0OworICAgIENhY2hlZFJlc291cmNlKiBtX3ByZXZJbkFsbFJlc291
cmNlc0xpc3Q7CisgICAgCisgICAgQ2FjaGVkUmVzb3VyY2UqIG1fbmV4dEluTGl2ZVJlc291cmNl
c0xpc3Q7CisgICAgQ2FjaGVkUmVzb3VyY2UqIG1fcHJldkluTGl2ZVJlc291cmNlc0xpc3Q7CisK
KyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogbV9jYWNoZWRSZXNvdXJjZUxvYWRlcjsgLy8gb25s
eSBub24tMCBmb3IgcmVzb3VyY2VzIHRoYXQgYXJlIG5vdCBpbiB0aGUgY2FjaGUKKyAgICAKKyAg
ICAvLyBJZiB0aGlzIGZpZWxkIGlzIG5vbi1udWxsIHdlIGFyZSB1c2luZyB0aGUgcmVzb3VyY2Ug
YXMgYSBwcm94eSBmb3IgY2hlY2tpbmcgd2hldGhlciBhbiBleGlzdGluZyByZXNvdXJjZSBpcyBz
dGlsbCB1cCB0byBkYXRlCisgICAgLy8gdXNpbmcgSFRUUCBJZi1Nb2RpZmllZC1TaW5jZS9JZi1O
b25lLU1hdGNoIGhlYWRlcnMuIElmIHRoZSByZXNwb25zZSBpcyAzMDQgYWxsIGNsaWVudHMgb2Yg
dGhpcyByZXNvdXJjZSBhcmUgbW92ZWQKKyAgICAvLyB0byB0byBiZSBjbGllbnRzIG9mIG1fcmVz
b3VyY2VUb1JldmFsaWRhdGUgYW5kIHRoZSByZXNvdXJjZSBpcyBkZWxldGVkLiBJZiBub3QsIHRo
ZSBmaWVsZCBpcyB6ZXJvZWQgYW5kIHRoaXMKKyAgICAvLyByZXNvdXJjZXMgYmVjb21lcyBub3Jt
YWwgcmVzb3VyY2UgbG9hZC4KKyAgICBDYWNoZWRSZXNvdXJjZSogbV9yZXNvdXJjZVRvUmV2YWxp
ZGF0ZTsKKworICAgIC8vIElmIHRoaXMgZmllbGQgaXMgbm9uLW51bGwsIHRoZSByZXNvdXJjZSBo
YXMgYSBwcm94eSBmb3IgY2hlY2tpbmcgd2hldGhlciBpdCBpcyBzdGlsbCB1cCB0byBkYXRlIChz
ZWUgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSkuCisgICAgQ2FjaGVkUmVzb3VyY2UqIG1fcHJveHlS
ZXNvdXJjZTsKKworICAgIC8vIFRoZXNlIGhhbmRsZXMgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQg
dG8gcG9pbnQgdG8gdGhlIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUgaW4gY2FzZSB3ZSBnZXQgMzA0
IHJlc3BvbnNlLgorICAgIEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKj4gbV9oYW5k
bGVzVG9SZXZhbGlkYXRlOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaAkocmV2aXNpb24gNzE0OTIpCShmcm9tIFdl
YkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlQ2xpZW50Lmg6NzE0OTIpCisrKyBXZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1w
aS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxl
ckBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRl
cyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVl
dHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNo
ZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VDbGllbnRf
aAorI2RlZmluZSBDYWNoZWRSZXNvdXJjZUNsaWVudF9oCisKKyNpbmNsdWRlIDx3dGYvRmFzdEFs
bG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworICAgIGNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7CisgICAgY2xhc3MgQ2FjaGVkRm9u
dDsKKyAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKKyAgICBjbGFzcyBDYWNoZWRJbWFnZTsKKyAg
ICBjbGFzcyBJbWFnZTsKKyAgICBjbGFzcyBJbnRSZWN0OworICAgIGNsYXNzIEtVUkw7CisKKyAg
ICAvKioKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKgorICAgICAqIGEgY2xpZW50IHdobyB3YW50
cyB0byBsb2FkIHN0eWxlc2hlZXRzLCBpbWFnZXMgb3Igc2NyaXB0cyBmcm9tIHRoZSB3ZWIgaGFz
IHRvCisgICAgICogaW5oZXJpdCBmcm9tIHRoaXMgY2xhc3MgYW5kIG92ZXJsb2FkIG9uZSBvZiB0
aGUgMyBmdW5jdGlvbnMKKyAgICAgKgorICAgICAqLworICAgIGNsYXNzIENhY2hlZFJlc291cmNl
Q2xpZW50IDogcHVibGljIEZhc3RBbGxvY0Jhc2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAg
ICB2aXJ0dWFsIH5DYWNoZWRSZXNvdXJjZUNsaWVudCgpIHsgfQorCisgICAgICAgIC8vIENhbGxl
ZCB3aGVuZXZlciBhIGZyYW1lIG9mIGFuIGltYWdlIGNoYW5nZXMsIGVpdGhlciBiZWNhdXNlIHdl
IGdvdCBtb3JlIGRhdGEgZnJvbSB0aGUgbmV0d29yayBvcgorICAgICAgICAvLyBiZWNhdXNlIHdl
IGFyZSBhbmltYXRpbmcuIElmIG5vdCBudWxsLCB0aGUgSW50UmVjdCBpcyB0aGUgY2hhbmdlZCBy
ZWN0IG9mIHRoZSBpbWFnZS4KKyAgICAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChDYWNo
ZWRJbWFnZSosIGNvbnN0IEludFJlY3QqID0gMCkgeyB9OworICAgICAgICAKKyAgICAgICAgLy8g
Q2FsbGVkIHRvIGZpbmQgb3V0IGlmIHRoaXMgY2xpZW50IHdhbnRzIHRvIGFjdHVhbGx5IGRpc3Bs
YXkgdGhlIGltYWdlLiAgVXNlZCB0byB0ZWxsIHdoZW4gd2UKKyAgICAgICAgLy8gY2FuIGhhbHQg
YW5pbWF0aW9uLiAgQ29udGVudCBub2RlcyB0aGF0IGhvbGQgaW1hZ2UgcmVmcyBmb3IgZXhhbXBs
ZSB3b3VsZCBub3QgcmVuZGVyIHRoZSBpbWFnZSwKKyAgICAgICAgLy8gYnV0IFJlbmRlckltYWdl
cyB3b3VsZCAoYXNzdW1pbmcgdGhleSBoYXZlIHZpc2liaWxpdHk6IHZpc2libGUgYW5kIHRoZWly
IHJlbmRlciB0cmVlIGlzbid0IGhpZGRlbgorICAgICAgICAvLyBlLmcuLCBpbiB0aGUgYi9mIGNh
Y2hlIG9yIGluIGEgYmFja2dyb3VuZCB0YWIpLgorICAgICAgICB2aXJ0dWFsIGJvb2wgd2lsbFJl
bmRlckltYWdlKENhY2hlZEltYWdlKikgeyByZXR1cm4gZmFsc2U7IH0KKworICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIC8qIGhyZWYgKi8sIGNvbnN0
IEtVUkwmIC8qIGJhc2VVUkwgKi8sIGNvbnN0IFN0cmluZyYgLyogY2hhcnNldCAqLywgY29uc3Qg
Q2FjaGVkQ1NTU3R5bGVTaGVldCopIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0WFNMU3R5
bGVTaGVldChjb25zdCBTdHJpbmcmIC8qIGhyZWYgKi8sIGNvbnN0IEtVUkwmIC8qIGJhc2VVUkwg
Ki8sIGNvbnN0IFN0cmluZyYgLyogc2hlZXQgKi8pIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQg
Zm9udExvYWRlZChDYWNoZWRGb250Kikge307CisgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlG
aW5pc2hlZChDYWNoZWRSZXNvdXJjZSopIHsgfQorICAgIH07CisKK30KKworI2VuZGlmCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxr
ZXIuY3BwCShyZXZpc2lvbiA3MTQ5MikJKGZyb20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRXYWxrZXIuY3BwOjcxNDkyKQorKysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VDbGllbnRXYWxrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcu
ZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQorICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcp
CisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFs
aXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAorICAg
IHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmpl
Y3RzLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
Q2xpZW50V2Fsa2VyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2FjaGVkUmVzb3VyY2VD
bGllbnRXYWxrZXI6OkNhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyKGNvbnN0IEhhc2hDb3VudGVk
U2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj4mIHNldCkKKyAgICA6IG1fY2xpZW50U2V0KHNldCks
IG1fY2xpZW50VmVjdG9yKHNldC5zaXplKCkpLCBtX2luZGV4KDApCit7CisgICAgdHlwZWRlZiBI
YXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+Ojpjb25zdF9pdGVyYXRvciBJdGVy
YXRvcjsKKyAgICBJdGVyYXRvciBlbmQgPSBzZXQuZW5kKCk7CisgICAgc2l6ZV90IGNsaWVudElu
ZGV4ID0gMDsKKyAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBzZXQuYmVnaW4oKTsgY3VycmVu
dCAhPSBlbmQ7ICsrY3VycmVudCkKKyAgICAgICAgbV9jbGllbnRWZWN0b3JbY2xpZW50SW5kZXgr
K10gPSBjdXJyZW50LT5maXJzdDsKK30KKworQ2FjaGVkUmVzb3VyY2VDbGllbnQqIENhY2hlZFJl
c291cmNlQ2xpZW50V2Fsa2VyOjpuZXh0KCkKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG1fY2xpZW50
VmVjdG9yLnNpemUoKTsKKyAgICB3aGlsZSAobV9pbmRleCA8IHNpemUpIHsKKyAgICAgICAgQ2Fj
aGVkUmVzb3VyY2VDbGllbnQqIG5leHQgPSBtX2NsaWVudFZlY3RvclttX2luZGV4KytdOworICAg
ICAgICBpZiAobV9jbGllbnRTZXQuY29udGFpbnMobmV4dCkpCisgICAgICAgICAgICByZXR1cm4g
bmV4dDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworfQpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oCShyZXZpc2lvbiA3
MTQ5MikJKGZyb20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaDo3
MTQ5MikKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAg
ICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGlu
ZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRtbAorICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4g
SXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVzZSBvYmplY3RzLgorKi8KKworI2lmbmRlZiBD
YWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlcl9oCisjZGVmaW5lIENhY2hlZFJlc291cmNlQ2xpZW50
V2Fsa2VyX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQ2FjaGVkUmVz
b3VyY2VDbGllbnQ7CisKKyAgICAvLyBDYWxsIHRoaXMgIndhbGtlciIgaW5zdGVhZCBvZiBpdGVy
YXRvciBzbyBwZW9wbGUgd29uJ3QgZXhwZWN0IFF0IG9yIFNUTC1zdHlsZSBpdGVyYXRvciBpbnRl
cmZhY2UuCisgICAgLy8gSnVzdCBrZWVwIGNhbGxpbmcgbmV4dCgpIG9uIHRoaXMuIEl0J3Mgc2Fm
ZSBmcm9tIGRlbGV0aW9ucyBvZiBpdGVtcy4KKyAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVu
dFdhbGtlciB7CisgICAgcHVibGljOgorICAgICAgICBDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtl
cihjb25zdCBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVudCo+Jik7CisgICAgICAg
IENhY2hlZFJlc291cmNlQ2xpZW50KiBuZXh0KCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgY29u
c3QgSGFzaENvdW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiYgbV9jbGllbnRTZXQ7Cisg
ICAgICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUNsaWVudCo+IG1fY2xpZW50VmVjdG9yOworICAg
ICAgICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gNzE0
OTIpCShmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcDo3MTQ5MikK
KysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUhhbmRsZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGVCYXNlOjpzZXRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpIAorewor
ICAgIGlmIChyZXNvdXJjZSA9PSBtX3Jlc291cmNlKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KG1fcmVzb3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2UtPnVucmVnaXN0ZXJIYW5kbGUodGhpcyk7
CisgICAgbV9yZXNvdXJjZSA9IHJlc291cmNlOworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAg
ICBtX3Jlc291cmNlLT5yZWdpc3RlckhhbmRsZSh0aGlzKTsKK30KKworfQpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUhhbmRsZS5oCShyZXZpc2lvbiA3MTQ5MikJ
KGZyb20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaDo3MTQ5MikKKysrIFdl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBDYWNoZWRSZXNvdXJjZUhhbmRsZV9oCisjZGVmaW5lIENhY2hlZFJl
c291cmNlSGFuZGxlX2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSB7CisgICAg
cHVibGljOgorICAgICAgICB+Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKCkgeyBpZiAobV9yZXNv
dXJjZSkgbV9yZXNvdXJjZS0+dW5yZWdpc3RlckhhbmRsZSh0aGlzKTsgfQorICAgICAgICBDYWNo
ZWRSZXNvdXJjZSogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZTsgfQorICAgICAgICAK
KyAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9yZXNvdXJjZTsgfQor
ICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBs
aWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgor
ICAgICAgICAvLyBQYXJlbnRoZXNpcyBpcyBuZWVkZWQgZm9yIHdpbnNjdyBjb21waWxlciB0byBy
ZXNvbHZlIGNsYXNzIHF1YWxpZmllciBpbiB0aGlzIGNhc2UuCisgICAgICAgIHR5cGVkZWYgQ2Fj
aGVkUmVzb3VyY2UqIChDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U6OipVbnNwZWNpZmllZEJvb2xU
eXBlKTsKKyAgICAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzb3VyY2UgPyAmQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOjptX3Jlc291cmNlIDog
MDsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2Uo
KSA6IG1fcmVzb3VyY2UoMCkge30KKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlKENh
Y2hlZFJlc291cmNlKiByZXMpIHsgbV9yZXNvdXJjZSA9IHJlczsgaWYgKG1fcmVzb3VyY2UpIG1f
cmVzb3VyY2UtPnJlZ2lzdGVySGFuZGxlKHRoaXMpOyB9CisgICAgICAgIENhY2hlZFJlc291cmNl
SGFuZGxlQmFzZShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UmIG8pIDogbV9yZXNvdXJj
ZShvLm1fcmVzb3VyY2UpIHsgaWYgKG1fcmVzb3VyY2UpIG1fcmVzb3VyY2UtPnJlZ2lzdGVySGFu
ZGxlKHRoaXMpOyB9CisKKyAgICAgICAgdm9pZCBzZXRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSop
OworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZUJh
c2UmIG9wZXJhdG9yPShjb25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UmKSB7IHJldHVybiAq
dGhpczsgfSAKKyAgICAgICAgCisgICAgICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRSZXNvdXJjZTsK
KworICAgICAgICBDYWNoZWRSZXNvdXJjZSogbV9yZXNvdXJjZTsKKyAgICB9OworICAgICAgICAK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgUj4gY2xhc3MgQ2FjaGVkUmVzb3VyY2VIYW5kbGUgOiBwdWJs
aWMgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlIHsKKyAgICBwdWJsaWM6IAorICAgICAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZSgpIHsgfQorICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZShSKiBy
ZXMpOworICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZShjb25zdCBDYWNoZWRSZXNvdXJjZUhh
bmRsZTxSPiYgbykgOiBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UobykgeyB9CisKKyAgICAgICAg
UiogZ2V0KCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSKj4oQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGVCYXNlOjpnZXQoKSk7IH0KKyAgICAgICAgUiogb3BlcmF0b3ItPigpIGNvbnN0IHsg
cmV0dXJuIGdldCgpOyB9CisgICAgICAgICAgICAgICAKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VI
YW5kbGUmIG9wZXJhdG9yPShSKiByZXMpIHsgc2V0UmVzb3VyY2UocmVzKTsgcmV0dXJuICp0aGlz
OyB9IAorICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZSYgb3BlcmF0b3I9KGNvbnN0IENhY2hl
ZFJlc291cmNlSGFuZGxlJiBvKSB7IHNldFJlc291cmNlKG8uZ2V0KCkpOyByZXR1cm4gKnRoaXM7
IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlQmFz
ZSYgbykgY29uc3QgeyByZXR1cm4gZ2V0KCkgPT0gby5nZXQoKTsgfQorICAgICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlJiBvKSBjb25zdCB7IHJldHVy
biBnZXQoKSAhPSBvLmdldCgpOyB9CisgICAgfTsKKworICAgIC8vIERvbid0IGlubGluZSBmb3Ig
d2luc2N3IGNvbXBpbGVyIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIGFnZ3Jlc3NpdmVseSByZXNv
bHZpbmcKKyAgICAvLyB0aGUgYmFzZSBjbGFzcyBvZiBSKiB3aGVuIENhY2hlZFJlc291cmNlSGFu
ZGxlcjxUPihSKikgaXMgaW5saW5lZC4gIFRoZSBidWcgaXMKKyAgICAvLyByZXBvcnRlZCBhdDog
aHR0cHM6Ly94ZGFidWcwMDEuZXh0Lm5va2lhLmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9
OTgxMi4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgUj4KKyNpZiAhQ09NUElMRVIoV0lOU0NXKQorICAg
IGlubGluZQorI2VuZGlmCisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Uj46OkNhY2hlZFJlc291
cmNlSGFuZGxlKFIqIHJlcykgOiBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UocmVzKSAKKyAgICB7
CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBSUj4gYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlPFI+JiBoLCBjb25zdCBSUiogcmVzKSAK
KyAgICB7IAorICAgICAgICByZXR1cm4gaC5nZXQoKSA9PSByZXM7IAorICAgIH0KKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgUlI+IGJvb2wgb3BlcmF0b3I9PShjb25zdCBSUiogcmVzLCBj
b25zdCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxSPiYgaCkgCisgICAgeyAKKyAgICAgICAgcmV0dXJu
IGguZ2V0KCkgPT0gcmVzOyAKKyAgICB9CisgICAgdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFJS
PiBib29sIG9wZXJhdG9yIT0oY29uc3QgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Uj4mIGgsIGNvbnN0
IFJSKiByZXMpIAorICAgIHsgCisgICAgICAgIHJldHVybiBoLmdldCgpICE9IHJlczsgCisgICAg
fQorICAgIHRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBSUj4gYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFJSKiByZXMsIGNvbnN0IENhY2hlZFJlc291cmNlSGFuZGxlPFI+JiBoKSAKKyAgICB7IAorICAg
ICAgICByZXR1cm4gaC5nZXQoKSAhPSByZXM7IAorICAgIH0KK30KKworI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lv
biA3MTQ5MikJKGZyb20gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOjcx
NDkyKQorKysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDk4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5
OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAw
MSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIg
V2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZv
ciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRzIGFuZCBodG1sCisgICAgcGFnZXMgZnJvbSB0
aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKwor
I2luY2x1ZGUgImxvYWRlci5oIgorI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAiQ2FjaGVk
Q1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNhY2hlZEZvbnQuaCIKKyNpbmNsdWRlICJDYWNo
ZWRJbWFnZS5oIgorI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNhY2hlZFhT
TFN0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIlBpbmdMb2FkZXIuaCIKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGUuaD4KKworI2RlZmluZSBQUkVMT0FEX0RFQlVHIDAKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Q2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoRG9jdW1lbnQqIGRvYykKKyAgICA6IG1fY2FjaGUoY2FjaGUoKSkKKyAgICAsIG1fZG9jKGRv
YykKKyAgICAsIG1fcmVxdWVzdENvdW50KDApCisgICAgLCBtX2F1dG9Mb2FkSW1hZ2VzKHRydWUp
CisgICAgLCBtX2xvYWRJblByb2dyZXNzKGZhbHNlKQorICAgICwgbV9hbGxvd1N0YWxlUmVzb3Vy
Y2VzKGZhbHNlKQoreworICAgIG1fY2FjaGUtPmFkZENhY2hlZFJlc291cmNlTG9hZGVyKHRoaXMp
OworfQorCitDYWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9hZGVyKCkKK3sK
KyAgICBpZiAobV9yZXF1ZXN0Q291bnQpCisgICAgICAgIG1fY2FjaGUtPmxvYWRlcigpLT5jYW5j
ZWxSZXF1ZXN0cyh0aGlzKTsKKworICAgIGNsZWFyUHJlbG9hZHMoKTsKKyAgICBEb2N1bWVudFJl
c291cmNlTWFwOjppdGVyYXRvciBlbmQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOworICAg
IGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3Vy
Y2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+c2V0Q2Fj
aGVkUmVzb3VyY2VMb2FkZXIoMCk7CisgICAgbV9jYWNoZS0+cmVtb3ZlQ2FjaGVkUmVzb3VyY2VM
b2FkZXIodGhpcyk7CisKKyAgICAvLyBNYWtlIHN1cmUgbm8gcmVxdWVzdHMgc3RpbGwgcG9pbnQg
dG8gdGhpcyBDYWNoZWRSZXNvdXJjZUxvYWRlcgorICAgIEFTU0VSVChtX3JlcXVlc3RDb3VudCA9
PSAwKTsKK30KKworRnJhbWUqIENhY2hlZFJlc291cmNlTG9hZGVyOjpmcmFtZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZG9jLT5mcmFtZSgpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9h
ZGVyOjpjaGVja0ZvclJlbG9hZChjb25zdCBLVVJMJiBmdWxsVVJMKQoreworICAgIGlmIChtX2Fs
bG93U3RhbGVSZXNvdXJjZXMpCisgICAgICAgIHJldHVybjsgLy8gRG9uJ3QgcmVsb2FkIHJlc291
cmNlcyB3aGlsZSBwYXN0aW5nCisKKyAgICBpZiAoZnVsbFVSTC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBpZiAobV9yZWxvYWRlZFVSTHMuY29udGFpbnMoZnVsbFVSTC5z
dHJpbmcoKSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBDYWNoZWRSZXNvdXJjZSogZXhp
c3RpbmcgPSBjYWNoZSgpLT5yZXNvdXJjZUZvclVSTChmdWxsVVJMLnN0cmluZygpKTsKKyAgICBp
ZiAoIWV4aXN0aW5nIHx8IGV4aXN0aW5nLT5pc1ByZWxvYWRlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBzd2l0Y2ggKGNhY2hlUG9saWN5KCkpIHsKKyAgICBjYXNlIENhY2hlUG9saWN5VmVy
aWZ5OgorICAgICAgICBpZiAoIWV4aXN0aW5nLT5tdXN0UmV2YWxpZGF0ZShDYWNoZVBvbGljeVZl
cmlmeSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhY2hlKCktPnJldmFsaWRhdGVS
ZXNvdXJjZShleGlzdGluZywgdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FjaGVQ
b2xpY3lDYWNoZToKKyAgICAgICAgaWYgKCFleGlzdGluZy0+bXVzdFJldmFsaWRhdGUoQ2FjaGVQ
b2xpY3lDYWNoZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhY2hlKCktPnJldmFs
aWRhdGVSZXNvdXJjZShleGlzdGluZywgdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q2FjaGVQb2xpY3lSZWxvYWQ6CisgICAgICAgIGNhY2hlKCktPnJlbW92ZShleGlzdGluZyk7ICAg
ICAgICAKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDYWNoZVBvbGljeVJldmFsaWRhdGU6Cisg
ICAgICAgIGNhY2hlKCktPnJldmFsaWRhdGVSZXNvdXJjZShleGlzdGluZywgdGhpcyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ2FjaGVQb2xpY3lBbGxvd1N0YWxlOgorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9yZWxvYWRlZFVSTHMuYWRkKGZ1bGxVUkwuc3RyaW5nKCkpOwor
fQorCitDYWNoZWRJbWFnZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RJbWFnZShjb25z
dCBTdHJpbmcmIHVybCkKK3sKKyAgICBpZiAoRnJhbWUqIGYgPSBmcmFtZSgpKSB7CisgICAgICAg
IFNldHRpbmdzKiBzZXR0aW5ncyA9IGYtPnNldHRpbmdzKCk7CisgICAgICAgIGlmICghZi0+bG9h
ZGVyKCktPmNsaWVudCgpLT5hbGxvd0ltYWdlcyghc2V0dGluZ3MgfHwgc2V0dGluZ3MtPmFyZUlt
YWdlc0VuYWJsZWQoKSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAoZi0+
bG9hZGVyKCktPnBhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZCgpKSB7CisgICAgICAg
ICAgICBLVVJMIGNvbXBsZXRlVVJMID0gbV9kb2MtPmNvbXBsZXRlVVJMKHVybCk7CisgICAgICAg
ICAgICBpZiAoY29tcGxldGVVUkwuaXNWYWxpZCgpICYmIGNhblJlcXVlc3QoQ2FjaGVkUmVzb3Vy
Y2U6OkltYWdlUmVzb3VyY2UsIGNvbXBsZXRlVVJMKSkKKyAgICAgICAgICAgICAgICBQaW5nTG9h
ZGVyOjpsb2FkSW1hZ2UoZiwgY29tcGxldGVVUkwpOworICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgQ2FjaGVkSW1hZ2UqIHJlc291cmNlID0gc3RhdGljX2Nhc3Q8
Q2FjaGVkSW1hZ2UqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3Vy
Y2UsIHVybCwgU3RyaW5nKCkpKTsKKyAgICBpZiAoYXV0b0xvYWRJbWFnZXMoKSAmJiByZXNvdXJj
ZSAmJiByZXNvdXJjZS0+c3RpbGxOZWVkc0xvYWQoKSkgeworICAgICAgICByZXNvdXJjZS0+c2V0
TG9hZGluZyh0cnVlKTsKKyAgICAgICAgY2FjaGUoKS0+bG9hZGVyKCktPmxvYWQodGhpcywgcmVz
b3VyY2UsIHRydWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzb3VyY2U7Cit9CisKK0NhY2hlZEZv
bnQqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0Rm9udChjb25zdCBTdHJpbmcmIHVybCkK
K3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkRm9udCo+KHJlcXVlc3RSZXNvdXJjZShD
YWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlLCB1cmwsIFN0cmluZygpKSk7Cit9CisKK0NhY2hl
ZENTU1N0eWxlU2hlZXQqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0Q1NTU3R5bGVTaGVl
dChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDYWNoZWRDU1NTdHlsZVNoZWV0Kj4ocmVxdWVzdFJlc291cmNlKENhY2hl
ZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCB1cmwsIGNoYXJzZXQpKTsKK30KKworQ2FjaGVkQ1NT
U3R5bGVTaGVldCogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVl
dChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQoreworICAgIHJldHVy
biBjYWNoZSgpLT5yZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQodGhpcywgdXJsLCBjaGFyc2V0KTsK
K30KKworQ2FjaGVkU2NyaXB0KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFNjcmlwdChj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQoreworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDYWNoZWRTY3JpcHQqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6
OlNjcmlwdCwgdXJsLCBjaGFyc2V0KSk7Cit9CisKKyNpZiBFTkFCTEUoWFNMVCkKK0NhY2hlZFhT
TFN0eWxlU2hlZXQqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0WFNMU3R5bGVTaGVldChj
b25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkWFNMU3R5
bGVTaGVldCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldCwg
dXJsLCBTdHJpbmcoKSkpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkK
K0NhY2hlZFJlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdExpbmtQcmVmZXRj
aChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBBU1NFUlQoZnJhbWUoKSk7CisgICAgcmV0dXJu
IHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoLCB1cmwsIFN0cmlu
ZygpKTsKK30KKyNlbmRpZgorCitib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjpjYW5SZXF1ZXN0
KENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICAvLyBT
b21lIHR5cGVzIG9mIHJlc291cmNlcyBjYW4gYmUgbG9hZGVkIG9ubHkgZnJvbSB0aGUgc2FtZSBv
cmlnaW4uICBPdGhlcgorICAgIC8vIHR5cGVzIG9mIHJlc291cmNlcywgbGlrZSBJbWFnZXMsIFNj
cmlwdHMsIGFuZCBDU1MsIGNhbiBiZSBsb2FkZWQgZnJvbQorICAgIC8vIGFueSBVUkwuCisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToK
KyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgorICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OlNjcmlwdDoKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6
CisjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlu
a1ByZWZldGNoOgorI2VuZGlmCisgICAgICAgIC8vIFRoZXNlIHR5cGVzIG9mIHJlc291cmNlcyBj
YW4gYmUgbG9hZGVkIGZyb20gYW55IG9yaWdpbi4KKyAgICAgICAgLy8gRklYTUU6IEFyZSB3ZSBz
dXJlIGFib3V0IENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U/CisgICAgICAgIGJyZWFrOwor
I2lmIEVOQUJMRShYU0xUKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6
CisgICAgICAgIGlmICghbV9kb2MtPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QodXJsKSkg
eworICAgICAgICAgICAgcHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKHVybCk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgLy8gR2l2ZW4gdGhhdCB0aGUgbG9hZCBpcyBhbGxvd2VkIGJ5IHRoZSBzYW1l
LW9yaWdpbiBwb2xpY3ksIHdlIHNob3VsZAorICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhlIGxvYWQg
cGFzc2VzIHRoZSBtaXhlZC1jb250ZW50IHBvbGljeS4KKyAgICAvLworICAgIC8vIE5vdGU6IEN1
cnJlbnRseSwgd2UgYWx3YXlzIGFsbG93IG1peGVkIGNvbnRlbnQsIGJ1dCB3ZSBnZW5lcmF0ZSBh
CisgICAgLy8gICAgICAgY2FsbGJhY2sgdG8gdGhlIEZyYW1lTG9hZGVyQ2xpZW50IGluIGNhc2Ug
dGhlIGVtYmVkZGVyIHdhbnRzIHRvCisgICAgLy8gICAgICAgdXBkYXRlIGFueSBzZWN1cml0eSBp
bmRpY2F0b3JzLgorICAgIC8vIAorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OlNjcmlwdDoKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpYU0xTdHlsZVNoZWV0OgorI2VuZGlmCisgICAgICAgIC8vIFRoZXNlIHJlc291cmNlIGNh
biBpbmplY3Qgc2NyaXB0IGludG8gdGhlIGN1cnJlbnQgZG9jdW1lbnQuCisgICAgICAgIGlmIChG
cmFtZSogZiA9IGZyYW1lKCkpCisgICAgICAgICAgICBmLT5sb2FkZXIoKS0+Y2hlY2tJZlJ1bklu
c2VjdXJlQ29udGVudChtX2RvYy0+c2VjdXJpdHlPcmlnaW4oKSwgdXJsKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZv
bnRSZXNvdXJjZTogeworICAgICAgICAvLyBUaGVzZSByZXNvdXJjZXMgY2FuIGNvcnJ1cHQgb25s
eSB0aGUgZnJhbWUncyBwaXhlbHMuCisgICAgICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkpIHsK
KyAgICAgICAgICAgIEZyYW1lKiB0b3AgPSBmLT50cmVlKCktPnRvcCgpOworICAgICAgICAgICAg
dG9wLT5sb2FkZXIoKS0+Y2hlY2tJZkRpc3BsYXlJbnNlY3VyZUNvbnRlbnQodG9wLT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpLCB1cmwpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKKyAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpMaW5rUHJlZmV0Y2g6CisgICAgICAgIC8vIFByZWZldGNoIGNhbm5vdCBhZmZlY3QgdGhlIGN1
cnJlbnQgZG9jdW1lbnQuCisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAv
LyBGSVhNRTogQ29uc2lkZXIgbGV0dGluZyB0aGUgZW1iZWRkZXIgYmxvY2sgbWl4ZWQgY29udGVu
dCBsb2Fkcy4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ2FjaGVkUmVzb3VyY2UqIENhY2hlZFJl
c291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwg
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCBpc1ByZWxvYWQp
Cit7CisgICAgS1VSTCBmdWxsVVJMID0gbV9kb2MtPmNvbXBsZXRlVVJMKHVybCk7CisKKyAgICBp
ZiAoIWZ1bGxVUkwuaXNWYWxpZCgpIHx8ICFjYW5SZXF1ZXN0KHR5cGUsIGZ1bGxVUkwpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGlmIChjYWNoZSgpLT5kaXNhYmxlZCgpKSB7CisgICAgICAg
IERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5m
aW5kKGZ1bGxVUkwuc3RyaW5nKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGl0ICE9IG1fZG9j
dW1lbnRSZXNvdXJjZXMuZW5kKCkpIHsKKyAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldENhY2hl
ZFJlc291cmNlTG9hZGVyKDApOworICAgICAgICAgICAgbV9kb2N1bWVudFJlc291cmNlcy5yZW1v
dmUoaXQpOworICAgICAgICB9CisgICAgfQorCisgICAgY2hlY2tGb3JSZWxvYWQoZnVsbFVSTCk7
CisKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBjYWNoZSgpLT5yZXF1ZXN0UmVzb3Vy
Y2UodGhpcywgdHlwZSwgZnVsbFVSTCwgY2hhcnNldCwgaXNQcmVsb2FkKTsKKyAgICBpZiAocmVz
b3VyY2UpIHsKKyAgICAgICAgLy8gQ2hlY2sgZmluYWwgVVJMIG9mIHJlc291cmNlIHRvIGNhdGNo
IHJlZGlyZWN0cy4KKyAgICAgICAgLy8gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE5NjM+LgorICAgICAgICBpZiAoZnVsbFVSTCAhPSByZXNvdXJjZS0+dXJs
KCkgJiYgIWNhblJlcXVlc3QodHlwZSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHJlc291cmNlLT51
cmwoKSkpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgbV9kb2N1bWVudFJlc291
cmNlcy5zZXQocmVzb3VyY2UtPnVybCgpLCByZXNvdXJjZSk7CisgICAgICAgIGNoZWNrQ2FjaGVP
YmplY3RTdGF0dXMocmVzb3VyY2UpOworICAgIH0KKyAgICByZXR1cm4gcmVzb3VyY2U7Cit9CisK
K3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnByaW50QWNjZXNzRGVuaWVkTWVzc2FnZShjb25z
dCBLVVJMJiB1cmwpIGNvbnN0Cit7CisgICAgaWYgKHVybC5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTZXR0aW5n
cyogc2V0dGluZ3MgPSBmcmFtZSgpLT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MgfHwg
c2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgU3RyaW5nIG1lc3NhZ2UgPSBtX2RvYy0+dXJsKCkuaXNOdWxsKCkgPworICAgICAgICBtYWtl
U3RyaW5nKCJVbnNhZmUgYXR0ZW1wdCB0byBsb2FkIFVSTCAiLCB1cmwuc3RyaW5nKCksICcuJykg
OgorICAgICAgICBtYWtlU3RyaW5nKCJVbnNhZmUgYXR0ZW1wdCB0byBsb2FkIFVSTCAiLCB1cmwu
c3RyaW5nKCksICIgZnJvbSBmcmFtZSB3aXRoIFVSTCAiLCBtX2RvYy0+dXJsKCkuc3RyaW5nKCks
ICIuIERvbWFpbnMsIHByb3RvY29scyBhbmQgcG9ydHMgbXVzdCBtYXRjaC5cbiIpOworCisgICAg
Ly8gRklYTUU6IHByb3ZpZGUgYSByZWFsIGxpbmUgbnVtYmVyIGFuZCBzb3VyY2UgVVJMLgorICAg
IGZyYW1lKCktPmRvbVdpbmRvdygpLT5jb25zb2xlKCktPmFkZE1lc3NhZ2UoT3RoZXJNZXNzYWdl
U291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIDEsIFN0
cmluZygpKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJbWFn
ZXMoYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSA9PSBtX2F1dG9Mb2FkSW1hZ2VzKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2F1dG9Mb2FkSW1hZ2VzID0gZW5hYmxlOworCisgICAg
aWYgKCFtX2F1dG9Mb2FkSW1hZ2VzKQorICAgICAgICByZXR1cm47CisKKyAgICBEb2N1bWVudFJl
c291cmNlTWFwOjppdGVyYXRvciBlbmQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVuZCgpOworICAg
IGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3Vy
Y2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBpZiAocmVzb3VyY2UtPnR5cGUo
KSA9PSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSkgeworICAgICAgICAgICAgQ2FjaGVk
SW1hZ2UqIGltYWdlID0gY29uc3RfY2FzdDxDYWNoZWRJbWFnZSo+KHN0YXRpY19jYXN0PGNvbnN0
IENhY2hlZEltYWdlKj4ocmVzb3VyY2UpKTsKKworICAgICAgICAgICAgaWYgKGltYWdlLT5zdGls
bE5lZWRzTG9hZCgpKQorICAgICAgICAgICAgICAgIGNhY2hlKCktPmxvYWRlcigpLT5sb2FkKHRo
aXMsIGltYWdlLCB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworQ2FjaGVQb2xpY3kgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OmNhY2hlUG9saWN5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJh
bWUoKSA/IGZyYW1lKCktPmxvYWRlcigpLT5zdWJyZXNvdXJjZUNhY2hlUG9saWN5KCkgOiBDYWNo
ZVBvbGljeVZlcmlmeTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVtb3ZlQ2Fj
aGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKSBjb25zdAoreworI2lmbmRlZiBO
REVCVUcKKyAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9jdW1lbnRS
ZXNvdXJjZXMuZmluZChyZXNvdXJjZS0+dXJsKCkpOworICAgIGlmIChpdCAhPSBtX2RvY3VtZW50
UmVzb3VyY2VzLmVuZCgpKQorICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5nZXQoKSA9PSByZXNv
dXJjZSk7CisjZW5kaWYKKyAgICBtX2RvY3VtZW50UmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZS0+
dXJsKCkpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpzZXRMb2FkSW5Qcm9ncmVz
cyhib29sIGxvYWQpCit7CisgICAgbV9sb2FkSW5Qcm9ncmVzcyA9IGxvYWQ7CisgICAgaWYgKCFs
b2FkICYmIGZyYW1lKCkpCisgICAgICAgIGZyYW1lKCktPmxvYWRlcigpLT5sb2FkRG9uZSgpOwor
fQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpjaGVja0NhY2hlT2JqZWN0U3RhdHVzKENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZSkKK3sKKyAgICAvLyBSZXR1cm4gZnJvbSB0aGUgZnVuY3Rp
b24gZm9yIG9iamVjdHMgdGhhdCB3ZSBkaWRuJ3QgbG9hZCBmcm9tIHRoZSBjYWNoZSBvciBpZiB3
ZSBkb24ndCBoYXZlIGEgZnJhbWUuCisgICAgaWYgKCFyZXNvdXJjZSB8fCAhZnJhbWUoKSB8fCBy
ZXNvdXJjZS0+c3RhdHVzKCkgIT0gQ2FjaGVkUmVzb3VyY2U6OkNhY2hlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gRklYTUU6IElmIHRoZSBXZWJLaXQgY2xpZW50IGNoYW5nZXMgb3IgY2Fu
Y2VscyB0aGUgcmVxdWVzdCwgV2ViQ29yZSBkb2VzIG5vdCByZXNwZWN0IHRoaXMgYW5kIGNvbnRp
bnVlcyB0aGUgbG9hZC4KKyAgICBmcmFtZSgpLT5sb2FkZXIoKS0+bG9hZGVkUmVzb3VyY2VGcm9t
TWVtb3J5Q2FjaGUocmVzb3VyY2UpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpp
bmNyZW1lbnRSZXF1ZXN0Q291bnQoY29uc3QgQ2FjaGVkUmVzb3VyY2UqIHJlcykKK3sKKyAgICBp
ZiAocmVzLT5pc1ByZWZldGNoKCkpCisgICAgICAgIHJldHVybjsKKworICAgICsrbV9yZXF1ZXN0
Q291bnQ7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlY3JlbWVudFJlcXVlc3RD
b3VudChjb25zdCBDYWNoZWRSZXNvdXJjZSogcmVzKQoreworICAgIGlmIChyZXMtPmlzUHJlZmV0
Y2goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLS1tX3JlcXVlc3RDb3VudDsKKyAgICBBU1NF
UlQobV9yZXF1ZXN0Q291bnQgPiAtMSk7Cit9CisKK2ludCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
cmVxdWVzdENvdW50KCkKK3sKKyAgICBpZiAobG9hZEluUHJvZ3Jlc3MoKSkKKyAgICAgICAgIHJl
dHVybiBtX3JlcXVlc3RDb3VudCArIDE7CisgICAgcmV0dXJuIG1fcmVxdWVzdENvdW50OworfQor
ICAgIAordm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6
VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29s
IHJlZmVyZW5jZWRGcm9tQm9keSkKK3sKKyAgICBib29sIGhhc1JlbmRlcmluZyA9IG1fZG9jLT5i
b2R5KCkgJiYgbV9kb2MtPmJvZHkoKS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIWhhc1JlbmRlcmlu
ZyAmJiAocmVmZXJlbmNlZEZyb21Cb2R5IHx8IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdl
UmVzb3VyY2UpKSB7CisgICAgICAgIC8vIERvbid0IHByZWxvYWQgaW1hZ2VzIG9yIGJvZHkgcmVz
b3VyY2VzIGJlZm9yZSB3ZSBoYXZlIHNvbWV0aGluZyB0byBkcmF3LiBUaGlzIHByZXZlbnRzCisg
ICAgICAgIC8vIHByZWxvYWRzIGZyb20gYm9keSBkZWxheWluZyBmaXJzdCBkaXNwbGF5IHdoZW4g
YmFuZHdpZHRoIGlzIGxpbWl0ZWQuCisgICAgICAgIFBlbmRpbmdQcmVsb2FkIHBlbmRpbmdQcmVs
b2FkID0geyB0eXBlLCB1cmwsIGNoYXJzZXQgfTsKKyAgICAgICAgbV9wZW5kaW5nUHJlbG9hZHMu
YXBwZW5kKHBlbmRpbmdQcmVsb2FkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZXF1
ZXN0UHJlbG9hZCh0eXBlLCB1cmwsIGNoYXJzZXQpOworfQorCit2b2lkIENhY2hlZFJlc291cmNl
TG9hZGVyOjpjaGVja0ZvclBlbmRpbmdQcmVsb2FkcygpIAoreworICAgIHVuc2lnbmVkIGNvdW50
ID0gbV9wZW5kaW5nUHJlbG9hZHMuc2l6ZSgpOworICAgIGlmICghY291bnQgfHwgIW1fZG9jLT5i
b2R5KCkgfHwgIW1fZG9jLT5ib2R5KCktPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBQZW5kaW5n
UHJlbG9hZCYgcHJlbG9hZCA9IG1fcGVuZGluZ1ByZWxvYWRzW2ldOworICAgICAgICAvLyBEb24n
dCByZXF1ZXN0IHByZWxvYWQgaWYgdGhlIHJlc291cmNlIGFscmVhZHkgbG9hZGVkIG5vcm1hbGx5
ICh0aGlzIHdpbGwgcmVzdWx0IGluIGRvdWJsZSBsb2FkIGlmIHRoZSBwYWdlIGlzIGJlaW5nIHJl
bG9hZGVkIHdpdGggY2FjaGVkIHJlc3VsdHMgaWdub3JlZCkuCisgICAgICAgIGlmICghY2FjaGVk
UmVzb3VyY2UobV9kb2MtPmNvbXBsZXRlVVJMKHByZWxvYWQubV91cmwpKSkKKyAgICAgICAgICAg
IHJlcXVlc3RQcmVsb2FkKHByZWxvYWQubV90eXBlLCBwcmVsb2FkLm1fdXJsLCBwcmVsb2FkLm1f
Y2hhcnNldCk7CisgICAgfQorICAgIG1fcGVuZGluZ1ByZWxvYWRzLmNsZWFyKCk7Cit9CisKK3Zv
aWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291cmNlOjpU
eXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCit7Cisg
ICAgU3RyaW5nIGVuY29kaW5nOworICAgIGlmICh0eXBlID09IENhY2hlZFJlc291cmNlOjpTY3Jp
cHQgfHwgdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCkKKyAgICAgICAgZW5j
b2RpbmcgPSBjaGFyc2V0LmlzRW1wdHkoKSA/IG1fZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+d3Jp
dGVyKCktPmVuY29kaW5nKCkgOiBjaGFyc2V0OworCisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlID0gcmVxdWVzdFJlc291cmNlKHR5cGUsIHVybCwgZW5jb2RpbmcsIHRydWUpOworICAgIGlm
ICghcmVzb3VyY2UgfHwgKG1fcHJlbG9hZHMgJiYgbV9wcmVsb2Fkcy0+Y29udGFpbnMocmVzb3Vy
Y2UpKSkKKyAgICAgICAgcmV0dXJuOworICAgIHJlc291cmNlLT5pbmNyZWFzZVByZWxvYWRDb3Vu
dCgpOworCisgICAgaWYgKCFtX3ByZWxvYWRzKQorICAgICAgICBtX3ByZWxvYWRzID0gYWRvcHRQ
dHIobmV3IExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4pOworICAgIG1fcHJlbG9hZHMtPmFk
ZChyZXNvdXJjZSk7CisKKyNpZiBQUkVMT0FEX0RFQlVHCisgICAgcHJpbnRmKCJQUkVMT0FESU5H
ICVzXG4iLCAgcmVzb3VyY2UtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7CisjZW5kaWYKK30KKwor
dm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2xlYXJQcmVsb2FkcygpCit7CisjaWYgUFJFTE9B
RF9ERUJVRworICAgIHByaW50UHJlbG9hZFN0YXRzKCk7CisjZW5kaWYKKyAgICBpZiAoIW1fcHJl
bG9hZHMpCisgICAgICAgIHJldHVybjsKKworICAgIExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNl
Kj46Oml0ZXJhdG9yIGVuZCA9IG1fcHJlbG9hZHMtPmVuZCgpOworICAgIGZvciAoTGlzdEhhc2hT
ZXQ8Q2FjaGVkUmVzb3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX3ByZWxvYWRzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlcyA9ICppdDsKKyAg
ICAgICAgcmVzLT5kZWNyZWFzZVByZWxvYWRDb3VudCgpOworICAgICAgICBpZiAocmVzLT5jYW5E
ZWxldGUoKSAmJiAhcmVzLT5pbkNhY2hlKCkpCisgICAgICAgICAgICBkZWxldGUgcmVzOworICAg
ICAgICBlbHNlIGlmIChyZXMtPnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJl
bG9hZE5vdFJlZmVyZW5jZWQpCisgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUocmVzKTsKKyAg
ICB9CisgICAgbV9wcmVsb2Fkcy5jbGVhcigpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlTG9h
ZGVyOjpjbGVhclBlbmRpbmdQcmVsb2FkcygpCit7CisgICAgbV9wZW5kaW5nUHJlbG9hZHMuY2xl
YXIoKTsKK30KKworI2lmIFBSRUxPQURfREVCVUcKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OnByaW50UHJlbG9hZFN0YXRzKCkKK3sKKyAgICB1bnNpZ25lZCBzY3JpcHRzID0gMDsKKyAgICB1
bnNpZ25lZCBzY3JpcHRNaXNzZXMgPSAwOworICAgIHVuc2lnbmVkIHN0eWxlc2hlZXRzID0gMDsK
KyAgICB1bnNpZ25lZCBzdHlsZXNoZWV0TWlzc2VzID0gMDsKKyAgICB1bnNpZ25lZCBpbWFnZXMg
PSAwOworICAgIHVuc2lnbmVkIGltYWdlTWlzc2VzID0gMDsKKyAgICBMaXN0SGFzaFNldDxDYWNo
ZWRSZXNvdXJjZSo+OjppdGVyYXRvciBlbmQgPSBtX3ByZWxvYWRzLmVuZCgpOworICAgIGZvciAo
TGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX3ByZWxvYWRzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzID0g
Kml0OworICAgICAgICBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6
OlByZWxvYWROb3RSZWZlcmVuY2VkKQorICAgICAgICAgICAgcHJpbnRmKCIhISBVTlJFRkVSRU5D
RUQgUFJFTE9BRCAlc1xuIiwgcmVzLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICBl
bHNlIGlmIChyZXMtPnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJl
ZmVyZW5jZWRXaGlsZUNvbXBsZXRlKQorICAgICAgICAgICAgcHJpbnRmKCJISVQgQ09NUExFVEUg
UFJFTE9BRCAlc1xuIiwgcmVzLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICBlbHNl
IGlmIChyZXMtPnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVy
ZW5jZWRXaGlsZUxvYWRpbmcpCisgICAgICAgICAgICBwcmludGYoIkhJVCBMT0FESU5HIFBSRUxP
QUQgJXNcbiIsIHJlcy0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChyZXMtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0KSB7CisgICAgICAgICAg
ICBzY3JpcHRzKys7CisgICAgICAgICAgICBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPCBDYWNo
ZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmcpCisgICAgICAgICAgICAg
ICAgc2NyaXB0TWlzc2VzKys7CisgICAgICAgIH0gZWxzZSBpZiAocmVzLT50eXBlKCkgPT0gQ2Fj
aGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpIHsKKyAgICAgICAgICAgIHN0eWxlc2hlZXRzKys7
CisgICAgICAgICAgICBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPCBDYWNoZWRSZXNvdXJjZTo6
UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmcpCisgICAgICAgICAgICAgICAgc3R5bGVzaGVl
dE1pc3NlcysrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW1hZ2VzKys7CisgICAg
ICAgICAgICBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPCBDYWNoZWRSZXNvdXJjZTo6UHJlbG9h
ZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmcpCisgICAgICAgICAgICAgICAgaW1hZ2VNaXNzZXMrKzsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHJlcy0+ZXJyb3JPY2N1cnJlZCgpKQor
ICAgICAgICAgICAgY2FjaGUoKS0+cmVtb3ZlKHJlcyk7CisgICAgICAgIAorICAgICAgICByZXMt
PmRlY3JlYXNlUHJlbG9hZENvdW50KCk7CisgICAgfQorICAgIG1fcHJlbG9hZHMuY2xlYXIoKTsK
KyAgICAKKyAgICBpZiAoc2NyaXB0cykKKyAgICAgICAgcHJpbnRmKCJTQ1JJUFRTOiAlZCAoJWQg
aGl0cywgaGl0IHJhdGUgJWQlJSlcbiIsIHNjcmlwdHMsIHNjcmlwdHMgLSBzY3JpcHRNaXNzZXMs
IChzY3JpcHRzIC0gc2NyaXB0TWlzc2VzKSAqIDEwMCAvIHNjcmlwdHMpOworICAgIGlmIChzdHls
ZXNoZWV0cykKKyAgICAgICAgcHJpbnRmKCJTVFlMRVNIRUVUUzogJWQgKCVkIGhpdHMsIGhpdCBy
YXRlICVkJSUpXG4iLCBzdHlsZXNoZWV0cywgc3R5bGVzaGVldHMgLSBzdHlsZXNoZWV0TWlzc2Vz
LCAoc3R5bGVzaGVldHMgLSBzdHlsZXNoZWV0TWlzc2VzKSAqIDEwMCAvIHN0eWxlc2hlZXRzKTsK
KyAgICBpZiAoaW1hZ2VzKQorICAgICAgICBwcmludGYoIklNQUdFUzogICVkICglZCBoaXRzLCBo
aXQgcmF0ZSAlZCUlKVxuIiwgaW1hZ2VzLCBpbWFnZXMgLSBpbWFnZU1pc3NlcywgKGltYWdlcyAt
IGltYWdlTWlzc2VzKSAqIDEwMCAvIGltYWdlcyk7Cit9CisjZW5kaWYKKyAgICAKK30KSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24g
NzE0OTIpCShmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlTG9hZGVyLmg6NzE0OTIp
CisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJz
IEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2gg
TW9iaWxlIEluYy4gaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBw
cm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHls
ZSBzaGVldHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9y
eSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2FjaGVkUmVzb3VyY2VM
b2FkZXJfaAorI2RlZmluZSBDYWNoZWRSZXNvdXJjZUxvYWRlcl9oCisKKyNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVk
ZSAiQ2FjaGVQb2xpY3kuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hl
ZENTU1N0eWxlU2hlZXQ7CitjbGFzcyBDYWNoZWRGb250OworY2xhc3MgQ2FjaGVkSW1hZ2U7Citj
bGFzcyBDYWNoZWRTY3JpcHQ7CitjbGFzcyBDYWNoZWRYU0xTdHlsZVNoZWV0OworY2xhc3MgRG9j
dW1lbnQ7CitjbGFzcyBGcmFtZTsKK2NsYXNzIEltYWdlTG9hZGVyOworY2xhc3MgS1VSTDsKKwor
Ly8gVGhlIENhY2hlZFJlc291cmNlTG9hZGVyIG1hbmFnZXMgdGhlIGxvYWRpbmcgb2Ygc2NyaXB0
cy9pbWFnZXMvc3R5bGVzaGVldHMgZm9yIGEgc2luZ2xlIGRvY3VtZW50LgorY2xhc3MgQ2FjaGVk
UmVzb3VyY2VMb2FkZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworZnJpZW5kIGNsYXNzIENhY2hl
OworZnJpZW5kIGNsYXNzIEltYWdlTG9hZGVyOworCitwdWJsaWM6CisgICAgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoRG9jdW1lbnQqKTsKKyAgICB+Q2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKworICAg
IENhY2hlZEltYWdlKiByZXF1ZXN0SW1hZ2UoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIENhY2hl
ZENTU1N0eWxlU2hlZXQqIHJlcXVlc3RDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTdHJpbmcmIGNoYXJzZXQpOworICAgIENhY2hlZENTU1N0eWxlU2hlZXQqIHJlcXVlc3RV
c2VyQ1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0
KTsKKyAgICBDYWNoZWRTY3JpcHQqIHJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgY2hhcnNldCk7CisgICAgQ2FjaGVkRm9udCogcmVxdWVzdEZvbnQoY29uc3Qg
U3RyaW5nJiB1cmwpOworCisjaWYgRU5BQkxFKFhTTFQpCisgICAgQ2FjaGVkWFNMU3R5bGVTaGVl
dCogcmVxdWVzdFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwpOworI2VuZGlmCisjaWYg
RU5BQkxFKExJTktfUFJFRkVUQ0gpCisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RMaW5rUHJl
ZmV0Y2goY29uc3QgU3RyaW5nICZ1cmwpOworI2VuZGlmCisKKyAgICAvLyBMb2dzIGFuIGFjY2Vz
cyBkZW5pZWQgbWVzc2FnZSB0byB0aGUgY29uc29sZSBmb3IgdGhlIHNwZWNpZmllZCBVUkwuCisg
ICAgdm9pZCBwcmludEFjY2Vzc0RlbmllZE1lc3NhZ2UoY29uc3QgS1VSTCYgdXJsKSBjb25zdDsK
KworICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCkg
Y29uc3QgeyByZXR1cm4gbV9kb2N1bWVudFJlc291cmNlcy5nZXQodXJsKS5nZXQoKTsgfQorICAg
IAorICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hl
ZFJlc291cmNlPiA+IERvY3VtZW50UmVzb3VyY2VNYXA7CisgICAgY29uc3QgRG9jdW1lbnRSZXNv
dXJjZU1hcCYgYWxsQ2FjaGVkUmVzb3VyY2VzKCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudFJl
c291cmNlczsgfQorCisgICAgYm9vbCBhdXRvTG9hZEltYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1f
YXV0b0xvYWRJbWFnZXM7IH0KKyAgICB2b2lkIHNldEF1dG9Mb2FkSW1hZ2VzKGJvb2wpOworICAg
IAorICAgIENhY2hlUG9saWN5IGNhY2hlUG9saWN5KCkgY29uc3Q7CisgICAgCisgICAgRnJhbWUq
IGZyYW1lKCkgY29uc3Q7IC8vIENhbiBiZSBOVUxMCisgICAgRG9jdW1lbnQqIGRvYygpIGNvbnN0
IHsgcmV0dXJuIG1fZG9jOyB9CisKKyAgICB2b2lkIHJlbW92ZUNhY2hlZFJlc291cmNlKENhY2hl
ZFJlc291cmNlKikgY29uc3Q7CisKKyAgICB2b2lkIHNldExvYWRJblByb2dyZXNzKGJvb2wpOwor
ICAgIGJvb2wgbG9hZEluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX2xvYWRJblByb2dyZXNz
OyB9CisgICAgCisgICAgdm9pZCBzZXRBbGxvd1N0YWxlUmVzb3VyY2VzKGJvb2wgYWxsb3dTdGFs
ZVJlc291cmNlcykgeyBtX2FsbG93U3RhbGVSZXNvdXJjZXMgPSBhbGxvd1N0YWxlUmVzb3VyY2Vz
OyB9CisKKyAgICB2b2lkIGluY3JlbWVudFJlcXVlc3RDb3VudChjb25zdCBDYWNoZWRSZXNvdXJj
ZSopOworICAgIHZvaWQgZGVjcmVtZW50UmVxdWVzdENvdW50KGNvbnN0IENhY2hlZFJlc291cmNl
Kik7CisgICAgaW50IHJlcXVlc3RDb3VudCgpOworICAgIAorICAgIHZvaWQgY2xlYXJQcmVsb2Fk
cygpOworICAgIHZvaWQgY2xlYXJQZW5kaW5nUHJlbG9hZHMoKTsKKyAgICB2b2lkIHByZWxvYWQo
Q2FjaGVkUmVzb3VyY2U6OlR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNo
YXJzZXQsIGJvb2wgcmVmZXJlbmNlZEZyb21Cb2R5KTsKKyAgICB2b2lkIGNoZWNrRm9yUGVuZGlu
Z1ByZWxvYWRzKCk7CisgICAgdm9pZCBwcmludFByZWxvYWRTdGF0cygpOworICAgIAorcHJpdmF0
ZToKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpU
eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29sIGlzUHJl
bG9hZCA9IGZhbHNlKTsKKyAgICB2b2lkIHJlcXVlc3RQcmVsb2FkKENhY2hlZFJlc291cmNlOjpU
eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKworICAgIHZv
aWQgY2hlY2tGb3JSZWxvYWQoY29uc3QgS1VSTCYpOworICAgIHZvaWQgY2hlY2tDYWNoZU9iamVj
dFN0YXR1cyhDYWNoZWRSZXNvdXJjZSopOworICAgIGJvb2wgY2FuUmVxdWVzdChDYWNoZWRSZXNv
dXJjZTo6VHlwZSwgY29uc3QgS1VSTCYpOworICAgIAorICAgIENhY2hlKiBtX2NhY2hlOworICAg
IEhhc2hTZXQ8U3RyaW5nPiBtX3JlbG9hZGVkVVJMczsKKyAgICBtdXRhYmxlIERvY3VtZW50UmVz
b3VyY2VNYXAgbV9kb2N1bWVudFJlc291cmNlczsKKyAgICBEb2N1bWVudCogbV9kb2M7CisgICAg
CisgICAgaW50IG1fcmVxdWVzdENvdW50OworICAgIAorICAgIE93blB0cjxMaXN0SGFzaFNldDxD
YWNoZWRSZXNvdXJjZSo+ID4gbV9wcmVsb2FkczsKKyAgICBzdHJ1Y3QgUGVuZGluZ1ByZWxvYWQg
eworICAgICAgICBDYWNoZWRSZXNvdXJjZTo6VHlwZSBtX3R5cGU7CisgICAgICAgIFN0cmluZyBt
X3VybDsKKyAgICAgICAgU3RyaW5nIG1fY2hhcnNldDsKKyAgICB9OworICAgIFZlY3RvcjxQZW5k
aW5nUHJlbG9hZD4gbV9wZW5kaW5nUHJlbG9hZHM7CisgICAgCisgICAgLy8yOSBiaXRzIGxlZnQK
KyAgICBib29sIG1fYXV0b0xvYWRJbWFnZXMgOiAxOworICAgIGJvb2wgbV9sb2FkSW5Qcm9ncmVz
cyA6IDE7CisgICAgYm9vbCBtX2FsbG93U3RhbGVSZXNvdXJjZXMgOiAxOworfTsKKworfQorCisj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcAkocmV2aXNpb24g
NzE0OTIpCShmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHA6NzE0OTIpCisrKyBX
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTIzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9s
bEBtcGktaGQubXBnLmRlKQorICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFz
dGlhbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0u
d2VpbmlnQGdtYWlsLmNvbSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgIFRoaXMgY2xhc3Mg
cHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5
bGUgc2hlZXRzIGFuZCBodG1sCisgICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1v
cnkgY2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisKKyNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRX
YWxrZXIuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0NhY2hlZFNjcmlwdDo6Q2FjaGVkU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIGNoYXJzZXQpCisgICAgOiBDYWNoZWRSZXNvdXJjZSh1cmwsIFNjcmlwdCkKKyAg
ICAsIG1fZGVjb2RlcihUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoImFwcGxpY2F0aW9uL2ph
dmFzY3JpcHQiLCBjaGFyc2V0KSkKKyAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyKHRo
aXMsICZDYWNoZWRTY3JpcHQ6OmRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKQoreworICAg
IC8vIEl0J3MgamF2YXNjcmlwdCB3ZSB3YW50LgorICAgIC8vIEJ1dCBzb21lIHdlYnNpdGVzIHRo
aW5rIHRoZWlyIHNjcmlwdHMgYXJlIDxzb21lIHdyb25nIG1pbWV0eXBlIGhlcmU+CisgICAgLy8g
YW5kIHJlZnVzZSB0byBzZXJ2ZSB0aGVtIGlmIHdlIG9ubHkgYWNjZXB0IGFwcGxpY2F0aW9uL3gt
amF2YXNjcmlwdC4KKyAgICBzZXRBY2NlcHQoIiovKiIpOworfQorCitDYWNoZWRTY3JpcHQ6On5D
YWNoZWRTY3JpcHQoKQoreworfQorCit2b2lkIENhY2hlZFNjcmlwdDo6YWxsQ2xpZW50c1JlbW92
ZWQoKQoreworICAgIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
K30KKwordm9pZCBDYWNoZWRTY3JpcHQ6OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgY2hzKQor
eworICAgIG1fZGVjb2Rlci0+c2V0RW5jb2RpbmcoY2hzLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpF
bmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsKK30KKworU3RyaW5nIENhY2hlZFNjcmlwdDo6ZW5jb2Rp
bmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpOwor
fQorCitjb25zdCBTdHJpbmcmIENhY2hlZFNjcmlwdDo6c2NyaXB0KCkKK3sKKyAgICBBU1NFUlQo
IWlzUHVyZ2VhYmxlKCkpOworCisgICAgaWYgKCFtX3NjcmlwdCAmJiBtX2RhdGEpIHsKKyAgICAg
ICAgbV9zY3JpcHQgPSBtX2RlY29kZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgZW5jb2RlZFNp
emUoKSk7CisgICAgICAgIG1fc2NyaXB0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKKyAgICAgICAg
c2V0RGVjb2RlZFNpemUobV9zY3JpcHQubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICB9
CisgICAgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIuc3RhcnRPbmVTaG90KDApOworICAgIHJl
dHVybiBtX3NjcmlwdDsKK30KKwordm9pZCBDYWNoZWRTY3JpcHQ6OmRhdGEoUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIGlmICghYWxs
RGF0YVJlY2VpdmVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEgPSBkYXRhOworICAg
IHNldEVuY29kZWRTaXplKG1fZGF0YS5nZXQoKSA/IG1fZGF0YS0+c2l6ZSgpIDogMCk7CisgICAg
c2V0TG9hZGluZyhmYWxzZSk7CisgICAgY2hlY2tOb3RpZnkoKTsKK30KKwordm9pZCBDYWNoZWRT
Y3JpcHQ6OmNoZWNrTm90aWZ5KCkKK3sKKyAgICBpZiAoaXNMb2FkaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyIHcobV9jbGllbnRzKTsKKyAg
ICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGMgPSB3Lm5leHQoKSkKKyAgICAgICAgYy0+
bm90aWZ5RmluaXNoZWQodGhpcyk7Cit9CisKK3ZvaWQgQ2FjaGVkU2NyaXB0OjplcnJvcigpCit7
CisgICAgc2V0TG9hZGluZyhmYWxzZSk7CisgICAgc2V0RXJyb3JPY2N1cnJlZCh0cnVlKTsKKyAg
ICBjaGVja05vdGlmeSgpOworfQorCit2b2lkIENhY2hlZFNjcmlwdDo6ZGVzdHJveURlY29kZWRE
YXRhKCkKK3sKKyAgICBtX3NjcmlwdCA9IFN0cmluZygpOworICAgIHNldERlY29kZWRTaXplKDAp
OworICAgIGlmICghQ2FjaGU6OnNob3VsZE1ha2VSZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24o
KSAmJiBpc1NhZmVUb01ha2VQdXJnZWFibGUoKSkKKyAgICAgICAgbWFrZVB1cmdlYWJsZSh0cnVl
KTsKK30KKwordm9pZCBDYWNoZWRTY3JpcHQ6OmRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVk
KFRpbWVyPENhY2hlZFNjcmlwdD4qKQoreworICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRTY3JpcHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3Jp
cHQuaAkocmV2aXNpb24gNzE0OTIpCShmcm9tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5o
OjcxNDkyKQorKysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBL
bm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBX
ZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAg
VGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcg
aW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0
IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2Fj
aGVkU2NyaXB0X2gKKyNkZWZpbmUgQ2FjaGVkU2NyaXB0X2gKKworI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisg
ICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CisgICAgY2xhc3MgVGV4dFJlc291cmNlRGVj
b2RlcjsKKworICAgIGNsYXNzIENhY2hlZFNjcmlwdCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7
CisgICAgcHVibGljOgorICAgICAgICBDYWNoZWRTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgY2hhcnNldCk7CisgICAgICAgIHZpcnR1YWwgfkNhY2hlZFNjcmlwdCgpOwor
CisgICAgICAgIGNvbnN0IFN0cmluZyYgc2NyaXB0KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lk
IGFsbENsaWVudHNSZW1vdmVkKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEVuY29kaW5n
KGNvbnN0IFN0cmluZyYpOworICAgICAgICB2aXJ0dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZXJyb3IoKTsK
KworICAgICAgICB2b2lkIGNoZWNrTm90aWZ5KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRl
c3Ryb3lEZWNvZGVkRGF0YSgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBkZWNvZGVk
RGF0YURlbGV0aW9uVGltZXJGaXJlZChUaW1lcjxDYWNoZWRTY3JpcHQ+Kik7CisgICAgICAgIHZp
cnR1YWwgUHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gUHVyZ2VM
YXN0OyB9CisKKyAgICAgICAgU3RyaW5nIG1fc2NyaXB0OworICAgICAgICBSZWZQdHI8VGV4dFJl
c291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAgICAgICBUaW1lcjxDYWNoZWRTY3JpcHQ+IG1f
ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyOworICAgIH07Cit9CisKKyNlbmRpZgpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDcx
NDkyKQkoZnJvbSBXZWJDb3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcDo3MTQ5MikK
KysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMg
S25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBC
YXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBX
ZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAg
VGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcg
aW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0
IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDYWNoZWRYU0xTdHlsZVNoZWV0LmgiCisKKyNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50V2Fs
a2VyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNl
RGVjb2Rlci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisjaWYgRU5BQkxFKFhTTFQpCisKK0NhY2hlZFhTTFN0eWxlU2hlZXQ6OkNhY2hlZFhTTFN0
eWxlU2hlZXQoY29uc3QgU3RyaW5nICZ1cmwpCisgICAgOiBDYWNoZWRSZXNvdXJjZSh1cmwsIFhT
TFN0eWxlU2hlZXQpCisgICAgLCBtX2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRl
KCJ0ZXh0L3hzbCIpKQoreworICAgIC8vIEl0J3MgWE1MIHdlIHdhbnQuCisgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGFjY2VwdCBtb3JlIGdlbmVyYWwgeG1sIGZvcm1hdHMgKi8qK3htbCwgaW1h
Z2Uvc3ZnK3htbCBmb3IgZXhhbXBsZS4KKyAgICBzZXRBY2NlcHQoInRleHQveG1sLCBhcHBsaWNh
dGlvbi94bWwsIGFwcGxpY2F0aW9uL3hodG1sK3htbCwgdGV4dC94c2wsIGFwcGxpY2F0aW9uL3Jz
cyt4bWwsIGFwcGxpY2F0aW9uL2F0b20reG1sIik7Cit9CisKK3ZvaWQgQ2FjaGVkWFNMU3R5bGVT
aGVldDo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjKQoreyAgCisgICAgaWYg
KCFpc0xvYWRpbmcoKSkKKyAgICAgICAgYy0+c2V0WFNMU3R5bGVTaGVldChtX3VybCwgbV9yZXNw
b25zZS51cmwoKSwgbV9zaGVldCk7Cit9CisKK3ZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6c2V0
RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBjaHMpCit7CisgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGlu
ZyhjaHMsIFRleHRSZXNvdXJjZURlY29kZXI6OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOworfQor
CitTdHJpbmcgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZW5jb2RpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpOworfQorCit2b2lkIENhY2hlZFhTTFN0
eWxlU2hlZXQ6OmRhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQoreworICAgIGlmICghYWxsRGF0YVJlY2VpdmVkKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2RhdGEgPSBkYXRhOyAgICAgCisgICAgc2V0RW5jb2RlZFNpemUobV9kYXRhLmdl
dCgpID8gbV9kYXRhLT5zaXplKCkgOiAwKTsKKyAgICBpZiAobV9kYXRhLmdldCgpKSB7CisgICAg
ICAgIG1fc2hlZXQgPSBTdHJpbmcobV9kZWNvZGVyLT5kZWNvZGUobV9kYXRhLT5kYXRhKCksIGVu
Y29kZWRTaXplKCkpKTsKKyAgICAgICAgbV9zaGVldCArPSBtX2RlY29kZXItPmZsdXNoKCk7Cisg
ICAgfQorICAgIHNldExvYWRpbmcoZmFsc2UpOworICAgIGNoZWNrTm90aWZ5KCk7Cit9CisKK3Zv
aWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6Y2hlY2tOb3RpZnkoKQoreworICAgIGlmIChpc0xvYWRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENhY2hlZFJlc291cmNlQ2xpZW50V2Fs
a2VyIHcobV9jbGllbnRzKTsKKyAgICB3aGlsZSAoQ2FjaGVkUmVzb3VyY2VDbGllbnQgKmMgPSB3
Lm5leHQoKSkKKyAgICAgICAgYy0+c2V0WFNMU3R5bGVTaGVldChtX3VybCwgbV9yZXNwb25zZS51
cmwoKSwgbV9zaGVldCk7Cit9CisKK3ZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZXJyb3IoKQor
eworICAgIHNldExvYWRpbmcoZmFsc2UpOworICAgIHNldEVycm9yT2NjdXJyZWQodHJ1ZSk7Cisg
ICAgY2hlY2tOb3RpZnkoKTsKK30KKworI2VuZGlmCisKK30KSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDcxNDkyKQkoZnJvbSBXZWJD
b3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0Lmg6NzE0OTIpCisrKyBXZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
MiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhk
Lm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtk
ZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdA
Z21haWwuY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRl
cyBhbGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVl
dHMgYW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNo
ZSBmb3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2FjaGVkWFNMU3R5bGVTaGVldF9o
CisjZGVmaW5lIENhY2hlZFhTTFN0eWxlU2hlZXRfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2UuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
ICAgIGNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOworICAgIGNsYXNzIFRleHRSZXNvdXJjZURl
Y29kZXI7CisKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICBjbGFzcyBDYWNoZWRYU0xTdHlsZVNoZWV0
IDogcHVibGljIENhY2hlZFJlc291cmNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIENhY2hlZFhT
TFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwpOworCisgICAgICAgIGNvbnN0IFN0cmluZyYg
c2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0OyB9CisgICAgICAgIAorICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CisgICAgICAgIAor
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJik7CisgICAgICAg
IHZpcnR1YWwgU3RyaW5nIGVuY29kaW5nKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
YXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOworICAgICAgICAKKyAgICAgICAgdm9pZCBj
aGVja05vdGlmeSgpOworICAgICAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFN0cmluZyBt
X3NoZWV0OworICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwor
ICAgIH07CisKKyNlbmRpZgorCit9CisKKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>