<?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>87354</bug_id>
          
          <creation_ts>2012-05-24 01:22:32 -0700</creation_ts>
          <short_desc>Move StyleSheetContents to a separate file</short_desc>
          <delta_ts>2012-05-24 01:53:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>japhet</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>632505</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-24 01:22:32 -0700</bug_when>
    <thetext>Yeah.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632517</commentid>
    <comment_count>1</comment_count>
      <attachid>143760</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-24 01:44:05 -0700</bug_when>
    <thetext>Created attachment 143760
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632518</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-24 01:46:49 -0700</bug_when>
    <thetext>Attachment 143760 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/css/StyleSheetContents.cpp:145:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/css/StyleSheetContents.cpp:198:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/css/StyleSheetContents.cpp:231:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 3 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632519</commentid>
    <comment_count>3</comment_count>
      <attachid>143760</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-05-24 01:47:11 -0700</bug_when>
    <thetext>Comment on attachment 143760
patch

Yay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632522</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-24 01:53:59 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/118336</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143760</attachid>
            <date>2012-05-24 01:44:05 -0700</date>
            <delta_ts>2012-05-24 01:47:11 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylesheet-split-2.patch</filename>
            <type>text/plain</type>
            <size>97557</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODMzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDEyLTA1LTI0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFN0eWxlU2hlZXRDb250
ZW50cyB0byBhIHNlcGFyYXRlIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg3MzU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW92ZSBTdHlsZVNoZWV0Q29udGVudHMgY2xhc3MgdG8gU3R5bGVTaGVl
dENvbnRlbnRzLmgvY3BwLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
R05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3Nz
L0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NHcmFtbWFyLnk6Cisg
ICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuY3BwOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIu
Y3BwOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgICogY3Nz
L0NTU1J1bGUuY3BwOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNoZWV0OjpocmVmKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTaGVldDo6YmFzZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0
Ojppc0xvYWRpbmcpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENTU1N0eWxlU2hlZXQpOgorICAgICAgICAqIGNzcy9TdHlsZVBy
b3BlcnR5U2V0LmNwcDoKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAg
ICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6IENvcGllZCBmcm9tIGNzcy9DU1NTdHlsZVNo
ZWV0LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Q29u
dGVudHMuaDogQ29waWVkIGZyb20gY3NzL0NTU1N0eWxlU2hlZXQuaC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxNSU1FVHlwZVJlZ0V4cDo6WE1MTUlNRVR5cGVSZWdFeHApOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5jcHA6CisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHA6
CisgICAgICAgICogZG9tL1N0eWxlRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MTGlu
a0VsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcDoKKwogMjAxMi0wNS0yNCAgS3Jpc3TDs2YgS29zenR5w7MgIDxra3Jpc3RvZkBp
bmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgW1F0XSBCdWlsZGZpeCBmb3IgdGhlIG1pbmltYWwg
YnVpbGQgYmVjYXVzZSB0aGUgcjExODE5NyBicm9rZSBpdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiAxMTgzMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNTI2LDYgKzUyNiw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAg
ICBjc3MvU3R5bGVSZXNvbHZlci5jcHAKICAgICBjc3MvU3R5bGVSdWxlLmNwcAogICAgIGNzcy9T
dHlsZVNoZWV0LmNwcAorICAgIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCiAgICAgY3NzL1N0
eWxlU2hlZXRMaXN0LmNwcAogICAgIGNzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1ZS5jcHAKICAgICBj
c3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCShyZXZpc2lvbiAxMTgzMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNzM0LDYgKzE3MzQsOCBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaCBcCiAJU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2hlZXQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTaGVldExpc3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3Qu
aCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMTgzMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC00OTgsNiArNDk4LDcgQEAgU09VUkNFUyAr
PSBcCiAgICAgY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIFwKICAgICBjc3MvU3R5bGVSdWxlLmNwcCBc
CiAgICAgY3NzL1N0eWxlU2hlZXQuY3BwIFwKKyAgICBjc3MvU3R5bGVTaGVldENvbnRlbnRzLmNw
cCBcCiAgICAgY3NzL1N0eWxlU2hlZXRMaXN0LmNwcCBcCiAgICAgY3NzL1dlYktpdENTU0ZpbHRl
clZhbHVlLmNwcCBcCiAgICAgY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgXApAQCAtMTY2
NCw2ICsxNjY1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgY3NzL1N0eWxlUmVzb2x2ZXIuaCBcCiAg
ICAgY3NzL1N0eWxlUnVsZS5oIFwKICAgICBjc3MvU3R5bGVTaGVldC5oIFwKKyAgICBjc3MvU3R5
bGVTaGVldENvbnRlbnRzLmggXAogICAgIGNzcy9TdHlsZVNoZWV0TGlzdC5oIFwKICAgICBjc3Mv
V2ViS2l0Q1NTRmlsdGVyVmFsdWUuaCBcCiAgICAgY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5o
IFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDExODMzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjU0Nyw2ICsyNTQ3LDggQEAKICAg
ICAgICAgICAgICdjc3MvU3R5bGVSdWxlLmgnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZVNoZWV0
LmNwcCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlU2hlZXQuaCcsCisgICAgICAgICAgICAnY3Nz
L1N0eWxlU2hlZXRDb250ZW50cy5jcHAnLAorICAgICAgICAgICAgJ2Nzcy9TdHlsZVNoZWV0Q29u
dGVudHMuaCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlU2hlZXRMaXN0LmNwcCcsCiAgICAgICAg
ICAgICAnY3NzL1N0eWxlU2hlZXRMaXN0LmgnLAogICAgICAgICAgICAgJ2Nzcy9XZWJLaXRDU1NG
aWx0ZXJWYWx1ZS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDExODMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNzI1OCw2ICszNzI1
OCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
Llxjc3NcU3R5bGVTaGVldENvbnRlbnRzLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFN0eWxlU2hlZXRDb250ZW50cy5oIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcU3R5bGVTaGVl
dExpc3QuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExODMzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjk0LDggKzI5NCw2IEBACiAJCTE0MzJFODQ5MEM1MTQ5M0YwMEIxNTAwRiAv
KiBHQ0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQzMkU4NDgwQzUxNDkzRjAwQjE1MDBGIC8qIEdDQ29udHJvbGxlci5jcHAgKi87
IH07CiAJCTE0NDlFMjRDMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0OUUyNEExMDdENEE4
NDAwQjU3OTNGIC8qIEpTQ2FsbGJhY2tEYXRhLmggKi87IH07CiAJCTE0NDlFMjg3MTA3RDREQjQw
MEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ5RTI4NjEwN0Q0REI0MDBCNTc5M0YgLyogSlNDYWxsYmFj
a0RhdGEuY3BwICovOyB9OwotCQkxNDgyRTBDNjE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25h
bExheW91dEJveEV4dGVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDgyRTBDNDE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91dEJv
eEV4dGVudC5jcHAgKi87IH07Ci0JCTE0ODJFMEM3MTU2QzM2REUwMDk2NTA2NSAvKiBGcmFjdGlv
bmFsTGF5b3V0Qm94RXh0ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDgyRTBDNTE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91dEJv
eEV4dGVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTE0NEZDRTUyMTRFQzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNFNTExNEVD
NzlCQzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRVbml0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0RkNFNUQxNEVDNzlFNzAwMEQxN0Ez
IC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDRGQ0U1ODE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExh
eW91dFNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDRGQ0ZFMDE0RUYyNTA5MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNGREUx
NEVGMjUwOTAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcCAqLzsgfTsKQEAgLTMx
Miw2ICszMTAsOCBAQAogCQkxNDc5RkFGMjEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVJ1
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3OUZB
RUExMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlSdW4uaCAqLzsgfTsKIAkJMTQ3OUZBRjMx
MDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzlGQUVCMTA5QUUzNzUwMERFRDY1NSAvKiBS
ZW5kZXJSdWJ5VGV4dC5jcHAgKi87IH07CiAJCTE0NzlGQUY0MTA5QUUzNzUwMERFRDY1NSAvKiBS
ZW5kZXJSdWJ5VGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ3OUZBRUMxMDlBRTM3NTAwREVENjU1IC8qIFJlbmRlclJ1YnlUZXh0LmggKi87IH07
CisJCTE0ODJFMEM2MTU2QzM2REUwMDk2NTA2NSAvKiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODJF
MEM0MTU2QzM2REUwMDk2NTA2NSAvKiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcCAqLzsg
fTsKKwkJMTQ4MkUwQzcxNTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODJF
MEM1MTU2QzM2REUwMDk2NTA2NSAvKiBGcmFjdGlvbmFsTGF5b3V0Qm94RXh0ZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ4QUZEQTUwQUY1
ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDhBRkRBMzBBRjU4MzYwMDA4Q0M3MDAgLyogRXhj
ZXB0aW9uSGFuZGxlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxNDhBRkRBNjBBRjU4MzYwMDA4Q0M3MDAgLyogRXhjZXB0aW9uSGFuZGxlcnMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDhBRkRB
NDBBRjU4MzYwMDA4Q0M3MDAgLyogRXhjZXB0aW9uSGFuZGxlcnMubW0gKi87IH07CiAJCTE0OTQ3
RkZEMTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5NDdGRkIxMkY4MENEMjAwQTBG
NjMxIC8qIERvY3VtZW50T3JkZXJlZE1hcC5jcHAgKi87IH07CkBAIC02MDQwLDYgKzYwNDAsOCBA
QAogCQlFNEMyNzk1OTBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzI3OTU3MENGOTc0MTkwMEU5
N0I5OCAvKiBSZW5kZXJNZWRpYS5oICovOyB9OwogCQlFNEQ2ODc3NzBFRDdBRTNEMDA2RUE5Nzgg
LyogUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0RDY4Nzc2MEVEN0FFM0QwMDZFQTk3OCAvKiBQdXJnZWFibGVCdWZm
ZXJNYWMuY3BwICovOyB9OwogCQlFNEQ2ODc3OTBFRDdBRTRGMDA2RUE5NzggLyogUHVyZ2VhYmxl
QnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NEQ2ODc3ODBFRDdBRTRGMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyLmggKi87IH07CisJCUU0
RjlFRUYyMTU2RDlGRkEwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRGOUVFRjAxNTZEODRDNDAw
RDIzRTdFIC8qIFN0eWxlU2hlZXRDb250ZW50cy5jcHAgKi87IH07CisJCUU0RjlFRUYzMTU2REEw
MDcwMEQyM0U3RSAvKiBTdHlsZVNoZWV0Q29udGVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RjlFRUYxMTU2RDg0QzQwMEQyM0U3RSAvKiBTdHls
ZVNoZWV0Q29udGVudHMuaCAqLzsgfTsKIAkJRTU1RjQ5N0ExNTFCODg4MDAwQkI2N0RCIC8qIExl
bmd0aEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNTVGNDk3OTE1MUI4ODgwMDBCQjY3REIgLyogTGVuZ3RoRnVuY3Rpb25zLmNwcCAq
LzsgfTsKIAkJRTVCQTdENjMxNTE0MzdDQTAwRkUxRTNGIC8qIExlbmd0aEZ1bmN0aW9ucy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVCQTdENjIxNTE0
MzdDQTAwRkUxRTNGIC8qIExlbmd0aEZ1bmN0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUVEMkJBODNDMDlBMjRCOTEwMDZDMEFDNCAvKiBE
b2N1bWVudE1hcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRUQyQkE4M0IwOUEyNEI5MTAwNkMwQUM0IC8qIERvY3VtZW50TWFya2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTcxODQsOCArNzE4
Niw2IEBACiAJCTE0MzJFODQ4MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdDQ29udHJvbGxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBK
U0NhbGxiYWNrRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbGxi
YWNrRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQ5RTI4NjEwN0Q0REI0
MDBCNTc5M0YgLyogSlNDYWxsYmFja0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDYWxsYmFja0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkxNDgyRTBDNDE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91dEJveEV4dGVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFjdGlvbmFsTGF5
b3V0Qm94RXh0ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQ4MkUwQzUx
NTZDMzZERTAwOTY1MDY1IC8qIEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhY3Rpb25hbExheW91dEJveEV4dGVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDRGQ0U1MTE0RUM3OUJDMDAwRDE3QTMgLyogRnJh
Y3Rpb25hbExheW91dFVuaXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJh
Y3Rpb25hbExheW91dFVuaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0RkNF
NTQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRQb2ludC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0RkNFNTgxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9u
YWxMYXlvdXRTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYWN0aW9u
YWxMYXlvdXRTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MjA0LDYgKzcy
MDQsOCBAQAogCQkxNDc5RkFFQjEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUnVieVRleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDc5RkFFQzEwOUFFMzc1MDBERUQ2NTUg
LyogUmVuZGVyUnVieVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyUnVieVRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4MTNCRjMwOUVE
Rjg4RTAwRjc1N0UxIC8qIElETFBhcnNlci5wbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5wZXJs
OyBuYW1lID0gSURMUGFyc2VyLnBtOyBwYXRoID0gc2NyaXB0cy9JRExQYXJzZXIucG07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0ODJFMEM0MTU2QzM2REUwMDk2NTA2NSAvKiBGcmFj
dGlvbmFsTGF5b3V0Qm94RXh0ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZyYWN0aW9uYWxMYXlvdXRCb3hFeHRlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxNDgyRTBDNTE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExheW91dEJv
eEV4dGVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFjdGlvbmFsTGF5
b3V0Qm94RXh0ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0OEFGREEzMEFG
NTgzNjAwMDhDQzcwMCAvKiBFeGNlcHRpb25IYW5kbGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uSGFuZGxlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTQ4QUZEQTQwQUY1ODM2MDAwOENDNzAwIC8qIEV4Y2VwdGlvbkhhbmRsZXJzLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEV4Y2VwdGlvbkhhbmRs
ZXJzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDk0N0ZGQjEyRjgwQ0QyMDBB
MEY2MzEgLyogRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERvY3VtZW50T3JkZXJlZE1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMzI1MSw2ICsxMzI1Myw4IEBACiAJCUU0QzI3OTU3MENGOTc0MTkwMEU5N0I5
OCAvKiBSZW5kZXJNZWRpYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJNZWRpYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEQ2ODc3NjBFRDdBRTNE
MDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFB1cmdlYWJsZUJ1ZmZlck1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0RDY4Nzc4MEVEN0FFNEYwMDZFQTk3OCAvKiBQdXJnZWFibGVCdWZmZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHVyZ2VhYmxlQnVmZmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RjlFRUYwMTU2RDg0QzQwMEQyM0U3RSAvKiBT
dHlsZVNoZWV0Q29udGVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3R5bGVTaGVldENvbnRlbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTRGOUVFRjExNTZEODRDNDAwRDIzRTdFIC8qIFN0eWxlU2hlZXRDb250ZW50cy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVNoZWV0Q29udGVudHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTU1RjQ5NzkxNTFCODg4MDAwQkI2N0RCIC8qIExlbmd0aEZ1
bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZW5ndGhG
dW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNUJBN0Q2MjE1MTQz
N0NBMDBGRTFFM0YgLyogTGVuZ3RoRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExlbmd0aEZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFRDJCQTgzQjA5QTI0QjkxMDA2QzBBQzQgLyogRG9jdW1lbnRNYXJrZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9jdW1lbnRNYXJrZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIwNzg1LDYgKzIwNzg5LDggQEAKIAkJCQlBOEVBODAwNTBBMTk1MTZF
MDBBOEVGNUYgLyogU3R5bGVTaGVldC5jcHAgKi8sCiAJCQkJQThFQTgwMDQwQTE5NTE2RTAwQThF
RjVGIC8qIFN0eWxlU2hlZXQuaCAqLywKIAkJCQk4NTA2NTZEQzBBQUI0NEQ5MDAyRDE1QzAgLyog
U3R5bGVTaGVldC5pZGwgKi8sCisJCQkJRTRGOUVFRjAxNTZEODRDNDAwRDIzRTdFIC8qIFN0eWxl
U2hlZXRDb250ZW50cy5jcHAgKi8sCisJCQkJRTRGOUVFRjExNTZEODRDNDAwRDIzRTdFIC8qIFN0
eWxlU2hlZXRDb250ZW50cy5oICovLAogCQkJCUE4RUE4MDAzMEExOTUxNkUwMEE4RUY1RiAvKiBT
dHlsZVNoZWV0TGlzdC5jcHAgKi8sCiAJCQkJQThFQTgwMDIwQTE5NTE2RTAwQThFRjVGIC8qIFN0
eWxlU2hlZXRMaXN0LmggKi8sCiAJCQkJODUwNjU2REYwQUFCNDU0RjAwMkQxNUMwIC8qIFN0eWxl
U2hlZXRMaXN0LmlkbCAqLywKQEAgLTI0OTMyLDYgKzI0OTM4LDcgQEAKIAkJCQlGREIwNTJFMDE1
NjFBNDJDMDBCNTAwRDYgLyogQXVkaW9TdW1taW5nSnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTM3MTk0MTk3MTU2NkIzNzIwMEEyNzZEOCAvKiBXZWJDb3JlTlNDZWxsRXh0cmFzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDgyRTBDNzE1NkMzNkRFMDA5NjUwNjUgLyogRnJhY3Rpb25hbExh
eW91dEJveEV4dGVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRGOUVFRjMxNTZEQTAwNzAwRDIz
RTdFIC8qIFN0eWxlU2hlZXRDb250ZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxQkRGMjUx
NTZDMThDNzAwMUMxMjQzIC8qIERPTUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTI3OTYwLDYgKzI3OTY3
LDcgQEAKIAkJCQkzNzE5NDE5NjE1NjZCMzcyMDBBMjc2RDggLyogV2ViQ29yZU5TQ2VsbEV4dHJh
cy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2Q0MxMTUxNTY5ODhFNDAwMTA5RTM3IC8qIExlbmd0
aEJveC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyRTBDNjE1NkMzNkRFMDA5NjUwNjUgLyog
RnJhY3Rpb25hbExheW91dEJveEV4dGVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNEY5RUVG
MjE1NkQ5RkZBMDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDMUJERjI0MTU2QzE4ODMwMDFDMTI0MyAvKiBET01FcnJvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAJKHJldmlz
aW9uIDExODMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDEyIEBACiAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJDU1NGb250RmFjZVNyY1ZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVT
aGVldC5oIgogI2luY2x1ZGUgIkNhY2hlZEZvbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUxvYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0Q29u
dGVudHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhbW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFt
bWFyLnkJKHJldmlzaW9uIDExODMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFy
LnkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxMiBAQAogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1NlbGVj
dG9yTGlzdC5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2lu
Y2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKKyNpbmNsdWRl
ICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUu
aCIKICNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAJKHJldmlz
aW9uIDExODMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcAkocmV2aXNpb24gMTE4MzM0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNsdWRlICJDU1NS
ZWZsZWN0VmFsdWUuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0
eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NUaW1p
bmdGdW5jdGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVW5pY29kZVJhbmdlVmFsdWUuaCIKICNp
bmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCkBAIC03Nyw2ICs3Niw3IEBACiAjaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0eVNldC5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIK
ICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIK
ICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAjaW5j
bHVkZSAiV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ByaW1pdGl2ZVZhbHVlLmNwcAkocmV2aXNpb24gMTE4MzM0KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBA
QAogI2luY2x1ZGUgIkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1
ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNTU1dyYXBTaGFwZXMuaCIKICNp
bmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCkBAIC0zNyw2ICszNiw3IEBACiAjaW5jbHVkZSAi
UkdCQ29sb3IuaCIKICNpbmNsdWRlICJSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIK
KyNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlw
ZS5oPgogI2luY2x1ZGUgPHd0Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmNwcAkocmV2aXNpb24gMTE4MzM0KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2
ICszNSw3IEBACiAjaW5jbHVkZSAiV2ViS2l0Q1NTUmVnaW9uUnVsZS5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiU3R5bGVT
aGVldENvbnRlbnRzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMTE4MzM0KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw4IEBA
CiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCiAjaW5jbHVkZSAi
U3R5bGVSdWxlLmgiCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSAiU3R5bGVTaGVl
dENvbnRlbnRzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzIsNDEwICs3MSwxNCBA
QCBzdGF0aWMgYm9vbCBpc0FjY2VwdGFibGVDU1NTdHlsZVNoZWV0UGFyCiB9CiAjZW5kaWYKIAot
Ly8gUm91Z2ggc2l6ZSBlc3RpbWF0ZSBmb3IgdGhlIG1lbW9yeSBjYWNoZS4KLXVuc2lnbmVkIFN0
eWxlU2hlZXRDb250ZW50czo6ZXN0aW1hdGVkU2l6ZUluQnl0ZXMoKSBjb25zdAotewotICAgIC8v
IE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IHNpemUgb2YgdGhlIHN0
cmluZ3MgaGFuZ2luZyBmcm9tIHZhcmlvdXMgb2JqZWN0cy4gCi0gICAgLy8gVGhlIGFzc3VtcHRp
b24gaXMgdGhhdCBuZWFybHkgYWxsIG9mIG9mIHRoZW0gYXJlIGF0b21pYyBhbmQgd291bGQgZXhp
c3QgYW55d2F5LgotICAgIHVuc2lnbmVkIHNpemUgPSBzaXplb2YoKnRoaXMpOwotCi0gICAgLy8g
RklYTUU6IFRoaXMgaWdub3JlcyB0aGUgY2hpbGRyZW4gb2YgbWVkaWEgYW5kIHJlZ2lvbiBydWxl
cy4KLSAgICAvLyBNb3N0IHJ1bGVzIGFyZSBTdHlsZVJ1bGVzLgotICAgIHNpemUgKz0gcnVsZUNv
dW50KCkgKiBTdHlsZVJ1bGU6OmF2ZXJhZ2VTaXplSW5CeXRlcygpOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1faW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYg
KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQgPSBtX2ltcG9ydFJ1bGVzW2ldLT5zdHlsZVNoZWV0
KCkpCi0gICAgICAgICAgICBzaXplICs9IHNoZWV0LT5lc3RpbWF0ZWRTaXplSW5CeXRlcygpOwot
ICAgIH0KLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotU3R5bGVTaGVldENvbnRlbnRzOjpTdHlsZVNo
ZWV0Q29udGVudHMoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYgb3Jp
Z2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBj
b250ZXh0KQotICAgIDogbV9vd25lclJ1bGUob3duZXJSdWxlKQotICAgICwgbV9vcmlnaW5hbFVS
TChvcmlnaW5hbFVSTCkKLSAgICAsIG1fZmluYWxVUkwoZmluYWxVUkwpCi0gICAgLCBtX2xvYWRD
b21wbGV0ZWQoZmFsc2UpCi0gICAgLCBtX2lzVXNlclN0eWxlU2hlZXQob3duZXJSdWxlICYmIG93
bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpICYmIG93bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVl
dCgpLT5pc1VzZXJTdHlsZVNoZWV0KCkpCi0gICAgLCBtX2hhc1N5bnRhY3RpY2FsbHlWYWxpZENT
U0hlYWRlcih0cnVlKQotICAgICwgbV9kaWRMb2FkRXJyb3JPY2N1cihmYWxzZSkKLSAgICAsIG1f
dXNlc1JlbVVuaXRzKGZhbHNlKQotICAgICwgbV9pc011dGFibGUoZmFsc2UpCi0gICAgLCBtX2lz
SW5NZW1vcnlDYWNoZShmYWxzZSkKLSAgICAsIG1fcGFyc2VyQ29udGV4dChjb250ZXh0KQotewot
fQotCi1TdHlsZVNoZWV0Q29udGVudHM6OlN0eWxlU2hlZXRDb250ZW50cyhjb25zdCBTdHlsZVNo
ZWV0Q29udGVudHMmIG8pCi0gICAgOiBSZWZDb3VudGVkPFN0eWxlU2hlZXRDb250ZW50cz4oKQot
ICAgICwgbV9vd25lclJ1bGUoMCkKLSAgICAsIG1fb3JpZ2luYWxVUkwoby5tX29yaWdpbmFsVVJM
KQotICAgICwgbV9maW5hbFVSTChvLm1fZmluYWxVUkwpCi0gICAgLCBtX2VuY29kaW5nRnJvbUNo
YXJzZXRSdWxlKG8ubV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZSkKLSAgICAsIG1faW1wb3J0UnVs
ZXMoby5tX2ltcG9ydFJ1bGVzLnNpemUoKSkKLSAgICAsIG1fY2hpbGRSdWxlcyhvLm1fY2hpbGRS
dWxlcy5zaXplKCkpCi0gICAgLCBtX25hbWVzcGFjZXMoby5tX25hbWVzcGFjZXMpCi0gICAgLCBt
X2xvYWRDb21wbGV0ZWQodHJ1ZSkKLSAgICAsIG1faXNVc2VyU3R5bGVTaGVldChvLm1faXNVc2Vy
U3R5bGVTaGVldCkKLSAgICAsIG1faGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKG8ubV9o
YXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIpCi0gICAgLCBtX2RpZExvYWRFcnJvck9jY3Vy
KGZhbHNlKQotICAgICwgbV91c2VzUmVtVW5pdHMoby5tX3VzZXNSZW1Vbml0cykKLSAgICAsIG1f
aXNNdXRhYmxlKGZhbHNlKQotICAgICwgbV9pc0luTWVtb3J5Q2FjaGUoZmFsc2UpCi0gICAgLCBt
X3BhcnNlckNvbnRleHQoby5tX3BhcnNlckNvbnRleHQpCi17Ci0gICAgQVNTRVJUKG8uaXNDYWNo
ZWFibGUoKSk7Ci0KLSAgICAvLyBGSVhNRTogQ29weSBpbXBvcnQgcnVsZXMuCi0gICAgQVNTRVJU
KG8ubV9pbXBvcnRSdWxlcy5pc0VtcHR5KCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fY2hpbGRSdWxlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9jaGlsZFJ1bGVzW2ldID0g
by5tX2NoaWxkUnVsZXNbaV0tPmNvcHkoKTsKLX0KLQotU3R5bGVTaGVldENvbnRlbnRzOjp+U3R5
bGVTaGVldENvbnRlbnRzKCkKLXsKLSAgICBjbGVhclJ1bGVzKCk7Ci19Ci0KLWJvb2wgU3R5bGVT
aGVldENvbnRlbnRzOjppc0NhY2hlYWJsZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFN1cHBv
cnQgY29weWluZyBpbXBvcnQgcnVsZXMuCi0gICAgaWYgKCFtX2ltcG9ydFJ1bGVzLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIEZJWE1FOiBTdXBwb3J0IGNhY2hlZCBz
dHlsZXNoZWV0cyBpbiBpbXBvcnQgcnVsZXMuCi0gICAgaWYgKG1fb3duZXJSdWxlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhpcyB3b3VsZCByZXF1aXJlIGRlYWxpbmcgd2l0aCBt
dWx0aXBsZSBjbGllbnRzIGZvciBsb2FkIGNhbGxiYWNrcy4KLSAgICBpZiAoIW1fbG9hZENvbXBs
ZXRlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2RpZExvYWRFcnJvck9jY3Vy
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gSXQgaXMgbm90IHRoZSBvcmlnaW5hbCBz
aGVldCBhbnltb3JlLgotICAgIGlmIChtX2lzTXV0YWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIC8vIElmIHRoZSBoZWFkZXIgaXMgdmFsaWQgd2UgYXJlIG5vdCBnb2luZyB0byBuZWVk
IHRvIGNoZWNrIHRoZSBTZWN1cml0eU9yaWdpbi4KLSAgICAvLyBGSVhNRTogVmFsaWQgbWltZSB0
eXBlIGF2b2lkcyB0aGUgY2hlY2sgdG9vLgotICAgIGlmICghbV9oYXNTeW50YWN0aWNhbGx5VmFs
aWRDU1NIZWFkZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnBhcnNlckFwcGVuZFJ1bGUoUGFzc1JlZlB0cjxT
dHlsZVJ1bGVCYXNlPiBydWxlKQotewotICAgIEFTU0VSVCghcnVsZS0+aXNDaGFyc2V0UnVsZSgp
KTsKLSAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKLSAgICAgICAgLy8gUGFyc2VyIGVu
Zm9yY2VzIHRoYXQgQGltcG9ydCBydWxlcyBjb21lIGJlZm9yZSBhbnl0aGluZyBlbHNlIGV4Y2Vw
dCBAY2hhcnNldC4KLSAgICAgICAgQVNTRVJUKG1fY2hpbGRSdWxlcy5pc0VtcHR5KCkpOwotICAg
ICAgICBtX2ltcG9ydFJ1bGVzLmFwcGVuZChzdGF0aWNfY2FzdDxTdHlsZVJ1bGVJbXBvcnQqPihy
dWxlLmdldCgpKSk7Ci0gICAgICAgIG1faW1wb3J0UnVsZXMubGFzdCgpLT5zZXRQYXJlbnRTdHls
ZVNoZWV0KHRoaXMpOwotICAgICAgICBtX2ltcG9ydFJ1bGVzLmxhc3QoKS0+cmVxdWVzdFN0eWxl
U2hlZXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NoaWxkUnVsZXMuYXBwZW5k
KHJ1bGUpOwotfQotCi1TdHlsZVJ1bGVCYXNlKiBTdHlsZVNoZWV0Q29udGVudHM6OnJ1bGVBdCh1
bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBydWxlQ291bnQoKSk7
Ci0gICAgCi0gICAgdW5zaWduZWQgY2hpbGRWZWN0b3JJbmRleCA9IGluZGV4OwotICAgIGlmICho
YXNDaGFyc2V0UnVsZSgpKSB7Ci0gICAgICAgIGlmIChpbmRleCA9PSAwKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIC0tY2hpbGRWZWN0b3JJbmRleDsKLSAgICB9Ci0gICAgaWYgKGNo
aWxkVmVjdG9ySW5kZXggPCBtX2ltcG9ydFJ1bGVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1f
aW1wb3J0UnVsZXNbY2hpbGRWZWN0b3JJbmRleF0uZ2V0KCk7Ci0KLSAgICBjaGlsZFZlY3Rvcklu
ZGV4IC09IG1faW1wb3J0UnVsZXMuc2l6ZSgpOwotICAgIHJldHVybiBtX2NoaWxkUnVsZXNbY2hp
bGRWZWN0b3JJbmRleF0uZ2V0KCk7Ci19Ci0KLXVuc2lnbmVkIFN0eWxlU2hlZXRDb250ZW50czo6
cnVsZUNvdW50KCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwotICAgIHJlc3Vs
dCArPSBoYXNDaGFyc2V0UnVsZSgpID8gMSA6IDA7Ci0gICAgcmVzdWx0ICs9IG1faW1wb3J0UnVs
ZXMuc2l6ZSgpOwotICAgIHJlc3VsdCArPSBtX2NoaWxkUnVsZXMuc2l6ZSgpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpjbGVhckNoYXJzZXRSdWxl
KCkKLXsKLSAgICBtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlID0gU3RyaW5nKCk7Ci19Ci0KLXZv
aWQgU3R5bGVTaGVldENvbnRlbnRzOjpjbGVhclJ1bGVzKCkKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9pbXBvcnRSdWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBBU1NFUlQo
bV9pbXBvcnRSdWxlcy5hdChpKS0+cGFyZW50U3R5bGVTaGVldCgpID09IHRoaXMpOwotICAgICAg
ICBtX2ltcG9ydFJ1bGVzW2ldLT5jbGVhclBhcmVudFN0eWxlU2hlZXQoKTsKLSAgICB9Ci0gICAg
bV9pbXBvcnRSdWxlcy5jbGVhcigpOwotICAgIG1fY2hpbGRSdWxlcy5jbGVhcigpOwotICAgIGNs
ZWFyQ2hhcnNldFJ1bGUoKTsKLX0KLQotdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnBhcnNlclNl
dEVuY29kaW5nRnJvbUNoYXJzZXRSdWxlKGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpCi17Ci0gICAg
Ly8gUGFyc2VyIGVuZm9yY2VzIHRoYXQgdGhlcmUgaXMgZXZlciBvbmx5IG9uZSBAY2hhcnNldC4K
LSAgICBBU1NFUlQobV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZS5pc051bGwoKSk7Ci0gICAgbV9l
bmNvZGluZ0Zyb21DaGFyc2V0UnVsZSA9IGVuY29kaW5nOyAKLX0KLQotYm9vbCBTdHlsZVNoZWV0
Q29udGVudHM6OndyYXBwZXJJbnNlcnRSdWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVs
ZSwgdW5zaWduZWQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKG1faXNNdXRhYmxlKTsKLSAgICBBU1NF
UlQoaW5kZXggPD0gcnVsZUNvdW50KCkpOwotICAgIC8vIFBhcnNlcjo6cGFyc2VSdWxlIGRvZXNu
J3QgY3VycmVudGx5IGFsbG93IEBjaGFyc2V0IHNvIHdlIGRvbid0IG5lZWQgdG8gZGVhbCB3aXRo
IGl0LgotICAgIEFTU0VSVCghcnVsZS0+aXNDaGFyc2V0UnVsZSgpKTsKLSAgICAKLSAgICB1bnNp
Z25lZCBjaGlsZFZlY3RvckluZGV4ID0gaW5kZXg7Ci0gICAgLy8gbV9jaGlsZFJ1bGVzIGRvZXMg
bm90IGNvbnRhaW4gQGNoYXJzZXQgd2hpY2ggaXMgYWx3YXlzIGluIGluZGV4IDAgaWYgaXQgZXhp
c3RzLgotICAgIGlmIChoYXNDaGFyc2V0UnVsZSgpKSB7Ci0gICAgICAgIGlmIChjaGlsZFZlY3Rv
ckluZGV4ID09IDApIHsKLSAgICAgICAgICAgIC8vIE5vdGhpbmcgY2FuIGJlIGluc2VydGVkIGJl
Zm9yZSBAY2hhcnNldC4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICAtLWNoaWxkVmVjdG9ySW5kZXg7Ci0gICAgfQotICAgIAotICAgIGlmIChjaGlsZFZlY3Rv
ckluZGV4IDwgbV9pbXBvcnRSdWxlcy5zaXplKCkgfHwgKGNoaWxkVmVjdG9ySW5kZXggPT0gbV9p
bXBvcnRSdWxlcy5zaXplKCkgJiYgcnVsZS0+aXNJbXBvcnRSdWxlKCkpKSB7Ci0gICAgICAgIC8v
IEluc2VydGluZyBub24taW1wb3J0IHJ1bGUgYmVmb3JlIEBpbXBvcnQgaXMgbm90IGFsbG93ZWQu
Ci0gICAgICAgIGlmICghcnVsZS0+aXNJbXBvcnRSdWxlKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIG1faW1wb3J0UnVsZXMuaW5zZXJ0KGNoaWxkVmVjdG9ySW5kZXgsIHN0
YXRpY19jYXN0PFN0eWxlUnVsZUltcG9ydCo+KHJ1bGUuZ2V0KCkpKTsKLSAgICAgICAgbV9pbXBv
cnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+c2V0UGFyZW50U3R5bGVTaGVldCh0aGlzKTsKLSAg
ICAgICAgbV9pbXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+cmVxdWVzdFN0eWxlU2hlZXQo
KTsKLSAgICAgICAgLy8gRklYTUU6IFN0eWxlc2hlZXQgZG9lc24ndCBhY3R1YWxseSBjaGFuZ2Ug
bWVhbmluZ2Z1bGx5IGJlZm9yZSB0aGUgaW1wb3J0ZWQgc2hlZXRzIGFyZSBsb2FkZWQuCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAvLyBJbnNlcnRpbmcgQGltcG9ydCBydWxlIGFm
dGVyIGEgbm9uLWltcG9ydCBydWxlIGlzIG5vdCBhbGxvd2VkLgotICAgIGlmIChydWxlLT5pc0lt
cG9ydFJ1bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNoaWxkVmVjdG9ySW5kZXgg
LT0gbV9pbXBvcnRSdWxlcy5zaXplKCk7Ci0gCi0gICAgbV9jaGlsZFJ1bGVzLmluc2VydChjaGls
ZFZlY3RvckluZGV4LCBydWxlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTdHlsZVNo
ZWV0Q29udGVudHM6OndyYXBwZXJEZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4KQotewotICAgIEFT
U0VSVChtX2lzTXV0YWJsZSk7Ci0gICAgQVNTRVJUKGluZGV4IDwgcnVsZUNvdW50KCkpOwotCi0g
ICAgdW5zaWduZWQgY2hpbGRWZWN0b3JJbmRleCA9IGluZGV4OwotICAgIGlmIChoYXNDaGFyc2V0
UnVsZSgpKSB7Ci0gICAgICAgIGlmIChjaGlsZFZlY3RvckluZGV4ID09IDApIHsKLSAgICAgICAg
ICAgIGNsZWFyQ2hhcnNldFJ1bGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAtLWNoaWxkVmVjdG9ySW5kZXg7Ci0gICAgfQotICAgIGlmIChjaGlsZFZlY3Rvcklu
ZGV4IDwgbV9pbXBvcnRSdWxlcy5zaXplKCkpIHsKLSAgICAgICAgbV9pbXBvcnRSdWxlc1tjaGls
ZFZlY3RvckluZGV4XS0+Y2xlYXJQYXJlbnRTdHlsZVNoZWV0KCk7Ci0gICAgICAgIG1faW1wb3J0
UnVsZXMucmVtb3ZlKGNoaWxkVmVjdG9ySW5kZXgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGNoaWxkVmVjdG9ySW5kZXggLT0gbV9pbXBvcnRSdWxlcy5zaXplKCk7Ci0KLSAgICBtX2No
aWxkUnVsZXMucmVtb3ZlKGNoaWxkVmVjdG9ySW5kZXgpOwotfQotCi12b2lkIFN0eWxlU2hlZXRD
b250ZW50czo6cGFyc2VyQWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBj
b25zdCBBdG9taWNTdHJpbmcmIHVyaSkKLXsKLSAgICBpZiAodXJpLmlzTnVsbCgpIHx8IHByZWZp
eC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fbmFtZXNwYWNlcy5hZGQocHJlZml4
LCB1cmkpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFN0eWxlU2hlZXRDb250ZW50czo6ZGV0
ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQotewotICAgIGlmIChw
cmVmaXguaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxsQXRvbTsgLy8gTm8gbmFtZXNwYWNl
LiBJZiBhbiBlbGVtZW50L2F0dHJpYnV0ZSBoYXMgYSBuYW1lc3BhY2UsIHdlIHdvbid0IG1hdGNo
IGl0LgotICAgIGlmIChwcmVmaXggPT0gc3RhckF0b20pCi0gICAgICAgIHJldHVybiBzdGFyQXRv
bTsgLy8gV2UnbGwgbWF0Y2ggYW55IG5hbWVzcGFjZS4KLSAgICBQcmVmaXhOYW1lc3BhY2VVUklN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lc3BhY2VzLmZpbmQocHJlZml4KTsKLSAgICBp
ZiAoaXQgPT0gbV9uYW1lc3BhY2VzLmVuZCgpKQotICAgICAgICByZXR1cm4gbnVsbEF0b207Ci0g
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci19Ci0KLXZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpwYXJz
ZUF1dGhvclN0eWxlU2hlZXQoY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCogY2FjaGVkU3R5bGVT
aGVldCwgY29uc3QgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQotewotICAgIC8vIENo
ZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQgZW5mb3JjZSB0aGUgTUlNRSB0eXBlIG9mIHRoZSBDU1Mg
cmVzb3VyY2UgaW4gc3RyaWN0IG1vZGUuCi0gICAgLy8gUnVubmluZyBpbiBpV2ViIDIgaXMgb25l
IGV4YW1wbGUgb2Ygd2hlcmUgd2UgZG9uJ3Qgd2FudCB0byAtIDxyZGFyOi8vcHJvYmxlbS82MDk5
NzQ4PgotICAgIGJvb2wgZW5mb3JjZU1JTUVUeXBlID0gaXNTdHJpY3RQYXJzZXJNb2RlKG1fcGFy
c2VyQ29udGV4dC5tb2RlKSAmJiBtX3BhcnNlckNvbnRleHQuZW5mb3JjZXNDU1NNSU1FVHlwZUlu
Tm9RdWlya3NNb2RlOwotICAgIGJvb2wgaGFzVmFsaWRNSU1FVHlwZSA9IGZhbHNlOwotICAgIFN0
cmluZyBzaGVldFRleHQgPSBjYWNoZWRTdHlsZVNoZWV0LT5zaGVldFRleHQoZW5mb3JjZU1JTUVU
eXBlLCAmaGFzVmFsaWRNSU1FVHlwZSk7Ci0KLSAgICBDU1NQYXJzZXIgcChwYXJzZXJDb250ZXh0
KCkpOwotICAgIHAucGFyc2VTaGVldCh0aGlzLCBzaGVldFRleHQsIDApOwotCi0gICAgLy8gSWYg
d2UncmUgbG9hZGluZyBhIHN0eWxlc2hlZXQgY3Jvc3Mtb3JpZ2luLCBhbmQgdGhlIE1JTUUgdHlw
ZSBpcyBub3Qgc3RhbmRhcmQsIHJlcXVpcmUgdGhlIENTUwotICAgIC8vIHRvIGF0IGxlYXN0IHN0
YXJ0IHdpdGggYSBzeW50YWN0aWNhbGx5IHZhbGlkIENTUyBydWxlLgotICAgIC8vIFRoaXMgcHJl
dmVudHMgYW4gYXR0YWNrZXIgcGxheWluZyBnYW1lcyBieSBpbmplY3RpbmcgQ1NTIHN0cmluZ3Mg
aW50byBIVE1MLCBYTUwsIEpTT04sIGV0Yy4gZXRjLgotICAgIGlmICghaGFzVmFsaWRNSU1FVHlw
ZSAmJiAhaGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKCkpIHsKLSAgICAgICAgYm9vbCBp
c0Nyb3NzT3JpZ2luQ1NTID0gIXNlY3VyaXR5T3JpZ2luIHx8ICFzZWN1cml0eU9yaWdpbi0+Y2Fu
UmVxdWVzdChmaW5hbFVSTCgpKTsKLSAgICAgICAgaWYgKGlzQ3Jvc3NPcmlnaW5DU1MpIHsKLSAg
ICAgICAgICAgIGNsZWFyUnVsZXMoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBpZiAobV9wYXJzZXJDb250ZXh0Lm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzICYm
IGlzU3RyaWN0UGFyc2VyTW9kZShtX3BhcnNlckNvbnRleHQubW9kZSkpIHsKLSAgICAgICAgLy8g
V29yayBhcm91bmQgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODM1
MD4uCi0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBzbGFzaEtIVE1M
Rml4ZXNEb3RDc3MsICgiL0tIVE1MRml4ZXMuY3NzIikpOwotICAgICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgbWVkaWFXaWtpS0hUTUxGaXhlc1N0eWxlU2hlZXQsICgiLyog
S0hUTUwgZml4IHN0eWxlc2hlZXQgKi9cbi8qIHdvcmsgYXJvdW5kIHRoZSBob3Jpem9udGFsIHNj
cm9sbGJhcnMgKi9cbiNjb2x1bW4tY29udGVudCB7IG1hcmdpbi1sZWZ0OiAwOyB9XG5cbiIpKTsK
LSAgICAgICAgLy8gVGhlcmUgYXJlIHR3byB2YXJpYW50cyBvZiBLSFRNTEZpeGVzLmNzcy4gT25l
IGlzIGVxdWFsIHRvIG1lZGlhV2lraUtIVE1MRml4ZXNTdHlsZVNoZWV0LAotICAgICAgICAvLyB3
aGlsZSB0aGUgb3RoZXIgbGFja3MgdGhlIHNlY29uZCB0cmFpbGluZyBuZXdsaW5lLgotICAgICAg
ICBpZiAoZmluYWxVUkwoKS5zdHJpbmcoKS5lbmRzV2l0aChzbGFzaEtIVE1MRml4ZXNEb3RDc3Mp
ICYmICFzaGVldFRleHQuaXNOdWxsKCkgJiYgbWVkaWFXaWtpS0hUTUxGaXhlc1N0eWxlU2hlZXQu
c3RhcnRzV2l0aChzaGVldFRleHQpCi0gICAgICAgICAgICAmJiBzaGVldFRleHQubGVuZ3RoKCkg
Pj0gbWVkaWFXaWtpS0hUTUxGaXhlc1N0eWxlU2hlZXQubGVuZ3RoKCkgLSAxKQotICAgICAgICAg
ICAgY2xlYXJSdWxlcygpOwotICAgIH0KLX0KLQotYm9vbCBTdHlsZVNoZWV0Q29udGVudHM6OnBh
cnNlU3RyaW5nKGNvbnN0IFN0cmluZyYgc2hlZXRUZXh0KQotewotICAgIHJldHVybiBwYXJzZVN0
cmluZ0F0TGluZShzaGVldFRleHQsIDApOwotfQotCi1ib29sIFN0eWxlU2hlZXRDb250ZW50czo6
cGFyc2VTdHJpbmdBdExpbmUoY29uc3QgU3RyaW5nJiBzaGVldFRleHQsIGludCBzdGFydExpbmVO
dW1iZXIpCi17Ci0gICAgQ1NTUGFyc2VyIHAocGFyc2VyQ29udGV4dCgpKTsKLSAgICBwLnBhcnNl
U2hlZXQodGhpcywgc2hlZXRUZXh0LCBzdGFydExpbmVOdW1iZXIpOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgU3R5bGVTaGVldENvbnRlbnRzOjppc0xvYWRpbmcoKSBjb25zdAotewot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChtX2ltcG9ydFJ1bGVzW2ldLT5pc0xvYWRpbmcoKSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU3R5bGVT
aGVldENvbnRlbnRzOjpjaGVja0xvYWRlZCgpCi17Ci0gICAgaWYgKGlzTG9hZGluZygpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBBdm9pZCB8dGhpc3wgYmVpbmcgZGVsZXRlZCBieSBzY3Jp
cHRzIHRoYXQgcnVuIHZpYQotICAgIC8vIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjo6ZXhlY3V0
ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKS4KLSAgICAvLyBTZWUgPHJkYXI6Ly9wcm9i
bGVtLzY2MjIzMDA+LgotICAgIFJlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IHByb3RlY3Rvcih0
aGlzKTsKLSAgICBTdHlsZVNoZWV0Q29udGVudHMqIHBhcmVudFNoZWV0ID0gcGFyZW50U3R5bGVT
aGVldCgpOwotICAgIGlmIChwYXJlbnRTaGVldCkgewotICAgICAgICBwYXJlbnRTaGVldC0+Y2hl
Y2tMb2FkZWQoKTsKLSAgICAgICAgbV9sb2FkQ29tcGxldGVkID0gdHJ1ZTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBSZWZQdHI8Tm9kZT4gb3duZXJOb2RlID0gc2luZ2xlT3duZXJOb2Rl
KCk7Ci0gICAgaWYgKCFvd25lck5vZGUpIHsKLSAgICAgICAgbV9sb2FkQ29tcGxldGVkID0gdHJ1
ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2xvYWRDb21wbGV0ZWQgPSBvd25lck5v
ZGUtPnNoZWV0TG9hZGVkKCk7Ci0gICAgaWYgKG1fbG9hZENvbXBsZXRlZCkKLSAgICAgICAgb3du
ZXJOb2RlLT5ub3RpZnlMb2FkZWRTaGVldEFuZEFsbENyaXRpY2FsU3VicmVzb3VyY2VzKG1fZGlk
TG9hZEVycm9yT2NjdXIpOwotfQotCi12b2lkIFN0eWxlU2hlZXRDb250ZW50czo6bm90aWZ5TG9h
ZGVkU2hlZXQoY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCogc2hlZXQpCi17Ci0gICAgQVNTRVJU
KHNoZWV0KTsKLSAgICBtX2RpZExvYWRFcnJvck9jY3VyIHw9IHNoZWV0LT5lcnJvck9jY3VycmVk
KCk7Ci19Ci0KLXZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpzdGFydExvYWRpbmdEeW5hbWljU2hl
ZXQoKQotewotICAgIGlmIChOb2RlKiBvd25lciA9IHNpbmdsZU93bmVyTm9kZSgpKQotICAgICAg
ICBvd25lci0+c3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCk7Ci19Ci0KLVN0eWxlU2hlZXRDb250
ZW50cyogU3R5bGVTaGVldENvbnRlbnRzOjpyb290U3R5bGVTaGVldCgpIGNvbnN0Ci17Ci0gICAg
Y29uc3QgU3R5bGVTaGVldENvbnRlbnRzKiByb290ID0gdGhpczsKLSAgICB3aGlsZSAocm9vdC0+
cGFyZW50U3R5bGVTaGVldCgpKQotICAgICAgICByb290ID0gcm9vdC0+cGFyZW50U3R5bGVTaGVl
dCgpOwotICAgIHJldHVybiBjb25zdF9jYXN0PFN0eWxlU2hlZXRDb250ZW50cyo+KHJvb3QpOwot
fQotCi1Ob2RlKiBTdHlsZVNoZWV0Q29udGVudHM6OnNpbmdsZU93bmVyTm9kZSgpIGNvbnN0Ci17
Ci0gICAgU3R5bGVTaGVldENvbnRlbnRzKiByb290ID0gcm9vdFN0eWxlU2hlZXQoKTsKLSAgICBp
ZiAocm9vdC0+bV9jbGllbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNT
RVJUKHJvb3QtPm1fY2xpZW50cy5zaXplKCkgPT0gMSk7Ci0gICAgcmV0dXJuIHJvb3QtPm1fY2xp
ZW50c1swXS0+b3duZXJOb2RlKCk7Ci19Ci0KLURvY3VtZW50KiBTdHlsZVNoZWV0Q29udGVudHM6
OnNpbmdsZU93bmVyRG9jdW1lbnQoKSBjb25zdAotewotICAgIE5vZGUqIG93bmVyTm9kZSA9IHNp
bmdsZU93bmVyTm9kZSgpOwotICAgIHJldHVybiBvd25lck5vZGUgPyBvd25lck5vZGUtPmRvY3Vt
ZW50KCkgOiAwOwotfQotCi1LVVJMIFN0eWxlU2hlZXRDb250ZW50czo6Y29tcGxldGVVUkwoY29u
c3QgU3RyaW5nJiB1cmwpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENTU1BhcnNlcjo6Y29tcGxldGVV
UkwobV9wYXJzZXJDb250ZXh0LCB1cmwpOwotfQotCi12b2lkIFN0eWxlU2hlZXRDb250ZW50czo6
YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpCi17Ci0gICAg
RGVxdWU8U3R5bGVTaGVldENvbnRlbnRzKj4gc3R5bGVTaGVldFF1ZXVlOwotICAgIHN0eWxlU2hl
ZXRRdWV1ZS5hcHBlbmQodGhpcyk7Ci0KLSAgICB3aGlsZSAoIXN0eWxlU2hlZXRRdWV1ZS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgU3R5bGVTaGVldENvbnRlbnRzKiBzdHlsZVNoZWV0ID0gc3R5bGVT
aGVldFF1ZXVlLnRha2VGaXJzdCgpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHN0eWxlU2hlZXQtPm1faW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIFN0eWxlUnVsZUltcG9ydCogaW1wb3J0UnVsZSA9IHN0eWxlU2hlZXQtPm1faW1wb3J0
UnVsZXNbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgp
KSB7Ci0gICAgICAgICAgICAgICAgc3R5bGVTaGVldFF1ZXVlLmFwcGVuZChpbXBvcnRSdWxlLT5z
dHlsZVNoZWV0KCkpOwotICAgICAgICAgICAgICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGlt
cG9ydFJ1bGUtPnN0eWxlU2hlZXQoKS0+YmFzZVVSTCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldC0+bV9jaGls
ZFJ1bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlID0g
c3R5bGVTaGVldC0+bV9jaGlsZFJ1bGVzW2ldLmdldCgpOwotICAgICAgICAgICAgaWYgKHJ1bGUt
PmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4o
cnVsZSktPnByb3BlcnRpZXMoKS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgdGhpcyk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChydWxlLT5pc0ZvbnRGYWNlUnVsZSgpKQotICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4ocnVsZSktPnByb3BlcnRpZXMo
KS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgdGhpcyk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLVN0eWxlU2hlZXRDb250ZW50cyogU3R5bGVTaGVldENvbnRlbnRzOjpwYXJlbnRTdHls
ZVNoZWV0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9vd25lclJ1bGUgPyBtX293bmVyUnVsZS0+
cGFyZW50U3R5bGVTaGVldCgpIDogMDsKLX0KLQotdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnJl
Z2lzdGVyQ2xpZW50KENTU1N0eWxlU2hlZXQqIHNoZWV0KQotewotICAgIEFTU0VSVCghbV9jbGll
bnRzLmNvbnRhaW5zKHNoZWV0KSk7Ci0gICAgbV9jbGllbnRzLmFwcGVuZChzaGVldCk7Ci19Ci0K
LXZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjp1bnJlZ2lzdGVyQ2xpZW50KENTU1N0eWxlU2hlZXQq
IHNoZWV0KQotewotICAgIHNpemVfdCBwb3NpdGlvbiA9IG1fY2xpZW50cy5maW5kKHNoZWV0KTsK
LSAgICBBU1NFUlQocG9zaXRpb24gIT0gbm90Rm91bmQpOwotICAgIG1fY2xpZW50cy5yZW1vdmUo
cG9zaXRpb24pOwotfQotCi12b2lkIFN0eWxlU2hlZXRDb250ZW50czo6YWRkZWRUb01lbW9yeUNh
Y2hlKCkKLXsKLSAgICBBU1NFUlQoIW1faXNJbk1lbW9yeUNhY2hlKTsKLSAgICBBU1NFUlQoaXND
YWNoZWFibGUoKSk7Ci0gICAgbV9pc0luTWVtb3J5Q2FjaGUgPSB0cnVlOworUGFzc1JlZlB0cjxD
U1NTdHlsZVNoZWV0PiBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoUGFzc1JlZlB0cjxTdHlsZVNoZWV0
Q29udGVudHM+IHNoZWV0LCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUpCit7IAorICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVldChzaGVldCwgb3duZXJSdWxlKSk7CiB9CiAKLXZv
aWQgU3R5bGVTaGVldENvbnRlbnRzOjpyZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCkKLXsKLSAgICBB
U1NFUlQobV9pc0luTWVtb3J5Q2FjaGUpOwotICAgIEFTU0VSVChpc0NhY2hlYWJsZSgpKTsKLSAg
ICBtX2lzSW5NZW1vcnlDYWNoZSA9IGZhbHNlOworUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBD
U1NTdHlsZVNoZWV0OjpjcmVhdGUoUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IHNoZWV0
LCBOb2RlKiBvd25lck5vZGUpCit7IAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVT
aGVldChzaGVldCwgb3duZXJOb2RlKSk7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
Q1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKE5vZGUqIG93bmVyTm9kZSwgY29uc3QgS1VSTCYg
YmFzZVVSTCwgY29uc3QgU3RyaW5nJiBlbmNvZGluZykKQEAgLTY5Nyw2ICszMDAsMjEgQEAgUGFz
c1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTaGVldDo6YwogICAgIHJldHVybiBtX3J1bGVM
aXN0Q1NTT01XcmFwcGVyLmdldCgpOwogfQogCitTdHJpbmcgQ1NTU3R5bGVTaGVldDo6aHJlZigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMtPm9yaWdpbmFsVVJMKCk7Cit9CisKK0tV
UkwgQ1NTU3R5bGVTaGVldDo6YmFzZVVSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVu
dHMtPmJhc2VVUkwoKTsKK30KKworYm9vbCBDU1NTdHlsZVNoZWV0Ojppc0xvYWRpbmcoKSBjb25z
dAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLT5pc0xvYWRpbmcoKTsKK30KKwogTWVkaWFMaXN0
KiBDU1NTdHlsZVNoZWV0OjptZWRpYSgpIGNvbnN0IAogeyAKICAgICBpZiAoIW1fbWVkaWFRdWVy
aWVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiAxMTgzMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNywxNTMgKzM3LDE3IEBAIGNsYXNzIENTU1J1bGU7CiBjbGFzcyBDU1NSdWxlTGlzdDsKIGNs
YXNzIENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0OwotY2xhc3MgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIE1lZGlhUXVlcnlTZXQ7
CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKLWNsYXNzIFN0eWxlUnVsZUJhc2U7Ci1jbGFzcyBTdHls
ZVJ1bGVJbXBvcnQ7CitjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CiAKIHR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CiAKLWNsYXNzIFN0eWxlU2hlZXRDb250ZW50cyA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFN0eWxlU2hlZXRDb250ZW50cz4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0eWxlU2hlZXRDb250ZW50cz4gY3JlYXRlKGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRl
eHQgPSBDU1NQYXJzZXJDb250ZXh0KENTU1N0cmljdE1vZGUpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0Q29udGVudHMoMCwgU3RyaW5nKCksIEtVUkwoKSwg
Y29udGV4dCkpOwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVu
dHM+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVS
TCwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU3R5bGVTaGVldENvbnRlbnRzKDAsIG9yaWdpbmFsVVJMLCBmaW5hbFVS
TCwgY29udGV4dCkpOwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29u
dGVudHM+IGNyZWF0ZShTdHlsZVJ1bGVJbXBvcnQqIG93bmVyUnVsZSwgY29uc3QgU3RyaW5nJiBv
cmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
IGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlU2hlZXRD
b250ZW50cyhvd25lclJ1bGUsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCwgY29udGV4dCkpOwotICAg
IH0KLQotICAgIH5TdHlsZVNoZWV0Q29udGVudHMoKTsKLSAgICAKLSAgICBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBwYXJzZXJDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZXJDb250ZXh0
OyB9Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGRldGVybWluZU5hbWVzcGFjZShjb25zdCBB
dG9taWNTdHJpbmcmIHByZWZpeCk7Ci0KLSAgICB2b2lkIHBhcnNlQXV0aG9yU3R5bGVTaGVldChj
b25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0KiwgY29uc3QgU2VjdXJpdHlPcmlnaW4qKTsKLSAgICBi
b29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgcGFyc2VTdHJpbmdBdExp
bmUoY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0TGluZU51bWJlcik7Ci0KLSAgICBib29sIGlzQ2Fj
aGVhYmxlKCkgY29uc3Q7Ci0KLSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0OwotCi0gICAgdm9p
ZCBjaGVja0xvYWRlZCgpOwotICAgIHZvaWQgc3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCk7Ci0K
LSAgICBTdHlsZVNoZWV0Q29udGVudHMqIHJvb3RTdHlsZVNoZWV0KCkgY29uc3Q7Ci0gICAgTm9k
ZSogc2luZ2xlT3duZXJOb2RlKCkgY29uc3Q7Ci0gICAgRG9jdW1lbnQqIHNpbmdsZU93bmVyRG9j
dW1lbnQoKSBjb25zdDsKLQotICAgIGNvbnN0IFN0cmluZyYgY2hhcnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyc2VyQ29udGV4dC5jaGFyc2V0OyB9Ci0KLSAgICBib29sIGxvYWRDb21wbGV0ZWQo
KSBjb25zdCB7IHJldHVybiBtX2xvYWRDb21wbGV0ZWQ7IH0KLQotICAgIEtVUkwgY29tcGxldGVV
UkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0OwotICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHls
ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKTsKLQotICAgIHZvaWQgc2V0SXNVc2VyU3R5bGVTaGVl
dChib29sIGIpIHsgbV9pc1VzZXJTdHlsZVNoZWV0ID0gYjsgfQotICAgIGJvb2wgaXNVc2VyU3R5
bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1faXNVc2VyU3R5bGVTaGVldDsgfQotICAgIHZvaWQg
c2V0SGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKGJvb2wgYikgeyBtX2hhc1N5bnRhY3Rp
Y2FsbHlWYWxpZENTU0hlYWRlciA9IGI7IH0KLSAgICBib29sIGhhc1N5bnRhY3RpY2FsbHlWYWxp
ZENTU0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVh
ZGVyOyB9Ci0KLSAgICB2b2lkIHBhcnNlckFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcm
IHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpOwotICAgIHZvaWQgcGFyc2VyQXBwZW5k
UnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+KTsKLSAgICB2b2lkIHBhcnNlclNldEVuY29k
aW5nRnJvbUNoYXJzZXRSdWxlKGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpOyAKLSAgICB2b2lkIHBh
cnNlclNldFVzZXNSZW1Vbml0cyhib29sIGIpIHsgbV91c2VzUmVtVW5pdHMgPSBiOyB9Ci0KLSAg
ICB2b2lkIGNsZWFyUnVsZXMoKTsKLQotICAgIGJvb2wgaGFzQ2hhcnNldFJ1bGUoKSBjb25zdCB7
IHJldHVybiAhbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZS5pc051bGwoKTsgfQotICAgIFN0cmlu
ZyBlbmNvZGluZ0Zyb21DaGFyc2V0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RpbmdGcm9t
Q2hhcnNldFJ1bGU7IH0KLSAgICAvLyBSdWxlcyBvdGhlciB0aGFuIEBjaGFyc2V0IGFuZCBAaW1w
b3J0LgotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxl
cygpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRSdWxlczsgfQotICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8U3R5bGVSdWxlSW1wb3J0PiA+JiBpbXBvcnRSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1faW1w
b3J0UnVsZXM7IH0KLQotICAgIHZvaWQgbm90aWZ5TG9hZGVkU2hlZXQoY29uc3QgQ2FjaGVkQ1NT
U3R5bGVTaGVldCopOwotICAgIAotICAgIFN0eWxlU2hlZXRDb250ZW50cyogcGFyZW50U3R5bGVT
aGVldCgpIGNvbnN0OwotICAgIFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vd25lclJ1bGU7IH0KLSAgICB2b2lkIGNsZWFyT3duZXJSdWxlKCkgeyBtX293bmVy
UnVsZSA9IDA7IH0KLSAgICAKLSAgICAvLyBOb3RlIHRoYXQgaHJlZiBpcyB0aGUgVVJMIHRoYXQg
c3RhcnRlZCB0aGUgcmVkaXJlY3QgY2hhaW4gdGhhdCBsZWQgdG8KLSAgICAvLyB0aGlzIHN0eWxl
IHNoZWV0LiBUaGlzIHByb3BlcnR5IHByb2JhYmx5IGlzbid0IHVzZWZ1bCBmb3IgbXVjaCBleGNl
cHQKLSAgICAvLyB0aGUgSmF2YVNjcmlwdCBiaW5kaW5nICh3aGljaCBuZWVkcyB0byB1c2UgdGhp
cyB2YWx1ZSBmb3Igc2VjdXJpdHkpLgotICAgIFN0cmluZyBvcmlnaW5hbFVSTCgpIGNvbnN0IHsg
cmV0dXJuIG1fb3JpZ2luYWxVUkw7IH0KLSAgICAKLSAgICBjb25zdCBLVVJMJiBmaW5hbFVSTCgp
IGNvbnN0IHsgcmV0dXJuIG1fZmluYWxVUkw7IH0KLSAgICBjb25zdCBLVVJMJiBiYXNlVVJMKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJzZXJDb250ZXh0LmJhc2VVUkw7IH0KLQotICAgIHVuc2lnbmVk
IHJ1bGVDb3VudCgpIGNvbnN0OwotICAgIFN0eWxlUnVsZUJhc2UqIHJ1bGVBdCh1bnNpZ25lZCBp
bmRleCkgY29uc3Q7Ci0KLSAgICBib29sIHVzZXNSZW1Vbml0cygpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlc1JlbVVuaXRzOyB9Ci0KLSAgICB1bnNpZ25lZCBlc3RpbWF0ZWRTaXplSW5CeXRlcygpIGNv
bnN0OwotICAgIAotICAgIGJvb2wgd3JhcHBlckluc2VydFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1
bGVCYXNlPiwgdW5zaWduZWQgaW5kZXgpOwotICAgIHZvaWQgd3JhcHBlckRlbGV0ZVJ1bGUodW5z
aWduZWQgaW5kZXgpOwotCi0gICAgUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IGNvcHko
KSBjb25zdCB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGVldENvbnRlbnRzKCp0aGlzKSk7
IH0KLQotICAgIHZvaWQgcmVnaXN0ZXJDbGllbnQoQ1NTU3R5bGVTaGVldCopOwotICAgIHZvaWQg
dW5yZWdpc3RlckNsaWVudChDU1NTdHlsZVNoZWV0Kik7Ci0gICAgYm9vbCBoYXNPbmVDbGllbnQo
KSB7IHJldHVybiBtX2NsaWVudHMuc2l6ZSgpID09IDE7IH0KLQotICAgIGJvb2wgaXNNdXRhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9pc011dGFibGU7IH0KLSAgICB2b2lkIHNldE11dGFibGUoKSB7
IG1faXNNdXRhYmxlID0gdHJ1ZTsgfQotCi0gICAgYm9vbCBpc0luTWVtb3J5Q2FjaGUoKSBjb25z
dCB7IHJldHVybiBtX2lzSW5NZW1vcnlDYWNoZTsgfQotICAgIHZvaWQgYWRkZWRUb01lbW9yeUNh
Y2hlKCk7Ci0gICAgdm9pZCByZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7Ci0KLXByaXZhdGU6Ci0g
ICAgU3R5bGVTaGVldENvbnRlbnRzKFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlLCBjb25zdCBT
dHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBDU1NQYXJzZXJD
b250ZXh0Jik7Ci0gICAgU3R5bGVTaGVldENvbnRlbnRzKGNvbnN0IFN0eWxlU2hlZXRDb250ZW50
cyYpOwotCi0gICAgdm9pZCBjbGVhckNoYXJzZXRSdWxlKCk7Ci0KLSAgICBTdHlsZVJ1bGVJbXBv
cnQqIG1fb3duZXJSdWxlOwotCi0gICAgU3RyaW5nIG1fb3JpZ2luYWxVUkw7Ci0gICAgS1VSTCBt
X2ZpbmFsVVJMOwotCi0gICAgU3RyaW5nIG1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGU7Ci0gICAg
VmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+ID4gbV9pbXBvcnRSdWxlczsKLSAgICBWZWN0
b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4gbV9jaGlsZFJ1bGVzOwotICAgIHR5cGVkZWYgSGFz
aE1hcDxBdG9taWNTdHJpbmcsIEF0b21pY1N0cmluZz4gUHJlZml4TmFtZXNwYWNlVVJJTWFwOwot
ICAgIFByZWZpeE5hbWVzcGFjZVVSSU1hcCBtX25hbWVzcGFjZXM7Ci0KLSAgICBib29sIG1fbG9h
ZENvbXBsZXRlZCA6IDE7Ci0gICAgYm9vbCBtX2lzVXNlclN0eWxlU2hlZXQgOiAxOwotICAgIGJv
b2wgbV9oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIgOiAxOwotICAgIGJvb2wgbV9kaWRM
b2FkRXJyb3JPY2N1ciA6IDE7Ci0gICAgYm9vbCBtX3VzZXNSZW1Vbml0cyA6IDE7Ci0gICAgYm9v
bCBtX2lzTXV0YWJsZSA6IDE7Ci0gICAgYm9vbCBtX2lzSW5NZW1vcnlDYWNoZSA6IDE7Ci0gICAg
Ci0gICAgQ1NTUGFyc2VyQ29udGV4dCBtX3BhcnNlckNvbnRleHQ7Ci0KLSAgICBWZWN0b3I8Q1NT
U3R5bGVTaGVldCo+IG1fY2xpZW50czsKLX07Ci0KIGNsYXNzIENTU1N0eWxlU2hlZXQgOiBwdWJs
aWMgU3R5bGVTaGVldCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxDU1NTdHlsZVNoZWV0
PiBjcmVhdGUoUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IHNoZWV0LCBDU1NJbXBvcnRS
dWxlKiBvd25lclJ1bGUgPSAwKSAKLSAgICB7IAotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENTU1N0eWxlU2hlZXQoc2hlZXQsIG93bmVyUnVsZSkpOwotICAgIH0KLSAgICBzdGF0aWMgUmVm
UHRyPENTU1N0eWxlU2hlZXQ+IGNyZWF0ZShQYXNzUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4g
c2hlZXQsIE5vZGUqIG93bmVyTm9kZSkKLSAgICB7IAotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENTU1N0eWxlU2hlZXQoc2hlZXQsIG93bmVyTm9kZSkpOwotICAgIH0KKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUoUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29u
dGVudHM+LCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUgPSAwKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUoUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+
LCBOb2RlKiBvd25lck5vZGUpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+
IGNyZWF0ZUlubGluZShOb2RlKiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgZW5jb2Rpbmcg
PSBTdHJpbmcoKSk7CiAKICAgICB2aXJ0dWFsIH5DU1NTdHlsZVNoZWV0KCk7CkBAIC0xOTEsNyAr
NTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNo
ZWV0KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBOb2RlKiBvd25lck5vZGUoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBtX293bmVyTm9kZTsgfQogICAgIHZpcnR1YWwgTWVkaWFMaXN0
KiBtZWRpYSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGhyZWYoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBtX2NvbnRlbnRzLT5vcmlnaW5hbFVSTCgpOyB9CisgICAgdmly
dHVhbCBTdHJpbmcgaHJlZigpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU3RyaW5nIHRp
dGxlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV90aXRsZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBkaXNhYmxlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNEaXNhYmxlZDsgfQogICAg
IHZpcnR1YWwgdm9pZCBzZXREaXNhYmxlZChib29sKSBPVkVSUklERTsKQEAgLTIxMiw4ICs3Niw4
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhck93bmVyTm9kZSgpIE9WRVJSSURF
IHsgbV9vd25lck5vZGUgPSAwOyB9CiAgICAgdmlydHVhbCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1
bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX293bmVyUnVsZTsgfQotICAgIHZpcnR1YWwg
S1VSTCBiYXNlVVJMKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9jb250ZW50cy0+YmFzZVVS
TCgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIG1fY29udGVudHMtPmlzTG9hZGluZygpOyB9CisgICAgdmlydHVhbCBLVVJMIGJhc2VVUkwo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgT1ZF
UlJJREU7CiAgICAgCiAgICAgdm9pZCBjbGVhck93bmVyUnVsZSgpIHsgbV9vd25lclJ1bGUgPSAw
OyB9CiAgICAgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAJKHJldmlzaW9uIDExODMzNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMs
MTMgKzIzLDEzIEBACiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgogCiAjaW5jbHVkZSAi
Q1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJDU1NW
YWx1ZVBvb2wuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlByb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQu
aCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlIDx3dGYvQml0QXJy
YXkuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDExODMzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEw
NCw3IEBACiAjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgogI2luY2x1ZGUgIlN0eWxl
UGVuZGluZ0ltYWdlLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiU3R5bGVT
aGVldENvbnRlbnRzLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJU
ZXh0LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCShyZXZpc2lvbiAxMTgxOTQpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcDoxMTgxOTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDcyOCBAQAorLyoKKyAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDU1NTdHls
ZVNoZWV0LmgiCisKKyNpbmNsdWRlICJDU1NDaGFyc2V0UnVsZS5oIgorI2luY2x1ZGUgIkNTU0Zv
bnRGYWNlUnVsZS5oIgorI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJDU1NQ
YXJzZXIuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVs
ZS5oIgorI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
KyNpbmNsdWRlICJNZWRpYUxpc3QuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlN0eWxlUHJv
cGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTdHlsZVNoZWV0Q1NTUnVsZUxpc3Qg
OiBwdWJsaWMgQ1NTUnVsZUxpc3QgeworcHVibGljOgorICAgIFN0eWxlU2hlZXRDU1NSdWxlTGlz
dChDU1NTdHlsZVNoZWV0KiBzaGVldCkgOiBtX3N0eWxlU2hlZXQoc2hlZXQpIHsgfQorICAgIAor
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgcmVmKCkgeyBtX3N0eWxlU2hlZXQtPnJlZigpOyB9
CisgICAgdmlydHVhbCB2b2lkIGRlcmVmKCkgeyBtX3N0eWxlU2hlZXQtPmRlcmVmKCk7IH0KKyAg
ICAKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVT
aGVldC0+bGVuZ3RoKCk7IH0KKyAgICB2aXJ0dWFsIENTU1J1bGUqIGl0ZW0odW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTaGVldC0+aXRlbShpbmRleCk7IH0KKyAgICAKKyAg
ICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3N0
eWxlU2hlZXQ7IH0KKyAgICAKKyAgICBDU1NTdHlsZVNoZWV0KiBtX3N0eWxlU2hlZXQ7Cit9Owor
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorc3RhdGljIGJvb2wgaXNBY2NlcHRhYmxlQ1NTU3R5bGVT
aGVldFBhcmVudChOb2RlKiBwYXJlbnROb2RlKQoreworICAgIC8vIE9ubHkgdGhlc2Ugbm9kZXMg
Y2FuIGJlIHBhcmVudHMgb2YgU3R5bGVTaGVldHMsIGFuZCB0aGV5IG5lZWQgdG8gY2FsbCBjbGVh
ck93bmVyTm9kZSgpIHdoZW4gbW92ZWQgb3V0IG9mIGRvY3VtZW50LgorICAgIHJldHVybiAhcGFy
ZW50Tm9kZQorICAgICAgICB8fCBwYXJlbnROb2RlLT5pc0RvY3VtZW50Tm9kZSgpCisgICAgICAg
IHx8IHBhcmVudE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rVGFnKQorICAgICAgICB8
fCBwYXJlbnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpCisjaWYgRU5BQkxF
KFNWRykKKyAgICAgICAgfHwgcGFyZW50Tm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3R5bGVU
YWcpCisjZW5kaWYKKyAgICAgICAgfHwgcGFyZW50Tm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQ
Uk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU7Cit9CisjZW5kaWYKKworLy8gUm91Z2ggc2l6ZSBl
c3RpbWF0ZSBmb3IgdGhlIG1lbW9yeSBjYWNoZS4KK3Vuc2lnbmVkIFN0eWxlU2hlZXRDb250ZW50
czo6ZXN0aW1hdGVkU2l6ZUluQnl0ZXMoKSBjb25zdAoreworICAgIC8vIE5vdGUgdGhhdCB0aGlz
IGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IHNpemUgb2YgdGhlIHN0cmluZ3MgaGFuZ2luZyBm
cm9tIHZhcmlvdXMgb2JqZWN0cy4gCisgICAgLy8gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCBuZWFy
bHkgYWxsIG9mIG9mIHRoZW0gYXJlIGF0b21pYyBhbmQgd291bGQgZXhpc3QgYW55d2F5LgorICAg
IHVuc2lnbmVkIHNpemUgPSBzaXplb2YoKnRoaXMpOworCisgICAgLy8gRklYTUU6IFRoaXMgaWdu
b3JlcyB0aGUgY2hpbGRyZW4gb2YgbWVkaWEgYW5kIHJlZ2lvbiBydWxlcy4KKyAgICAvLyBNb3N0
IHJ1bGVzIGFyZSBTdHlsZVJ1bGVzLgorICAgIHNpemUgKz0gcnVsZUNvdW50KCkgKiBTdHlsZVJ1
bGU6OmF2ZXJhZ2VTaXplSW5CeXRlcygpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1faW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKFN0eWxlU2hlZXRDb250
ZW50cyogc2hlZXQgPSBtX2ltcG9ydFJ1bGVzW2ldLT5zdHlsZVNoZWV0KCkpCisgICAgICAgICAg
ICBzaXplICs9IHNoZWV0LT5lc3RpbWF0ZWRTaXplSW5CeXRlcygpOworICAgIH0KKyAgICByZXR1
cm4gc2l6ZTsKK30KKworU3R5bGVTaGVldENvbnRlbnRzOjpTdHlsZVNoZWV0Q29udGVudHMoU3R5
bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0
IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQorICAgIDog
bV9vd25lclJ1bGUob3duZXJSdWxlKQorICAgICwgbV9vcmlnaW5hbFVSTChvcmlnaW5hbFVSTCkK
KyAgICAsIG1fZmluYWxVUkwoZmluYWxVUkwpCisgICAgLCBtX2xvYWRDb21wbGV0ZWQoZmFsc2Up
CisgICAgLCBtX2lzVXNlclN0eWxlU2hlZXQob3duZXJSdWxlICYmIG93bmVyUnVsZS0+cGFyZW50
U3R5bGVTaGVldCgpICYmIG93bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpLT5pc1VzZXJTdHls
ZVNoZWV0KCkpCisgICAgLCBtX2hhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcih0cnVlKQor
ICAgICwgbV9kaWRMb2FkRXJyb3JPY2N1cihmYWxzZSkKKyAgICAsIG1fdXNlc1JlbVVuaXRzKGZh
bHNlKQorICAgICwgbV9pc011dGFibGUoZmFsc2UpCisgICAgLCBtX2lzSW5NZW1vcnlDYWNoZShm
YWxzZSkKKyAgICAsIG1fcGFyc2VyQ29udGV4dChjb250ZXh0KQoreworfQorCitTdHlsZVNoZWV0
Q29udGVudHM6OlN0eWxlU2hlZXRDb250ZW50cyhjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIG8p
CisgICAgOiBSZWZDb3VudGVkPFN0eWxlU2hlZXRDb250ZW50cz4oKQorICAgICwgbV9vd25lclJ1
bGUoMCkKKyAgICAsIG1fb3JpZ2luYWxVUkwoby5tX29yaWdpbmFsVVJMKQorICAgICwgbV9maW5h
bFVSTChvLm1fZmluYWxVUkwpCisgICAgLCBtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlKG8ubV9l
bmNvZGluZ0Zyb21DaGFyc2V0UnVsZSkKKyAgICAsIG1faW1wb3J0UnVsZXMoby5tX2ltcG9ydFJ1
bGVzLnNpemUoKSkKKyAgICAsIG1fY2hpbGRSdWxlcyhvLm1fY2hpbGRSdWxlcy5zaXplKCkpCisg
ICAgLCBtX25hbWVzcGFjZXMoby5tX25hbWVzcGFjZXMpCisgICAgLCBtX2xvYWRDb21wbGV0ZWQo
dHJ1ZSkKKyAgICAsIG1faXNVc2VyU3R5bGVTaGVldChvLm1faXNVc2VyU3R5bGVTaGVldCkKKyAg
ICAsIG1faGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKG8ubV9oYXNTeW50YWN0aWNhbGx5
VmFsaWRDU1NIZWFkZXIpCisgICAgLCBtX2RpZExvYWRFcnJvck9jY3VyKGZhbHNlKQorICAgICwg
bV91c2VzUmVtVW5pdHMoby5tX3VzZXNSZW1Vbml0cykKKyAgICAsIG1faXNNdXRhYmxlKGZhbHNl
KQorICAgICwgbV9pc0luTWVtb3J5Q2FjaGUoZmFsc2UpCisgICAgLCBtX3BhcnNlckNvbnRleHQo
by5tX3BhcnNlckNvbnRleHQpCit7CisgICAgQVNTRVJUKG8uaXNDYWNoZWFibGUoKSk7CisKKyAg
ICAvLyBGSVhNRTogQ29weSBpbXBvcnQgcnVsZXMuCisgICAgQVNTRVJUKG8ubV9pbXBvcnRSdWxl
cy5pc0VtcHR5KCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2hpbGRSdWxl
cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jaGlsZFJ1bGVzW2ldID0gby5tX2NoaWxkUnVsZXNb
aV0tPmNvcHkoKTsKK30KKworU3R5bGVTaGVldENvbnRlbnRzOjp+U3R5bGVTaGVldENvbnRlbnRz
KCkKK3sKKyAgICBjbGVhclJ1bGVzKCk7Cit9CisKK2Jvb2wgU3R5bGVTaGVldENvbnRlbnRzOjpp
c0NhY2hlYWJsZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFN1cHBvcnQgY29weWluZyBpbXBv
cnQgcnVsZXMuCisgICAgaWYgKCFtX2ltcG9ydFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIC8vIEZJWE1FOiBTdXBwb3J0IGNhY2hlZCBzdHlsZXNoZWV0cyBpbiBp
bXBvcnQgcnVsZXMuCisgICAgaWYgKG1fb3duZXJSdWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgLy8gVGhpcyB3b3VsZCByZXF1aXJlIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBjbGllbnRz
IGZvciBsb2FkIGNhbGxiYWNrcy4KKyAgICBpZiAoIW1fbG9hZENvbXBsZXRlZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChtX2RpZExvYWRFcnJvck9jY3VyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgLy8gSXQgaXMgbm90IHRoZSBvcmlnaW5hbCBzaGVldCBhbnltb3JlLgor
ICAgIGlmIChtX2lzTXV0YWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIElmIHRo
ZSBoZWFkZXIgaXMgdmFsaWQgd2UgYXJlIG5vdCBnb2luZyB0byBuZWVkIHRvIGNoZWNrIHRoZSBT
ZWN1cml0eU9yaWdpbi4KKyAgICAvLyBGSVhNRTogVmFsaWQgbWltZSB0eXBlIGF2b2lkcyB0aGUg
Y2hlY2sgdG9vLgorICAgIGlmICghbV9oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTdHlsZVNo
ZWV0Q29udGVudHM6OnBhcnNlckFwcGVuZFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBy
dWxlKQoreworICAgIEFTU0VSVCghcnVsZS0+aXNDaGFyc2V0UnVsZSgpKTsKKyAgICBpZiAocnVs
ZS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAgICAgICAgLy8gUGFyc2VyIGVuZm9yY2VzIHRoYXQgQGlt
cG9ydCBydWxlcyBjb21lIGJlZm9yZSBhbnl0aGluZyBlbHNlIGV4Y2VwdCBAY2hhcnNldC4KKyAg
ICAgICAgQVNTRVJUKG1fY2hpbGRSdWxlcy5pc0VtcHR5KCkpOworICAgICAgICBtX2ltcG9ydFJ1
bGVzLmFwcGVuZChzdGF0aWNfY2FzdDxTdHlsZVJ1bGVJbXBvcnQqPihydWxlLmdldCgpKSk7Cisg
ICAgICAgIG1faW1wb3J0UnVsZXMubGFzdCgpLT5zZXRQYXJlbnRTdHlsZVNoZWV0KHRoaXMpOwor
ICAgICAgICBtX2ltcG9ydFJ1bGVzLmxhc3QoKS0+cmVxdWVzdFN0eWxlU2hlZXQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NoaWxkUnVsZXMuYXBwZW5kKHJ1bGUpOworfQorCitT
dHlsZVJ1bGVCYXNlKiBTdHlsZVNoZWV0Q29udGVudHM6OnJ1bGVBdCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBydWxlQ291bnQoKSk7CisgICAgCisgICAgdW5z
aWduZWQgY2hpbGRWZWN0b3JJbmRleCA9IGluZGV4OworICAgIGlmIChoYXNDaGFyc2V0UnVsZSgp
KSB7CisgICAgICAgIGlmIChpbmRleCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIC0tY2hpbGRWZWN0b3JJbmRleDsKKyAgICB9CisgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXgg
PCBtX2ltcG9ydFJ1bGVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG1faW1wb3J0UnVsZXNbY2hp
bGRWZWN0b3JJbmRleF0uZ2V0KCk7CisKKyAgICBjaGlsZFZlY3RvckluZGV4IC09IG1faW1wb3J0
UnVsZXMuc2l6ZSgpOworICAgIHJldHVybiBtX2NoaWxkUnVsZXNbY2hpbGRWZWN0b3JJbmRleF0u
Z2V0KCk7Cit9CisKK3Vuc2lnbmVkIFN0eWxlU2hlZXRDb250ZW50czo6cnVsZUNvdW50KCkgY29u
c3QKK3sKKyAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgIHJlc3VsdCArPSBoYXNDaGFyc2V0
UnVsZSgpID8gMSA6IDA7CisgICAgcmVzdWx0ICs9IG1faW1wb3J0UnVsZXMuc2l6ZSgpOworICAg
IHJlc3VsdCArPSBtX2NoaWxkUnVsZXMuc2l6ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpjbGVhckNoYXJzZXRSdWxlKCkKK3sKKyAgICBtX2Vu
Y29kaW5nRnJvbUNoYXJzZXRSdWxlID0gU3RyaW5nKCk7Cit9CisKK3ZvaWQgU3R5bGVTaGVldENv
bnRlbnRzOjpjbGVhclJ1bGVzKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9p
bXBvcnRSdWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBBU1NFUlQobV9pbXBvcnRSdWxlcy5h
dChpKS0+cGFyZW50U3R5bGVTaGVldCgpID09IHRoaXMpOworICAgICAgICBtX2ltcG9ydFJ1bGVz
W2ldLT5jbGVhclBhcmVudFN0eWxlU2hlZXQoKTsKKyAgICB9CisgICAgbV9pbXBvcnRSdWxlcy5j
bGVhcigpOworICAgIG1fY2hpbGRSdWxlcy5jbGVhcigpOworICAgIGNsZWFyQ2hhcnNldFJ1bGUo
KTsKK30KKwordm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnBhcnNlclNldEVuY29kaW5nRnJvbUNo
YXJzZXRSdWxlKGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpCit7CisgICAgLy8gUGFyc2VyIGVuZm9y
Y2VzIHRoYXQgdGhlcmUgaXMgZXZlciBvbmx5IG9uZSBAY2hhcnNldC4KKyAgICBBU1NFUlQobV9l
bmNvZGluZ0Zyb21DaGFyc2V0UnVsZS5pc051bGwoKSk7CisgICAgbV9lbmNvZGluZ0Zyb21DaGFy
c2V0UnVsZSA9IGVuY29kaW5nOyAKK30KKworYm9vbCBTdHlsZVNoZWV0Q29udGVudHM6OndyYXBw
ZXJJbnNlcnRSdWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVsZSwgdW5zaWduZWQgaW5k
ZXgpCit7CisgICAgQVNTRVJUKG1faXNNdXRhYmxlKTsKKyAgICBBU1NFUlQoaW5kZXggPD0gcnVs
ZUNvdW50KCkpOworICAgIC8vIFBhcnNlcjo6cGFyc2VSdWxlIGRvZXNuJ3QgY3VycmVudGx5IGFs
bG93IEBjaGFyc2V0IHNvIHdlIGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIGl0LgorICAgIEFTU0VS
VCghcnVsZS0+aXNDaGFyc2V0UnVsZSgpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBjaGlsZFZlY3Rv
ckluZGV4ID0gaW5kZXg7CisgICAgLy8gbV9jaGlsZFJ1bGVzIGRvZXMgbm90IGNvbnRhaW4gQGNo
YXJzZXQgd2hpY2ggaXMgYWx3YXlzIGluIGluZGV4IDAgaWYgaXQgZXhpc3RzLgorICAgIGlmICho
YXNDaGFyc2V0UnVsZSgpKSB7CisgICAgICAgIGlmIChjaGlsZFZlY3RvckluZGV4ID09IDApIHsK
KyAgICAgICAgICAgIC8vIE5vdGhpbmcgY2FuIGJlIGluc2VydGVkIGJlZm9yZSBAY2hhcnNldC4K
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAtLWNoaWxkVmVj
dG9ySW5kZXg7CisgICAgfQorICAgIAorICAgIGlmIChjaGlsZFZlY3RvckluZGV4IDwgbV9pbXBv
cnRSdWxlcy5zaXplKCkgfHwgKGNoaWxkVmVjdG9ySW5kZXggPT0gbV9pbXBvcnRSdWxlcy5zaXpl
KCkgJiYgcnVsZS0+aXNJbXBvcnRSdWxlKCkpKSB7CisgICAgICAgIC8vIEluc2VydGluZyBub24t
aW1wb3J0IHJ1bGUgYmVmb3JlIEBpbXBvcnQgaXMgbm90IGFsbG93ZWQuCisgICAgICAgIGlmICgh
cnVsZS0+aXNJbXBvcnRSdWxlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IG1faW1wb3J0UnVsZXMuaW5zZXJ0KGNoaWxkVmVjdG9ySW5kZXgsIHN0YXRpY19jYXN0PFN0eWxl
UnVsZUltcG9ydCo+KHJ1bGUuZ2V0KCkpKTsKKyAgICAgICAgbV9pbXBvcnRSdWxlc1tjaGlsZFZl
Y3RvckluZGV4XS0+c2V0UGFyZW50U3R5bGVTaGVldCh0aGlzKTsKKyAgICAgICAgbV9pbXBvcnRS
dWxlc1tjaGlsZFZlY3RvckluZGV4XS0+cmVxdWVzdFN0eWxlU2hlZXQoKTsKKyAgICAgICAgLy8g
RklYTUU6IFN0eWxlc2hlZXQgZG9lc24ndCBhY3R1YWxseSBjaGFuZ2UgbWVhbmluZ2Z1bGx5IGJl
Zm9yZSB0aGUgaW1wb3J0ZWQgc2hlZXRzIGFyZSBsb2FkZWQuCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAvLyBJbnNlcnRpbmcgQGltcG9ydCBydWxlIGFmdGVyIGEgbm9uLWltcG9y
dCBydWxlIGlzIG5vdCBhbGxvd2VkLgorICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNoaWxkVmVjdG9ySW5kZXggLT0gbV9pbXBvcnRSdWxl
cy5zaXplKCk7CisgCisgICAgbV9jaGlsZFJ1bGVzLmluc2VydChjaGlsZFZlY3RvckluZGV4LCBy
dWxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTdHlsZVNoZWV0Q29udGVudHM6Ondy
YXBwZXJEZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4KQoreworICAgIEFTU0VSVChtX2lzTXV0YWJs
ZSk7CisgICAgQVNTRVJUKGluZGV4IDwgcnVsZUNvdW50KCkpOworCisgICAgdW5zaWduZWQgY2hp
bGRWZWN0b3JJbmRleCA9IGluZGV4OworICAgIGlmIChoYXNDaGFyc2V0UnVsZSgpKSB7CisgICAg
ICAgIGlmIChjaGlsZFZlY3RvckluZGV4ID09IDApIHsKKyAgICAgICAgICAgIGNsZWFyQ2hhcnNl
dFJ1bGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAtLWNoaWxk
VmVjdG9ySW5kZXg7CisgICAgfQorICAgIGlmIChjaGlsZFZlY3RvckluZGV4IDwgbV9pbXBvcnRS
dWxlcy5zaXplKCkpIHsKKyAgICAgICAgbV9pbXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+
Y2xlYXJQYXJlbnRTdHlsZVNoZWV0KCk7CisgICAgICAgIG1faW1wb3J0UnVsZXMucmVtb3ZlKGNo
aWxkVmVjdG9ySW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNoaWxkVmVjdG9y
SW5kZXggLT0gbV9pbXBvcnRSdWxlcy5zaXplKCk7CisKKyAgICBtX2NoaWxkUnVsZXMucmVtb3Zl
KGNoaWxkVmVjdG9ySW5kZXgpOworfQorCit2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cGFyc2Vy
QWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJp
bmcmIHVyaSkKK3sKKyAgICBpZiAodXJpLmlzTnVsbCgpIHx8IHByZWZpeC5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fbmFtZXNwYWNlcy5hZGQocHJlZml4LCB1cmkpOworfQorCitj
b25zdCBBdG9taWNTdHJpbmcmIFN0eWxlU2hlZXRDb250ZW50czo6ZGV0ZXJtaW5lTmFtZXNwYWNl
KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQoreworICAgIGlmIChwcmVmaXguaXNOdWxsKCkp
CisgICAgICAgIHJldHVybiBudWxsQXRvbTsgLy8gTm8gbmFtZXNwYWNlLiBJZiBhbiBlbGVtZW50
L2F0dHJpYnV0ZSBoYXMgYSBuYW1lc3BhY2UsIHdlIHdvbid0IG1hdGNoIGl0LgorICAgIGlmIChw
cmVmaXggPT0gc3RhckF0b20pCisgICAgICAgIHJldHVybiBzdGFyQXRvbTsgLy8gV2UnbGwgbWF0
Y2ggYW55IG5hbWVzcGFjZS4KKyAgICBQcmVmaXhOYW1lc3BhY2VVUklNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9uYW1lc3BhY2VzLmZpbmQocHJlZml4KTsKKyAgICBpZiAoaXQgPT0gbV9uYW1l
c3BhY2VzLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbEF0b207CisgICAgcmV0dXJuIGl0LT5z
ZWNvbmQ7Cit9CisKK3ZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZUF1dGhvclN0eWxlU2hl
ZXQoY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCogY2FjaGVkU3R5bGVTaGVldCwgY29uc3QgU2Vj
dXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQoreworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3
ZSBzaG91bGQgZW5mb3JjZSB0aGUgTUlNRSB0eXBlIG9mIHRoZSBDU1MgcmVzb3VyY2UgaW4gc3Ry
aWN0IG1vZGUuCisgICAgLy8gUnVubmluZyBpbiBpV2ViIDIgaXMgb25lIGV4YW1wbGUgb2Ygd2hl
cmUgd2UgZG9uJ3Qgd2FudCB0byAtIDxyZGFyOi8vcHJvYmxlbS82MDk5NzQ4PgorICAgIGJvb2wg
ZW5mb3JjZU1JTUVUeXBlID0gaXNTdHJpY3RQYXJzZXJNb2RlKG1fcGFyc2VyQ29udGV4dC5tb2Rl
KSAmJiBtX3BhcnNlckNvbnRleHQuZW5mb3JjZXNDU1NNSU1FVHlwZUluTm9RdWlya3NNb2RlOwor
ICAgIGJvb2wgaGFzVmFsaWRNSU1FVHlwZSA9IGZhbHNlOworICAgIFN0cmluZyBzaGVldFRleHQg
PSBjYWNoZWRTdHlsZVNoZWV0LT5zaGVldFRleHQoZW5mb3JjZU1JTUVUeXBlLCAmaGFzVmFsaWRN
SU1FVHlwZSk7CisKKyAgICBDU1NQYXJzZXIgcChwYXJzZXJDb250ZXh0KCkpOworICAgIHAucGFy
c2VTaGVldCh0aGlzLCBzaGVldFRleHQsIDApOworCisgICAgLy8gSWYgd2UncmUgbG9hZGluZyBh
IHN0eWxlc2hlZXQgY3Jvc3Mtb3JpZ2luLCBhbmQgdGhlIE1JTUUgdHlwZSBpcyBub3Qgc3RhbmRh
cmQsIHJlcXVpcmUgdGhlIENTUworICAgIC8vIHRvIGF0IGxlYXN0IHN0YXJ0IHdpdGggYSBzeW50
YWN0aWNhbGx5IHZhbGlkIENTUyBydWxlLgorICAgIC8vIFRoaXMgcHJldmVudHMgYW4gYXR0YWNr
ZXIgcGxheWluZyBnYW1lcyBieSBpbmplY3RpbmcgQ1NTIHN0cmluZ3MgaW50byBIVE1MLCBYTUws
IEpTT04sIGV0Yy4gZXRjLgorICAgIGlmICghaGFzVmFsaWRNSU1FVHlwZSAmJiAhaGFzU3ludGFj
dGljYWxseVZhbGlkQ1NTSGVhZGVyKCkpIHsKKyAgICAgICAgYm9vbCBpc0Nyb3NzT3JpZ2luQ1NT
ID0gIXNlY3VyaXR5T3JpZ2luIHx8ICFzZWN1cml0eU9yaWdpbi0+Y2FuUmVxdWVzdChmaW5hbFVS
TCgpKTsKKyAgICAgICAgaWYgKGlzQ3Jvc3NPcmlnaW5DU1MpIHsKKyAgICAgICAgICAgIGNsZWFy
UnVsZXMoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAo
bV9wYXJzZXJDb250ZXh0Lm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzICYmIGlzU3RyaWN0UGFyc2Vy
TW9kZShtX3BhcnNlckNvbnRleHQubW9kZSkpIHsKKyAgICAgICAgLy8gV29yayBhcm91bmQgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODM1MD4uCisgICAgICAgIERF
RklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBzbGFzaEtIVE1MRml4ZXNEb3RDc3MsICgi
L0tIVE1MRml4ZXMuY3NzIikpOworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
cmluZywgbWVkaWFXaWtpS0hUTUxGaXhlc1N0eWxlU2hlZXQsICgiLyogS0hUTUwgZml4IHN0eWxl
c2hlZXQgKi9cbi8qIHdvcmsgYXJvdW5kIHRoZSBob3Jpem9udGFsIHNjcm9sbGJhcnMgKi9cbiNj
b2x1bW4tY29udGVudCB7IG1hcmdpbi1sZWZ0OiAwOyB9XG5cbiIpKTsKKyAgICAgICAgLy8gVGhl
cmUgYXJlIHR3byB2YXJpYW50cyBvZiBLSFRNTEZpeGVzLmNzcy4gT25lIGlzIGVxdWFsIHRvIG1l
ZGlhV2lraUtIVE1MRml4ZXNTdHlsZVNoZWV0LAorICAgICAgICAvLyB3aGlsZSB0aGUgb3RoZXIg
bGFja3MgdGhlIHNlY29uZCB0cmFpbGluZyBuZXdsaW5lLgorICAgICAgICBpZiAoZmluYWxVUkwo
KS5zdHJpbmcoKS5lbmRzV2l0aChzbGFzaEtIVE1MRml4ZXNEb3RDc3MpICYmICFzaGVldFRleHQu
aXNOdWxsKCkgJiYgbWVkaWFXaWtpS0hUTUxGaXhlc1N0eWxlU2hlZXQuc3RhcnRzV2l0aChzaGVl
dFRleHQpCisgICAgICAgICAgICAmJiBzaGVldFRleHQubGVuZ3RoKCkgPj0gbWVkaWFXaWtpS0hU
TUxGaXhlc1N0eWxlU2hlZXQubGVuZ3RoKCkgLSAxKQorICAgICAgICAgICAgY2xlYXJSdWxlcygp
OworICAgIH0KK30KKworYm9vbCBTdHlsZVNoZWV0Q29udGVudHM6OnBhcnNlU3RyaW5nKGNvbnN0
IFN0cmluZyYgc2hlZXRUZXh0KQoreworICAgIHJldHVybiBwYXJzZVN0cmluZ0F0TGluZShzaGVl
dFRleHQsIDApOworfQorCitib29sIFN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VTdHJpbmdBdExp
bmUoY29uc3QgU3RyaW5nJiBzaGVldFRleHQsIGludCBzdGFydExpbmVOdW1iZXIpCit7CisgICAg
Q1NTUGFyc2VyIHAocGFyc2VyQ29udGV4dCgpKTsKKyAgICBwLnBhcnNlU2hlZXQodGhpcywgc2hl
ZXRUZXh0LCBzdGFydExpbmVOdW1iZXIpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U3R5bGVTaGVldENvbnRlbnRzOjppc0xvYWRpbmcoKSBjb25zdAoreworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2ltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICht
X2ltcG9ydFJ1bGVzW2ldLT5pc0xvYWRpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpj
aGVja0xvYWRlZCgpCit7CisgICAgaWYgKGlzTG9hZGluZygpKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBBdm9pZCB8dGhpc3wgYmVpbmcgZGVsZXRlZCBieSBzY3JpcHRzIHRoYXQgcnVuIHZp
YQorICAgIC8vIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5n
Rm9yU3R5bGVzaGVldHMoKS4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzY2MjIzMDA+Lgor
ICAgIFJlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBTdHls
ZVNoZWV0Q29udGVudHMqIHBhcmVudFNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpOworICAgIGlm
IChwYXJlbnRTaGVldCkgeworICAgICAgICBwYXJlbnRTaGVldC0+Y2hlY2tMb2FkZWQoKTsKKyAg
ICAgICAgbV9sb2FkQ29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBSZWZQdHI8Tm9kZT4gb3duZXJOb2RlID0gc2luZ2xlT3duZXJOb2RlKCk7CisgICAgaWYgKCFv
d25lck5vZGUpIHsKKyAgICAgICAgbV9sb2FkQ29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBtX2xvYWRDb21wbGV0ZWQgPSBvd25lck5vZGUtPnNoZWV0TG9hZGVk
KCk7CisgICAgaWYgKG1fbG9hZENvbXBsZXRlZCkKKyAgICAgICAgb3duZXJOb2RlLT5ub3RpZnlM
b2FkZWRTaGVldEFuZEFsbENyaXRpY2FsU3VicmVzb3VyY2VzKG1fZGlkTG9hZEVycm9yT2NjdXIp
OworfQorCit2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6bm90aWZ5TG9hZGVkU2hlZXQoY29uc3Qg
Q2FjaGVkQ1NTU3R5bGVTaGVldCogc2hlZXQpCit7CisgICAgQVNTRVJUKHNoZWV0KTsKKyAgICBt
X2RpZExvYWRFcnJvck9jY3VyIHw9IHNoZWV0LT5lcnJvck9jY3VycmVkKCk7Cit9CisKK3ZvaWQg
U3R5bGVTaGVldENvbnRlbnRzOjpzdGFydExvYWRpbmdEeW5hbWljU2hlZXQoKQoreworICAgIGlm
IChOb2RlKiBvd25lciA9IHNpbmdsZU93bmVyTm9kZSgpKQorICAgICAgICBvd25lci0+c3RhcnRM
b2FkaW5nRHluYW1pY1NoZWV0KCk7Cit9CisKK1N0eWxlU2hlZXRDb250ZW50cyogU3R5bGVTaGVl
dENvbnRlbnRzOjpyb290U3R5bGVTaGVldCgpIGNvbnN0Cit7CisgICAgY29uc3QgU3R5bGVTaGVl
dENvbnRlbnRzKiByb290ID0gdGhpczsKKyAgICB3aGlsZSAocm9vdC0+cGFyZW50U3R5bGVTaGVl
dCgpKQorICAgICAgICByb290ID0gcm9vdC0+cGFyZW50U3R5bGVTaGVldCgpOworICAgIHJldHVy
biBjb25zdF9jYXN0PFN0eWxlU2hlZXRDb250ZW50cyo+KHJvb3QpOworfQorCitOb2RlKiBTdHls
ZVNoZWV0Q29udGVudHM6OnNpbmdsZU93bmVyTm9kZSgpIGNvbnN0Cit7CisgICAgU3R5bGVTaGVl
dENvbnRlbnRzKiByb290ID0gcm9vdFN0eWxlU2hlZXQoKTsKKyAgICBpZiAocm9vdC0+bV9jbGll
bnRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKHJvb3QtPm1fY2xp
ZW50cy5zaXplKCkgPT0gMSk7CisgICAgcmV0dXJuIHJvb3QtPm1fY2xpZW50c1swXS0+b3duZXJO
b2RlKCk7Cit9CisKK0RvY3VtZW50KiBTdHlsZVNoZWV0Q29udGVudHM6OnNpbmdsZU93bmVyRG9j
dW1lbnQoKSBjb25zdAoreworICAgIE5vZGUqIG93bmVyTm9kZSA9IHNpbmdsZU93bmVyTm9kZSgp
OworICAgIHJldHVybiBvd25lck5vZGUgPyBvd25lck5vZGUtPmRvY3VtZW50KCkgOiAwOworfQor
CitLVVJMIFN0eWxlU2hlZXRDb250ZW50czo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwp
IGNvbnN0Cit7CisgICAgcmV0dXJuIENTU1BhcnNlcjo6Y29tcGxldGVVUkwobV9wYXJzZXJDb250
ZXh0LCB1cmwpOworfQorCit2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6YWRkU3VicmVzb3VyY2VT
dHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpCit7CisgICAgRGVxdWU8U3R5bGVTaGVl
dENvbnRlbnRzKj4gc3R5bGVTaGVldFF1ZXVlOworICAgIHN0eWxlU2hlZXRRdWV1ZS5hcHBlbmQo
dGhpcyk7CisKKyAgICB3aGlsZSAoIXN0eWxlU2hlZXRRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgU3R5bGVTaGVldENvbnRlbnRzKiBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldFF1ZXVlLnRha2VG
aXJzdCgpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxl
U2hlZXQtPm1faW1wb3J0UnVsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0eWxlUnVs
ZUltcG9ydCogaW1wb3J0UnVsZSA9IHN0eWxlU2hlZXQtPm1faW1wb3J0UnVsZXNbaV0uZ2V0KCk7
CisgICAgICAgICAgICBpZiAoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpKSB7CisgICAgICAgICAg
ICAgICAgc3R5bGVTaGVldFF1ZXVlLmFwcGVuZChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCkpOwor
ICAgICAgICAgICAgICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGltcG9ydFJ1bGUtPnN0eWxl
U2hlZXQoKS0+YmFzZVVSTCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldC0+bV9jaGlsZFJ1bGVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlID0gc3R5bGVTaGVldC0+bV9j
aGlsZFJ1bGVzW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkp
CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSktPnByb3BlcnRp
ZXMoKS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgdGhpcyk7CisgICAgICAgICAgICBl
bHNlIGlmIChydWxlLT5pc0ZvbnRGYWNlUnVsZSgpKQorICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4ocnVsZSktPnByb3BlcnRpZXMoKS0+YWRkU3VicmVzb3Vy
Y2VTdHlsZVVSTHModXJscywgdGhpcyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1N0eWxlU2hl
ZXRDb250ZW50cyogU3R5bGVTaGVldENvbnRlbnRzOjpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9vd25lclJ1bGUgPyBtX293bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVl
dCgpIDogMDsKK30KKwordm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnJlZ2lzdGVyQ2xpZW50KENT
U1N0eWxlU2hlZXQqIHNoZWV0KQoreworICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKHNo
ZWV0KSk7CisgICAgbV9jbGllbnRzLmFwcGVuZChzaGVldCk7Cit9CisKK3ZvaWQgU3R5bGVTaGVl
dENvbnRlbnRzOjp1bnJlZ2lzdGVyQ2xpZW50KENTU1N0eWxlU2hlZXQqIHNoZWV0KQoreworICAg
IHNpemVfdCBwb3NpdGlvbiA9IG1fY2xpZW50cy5maW5kKHNoZWV0KTsKKyAgICBBU1NFUlQocG9z
aXRpb24gIT0gbm90Rm91bmQpOworICAgIG1fY2xpZW50cy5yZW1vdmUocG9zaXRpb24pOworfQor
Cit2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6YWRkZWRUb01lbW9yeUNhY2hlKCkKK3sKKyAgICBB
U1NFUlQoIW1faXNJbk1lbW9yeUNhY2hlKTsKKyAgICBBU1NFUlQoaXNDYWNoZWFibGUoKSk7Cisg
ICAgbV9pc0luTWVtb3J5Q2FjaGUgPSB0cnVlOworfQorCit2b2lkIFN0eWxlU2hlZXRDb250ZW50
czo6cmVtb3ZlZEZyb21NZW1vcnlDYWNoZSgpCit7CisgICAgQVNTRVJUKG1faXNJbk1lbW9yeUNh
Y2hlKTsKKyAgICBBU1NFUlQoaXNDYWNoZWFibGUoKSk7CisgICAgbV9pc0luTWVtb3J5Q2FjaGUg
PSBmYWxzZTsKK30KKworUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBDU1NTdHlsZVNoZWV0Ojpj
cmVhdGVJbmxpbmUoTm9kZSogb3duZXJOb2RlLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBT
dHJpbmcmIGVuY29kaW5nKQoreworICAgIENTU1BhcnNlckNvbnRleHQgcGFyc2VyQ29udGV4dChv
d25lck5vZGUtPmRvY3VtZW50KCksIGJhc2VVUkwsIGVuY29kaW5nKTsKKyAgICBSZWZQdHI8U3R5
bGVTaGVldENvbnRlbnRzPiBzaGVldCA9IFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKGJhc2VV
Ukwuc3RyaW5nKCksIGJhc2VVUkwsIHBhcnNlckNvbnRleHQpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ1NTU3R5bGVTaGVldChzaGVldC5yZWxlYXNlKCksIG93bmVyTm9kZSkpOworfQorCitD
U1NTdHlsZVNoZWV0OjpDU1NTdHlsZVNoZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRz
PiBjb250ZW50cywgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxlKQorICAgIDogbV9jb250ZW50cyhj
b250ZW50cykKKyAgICAsIG1faXNEaXNhYmxlZChmYWxzZSkKKyAgICAsIG1fb3duZXJOb2RlKDAp
CisgICAgLCBtX293bmVyUnVsZShvd25lclJ1bGUpCit7CisgICAgbV9jb250ZW50cy0+cmVnaXN0
ZXJDbGllbnQodGhpcyk7Cit9CisKK0NTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoUGFzc1Jl
ZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IGNvbnRlbnRzLCBOb2RlKiBvd25lck5vZGUpCisgICAg
OiBtX2NvbnRlbnRzKGNvbnRlbnRzKQorICAgICwgbV9pc0Rpc2FibGVkKGZhbHNlKQorICAgICwg
bV9vd25lck5vZGUob3duZXJOb2RlKQorICAgICwgbV9vd25lclJ1bGUoMCkKK3sKKyAgICBBU1NF
UlQoaXNBY2NlcHRhYmxlQ1NTU3R5bGVTaGVldFBhcmVudChvd25lck5vZGUpKTsKKyAgICBtX2Nv
bnRlbnRzLT5yZWdpc3RlckNsaWVudCh0aGlzKTsKK30KKworQ1NTU3R5bGVTaGVldDo6fkNTU1N0
eWxlU2hlZXQoKQoreworICAgIC8vIEZvciBzdHlsZSBydWxlcyBvdXRzaWRlIHRoZSBkb2N1bWVu
dCwgLnBhcmVudFN0eWxlU2hlZXQgY2FuIGJlY29tZSBudWxsIGV2ZW4gaWYgdGhlIHN0eWxlIHJ1
bGUKKyAgICAvLyBpcyBzdGlsbCBvYnNlcnZhYmxlIGZyb20gSmF2YVNjcmlwdC4gVGhpcyBtYXRj
aGVzIHRoZSBiZWhhdmlvciBvZiAucGFyZW50Tm9kZSBmb3Igbm9kZXMsIGJ1dAorICAgIC8vIGl0
J3Mgbm90IGlkZWFsIGJlY2F1c2UgaXQgbWFrZXMgdGhlIENTU09NJ3MgYmVoYXZpb3IgZGVwZW5k
IG9uIHRoZSB0aW1pbmcgb2YgZ2FyYmFnZSBjb2xsZWN0aW9uLgorICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpXSkKKyAgICAgICAgICAgIG1fY2hpbGRS
dWxlQ1NTT01XcmFwcGVyc1tpXS0+c2V0UGFyZW50U3R5bGVTaGVldCgwKTsKKyAgICB9CisgICAg
aWYgKG1fbWVkaWFDU1NPTVdyYXBwZXIpCisgICAgICAgIG1fbWVkaWFDU1NPTVdyYXBwZXItPmNs
ZWFyUGFyZW50U3R5bGVTaGVldCgpOworCisgICAgbV9jb250ZW50cy0+dW5yZWdpc3RlckNsaWVu
dCh0aGlzKTsKK30KKwordm9pZCBDU1NTdHlsZVNoZWV0Ojp3aWxsTXV0YXRlUnVsZXMoKQorewor
ICAgIC8vIElmIHdlIGFyZSB0aGUgb25seSBjbGllbnQgaXQgaXMgc2FmZSB0byBtdXRhdGUuCisg
ICAgaWYgKG1fY29udGVudHMtPmhhc09uZUNsaWVudCgpICYmICFtX2NvbnRlbnRzLT5pc0luTWVt
b3J5Q2FjaGUoKSkgeworICAgICAgICBtX2NvbnRlbnRzLT5zZXRNdXRhYmxlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgLy8gT25seSBjYWNoZWFibGUgc3R5bGVzaGVldHMgc2hvdWxk
IGhhdmUgbXVsdGlwbGUgY2xpZW50cy4KKyAgICBBU1NFUlQobV9jb250ZW50cy0+aXNDYWNoZWFi
bGUoKSk7CisKKyAgICAvLyBDb3B5LW9uLXdyaXRlLgorICAgIG1fY29udGVudHMtPnVucmVnaXN0
ZXJDbGllbnQodGhpcyk7CisgICAgbV9jb250ZW50cyA9IG1fY29udGVudHMtPmNvcHkoKTsKKyAg
ICBtX2NvbnRlbnRzLT5yZWdpc3RlckNsaWVudCh0aGlzKTsKKworICAgIG1fY29udGVudHMtPnNl
dE11dGFibGUoKTsKKworICAgIC8vIEFueSBleGlzdGluZyBDU1NPTSB3cmFwcGVycyBuZWVkIHRv
IGJlIGNvbm5lY3RlZCB0byB0aGUgY29waWVkIGNoaWxkIHJ1bGVzLgorICAgIHJlYXR0YWNoQ2hp
bGRSdWxlQ1NTT01XcmFwcGVycygpOworfQorCit2b2lkIENTU1N0eWxlU2hlZXQ6OmRpZE11dGF0
ZVJ1bGVzKCkKK3sKKyAgICBBU1NFUlQobV9jb250ZW50cy0+aXNNdXRhYmxlKCkpOworICAgIEFT
U0VSVChtX2NvbnRlbnRzLT5oYXNPbmVDbGllbnQoKSk7CisKKyAgICBkaWRNdXRhdGUoKTsKK30K
Kwordm9pZCBDU1NTdHlsZVNoZWV0OjpkaWRNdXRhdGUoKQoreworICAgIERvY3VtZW50KiBvd25l
ciA9IG93bmVyRG9jdW1lbnQoKTsKKyAgICBpZiAoIW93bmVyKQorICAgICAgICByZXR1cm47Cisg
ICAgb3duZXItPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOworfQorCit2
b2lkIENTU1N0eWxlU2hlZXQ6OnJlYXR0YWNoQ2hpbGRSdWxlQ1NTT01XcmFwcGVycygpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAoIW1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpXSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaV0t
PnJlYXR0YWNoKG1fY29udGVudHMtPnJ1bGVBdChpKSk7CisgICAgfQorfQorCit2b2lkIENTU1N0
eWxlU2hlZXQ6OnNldERpc2FibGVkKGJvb2wgZGlzYWJsZWQpCit7IAorICAgIGlmIChkaXNhYmxl
ZCA9PSBtX2lzRGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzRGlzYWJsZWQgPSBk
aXNhYmxlZDsKKworICAgIGRpZE11dGF0ZSgpOworfQorCit2b2lkIENTU1N0eWxlU2hlZXQ6OnNl
dE1lZGlhUXVlcmllcyhQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcmllcykKK3sK
KyAgICBtX21lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllczsKK30KKwordW5zaWduZWQgQ1NTU3R5
bGVTaGVldDo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZW50cy0+cnVsZUNv
dW50KCk7Cit9CisKK0NTU1J1bGUqIENTU1N0eWxlU2hlZXQ6Oml0ZW0odW5zaWduZWQgaW5kZXgp
Cit7CisgICAgdW5zaWduZWQgcnVsZUNvdW50ID0gbGVuZ3RoKCk7CisgICAgaWYgKGluZGV4ID49
IHJ1bGVDb3VudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobV9jaGlsZFJ1bGVDU1NP
TVdyYXBwZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmdy
b3cocnVsZUNvdW50KTsKKyAgICBBU1NFUlQobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUo
KSA9PSBydWxlQ291bnQpOworICAgIAorICAgIFJlZlB0cjxDU1NSdWxlPiYgY3NzUnVsZSA9IG1f
Y2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF07CisgICAgaWYgKCFjc3NSdWxlKSB7CisgICAg
ICAgIGlmIChpbmRleCA9PSAwICYmIG1fY29udGVudHMtPmhhc0NoYXJzZXRSdWxlKCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghbV9jb250ZW50cy0+cnVsZUF0KDApKTsKKyAgICAgICAgICAgIGNz
c1J1bGUgPSBDU1NDaGFyc2V0UnVsZTo6Y3JlYXRlKHRoaXMsIG1fY29udGVudHMtPmVuY29kaW5n
RnJvbUNoYXJzZXRSdWxlKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNzc1J1bGUg
PSBtX2NvbnRlbnRzLT5ydWxlQXQoaW5kZXgpLT5jcmVhdGVDU1NPTVdyYXBwZXIodGhpcyk7Cisg
ICAgfQorICAgIHJldHVybiBjc3NSdWxlLmdldCgpOworfQorCitQYXNzUmVmUHRyPENTU1J1bGVM
aXN0PiBDU1NTdHlsZVNoZWV0OjpydWxlcygpCit7CisgICAgS1VSTCB1cmwgPSBtX2NvbnRlbnRz
LT5maW5hbFVSTCgpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG93bmVyRG9jdW1lbnQoKTsK
KyAgICBpZiAoIXVybC5pc0VtcHR5KCkgJiYgZG9jdW1lbnQgJiYgIWRvY3VtZW50LT5zZWN1cml0
eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpCisgICAgICAgIHJldHVybiAwOworICAgIC8vIElF
IGJlaGF2aW9yLgorICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gbm9uQ2hhcnNldFJ1bGVz
ID0gU3RhdGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOworICAgIHVuc2lnbmVkIHJ1bGVDb3VudCA9
IGxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlQ291bnQ7ICsraSkg
eworICAgICAgICBDU1NSdWxlKiBydWxlID0gaXRlbShpKTsKKyAgICAgICAgaWYgKHJ1bGUtPmlz
Q2hhcnNldFJ1bGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBub25DaGFyc2V0
UnVsZXMtPnJ1bGVzKCkuYXBwZW5kKHJ1bGUpOworICAgIH0KKyAgICByZXR1cm4gbm9uQ2hhcnNl
dFJ1bGVzLnJlbGVhc2UoKTsKK30KKwordW5zaWduZWQgQ1NTU3R5bGVTaGVldDo6aW5zZXJ0UnVs
ZShjb25zdCBTdHJpbmcmIHJ1bGVTdHJpbmcsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBBU1NFUlQobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmlzRW1wdHkoKSB8
fCBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpID09IG1fY29udGVudHMtPnJ1bGVDb3Vu
dCgpKTsKKworICAgIGVjID0gMDsKKyAgICBpZiAoaW5kZXggPiBsZW5ndGgoKSkgeworICAgICAg
ICBlYyA9IElOREVYX1NJWkVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ1NT
UGFyc2VyIHAobV9jb250ZW50cy0+cGFyc2VyQ29udGV4dCgpKTsKKyAgICBSZWZQdHI8U3R5bGVS
dWxlQmFzZT4gcnVsZSA9IHAucGFyc2VSdWxlKG1fY29udGVudHMuZ2V0KCksIHJ1bGVTdHJpbmcp
OworCisgICAgaWYgKCFydWxlKSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIFJ1bGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhp
cyk7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBtX2NvbnRlbnRzLT53cmFwcGVySW5zZXJ0UnVsZShy
dWxlLCBpbmRleCk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIGVjID0gSElFUkFSQ0hZ
X1JFUVVFU1RfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9ICAgICAgICAKKyAgICBpZiAo
IW1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkpCisgICAgICAgIG1fY2hpbGRSdWxl
Q1NTT01XcmFwcGVycy5pbnNlcnQoaW5kZXgsIFJlZlB0cjxDU1NSdWxlPigpKTsKKworICAgIHJl
dHVybiBpbmRleDsKK30KKwordm9pZCBDU1NTdHlsZVNoZWV0OjpkZWxldGVSdWxlKHVuc2lnbmVk
IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQobV9jaGlsZFJ1bGVDU1NP
TVdyYXBwZXJzLmlzRW1wdHkoKSB8fCBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpID09
IG1fY29udGVudHMtPnJ1bGVDb3VudCgpKTsKKworICAgIGVjID0gMDsKKyAgICBpZiAoaW5kZXgg
Pj0gbGVuZ3RoKCkpIHsKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBSdWxlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwor
CisgICAgbV9jb250ZW50cy0+d3JhcHBlckRlbGV0ZVJ1bGUoaW5kZXgpOworCisgICAgaWYgKCFt
X2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX2NoaWxk
UnVsZUNTU09NV3JhcHBlcnNbaW5kZXhdKQorICAgICAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdy
YXBwZXJzW2luZGV4XS0+c2V0UGFyZW50U3R5bGVTaGVldCgwKTsKKyAgICAgICAgbV9jaGlsZFJ1
bGVDU1NPTVdyYXBwZXJzLnJlbW92ZShpbmRleCk7CisgICAgfQorfQorCitpbnQgQ1NTU3R5bGVT
aGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBjb25zdCBTdHJpbmcmIHN0eWxl
LCBpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGluc2VydFJ1bGUoc2VsZWN0
b3IgKyAiIHsgIiArIHN0eWxlICsgIiB9IiwgaW5kZXgsIGVjKTsKKyAgICAKKyAgICAvLyBBcyBw
ZXIgTWljcm9zb2Z0IGRvY3VtZW50YXRpb24sIGFsd2F5cyByZXR1cm4gLTEuCisgICAgcmV0dXJu
IC0xOworfQorCitpbnQgQ1NTU3R5bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVj
dG9yLCBjb25zdCBTdHJpbmcmIHN0eWxlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1
cm4gYWRkUnVsZShzZWxlY3Rvciwgc3R5bGUsIGxlbmd0aCgpLCBlYyk7Cit9CisKKworUGFzc1Jl
ZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTaGVldDo6Y3NzUnVsZXMoKQoreworICAgIEtVUkwg
dXJsID0gbV9jb250ZW50cy0+ZmluYWxVUkwoKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBv
d25lckRvY3VtZW50KCk7CisgICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIGRvY3VtZW50ICYmICFk
b2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoIW1fcnVsZUxpc3RDU1NPTVdyYXBwZXIpCisgICAgICAgIG1fcnVsZUxp
c3RDU1NPTVdyYXBwZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTaGVldENTU1J1bGVMaXN0KHRoaXMp
KTsKKyAgICByZXR1cm4gbV9ydWxlTGlzdENTU09NV3JhcHBlci5nZXQoKTsKK30KKworTWVkaWFM
aXN0KiBDU1NTdHlsZVNoZWV0OjptZWRpYSgpIGNvbnN0IAoreyAKKyAgICBpZiAoIW1fbWVkaWFR
dWVyaWVzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghbV9tZWRpYUNTU09NV3JhcHBl
cikKKyAgICAgICAgbV9tZWRpYUNTU09NV3JhcHBlciA9IE1lZGlhTGlzdDo6Y3JlYXRlKG1fbWVk
aWFRdWVyaWVzLmdldCgpLCBjb25zdF9jYXN0PENTU1N0eWxlU2hlZXQqPih0aGlzKSk7CisgICAg
cmV0dXJuIG1fbWVkaWFDU1NPTVdyYXBwZXIuZ2V0KCk7Cit9CisKK0NTU1N0eWxlU2hlZXQqIENT
U1N0eWxlU2hlZXQ6OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCAKK3sgCisgICAgcmV0dXJuIG1f
b3duZXJSdWxlID8gbV9vd25lclJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7IAorfQorCitE
b2N1bWVudCogQ1NTU3R5bGVTaGVldDo6b3duZXJEb2N1bWVudCgpIGNvbnN0Cit7CisgICAgY29u
c3QgQ1NTU3R5bGVTaGVldCogcm9vdCA9IHRoaXM7CisgICAgd2hpbGUgKHJvb3QtPnBhcmVudFN0
eWxlU2hlZXQoKSkKKyAgICAgICAgcm9vdCA9IHJvb3QtPnBhcmVudFN0eWxlU2hlZXQoKTsKKyAg
ICByZXR1cm4gcm9vdC0+b3duZXJOb2RlKCkgPyByb290LT5vd25lck5vZGUoKS0+ZG9jdW1lbnQo
KSA6IDA7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTaGVldDo6Y2xlYXJDaGlsZFJ1bGVDU1NPTVdyYXBw
ZXJzKCkKK3sKKyAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuY2xlYXIoKTsKK30KKworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAJKHJldmlzaW9u
IDExODE5MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOSwyMSArMTksMTQgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250
ZW50cy5oIgogCi0jaW5jbHVkZSAiQ1NTQ2hhcnNldFJ1bGUuaCIKLSNpbmNsdWRlICJDU1NGb250
RmFjZVJ1bGUuaCIKICNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUGFy
c2VyLmgiCi0jaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVJ1bGUu
aCIKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVT
aGVldC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1
ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgogI2luY2x1ZGUgIlN0eWxlUnVs
ZS5oIgpAQCAtNDEsMzcgKzM0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBT
dHlsZVNoZWV0Q1NTUnVsZUxpc3QgOiBwdWJsaWMgQ1NTUnVsZUxpc3QgewotcHVibGljOgotICAg
IFN0eWxlU2hlZXRDU1NSdWxlTGlzdChDU1NTdHlsZVNoZWV0KiBzaGVldCkgOiBtX3N0eWxlU2hl
ZXQoc2hlZXQpIHsgfQotICAgIAotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgcmVmKCkgeyBt
X3N0eWxlU2hlZXQtPnJlZigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlcmVmKCkgeyBtX3N0eWxl
U2hlZXQtPmRlcmVmKCk7IH0KLSAgICAKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3R5bGVTaGVldC0+bGVuZ3RoKCk7IH0KLSAgICB2aXJ0dWFsIENTU1J1
bGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTaGVldC0+aXRl
bShpbmRleCk7IH0KLSAgICAKLSAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXQ7IH0KLSAgICAKLSAgICBDU1NTdHlsZVNoZWV0
KiBtX3N0eWxlU2hlZXQ7Ci19OwotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotc3RhdGljIGJvb2wg
aXNBY2NlcHRhYmxlQ1NTU3R5bGVTaGVldFBhcmVudChOb2RlKiBwYXJlbnROb2RlKQotewotICAg
IC8vIE9ubHkgdGhlc2Ugbm9kZXMgY2FuIGJlIHBhcmVudHMgb2YgU3R5bGVTaGVldHMsIGFuZCB0
aGV5IG5lZWQgdG8gY2FsbCBjbGVhck93bmVyTm9kZSgpIHdoZW4gbW92ZWQgb3V0IG9mIGRvY3Vt
ZW50LgotICAgIHJldHVybiAhcGFyZW50Tm9kZQotICAgICAgICB8fCBwYXJlbnROb2RlLT5pc0Rv
Y3VtZW50Tm9kZSgpCi0gICAgICAgIHx8IHBhcmVudE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpsaW5rVGFnKQotICAgICAgICB8fCBwYXJlbnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
c3R5bGVUYWcpCi0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgfHwgcGFyZW50Tm9kZS0+aGFzVGFn
TmFtZShTVkdOYW1lczo6c3R5bGVUYWcpCi0jZW5kaWYKLSAgICAgICAgfHwgcGFyZW50Tm9kZS0+
bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU7Ci19Ci0jZW5k
aWYKLQogLy8gUm91Z2ggc2l6ZSBlc3RpbWF0ZSBmb3IgdGhlIG1lbW9yeSBjYWNoZS4KIHVuc2ln
bmVkIFN0eWxlU2hlZXRDb250ZW50czo6ZXN0aW1hdGVkU2l6ZUluQnl0ZXMoKSBjb25zdAogewpA
QCAtNDc4LDI1MSArNDQwLDQgQEAgdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnJlbW92ZWRGcm9t
TWVtbwogICAgIG1faXNJbk1lbW9yeUNhY2hlID0gZmFsc2U7CiB9CiAKLVBhc3NSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKE5vZGUqIG93bmVyTm9kZSwg
Y29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBlbmNvZGluZykKLXsKLSAgICBDU1NQ
YXJzZXJDb250ZXh0IHBhcnNlckNvbnRleHQob3duZXJOb2RlLT5kb2N1bWVudCgpLCBiYXNlVVJM
LCBlbmNvZGluZyk7Ci0gICAgUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gc2hlZXQgPSBTdHls
ZVNoZWV0Q29udGVudHM6OmNyZWF0ZShiYXNlVVJMLnN0cmluZygpLCBiYXNlVVJMLCBwYXJzZXJD
b250ZXh0KTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQoc2hlZXQucmVs
ZWFzZSgpLCBvd25lck5vZGUpKTsKLX0KLQotQ1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVldChQ
YXNzUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gY29udGVudHMsIENTU0ltcG9ydFJ1bGUqIG93
bmVyUnVsZSkKLSAgICA6IG1fY29udGVudHMoY29udGVudHMpCi0gICAgLCBtX2lzRGlzYWJsZWQo
ZmFsc2UpCi0gICAgLCBtX293bmVyTm9kZSgwKQotICAgICwgbV9vd25lclJ1bGUob3duZXJSdWxl
KQotewotICAgIG1fY29udGVudHMtPnJlZ2lzdGVyQ2xpZW50KHRoaXMpOwotfQotCi1DU1NTdHls
ZVNoZWV0OjpDU1NTdHlsZVNoZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiBjb250
ZW50cywgTm9kZSogb3duZXJOb2RlKQotICAgIDogbV9jb250ZW50cyhjb250ZW50cykKLSAgICAs
IG1faXNEaXNhYmxlZChmYWxzZSkKLSAgICAsIG1fb3duZXJOb2RlKG93bmVyTm9kZSkKLSAgICAs
IG1fb3duZXJSdWxlKDApCi17Ci0gICAgQVNTRVJUKGlzQWNjZXB0YWJsZUNTU1N0eWxlU2hlZXRQ
YXJlbnQob3duZXJOb2RlKSk7Ci0gICAgbV9jb250ZW50cy0+cmVnaXN0ZXJDbGllbnQodGhpcyk7
Ci19Ci0KLUNTU1N0eWxlU2hlZXQ6On5DU1NTdHlsZVNoZWV0KCkKLXsKLSAgICAvLyBGb3Igc3R5
bGUgcnVsZXMgb3V0c2lkZSB0aGUgZG9jdW1lbnQsIC5wYXJlbnRTdHlsZVNoZWV0IGNhbiBiZWNv
bWUgbnVsbCBldmVuIGlmIHRoZSBzdHlsZSBydWxlCi0gICAgLy8gaXMgc3RpbGwgb2JzZXJ2YWJs
ZSBmcm9tIEphdmFTY3JpcHQuIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2YgLnBhcmVudE5v
ZGUgZm9yIG5vZGVzLCBidXQKLSAgICAvLyBpdCdzIG5vdCBpZGVhbCBiZWNhdXNlIGl0IG1ha2Vz
IHRoZSBDU1NPTSdzIGJlaGF2aW9yIGRlcGVuZCBvbiB0aGUgdGltaW5nIG9mIGdhcmJhZ2UgY29s
bGVjdGlvbi4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jaGlsZFJ1bGVDU1NPTVdy
YXBwZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NoaWxkUnVsZUNTU09NV3JhcHBl
cnNbaV0pCi0gICAgICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaV0tPnNldFBhcmVu
dFN0eWxlU2hlZXQoMCk7Ci0gICAgfQotICAgIGlmIChtX21lZGlhQ1NTT01XcmFwcGVyKQotICAg
ICAgICBtX21lZGlhQ1NTT01XcmFwcGVyLT5jbGVhclBhcmVudFN0eWxlU2hlZXQoKTsKLQotICAg
IG1fY29udGVudHMtPnVucmVnaXN0ZXJDbGllbnQodGhpcyk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVT
aGVldDo6d2lsbE11dGF0ZVJ1bGVzKCkKLXsKLSAgICAvLyBJZiB3ZSBhcmUgdGhlIG9ubHkgY2xp
ZW50IGl0IGlzIHNhZmUgdG8gbXV0YXRlLgotICAgIGlmIChtX2NvbnRlbnRzLT5oYXNPbmVDbGll
bnQoKSAmJiAhbV9jb250ZW50cy0+aXNJbk1lbW9yeUNhY2hlKCkpIHsKLSAgICAgICAgbV9jb250
ZW50cy0+c2V0TXV0YWJsZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIE9ubHkg
Y2FjaGVhYmxlIHN0eWxlc2hlZXRzIHNob3VsZCBoYXZlIG11bHRpcGxlIGNsaWVudHMuCi0gICAg
QVNTRVJUKG1fY29udGVudHMtPmlzQ2FjaGVhYmxlKCkpOwotCi0gICAgLy8gQ29weS1vbi13cml0
ZS4KLSAgICBtX2NvbnRlbnRzLT51bnJlZ2lzdGVyQ2xpZW50KHRoaXMpOwotICAgIG1fY29udGVu
dHMgPSBtX2NvbnRlbnRzLT5jb3B5KCk7Ci0gICAgbV9jb250ZW50cy0+cmVnaXN0ZXJDbGllbnQo
dGhpcyk7Ci0KLSAgICBtX2NvbnRlbnRzLT5zZXRNdXRhYmxlKCk7Ci0KLSAgICAvLyBBbnkgZXhp
c3RpbmcgQ1NTT00gd3JhcHBlcnMgbmVlZCB0byBiZSBjb25uZWN0ZWQgdG8gdGhlIGNvcGllZCBj
aGlsZCBydWxlcy4KLSAgICByZWF0dGFjaENoaWxkUnVsZUNTU09NV3JhcHBlcnMoKTsKLX0KLQot
dm9pZCBDU1NTdHlsZVNoZWV0OjpkaWRNdXRhdGVSdWxlcygpCi17Ci0gICAgQVNTRVJUKG1fY29u
dGVudHMtPmlzTXV0YWJsZSgpKTsKLSAgICBBU1NFUlQobV9jb250ZW50cy0+aGFzT25lQ2xpZW50
KCkpOwotCi0gICAgZGlkTXV0YXRlKCk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTaGVldDo6ZGlkTXV0
YXRlKCkKLXsKLSAgICBEb2N1bWVudCogb3duZXIgPSBvd25lckRvY3VtZW50KCk7Ci0gICAgaWYg
KCFvd25lcikKLSAgICAgICAgcmV0dXJuOwotICAgIG93bmVyLT5zdHlsZVJlc29sdmVyQ2hhbmdl
ZChEZWZlclJlY2FsY1N0eWxlKTsKLX0KLQotdm9pZCBDU1NTdHlsZVNoZWV0OjpyZWF0dGFjaENo
aWxkUnVsZUNTU09NV3JhcHBlcnMoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFtX2No
aWxkUnVsZUNTU09NV3JhcHBlcnNbaV0pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
bV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldLT5yZWF0dGFjaChtX2NvbnRlbnRzLT5ydWxlQXQo
aSkpOwotICAgIH0KLX0KLQotdm9pZCBDU1NTdHlsZVNoZWV0OjpzZXREaXNhYmxlZChib29sIGRp
c2FibGVkKQoteyAKLSAgICBpZiAoZGlzYWJsZWQgPT0gbV9pc0Rpc2FibGVkKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9pc0Rpc2FibGVkID0gZGlzYWJsZWQ7Ci0KLSAgICBkaWRNdXRhdGUoKTsK
LX0KLQotdm9pZCBDU1NTdHlsZVNoZWV0OjpzZXRNZWRpYVF1ZXJpZXMoUGFzc1JlZlB0cjxNZWRp
YVF1ZXJ5U2V0PiBtZWRpYVF1ZXJpZXMpCi17Ci0gICAgbV9tZWRpYVF1ZXJpZXMgPSBtZWRpYVF1
ZXJpZXM7Ci19Ci0KLXVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omxlbmd0aCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fY29udGVudHMtPnJ1bGVDb3VudCgpOwotfQotCi1DU1NSdWxlKiBDU1NTdHls
ZVNoZWV0OjppdGVtKHVuc2lnbmVkIGluZGV4KQotewotICAgIHVuc2lnbmVkIHJ1bGVDb3VudCA9
IGxlbmd0aCgpOwotICAgIGlmIChpbmRleCA+PSBydWxlQ291bnQpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkpCi0gICAgICAg
IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5ncm93KHJ1bGVDb3VudCk7Ci0gICAgQVNTRVJUKG1f
Y2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCkgPT0gcnVsZUNvdW50KTsKLSAgICAKLSAgICBS
ZWZQdHI8Q1NTUnVsZT4mIGNzc1J1bGUgPSBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaW5kZXhd
OwotICAgIGlmICghY3NzUnVsZSkgewotICAgICAgICBpZiAoaW5kZXggPT0gMCAmJiBtX2NvbnRl
bnRzLT5oYXNDaGFyc2V0UnVsZSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fY29udGVudHMt
PnJ1bGVBdCgwKSk7Ci0gICAgICAgICAgICBjc3NSdWxlID0gQ1NTQ2hhcnNldFJ1bGU6OmNyZWF0
ZSh0aGlzLCBtX2NvbnRlbnRzLT5lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZSgpKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBjc3NSdWxlID0gbV9jb250ZW50cy0+cnVsZUF0KGluZGV4KS0+
Y3JlYXRlQ1NTT01XcmFwcGVyKHRoaXMpOwotICAgIH0KLSAgICByZXR1cm4gY3NzUnVsZS5nZXQo
KTsKLX0KLQotUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTaGVldDo6cnVsZXMoKQot
ewotICAgIEtVUkwgdXJsID0gbV9jb250ZW50cy0+ZmluYWxVUkwoKTsKLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBvd25lckRvY3VtZW50KCk7Ci0gICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmIGRv
Y3VtZW50ICYmICFkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdCh1cmwpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBJRSBiZWhhdmlvci4KLSAgICBSZWZQdHI8U3RhdGlj
Q1NTUnVsZUxpc3Q+IG5vbkNoYXJzZXRSdWxlcyA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUo
KTsKLSAgICB1bnNpZ25lZCBydWxlQ291bnQgPSBsZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcnVsZUNvdW50OyArK2kpIHsKLSAgICAgICAgQ1NTUnVsZSogcnVsZSA9IGl0
ZW0oaSk7Ci0gICAgICAgIGlmIChydWxlLT5pc0NoYXJzZXRSdWxlKCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgbm9uQ2hhcnNldFJ1bGVzLT5ydWxlcygpLmFwcGVuZChydWxlKTsK
LSAgICB9Ci0gICAgcmV0dXJuIG5vbkNoYXJzZXRSdWxlcy5yZWxlYXNlKCk7Ci19Ci0KLXVuc2ln
bmVkIENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlU3RyaW5nLCB1
bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKG1fY2hpbGRS
dWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkgfHwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNp
emUoKSA9PSBtX2NvbnRlbnRzLT5ydWxlQ291bnQoKSk7Ci0KLSAgICBlYyA9IDA7Ci0gICAgaWYg
KGluZGV4ID4gbGVuZ3RoKCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIENTU1BhcnNlciBwKG1fY29udGVudHMtPnBhcnNlckNv
bnRleHQoKSk7Ci0gICAgUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUgPSBwLnBhcnNlUnVsZSht
X2NvbnRlbnRzLmdldCgpLCBydWxlU3RyaW5nKTsKLQotICAgIGlmICghcnVsZSkgewotICAgICAg
ICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBSdWxlTXV0
YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwotCi0gICAgYm9vbCBzdWNjZXNzID0gbV9j
b250ZW50cy0+d3JhcHBlckluc2VydFJ1bGUocnVsZSwgaW5kZXgpOwotICAgIGlmICghc3VjY2Vz
cykgewotICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfSAgICAgICAgCi0gICAgaWYgKCFtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNF
bXB0eSgpKQotICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaW5zZXJ0KGluZGV4LCBS
ZWZQdHI8Q1NTUnVsZT4oKSk7Ci0KLSAgICByZXR1cm4gaW5kZXg7Ci19Ci0KLXZvaWQgQ1NTU3R5
bGVTaGVldDo6ZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgQVNTRVJUKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkgfHwgbV9jaGls
ZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKSA9PSBtX2NvbnRlbnRzLT5ydWxlQ291bnQoKSk7Ci0K
LSAgICBlYyA9IDA7Ci0gICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKSB7Ci0gICAgICAgIGVjID0g
SU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUnVsZU11dGF0aW9u
U2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKLQotICAgIG1fY29udGVudHMtPndyYXBwZXJEZWxl
dGVSdWxlKGluZGV4KTsKLQotICAgIGlmICghbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmlzRW1w
dHkoKSkgewotICAgICAgICBpZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2luZGV4XSkKLSAg
ICAgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF0tPnNldFBhcmVudFN0eWxl
U2hlZXQoMCk7Ci0gICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5yZW1vdmUoaW5kZXgp
OwotICAgIH0KLX0KLQotaW50IENTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBpbnNlcnRSdWxlKHNlbGVjdG9yICsgIiB7ICIgKyBzdHlsZSArICIgfSIsIGlu
ZGV4LCBlYyk7Ci0gICAgCi0gICAgLy8gQXMgcGVyIE1pY3Jvc29mdCBkb2N1bWVudGF0aW9uLCBh
bHdheXMgcmV0dXJuIC0xLgotICAgIHJldHVybiAtMTsKLX0KLQotaW50IENTU1N0eWxlU2hlZXQ6
OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGFkZFJ1bGUoc2VsZWN0b3IsIHN0eWxlLCBs
ZW5ndGgoKSwgZWMpOwotfQotCi0KLVBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2hl
ZXQ6OmNzc1J1bGVzKCkKLXsKLSAgICBLVVJMIHVybCA9IG1fY29udGVudHMtPmZpbmFsVVJMKCk7
Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gb3duZXJEb2N1bWVudCgpOwotICAgIGlmICghdXJs
LmlzRW1wdHkoKSAmJiBkb2N1bWVudCAmJiAhZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPmNh
blJlcXVlc3QodXJsKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX3J1bGVMaXN0Q1NT
T01XcmFwcGVyKQotICAgICAgICBtX3J1bGVMaXN0Q1NTT01XcmFwcGVyID0gYWRvcHRQdHIobmV3
IFN0eWxlU2hlZXRDU1NSdWxlTGlzdCh0aGlzKSk7Ci0gICAgcmV0dXJuIG1fcnVsZUxpc3RDU1NP
TVdyYXBwZXIuZ2V0KCk7Ci19Ci0KLU1lZGlhTGlzdCogQ1NTU3R5bGVTaGVldDo6bWVkaWEoKSBj
b25zdCAKLXsgCi0gICAgaWYgKCFtX21lZGlhUXVlcmllcykKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBpZiAoIW1fbWVkaWFDU1NPTVdyYXBwZXIpCi0gICAgICAgIG1fbWVkaWFDU1NPTVdyYXBw
ZXIgPSBNZWRpYUxpc3Q6OmNyZWF0ZShtX21lZGlhUXVlcmllcy5nZXQoKSwgY29uc3RfY2FzdDxD
U1NTdHlsZVNoZWV0Kj4odGhpcykpOwotICAgIHJldHVybiBtX21lZGlhQ1NTT01XcmFwcGVyLmdl
dCgpOwotfQotCi1DU1NTdHlsZVNoZWV0KiBDU1NTdHlsZVNoZWV0OjpwYXJlbnRTdHlsZVNoZWV0
KCkgY29uc3QgCi17IAotICAgIHJldHVybiBtX293bmVyUnVsZSA/IG1fb3duZXJSdWxlLT5wYXJl
bnRTdHlsZVNoZWV0KCkgOiAwOyAKLX0KLQotRG9jdW1lbnQqIENTU1N0eWxlU2hlZXQ6Om93bmVy
RG9jdW1lbnQoKSBjb25zdAotewotICAgIGNvbnN0IENTU1N0eWxlU2hlZXQqIHJvb3QgPSB0aGlz
OwotICAgIHdoaWxlIChyb290LT5wYXJlbnRTdHlsZVNoZWV0KCkpCi0gICAgICAgIHJvb3QgPSBy
b290LT5wYXJlbnRTdHlsZVNoZWV0KCk7Ci0gICAgcmV0dXJuIHJvb3QtPm93bmVyTm9kZSgpID8g
cm9vdC0+b3duZXJOb2RlKCktPmRvY3VtZW50KCkgOiAwOwotfQotCi12b2lkIENTU1N0eWxlU2hl
ZXQ6OmNsZWFyQ2hpbGRSdWxlQ1NTT01XcmFwcGVycygpCi17Ci0gICAgbV9jaGlsZFJ1bGVDU1NP
TVdyYXBwZXJzLmNsZWFyKCk7Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVNoZWV0Q29udGVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
aGVldENvbnRlbnRzLmgJKHJldmlzaW9uIDExODE5NCkJKGZyb20gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2hlZXQuaDoxMTgxOTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVl
dENvbnRlbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiAoQykg
MTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIENTU1N0eWxlU2hlZXRfaAorI2RlZmluZSBDU1NTdHlsZVNo
ZWV0X2gKKworI2luY2x1ZGUgIkNTU1BhcnNlck1vZGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlLmgi
CisjaW5jbHVkZSAiU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5n
SGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU0NoYXJzZXRSdWxlOwor
Y2xhc3MgQ1NTSW1wb3J0UnVsZTsKK2NsYXNzIENTU1BhcnNlcjsKK2NsYXNzIENTU1J1bGU7Citj
bGFzcyBDU1NSdWxlTGlzdDsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBDYWNoZWRDU1NT
dHlsZVNoZWV0OworY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CitjbGFzcyBEb2N1bWVudDsK
K2NsYXNzIE1lZGlhUXVlcnlTZXQ7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFN0eWxl
UnVsZUJhc2U7CitjbGFzcyBTdHlsZVJ1bGVJbXBvcnQ7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7CisKK2NsYXNzIFN0eWxlU2hlZXRDb250ZW50cyA6IHB1YmxpYyBSZWZDb3VudGVkPFN0
eWxlU2hlZXRDb250ZW50cz4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxl
U2hlZXRDb250ZW50cz4gY3JlYXRlKGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQgPSBD
U1NQYXJzZXJDb250ZXh0KENTU1N0cmljdE1vZGUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTdHlsZVNoZWV0Q29udGVudHMoMCwgU3RyaW5nKCksIEtVUkwoKSwgY29udGV4
dCkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU3R5bGVTaGVldENvbnRlbnRzKDAsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCwgY29u
dGV4dCkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+
IGNyZWF0ZShTdHlsZVJ1bGVJbXBvcnQqIG93bmVyUnVsZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5h
bFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRl
eHQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlU2hlZXRDb250ZW50
cyhvd25lclJ1bGUsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCwgY29udGV4dCkpOworICAgIH0KKwor
ICAgIH5TdHlsZVNoZWV0Q29udGVudHMoKTsKKyAgICAKKyAgICBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBwYXJzZXJDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZXJDb250ZXh0OyB9CisK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNT
dHJpbmcmIHByZWZpeCk7CisKKyAgICB2b2lkIHBhcnNlQXV0aG9yU3R5bGVTaGVldChjb25zdCBD
YWNoZWRDU1NTdHlsZVNoZWV0KiwgY29uc3QgU2VjdXJpdHlPcmlnaW4qKTsKKyAgICBib29sIHBh
cnNlU3RyaW5nKGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgcGFyc2VTdHJpbmdBdExpbmUoY29u
c3QgU3RyaW5nJiwgaW50IHN0YXJ0TGluZU51bWJlcik7CisKKyAgICBib29sIGlzQ2FjaGVhYmxl
KCkgY29uc3Q7CisKKyAgICBib29sIGlzTG9hZGluZygpIGNvbnN0OworCisgICAgdm9pZCBjaGVj
a0xvYWRlZCgpOworICAgIHZvaWQgc3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCk7CisKKyAgICBT
dHlsZVNoZWV0Q29udGVudHMqIHJvb3RTdHlsZVNoZWV0KCkgY29uc3Q7CisgICAgTm9kZSogc2lu
Z2xlT3duZXJOb2RlKCkgY29uc3Q7CisgICAgRG9jdW1lbnQqIHNpbmdsZU93bmVyRG9jdW1lbnQo
KSBjb25zdDsKKworICAgIGNvbnN0IFN0cmluZyYgY2hhcnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFyc2VyQ29udGV4dC5jaGFyc2V0OyB9CisKKyAgICBib29sIGxvYWRDb21wbGV0ZWQoKSBjb25z
dCB7IHJldHVybiBtX2xvYWRDb21wbGV0ZWQ7IH0KKworICAgIEtVUkwgY29tcGxldGVVUkwoY29u
c3QgU3RyaW5nJiB1cmwpIGNvbnN0OworICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMo
TGlzdEhhc2hTZXQ8S1VSTD4mKTsKKworICAgIHZvaWQgc2V0SXNVc2VyU3R5bGVTaGVldChib29s
IGIpIHsgbV9pc1VzZXJTdHlsZVNoZWV0ID0gYjsgfQorICAgIGJvb2wgaXNVc2VyU3R5bGVTaGVl
dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNVc2VyU3R5bGVTaGVldDsgfQorICAgIHZvaWQgc2V0SGFz
U3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKGJvb2wgYikgeyBtX2hhc1N5bnRhY3RpY2FsbHlW
YWxpZENTU0hlYWRlciA9IGI7IH0KKyAgICBib29sIGhhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hl
YWRlcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyOyB9
CisKKyAgICB2b2lkIHBhcnNlckFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZp
eCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpOworICAgIHZvaWQgcGFyc2VyQXBwZW5kUnVsZShQ
YXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+KTsKKyAgICB2b2lkIHBhcnNlclNldEVuY29kaW5nRnJv
bUNoYXJzZXRSdWxlKGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpOyAKKyAgICB2b2lkIHBhcnNlclNl
dFVzZXNSZW1Vbml0cyhib29sIGIpIHsgbV91c2VzUmVtVW5pdHMgPSBiOyB9CisKKyAgICB2b2lk
IGNsZWFyUnVsZXMoKTsKKworICAgIGJvb2wgaGFzQ2hhcnNldFJ1bGUoKSBjb25zdCB7IHJldHVy
biAhbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZS5pc051bGwoKTsgfQorICAgIFN0cmluZyBlbmNv
ZGluZ0Zyb21DaGFyc2V0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RpbmdGcm9tQ2hhcnNl
dFJ1bGU7IH0KKyAgICAvLyBSdWxlcyBvdGhlciB0aGFuIEBjaGFyc2V0IGFuZCBAaW1wb3J0Lgor
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fY2hpbGRSdWxlczsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5
bGVSdWxlSW1wb3J0PiA+JiBpbXBvcnRSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0UnVs
ZXM7IH0KKworICAgIHZvaWQgbm90aWZ5TG9hZGVkU2hlZXQoY29uc3QgQ2FjaGVkQ1NTU3R5bGVT
aGVldCopOworICAgIAorICAgIFN0eWxlU2hlZXRDb250ZW50cyogcGFyZW50U3R5bGVTaGVldCgp
IGNvbnN0OworICAgIFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlKCkgY29uc3QgeyByZXR1cm4g
bV9vd25lclJ1bGU7IH0KKyAgICB2b2lkIGNsZWFyT3duZXJSdWxlKCkgeyBtX293bmVyUnVsZSA9
IDA7IH0KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgaHJlZiBpcyB0aGUgVVJMIHRoYXQgc3RhcnRl
ZCB0aGUgcmVkaXJlY3QgY2hhaW4gdGhhdCBsZWQgdG8KKyAgICAvLyB0aGlzIHN0eWxlIHNoZWV0
LiBUaGlzIHByb3BlcnR5IHByb2JhYmx5IGlzbid0IHVzZWZ1bCBmb3IgbXVjaCBleGNlcHQKKyAg
ICAvLyB0aGUgSmF2YVNjcmlwdCBiaW5kaW5nICh3aGljaCBuZWVkcyB0byB1c2UgdGhpcyB2YWx1
ZSBmb3Igc2VjdXJpdHkpLgorICAgIFN0cmluZyBvcmlnaW5hbFVSTCgpIGNvbnN0IHsgcmV0dXJu
IG1fb3JpZ2luYWxVUkw7IH0KKyAgICAKKyAgICBjb25zdCBLVVJMJiBmaW5hbFVSTCgpIGNvbnN0
IHsgcmV0dXJuIG1fZmluYWxVUkw7IH0KKyAgICBjb25zdCBLVVJMJiBiYXNlVVJMKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJzZXJDb250ZXh0LmJhc2VVUkw7IH0KKworICAgIHVuc2lnbmVkIHJ1bGVD
b3VudCgpIGNvbnN0OworICAgIFN0eWxlUnVsZUJhc2UqIHJ1bGVBdCh1bnNpZ25lZCBpbmRleCkg
Y29uc3Q7CisKKyAgICBib29sIHVzZXNSZW1Vbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc1Jl
bVVuaXRzOyB9CisKKyAgICB1bnNpZ25lZCBlc3RpbWF0ZWRTaXplSW5CeXRlcygpIGNvbnN0Owor
ICAgIAorICAgIGJvb2wgd3JhcHBlckluc2VydFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNl
PiwgdW5zaWduZWQgaW5kZXgpOworICAgIHZvaWQgd3JhcHBlckRlbGV0ZVJ1bGUodW5zaWduZWQg
aW5kZXgpOworCisgICAgUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IGNvcHkoKSBjb25z
dCB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGVldENvbnRlbnRzKCp0aGlzKSk7IH0KKwor
ICAgIHZvaWQgcmVnaXN0ZXJDbGllbnQoQ1NTU3R5bGVTaGVldCopOworICAgIHZvaWQgdW5yZWdp
c3RlckNsaWVudChDU1NTdHlsZVNoZWV0Kik7CisgICAgYm9vbCBoYXNPbmVDbGllbnQoKSB7IHJl
dHVybiBtX2NsaWVudHMuc2l6ZSgpID09IDE7IH0KKworICAgIGJvb2wgaXNNdXRhYmxlKCkgY29u
c3QgeyByZXR1cm4gbV9pc011dGFibGU7IH0KKyAgICB2b2lkIHNldE11dGFibGUoKSB7IG1faXNN
dXRhYmxlID0gdHJ1ZTsgfQorCisgICAgYm9vbCBpc0luTWVtb3J5Q2FjaGUoKSBjb25zdCB7IHJl
dHVybiBtX2lzSW5NZW1vcnlDYWNoZTsgfQorICAgIHZvaWQgYWRkZWRUb01lbW9yeUNhY2hlKCk7
CisgICAgdm9pZCByZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7CisKK3ByaXZhdGU6CisgICAgU3R5
bGVTaGVldENvbnRlbnRzKFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlLCBjb25zdCBTdHJpbmcm
IG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
Jik7CisgICAgU3R5bGVTaGVldENvbnRlbnRzKGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyYpOwor
CisgICAgdm9pZCBjbGVhckNoYXJzZXRSdWxlKCk7CisKKyAgICBTdHlsZVJ1bGVJbXBvcnQqIG1f
b3duZXJSdWxlOworCisgICAgU3RyaW5nIG1fb3JpZ2luYWxVUkw7CisgICAgS1VSTCBtX2ZpbmFs
VVJMOworCisgICAgU3RyaW5nIG1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGU7CisgICAgVmVjdG9y
PFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+ID4gbV9pbXBvcnRSdWxlczsKKyAgICBWZWN0b3I8UmVm
UHRyPFN0eWxlUnVsZUJhc2U+ID4gbV9jaGlsZFJ1bGVzOworICAgIHR5cGVkZWYgSGFzaE1hcDxB
dG9taWNTdHJpbmcsIEF0b21pY1N0cmluZz4gUHJlZml4TmFtZXNwYWNlVVJJTWFwOworICAgIFBy
ZWZpeE5hbWVzcGFjZVVSSU1hcCBtX25hbWVzcGFjZXM7CisKKyAgICBib29sIG1fbG9hZENvbXBs
ZXRlZCA6IDE7CisgICAgYm9vbCBtX2lzVXNlclN0eWxlU2hlZXQgOiAxOworICAgIGJvb2wgbV9o
YXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIgOiAxOworICAgIGJvb2wgbV9kaWRMb2FkRXJy
b3JPY2N1ciA6IDE7CisgICAgYm9vbCBtX3VzZXNSZW1Vbml0cyA6IDE7CisgICAgYm9vbCBtX2lz
TXV0YWJsZSA6IDE7CisgICAgYm9vbCBtX2lzSW5NZW1vcnlDYWNoZSA6IDE7CisgICAgCisgICAg
Q1NTUGFyc2VyQ29udGV4dCBtX3BhcnNlckNvbnRleHQ7CisKKyAgICBWZWN0b3I8Q1NTU3R5bGVT
aGVldCo+IG1fY2xpZW50czsKK307CisKK2NsYXNzIENTU1N0eWxlU2hlZXQgOiBwdWJsaWMgU3R5
bGVTaGVldCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVh
dGUoUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IHNoZWV0LCBDU1NJbXBvcnRSdWxlKiBv
d25lclJ1bGUgPSAwKSAKKyAgICB7IAorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0
eWxlU2hlZXQoc2hlZXQsIG93bmVyUnVsZSkpOworICAgIH0KKyAgICBzdGF0aWMgUmVmUHRyPENT
U1N0eWxlU2hlZXQ+IGNyZWF0ZShQYXNzUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gc2hlZXQs
IE5vZGUqIG93bmVyTm9kZSkKKyAgICB7IAorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENT
U1N0eWxlU2hlZXQoc2hlZXQsIG93bmVyTm9kZSkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGVJbmxpbmUoTm9kZSosIGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmIGVuY29kaW5nID0gU3RyaW5nKCkpOworCisgICAgdmlydHVhbCB+Q1NTU3R5bGVT
aGVldCgpOworCisgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBOb2RlKiBvd25lck5vZGUoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBtX293bmVyTm9kZTsgfQorICAgIHZpcnR1YWwgTWVkaWFMaXN0KiBtZWRp
YSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGhyZWYoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBtX2NvbnRlbnRzLT5vcmlnaW5hbFVSTCgpOyB9CisgICAgdmlydHVhbCBT
dHJpbmcgdGl0bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3RpdGxlOyB9CisgICAgdmly
dHVhbCBib29sIGRpc2FibGVkKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0Rpc2FibGVk
OyB9CisgICAgdmlydHVhbCB2b2lkIHNldERpc2FibGVkKGJvb2wpIE9WRVJSSURFOworICAgIAor
ICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNzc1J1bGVzKCk7CisgICAgdW5zaWduZWQgaW5z
ZXJ0UnVsZShjb25zdCBTdHJpbmcmIHJ1bGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCBkZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJik7
CisgICAgCisgICAgLy8gSUUgRXh0ZW5zaW9ucworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+
IHJ1bGVzKCk7CisgICAgaW50IGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3Qg
U3RyaW5nJiBzdHlsZSwgaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgaW50IGFkZFJ1
bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZvaWQgcmVtb3ZlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgZGVsZXRlUnVsZShpbmRleCwgZWMpOyB9CisgICAgCisgICAgLy8gRm9yIENTU1J1
bGVMaXN0LgorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIENTU1J1bGUqIGl0ZW0o
dW5zaWduZWQgaW5kZXgpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyT3duZXJOb2RlKCkgT1ZF
UlJJREUgeyBtX293bmVyTm9kZSA9IDA7IH0KKyAgICB2aXJ0dWFsIENTU0ltcG9ydFJ1bGUqIG93
bmVyUnVsZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fb3duZXJSdWxlOyB9CisgICAgdmly
dHVhbCBLVVJMIGJhc2VVUkwoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2NvbnRlbnRzLT5i
YXNlVVJMKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gbV9jb250ZW50cy0+aXNMb2FkaW5nKCk7IH0KKyAgICAKKyAgICB2b2lkIGNsZWFy
T3duZXJSdWxlKCkgeyBtX293bmVyUnVsZSA9IDA7IH0KKyAgICBEb2N1bWVudCogb3duZXJEb2N1
bWVudCgpIGNvbnN0OworICAgIE1lZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcygpIGNvbnN0IHsg
cmV0dXJuIG1fbWVkaWFRdWVyaWVzLmdldCgpOyB9CisgICAgdm9pZCBzZXRNZWRpYVF1ZXJpZXMo
UGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7CisgICAgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJp
bmcmIHRpdGxlKSB7IG1fdGl0bGUgPSB0aXRsZTsgfQorCisgICAgY2xhc3MgUnVsZU11dGF0aW9u
U2NvcGUgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSdWxlTXV0YXRpb25TY29wZSk7
CisgICAgcHVibGljOgorICAgICAgICBSdWxlTXV0YXRpb25TY29wZShDU1NTdHlsZVNoZWV0Kik7
CisgICAgICAgIFJ1bGVNdXRhdGlvblNjb3BlKENTU1J1bGUqKTsKKyAgICAgICAgflJ1bGVNdXRh
dGlvblNjb3BlKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBDU1NTdHlsZVNoZWV0KiBtX3N0
eWxlU2hlZXQ7CisgICAgfTsKKworICAgIHZvaWQgd2lsbE11dGF0ZVJ1bGVzKCk7CisgICAgdm9p
ZCBkaWRNdXRhdGVSdWxlcygpOworICAgIHZvaWQgZGlkTXV0YXRlKCk7CisgICAgCisgICAgdm9p
ZCBjbGVhckNoaWxkUnVsZUNTU09NV3JhcHBlcnMoKTsKKyAgICB2b2lkIHJlYXR0YWNoQ2hpbGRS
dWxlQ1NTT01XcmFwcGVycygpOworCisgICAgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHMuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBDU1NT
dHlsZVNoZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiwgQ1NTSW1wb3J0UnVsZSog
b3duZXJSdWxlKTsKKyAgICBDU1NTdHlsZVNoZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVldENvbnRl
bnRzPiwgTm9kZSogb3duZXJOb2RlKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0NTU1N0eWxlU2hl
ZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuICJ0ZXh0L2NzcyI7IH0KKyAgICAKKyAgICBSZWZQdHI8U3R5bGVTaGVldENv
bnRlbnRzPiBtX2NvbnRlbnRzOworICAgIGJvb2wgbV9pc0Rpc2FibGVkOworICAgIFN0cmluZyBt
X3RpdGxlOworICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtX21lZGlhUXVlcmllczsKKworICAg
IE5vZGUqIG1fb3duZXJOb2RlOworICAgIENTU0ltcG9ydFJ1bGUqIG1fb3duZXJSdWxlOworCisg
ICAgbXV0YWJsZSBSZWZQdHI8TWVkaWFMaXN0PiBtX21lZGlhQ1NTT01XcmFwcGVyOworICAgIG11
dGFibGUgVmVjdG9yPFJlZlB0cjxDU1NSdWxlPiA+IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyczsK
KyAgICBtdXRhYmxlIE93blB0cjxDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdENTU09NV3JhcHBlcjsK
K307CisKK2lubGluZSBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb25TY29wZTo6UnVsZU11dGF0
aW9uU2NvcGUoQ1NTU3R5bGVTaGVldCogc2hlZXQpCisgICAgOiBtX3N0eWxlU2hlZXQoc2hlZXQp
Cit7CisgICAgaWYgKG1fc3R5bGVTaGVldCkKKyAgICAgICAgbV9zdHlsZVNoZWV0LT53aWxsTXV0
YXRlUnVsZXMoKTsKK30KKworaW5saW5lIENTU1N0eWxlU2hlZXQ6OlJ1bGVNdXRhdGlvblNjb3Bl
OjpSdWxlTXV0YXRpb25TY29wZShDU1NSdWxlKiBydWxlKQorICAgIDogbV9zdHlsZVNoZWV0KHJ1
bGUgPyBydWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAwKQoreworICAgIGlmIChtX3N0eWxlU2hl
ZXQpCisgICAgICAgIG1fc3R5bGVTaGVldC0+d2lsbE11dGF0ZVJ1bGVzKCk7Cit9CisKK2lubGlu
ZSBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb25TY29wZTo6flJ1bGVNdXRhdGlvblNjb3BlKCkK
K3sKKyAgICBpZiAobV9zdHlsZVNoZWV0KQorICAgICAgICBtX3N0eWxlU2hlZXQtPmRpZE11dGF0
ZVJ1bGVzKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuaAkocmV2aXNpb24gMTE4MTkyKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOCwz
NCArMTgsMjcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5k
ZWYgQ1NTU3R5bGVTaGVldF9oCi0jZGVmaW5lIENTU1N0eWxlU2hlZXRfaAorI2lmbmRlZiBTdHls
ZVNoZWV0Q29udGVudHNfaAorI2RlZmluZSBTdHlsZVNoZWV0Q29udGVudHNfaAogCiAjaW5jbHVk
ZSAiQ1NTUGFyc2VyTW9kZS5oIgotI2luY2x1ZGUgIkNTU1J1bGUuaCIKLSNpbmNsdWRlICJTdHls
ZVNoZWV0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIENTU0NoYXJzZXRSdWxlOwotY2xhc3MgQ1NTSW1wb3J0UnVsZTsKLWNsYXNz
IENTU1BhcnNlcjsKLWNsYXNzIENTU1J1bGU7Ci1jbGFzcyBDU1NSdWxlTGlzdDsKIGNsYXNzIENT
U1N0eWxlU2hlZXQ7CiBjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0OwotY2xhc3MgQ2FjaGVkUmVz
b3VyY2VMb2FkZXI7CiBjbGFzcyBEb2N1bWVudDsKLWNsYXNzIE1lZGlhUXVlcnlTZXQ7CitjbGFz
cyBOb2RlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTdHlsZVJ1bGVCYXNlOwogY2xh
c3MgU3R5bGVSdWxlSW1wb3J0OwogCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCiBjbGFz
cyBTdHlsZVNoZWV0Q29udGVudHMgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHlsZVNoZWV0Q29udGVu
dHM+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+
IGNyZWF0ZShjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0ID0gQ1NTUGFyc2VyQ29udGV4
dChDU1NTdHJpY3RNb2RlKSkKQEAgLTE3NCwxMTMgKzE2Nyw2IEBAIHByaXZhdGU6CiAgICAgVmVj
dG9yPENTU1N0eWxlU2hlZXQqPiBtX2NsaWVudHM7CiB9OwogCi1jbGFzcyBDU1NTdHlsZVNoZWV0
IDogcHVibGljIFN0eWxlU2hlZXQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8Q1NTU3R5
bGVTaGVldD4gY3JlYXRlKFBhc3NSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiBzaGVldCwgQ1NT
SW1wb3J0UnVsZSogb3duZXJSdWxlID0gMCkgCi0gICAgeyAKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDU1NTdHlsZVNoZWV0KHNoZWV0LCBvd25lclJ1bGUpKTsKLSAgICB9Ci0gICAgc3Rh
dGljIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUoUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29u
dGVudHM+IHNoZWV0LCBOb2RlKiBvd25lck5vZGUpCi0gICAgeyAKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDU1NTdHlsZVNoZWV0KHNoZWV0LCBvd25lck5vZGUpKTsKLSAgICB9Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gY3JlYXRlSW5saW5lKE5vZGUqLCBjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZyA9IFN0cmluZygpKTsKLQotICAgIHZpcnR1
YWwgfkNTU1N0eWxlU2hlZXQoKTsKLQotICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogcGFyZW50
U3R5bGVTaGVldCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgTm9kZSogb3duZXJOb2Rl
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9vd25lck5vZGU7IH0KLSAgICB2aXJ0dWFsIE1l
ZGlhTGlzdCogbWVkaWEoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBocmVm
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9jb250ZW50cy0+b3JpZ2luYWxVUkwoKTsgfQot
ICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV90aXRs
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1faXNEaXNhYmxlZDsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXREaXNhYmxlZChib29sKSBPVkVS
UklERTsKLSAgICAKLSAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlcygpOwotICAg
IHVuc2lnbmVkIGluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlLCB1bnNpZ25lZCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIAotICAgIC8vIElFIEV4dGVuc2lvbnMKLSAgICBQYXNzUmVmUHRy
PENTU1J1bGVMaXN0PiBydWxlcygpOwotICAgIGludCBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3IsIGNvbnN0IFN0cmluZyYgc3R5bGUsIGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIGludCBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGNvbnN0IFN0cmluZyYgc3R5
bGUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlbW92ZVJ1bGUodW5zaWduZWQgaW5kZXgs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IGRlbGV0ZVJ1bGUoaW5kZXgsIGVjKTsgfQotICAgIAotICAg
IC8vIEZvciBDU1NSdWxlTGlzdC4KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICBD
U1NSdWxlKiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKLQotICAgIHZpcnR1YWwgdm9pZCBjbGVhck93
bmVyTm9kZSgpIE9WRVJSSURFIHsgbV9vd25lck5vZGUgPSAwOyB9Ci0gICAgdmlydHVhbCBDU1NJ
bXBvcnRSdWxlKiBvd25lclJ1bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX293bmVyUnVs
ZTsgfQotICAgIHZpcnR1YWwgS1VSTCBiYXNlVVJMKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
bV9jb250ZW50cy0+YmFzZVVSTCgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY29udGVudHMtPmlzTG9hZGluZygpOyB9Ci0gICAgCi0g
ICAgdm9pZCBjbGVhck93bmVyUnVsZSgpIHsgbV9vd25lclJ1bGUgPSAwOyB9Ci0gICAgRG9jdW1l
bnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdDsKLSAgICBNZWRpYVF1ZXJ5U2V0KiBtZWRpYVF1ZXJp
ZXMoKSBjb25zdCB7IHJldHVybiBtX21lZGlhUXVlcmllcy5nZXQoKTsgfQotICAgIHZvaWQgc2V0
TWVkaWFRdWVyaWVzKFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4pOwotICAgIHZvaWQgc2V0VGl0
bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkgeyBtX3RpdGxlID0gdGl0bGU7IH0KLQotICAgIGNsYXNz
IFJ1bGVNdXRhdGlvblNjb3BlIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUnVsZU11
dGF0aW9uU2NvcGUpOwotICAgIHB1YmxpYzoKLSAgICAgICAgUnVsZU11dGF0aW9uU2NvcGUoQ1NT
U3R5bGVTaGVldCopOwotICAgICAgICBSdWxlTXV0YXRpb25TY29wZShDU1NSdWxlKik7Ci0gICAg
ICAgIH5SdWxlTXV0YXRpb25TY29wZSgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQ1NTU3R5
bGVTaGVldCogbV9zdHlsZVNoZWV0OwotICAgIH07Ci0KLSAgICB2b2lkIHdpbGxNdXRhdGVSdWxl
cygpOwotICAgIHZvaWQgZGlkTXV0YXRlUnVsZXMoKTsKLSAgICB2b2lkIGRpZE11dGF0ZSgpOwot
ICAgIAotICAgIHZvaWQgY2xlYXJDaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCk7Ci0gICAgdm9pZCBy
ZWF0dGFjaENoaWxkUnVsZUNTU09NV3JhcHBlcnMoKTsKLQotICAgIFN0eWxlU2hlZXRDb250ZW50
cyogY29udGVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzLmdldCgpOyB9Ci0KLXByaXZh
dGU6Ci0gICAgQ1NTU3R5bGVTaGVldChQYXNzUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4sIENT
U0ltcG9ydFJ1bGUqIG93bmVyUnVsZSk7Ci0gICAgQ1NTU3R5bGVTaGVldChQYXNzUmVmUHRyPFN0
eWxlU2hlZXRDb250ZW50cz4sIE5vZGUqIG93bmVyTm9kZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
aXNDU1NTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgU3Ry
aW5nIHR5cGUoKSBjb25zdCB7IHJldHVybiAidGV4dC9jc3MiOyB9Ci0gICAgCi0gICAgUmVmUHRy
PFN0eWxlU2hlZXRDb250ZW50cz4gbV9jb250ZW50czsKLSAgICBib29sIG1faXNEaXNhYmxlZDsK
LSAgICBTdHJpbmcgbV90aXRsZTsKLSAgICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbV9tZWRpYVF1
ZXJpZXM7Ci0KLSAgICBOb2RlKiBtX293bmVyTm9kZTsKLSAgICBDU1NJbXBvcnRSdWxlKiBtX293
bmVyUnVsZTsKLQotICAgIG11dGFibGUgUmVmUHRyPE1lZGlhTGlzdD4gbV9tZWRpYUNTU09NV3Jh
cHBlcjsKLSAgICBtdXRhYmxlIFZlY3RvcjxSZWZQdHI8Q1NTUnVsZT4gPiBtX2NoaWxkUnVsZUNT
U09NV3JhcHBlcnM7Ci0gICAgbXV0YWJsZSBPd25QdHI8Q1NTUnVsZUxpc3Q+IG1fcnVsZUxpc3RD
U1NPTVdyYXBwZXI7Ci19OwotCi1pbmxpbmUgQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9uU2Nv
cGU6OlJ1bGVNdXRhdGlvblNjb3BlKENTU1N0eWxlU2hlZXQqIHNoZWV0KQotICAgIDogbV9zdHls
ZVNoZWV0KHNoZWV0KQotewotICAgIGlmIChtX3N0eWxlU2hlZXQpCi0gICAgICAgIG1fc3R5bGVT
aGVldC0+d2lsbE11dGF0ZVJ1bGVzKCk7Ci19Ci0KLWlubGluZSBDU1NTdHlsZVNoZWV0OjpSdWxl
TXV0YXRpb25TY29wZTo6UnVsZU11dGF0aW9uU2NvcGUoQ1NTUnVsZSogcnVsZSkKLSAgICA6IG1f
c3R5bGVTaGVldChydWxlID8gcnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogMCkKLXsKLSAgICBp
ZiAobV9zdHlsZVNoZWV0KQotICAgICAgICBtX3N0eWxlU2hlZXQtPndpbGxNdXRhdGVSdWxlcygp
OwotfQotCi1pbmxpbmUgQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9uU2NvcGU6On5SdWxlTXV0
YXRpb25TY29wZSgpCi17Ci0gICAgaWYgKG1fc3R5bGVTaGVldCkKLSAgICAgICAgbV9zdHlsZVNo
ZWV0LT5kaWRNdXRhdGVSdWxlcygpOwotfQotCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkocmV2aXNpb24gMTE4
MzM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2lu
Y2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1ZGUgIlRleHREb2N1bWVudC5oIgog
I2luY2x1ZGUgIlRocmVhZEdsb2JhbERhdGEuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgpAQCAt
MzMyLDggKzMzMyw4IEBAIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gRE9NSW1wbGVtZW50YXQK
IAogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHZhbGlkWE1MTUlNRVR5cGVDaGFycyA9ICJbMC05
YS16QS1aX1xcLSt+ISRcXF57fXwuJSdgIyYqXSI7IC8vIHBlciBSRkNzOiAzMDIzLCAyMDQ1CiAK
LVhNTE1JTUVUeXBlUmVnRXhwOjpYTUxNSU1FVHlwZVJlZ0V4cCgpIDoKLSAgICBtX3JlZ2V4KGFk
b3B0UHRyKG5ldyBSZWd1bGFyRXhwcmVzc2lvbihXVEY6Om1ha2VTdHJpbmcoIl4iLCB2YWxpZFhN
TE1JTUVUeXBlQ2hhcnMsICIrLyIsIHZhbGlkWE1MTUlNRVR5cGVDaGFycywgIitcXCt4bWwkIiks
IFRleHRDYXNlU2Vuc2l0aXZlKSkpCitYTUxNSU1FVHlwZVJlZ0V4cDo6WE1MTUlNRVR5cGVSZWdF
eHAoKQorICAgIDogbV9yZWdleChhZG9wdFB0cihuZXcgUmVndWxhckV4cHJlc3Npb24oV1RGOjpt
YWtlU3RyaW5nKCJeIiwgdmFsaWRYTUxNSU1FVHlwZUNoYXJzLCAiKy8iLCB2YWxpZFhNTE1JTUVU
eXBlQ2hhcnMsICIrXFwreG1sJCIpLCBUZXh0Q2FzZVNlbnNpdGl2ZSkpKQogewogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDExODMzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw2ICsxNDQsNyBAQAog
I2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJTdGF0aWNIYXNoU2V0Tm9kZUxpc3Qu
aCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRl
bnRzLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCShyZXZpc2lvbiAxMTgzMzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlhTTFN0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJY
TUxEb2N1bWVudFBhcnNlci5oIiAvLyBmb3IgcGFyc2VBdHRyaWJ1dGVzKCkKICNpbmNsdWRlICJN
ZWRpYUxpc3QuaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAkocmV2aXNp
b24gMTE4MzM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNpbmNs
dWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAiU2NyaXB0YWJsZURvY3VtZW50
UGFyc2VyLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTgzMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlN0eWxlU2hl
ZXRDb250ZW50cy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxMTgzMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNp
bmNsdWRlICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKLQorI2luY2x1ZGUgIlN0eWxlU2hl
ZXRDb250ZW50cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDEx
ODMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgorI2lu
Y2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0Lmgi
CiAjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCShyZXZp
c2lvbiAxMTgzMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5
bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJI
VFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5jbHVkZSAiVGV4
dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIu
Y3BwCShyZXZpc2lvbiAxMTgzMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxp
emVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgIlN0eWxl
Q2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJTdHlsZUltYWdlLmgiCiAjaW5jbHVkZSAiU3R5bGVS
dWxlLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5jbHVkZSAiVGV4dC5o
IgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRvY3VtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEb2N1bWVudC5jcHAJKHJl
dmlzaW9uIDExODMzNCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRvY3VtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogCiAjaW5jbHVkZSAiQVhPYmpl
Y3RDYWNoZS5oIgogI2luY2x1ZGUgIkNTU1BhcnNlck1vZGUuaCIKLSNpbmNsdWRlICJDU1NTdHls
ZVNoZWV0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIgogI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgpAQCAtNDYsNiArNDUsNyBAQAogI2luY2x1
ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNs
dWRlICJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCiAjaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIK
ICNpbmNsdWRlICJXZWJEb2N1bWVudFR5cGUuaCIK
</data>
<flag name="review"
          id="150406"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>