<?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>33843</bug_id>
          
          <creation_ts>2010-01-19 08:00:43 -0800</creation_ts>
          <short_desc>jni_utility.[cpp|h] and jni_utility_private.[cpp|h] should be renamed</short_desc>
          <delta_ts>2010-02-02 08:19:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>33870</dependson>
          <blocked>33712</blocked>
    
    <blocked>33901</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Steve Block">steveblock</assigned_to>
          <cc>android-webkit-unforking</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>182239</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-19 08:00:43 -0800</bug_when>
    <thetext>WebCore/bridge/jni/jni_utility.[cpp|h] and WebCore/bridge/jni/jsc/jni_utility_private.[cpp|h] should be renamed to follow standard naming conventions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182243</commentid>
    <comment_count>1</comment_count>
      <attachid>46909</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-19 08:13:56 -0800</bug_when>
    <thetext>Created attachment 46909
Patch 1 for Bug 33843</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182244</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-19 08:15:23 -0800</bug_when>
    <thetext>Attachment 46909 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
ore/bridge/jni/JNIUtility.cpp:185:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/jni/JNIUtility.cpp:187:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/jni/JNIUtility.cpp:187:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/jni/JNIUtility.cpp:200:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bridge/jni/JNIUtility.cpp:199:  Missing space before {  [whitespace/braces] [5]
WebCore/bridge/jni/JNIUtility.cpp:243:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/bridge/jni/JNIUtility.cpp:242:  Missing space before {  [whitespace/braces] [5]
WebCore/bridge/jni/JNIUtility.cpp:282:  Extra space after ( in function call  [whitespace/parens] [4]
WebCore/bridge/jni/JNIUtility.cpp:284:  Declaration has space between type name and * in JavaVM *jvm  [whitespace/declaration] [3]
WebCore/bridge/jni/JNIUtility.cpp:285:  Declaration has space between type name and * in JNIEnv *env  [whitespace/declaration] [3]
WebCore/bridge/jni/JNIUtility.cpp:288:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bridge/jni/JNIUtility.cpp:289:  Mismatching spaces inside () in if  [whitespace/parens] [5]
WebCore/bridge/jni/JNIUtility.cpp:289:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/jni/JNIUtility.cpp:289:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/bridge/jni/JNIUtility.cpp:291:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/jni/JNIUtility.cpp:291:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/bridge/jni/JNIUtility.cpp:293:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/bridge/jni/JNIUtility.cpp:293:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/bridge/jni/JNIUtility.cpp:327:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
WebCore/bridge/jni/JNIUtility.cpp:328:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/bridge/jni/JNIUtility.cpp:332:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/bridge/jni/JNIUtility.cpp:337:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
WebCore/bridge/jni/JNIUtility.cpp:339:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/bridge/jni/JNIUtility.cpp:345:  One space before end of line comments  [whitespace/comments] [5]
Skipping input &apos;WebCore/bridge/jni/jsc/jni_utility_private.cpp&apos;: Can&apos;t open for reading
Total errors found: 85


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182261</commentid>
    <comment_count>3</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-19 08:44:19 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 46909 [details] did not pass style-queue:
I&apos;ll fix the style in the moved code in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182468</commentid>
    <comment_count>4</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-19 14:37:22 -0800</bug_when>
    <thetext>Landed manually as http://trac.webkit.org/changeset/53497

Opened Bug 33870 to fix style in moved code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182671</commentid>
    <comment_count>5</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-20 02:01:44 -0800</bug_when>
    <thetext>Style is now fixed

Closing bug as resolved</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46909</attachid>
            <date>2010-01-19 08:13:56 -0800</date>
            <delta_ts>2010-01-19 11:00:13 -0800</delta_ts>
            <desc>Patch 1 for Bug 33843</desc>
            <filename>jniUtility.txt</filename>
            <type>text/plain</type>
            <size>90701</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzQ2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDEtMTkgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbmFtZXMgam5pX3V0aWxpdHkgYW5kIGpuaV91dGlsaXR5X3ByaXZhdGUgdG8gSk5JVXRpbGl0
eSBhbmQgSk5JVXRpbGl0eVByaXZhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMzODQzCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCByZWZhY3Rvcmlu
ZyBvbmx5LgorCisgICAgICAgICogQW5kcm9pZC5qc2NiaW5kaW5ncy5tazoKKyAgICAgICAgKiBB
bmRyb2lkLnY4YmluZGluZ3MubWs6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJyaWRnZS9q
bmkvSk5JVXRpbGl0eS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRp
bGl0eS5jcHAuCisgICAgICAgICogYnJpZGdlL2puaS9KTklVdGlsaXR5Lmg6IENvcGllZCBmcm9t
IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5oLgorICAgICAgICAqIGJyaWRnZS9qbmkv
am5pX2pzb2JqZWN0Lm1tOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX29iamMubW06CisgICAg
ICAgICogYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHA6CisgICAgICAgICogYnJpZGdlL2puaS9q
bmlfcnVudGltZS5oOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX3V0aWxpdHkuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX3V0aWxpdHkuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBicmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHA6IENvcGllZCBmcm9tIFdl
YkNvcmUvYnJpZGdlL2puaS9qc2Mvam5pX3V0aWxpdHlfcHJpdmF0ZS5jcHAuCisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb0pWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL2pu
aS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuaDogQ29waWVkIGZyb20gV2ViQ29yZS9icmlkZ2Uvam5p
L2pzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmguCisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2
YUNsYXNzSlNDLmNwcDoKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0Mu
Y3BwOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFTdHJpbmdKU0MuaDoKKyAgICAgICAg
KiBicmlkZ2Uvam5pL2pzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBicmlkZ2Uvam5pL2pzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vYW5kcm9pZC9HZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2UuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOgorCiAyMDEwLTAx
LTE5ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQuanNjYmluZGlu
Z3MubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLmpzY2JpbmRpbmdzLm1rCShyZXZp
c2lvbiA1MzQ2NCkKKysrIFdlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tawkod29ya2luZyBj
b3B5KQpAQCAtMTg0LDExICsxODQsMTEgQEAgTE9DQUxfU1JDX0ZJTEVTICs9IFwKIAlicmlkZ2Uv
Yy9jX2luc3RhbmNlLmNwcCBcCiAJYnJpZGdlL2MvY19ydW50aW1lLmNwcCBcCiAJYnJpZGdlL2Mv
Y191dGlsaXR5LmNwcCBcCisJYnJpZGdlL2puaS9KTklVdGlsaXR5LmNwcCBcCiAJYnJpZGdlL2pu
aS9qbmlfcnVudGltZS5jcHAgXAotCWJyaWRnZS9qbmkvam5pX3V0aWxpdHkuY3BwIFwKKwlicmlk
Z2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHAgXAogCWJyaWRnZS9qbmkvanNjL0phdmFD
bGFzc0pTQy5jcHAgXAogCWJyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAgXAotCWJy
aWRnZS9qbmkvanNjL2puaV91dGlsaXR5X3ByaXZhdGUuY3BwIFwKIAlicmlkZ2UvbnBydW50aW1l
LmNwcCBcCiAJYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwIFwKIAlicmlkZ2UvcnVudGltZV9tZXRo
b2QuY3BwIFwKSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC52OGJpbmRpbmdzLm1rCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvQW5kcm9pZC52OGJpbmRpbmdzLm1rCShyZXZpc2lvbiA1MzQ1MCkKKysrIFdl
YkNvcmUvQW5kcm9pZC52OGJpbmRpbmdzLm1rCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNCArMTY1
LDQgQEAgTE9DQUxfU1JDX0ZJTEVTICs9IFwKIAliaW5kaW5ncy92OC9jdXN0b20vVjhYTUxTZXJp
YWxpemVyQ29uc3RydWN0b3IuY3BwCiAKIExPQ0FMX1NSQ19GSUxFUyArPSBcCi0JYnJpZGdlL2pu
aS9qbmlfdXRpbGl0eS5jcHAKKwlicmlkZ2Uvam5pL0pOSVV0aWxpdHkuY3BwCkluZGV4OiBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0J
KHJldmlzaW9uIDUzNDY0KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5
KQpAQCAtNTA2LDkgKzUwNiw5IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9icmlk
Z2UvYy9jX3J1bnRpbWUuaCBcCiAJV2ViQ29yZS9icmlkZ2UvYy9jX3V0aWxpdHkuY3BwIFwKIAlX
ZWJDb3JlL2JyaWRnZS9jL2NfdXRpbGl0eS5oIFwKKwlXZWJDb3JlL2JyaWRnZS9qbmkvSk5JVXRp
bGl0eS5oIFwKIAlXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0LmggXAogCVdlYkNvcmUv
YnJpZGdlL2puaS9qbmlfcnVudGltZS5oIFwKLQlXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxp
dHkuaCBcCiAJV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuaCBcCiAJV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuaCBcCiAJV2ViQ29yZS9icmlkZ2UvbnBh
cGkuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNTM0NjQpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzEyLDggKzMxMiw2IEBACiAJCTFBNTY5RDA1MEQ3RTJC
ODIwMDdDMzk4MyAvKiBqbmlfb2JqYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0Q1MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfb2JqYy5tbSAq
LzsgfTsKIAkJMUE1NjlEMDYwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9ydW50aW1lLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0Q2MEQ3RTJC
ODIwMDdDMzk4MyAvKiBqbmlfcnVudGltZS5jcHAgKi87IH07CiAJCTFBNTY5RDA3MEQ3RTJCODIw
MDdDMzk4MyAvKiBqbmlfcnVudGltZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE1NjlDRDcwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9ydW50aW1lLmgg
Ki87IH07Ci0JCTFBNTY5RDA4MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfdXRpbGl0eS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNEODBEN0Uy
QjgyMDA3QzM5ODMgLyogam5pX3V0aWxpdHkuY3BwICovOyB9OwotCQkxQTU2OUQwOTBEN0UyQjgy
MDA3QzM5ODMgLyogam5pX3V0aWxpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0Q5MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfdXRpbGl0eS5o
ICovOyB9OwogCQkxQTU2OUQwQTBEN0UyQjgyMDA3QzM5ODMgLyogTlBfanNvYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDREEwRDdF
MkI4MjAwN0MzOTgzIC8qIE5QX2pzb2JqZWN0LmNwcCAqLzsgfTsKIAkJMUE1NjlEMEIwRDdFMkI4
MjAwN0MzOTgzIC8qIE5QX2pzb2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNEQjBEN0UyQjgyMDA3QzM5ODMgLyogTlBfanNvYmplY3Qu
aCAqLzsgfTsKIAkJMUE1NjlEMEMwRDdFMkI4MjAwN0MzOTgzIC8qIG5wYXBpLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNEQzBEN0UyQjgyMDA3
QzM5ODMgLyogbnBhcGkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMTExMSw4ICsxMTA5LDYgQEAKIAkJNTRDNTBGN0IwRTgwMURGMzAwOTgzMkEw
IC8qIFhNTFRva2VuaXplckxpYnhtbDIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTRDNTBGN0EwRTgwMURGMzAwOTgzMkEwIC8qIFhNTFRva2VuaXpl
ckxpYnhtbDIuY3BwICovOyB9OwogCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlm
aWVkTmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NTBBMEJDNzA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJ
CTU1MEEwQkNBMDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUz
RDYgLyogUXVhbGlmaWVkTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTU5OUQxRTMyMTBDOTdENkUwMEUwRUYxMiAvKiBqbmlfdXRpbGl0eV9w
cml2YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU5OUQxRTMwMTBDOTdENkUwMEUwRUYxMiAvKiBqbmlfdXRpbGl0eV9wcml2YXRlLmNwcCAqLzsg
fTsKLQkJNTk5RDFFMzMxMEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5OUQxRTMxMTBD
OTdENkUwMEUwRUYxMiAvKiBqbmlfdXRpbGl0eV9wcml2YXRlLmggKi87IH07CiAJCTU5OUU3NTkw
MTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU5OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1OTlFNzU5
MjExMDU1QTJBMDBEOTA0RkEgLyogQnJpZGdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5OUU3NTkxMTEwNTVBMkEwMEQ5MDRGQSAvKiBCcmlkZ2Uu
Y3BwICovOyB9OwogCQk1OUE5RTdCMDExMDQ3NTg4MDBERkI0QzEgLyogSmF2YUluc3RhbmNlSlND
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5QTlF
N0FGMTEwNDc1ODgwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuY3BwICovOyB9OwpAQCAtMTEy
Miw2ICsxMTE4LDEwIEBACiAJCTU5Qzc3RjJCMTA1NDVCM0IwMDUwNjEwNCAvKiBHZW9sb2NhdGlv
blNlcnZpY2VNb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1OUM3N0YyOTEwNTQ1QjNCMDA1MDYxMDQgLyogR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU5RTU2
MEE3MTEwNTMzNjYwMEFBMTI1OCAvKiBKYXZhQ2xhc3NKU0MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5RTU2MEE2MTEwNTMzNjYwMEFBMTI1OCAvKiBK
YXZhQ2xhc3NKU0MuaCAqLzsgfTsKIAkJNTlFNTYwQTkxMTA1MzM2RjAwQUExMjU4IC8qIEphdmFD
bGFzc0pTQy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1OUU1NjBBODExMDUzMzZGMDBBQTEyNTggLyogSmF2YUNsYXNzSlNDLmNwcCAqLzsgfTsKKwkJ
NTlFRTEyMkMxMTA2MDgwNTAwODg1MTE2IC8qIEpOSVV0aWxpdHlQcml2YXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5RUUxMjJCMTEwNjA4MDUw
MDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5jcHAgKi87IH07CisJCTU5RUUxMjJFMTEwNjA4
MEYwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlFRTEyMkQxMTA2MDgwRjAwODg1MTE2IC8qIEpOSVV0
aWxpdHlQcml2YXRlLmggKi87IH07CisJCTU5RUUxMjMwMTEwNjA4MUYwMDg4NTExNiAvKiBKTklV
dGlsaXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU5RUUxMjJGMTEwNjA4MUYwMDg4NTExNiAvKiBKTklVdGlsaXR5LmNwcCAqLzsgfTsKKwkJNTlF
RTEyMzIxMTA2MDgyOTAwODg1MTE2IC8qIEpOSVV0aWxpdHkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5RUUxMjMxMTEwNjA4MjkwMDg4NTExNiAvKiBK
TklVdGlsaXR5LmggKi87IH07CiAJCTVEMTVFM0FCMEY5RTZBQzEwMDlFMEUzRiAvKiBYTUxUb2tl
bml6ZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1RDE1RTNBOTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MVG9rZW5pemVyU2NvcGUuY3BwICov
OyB9OwogCQk1RDE1RTNBQzBGOUU2QUMxMDA5RTBFM0YgLyogWE1MVG9rZW5pemVyU2NvcGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVEMTVFM0FBMEY5
RTZBQzEwMDlFMEUzRiAvKiBYTUxUb2tlbml6ZXJTY29wZS5oICovOyB9OwogCQk1RDg3NEYxMzBE
MTYxRDMyMDA3OTZDM0IgLyogTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMjI3REQwQUY1ODlBRDAw
RDQ4MzI0IC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcCAqLzsgfTsKQEAgLTU1NjQs
OCArNTU2NCw2IEBACiAJCTFBNTY5Q0Q1MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfb2JqYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IGpuaV9vYmpjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTU2OUNENjBEN0UyQjgyMDA3QzM5ODMgLyogam5p
X3J1bnRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gam5pX3J1
bnRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTU2OUNENzBEN0UyQjgy
MDA3QzM5ODMgLyogam5pX3J1bnRpbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gam5pX3J1bnRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUE1NjlDRDgw
RDdFMkI4MjAwN0MzOTgzIC8qIGpuaV91dGlsaXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IGpuaV91dGlsaXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMUE1NjlDRDkwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV91dGlsaXR5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGpuaV91dGlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBNTY5Q0RBMEQ3RTJCODIwMDdDMzk4MyAvKiBOUF9qc29iamVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOUF9qc29iamVjdC5jcHA7IHBh
dGggPSBicmlkZ2UvTlBfanNvYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQTU2OUNEQjBEN0UyQjgyMDA3QzM5ODMgLyogTlBfanNvYmplY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gTlBfanNvYmplY3QuaDsgcGF0aCA9IGJyaWRnZS9OUF9qc29i
amVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTU2OUNEQzBEN0UyQjgyMDA3
QzM5ODMgLyogbnBhcGkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gbnBhcGku
aDsgcGF0aCA9IGJyaWRnZS9ucGFwaS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NjQ2OSw4ICs2NDY3LDYgQEAKIAkJNTRDNTBGN0EwRTgwMURGMzAwOTgzMkEwIC8qIFhNTFRva2Vu
aXplckxpYnhtbDIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1M
VG9rZW5pemVyTGlieG1sMi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEw
QkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
LQkJNTk5RDFFMzAxMEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZhdGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gam5pX3V0aWxpdHlfcHJpdmF0ZS5j
cHA7IHBhdGggPSBqc2Mvam5pX3V0aWxpdHlfcHJpdmF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTU5OUQxRTMxMTBDOTdENkUwMEUwRUYxMiAvKiBqbmlfdXRpbGl0eV9wcml2
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGpuaV91dGlsaXR5X3ByaXZh
dGUuaDsgcGF0aCA9IGpzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTU5OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQnJpZGdlLmg7IHBhdGggPSBicmlkZ2UvQnJpZGdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU5OUU3NTkxMTEwNTVBMkEwMEQ5MDRG
QSAvKiBCcmlkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQnJp
ZGdlLmNwcDsgcGF0aCA9IGJyaWRnZS9CcmlkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1OUE5RTdBRjExMDQ3NTg4MDBERkI0QzEgLyogSmF2YUluc3RhbmNlSlNDLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEphdmFJbnN0YW5jZUpTQy5jcHA7
IHBhdGggPSBqc2MvSmF2YUluc3RhbmNlSlNDLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTY0ODAsNiArNjQ3NiwxMCBAQAogCQk1OUM3N0YyOTEwNTQ1QjNCMDA1MDYxMDQgLyog
R2VvbG9jYXRpb25TZXJ2aWNlTW9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBHZW9sb2NhdGlvblNlcnZpY2VNb2NrLmg7IHBhdGggPSBtb2NrL0dlb2xvY2F0aW9uU2Vydmlj
ZU1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTlFNTYwQTYxMTA1MzM2NjAw
QUExMjU4IC8qIEphdmFDbGFzc0pTQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBKYXZhQ2xhc3NKU0MuaDsgcGF0aCA9IGpzYy9KYXZhQ2xhc3NKU0MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTlFNTYwQTgxMTA1MzM2RjAwQUExMjU4IC8qIEphdmFDbGFzc0pT
Qy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKYXZhQ2xhc3NKU0Mu
Y3BwOyBwYXRoID0ganNjL0phdmFDbGFzc0pTQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTU5RUUxMjJCMTEwNjA4MDUwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKTklVdGlsaXR5UHJpdmF0ZS5j
cHA7IHBhdGggPSBqc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1OUVFMTIyRDExMDYwODBGMDA4ODUxMTYgLyogSk5JVXRpbGl0eVByaXZhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSk5JVXRpbGl0eVByaXZhdGUuaDsg
cGF0aCA9IGpzYy9KTklVdGlsaXR5UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1OUVFMTIyRjExMDYwODFGMDA4ODUxMTYgLyogSk5JVXRpbGl0eS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKTklVdGlsaXR5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTlFRTEyMzExMTA2MDgyOTAwODg1MTE2IC8qIEpOSVV0aWxpdHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSk5JVXRpbGl0eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1RDE1RTNBOTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MVG9r
ZW5pemVyU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1M
VG9rZW5pemVyU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDE1RTNB
QTBGOUU2QUMxMDA5RTBFM0YgLyogWE1MVG9rZW5pemVyU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gWE1MVG9rZW5pemVyU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUQ5MjVCNjUwRjY0RDRERDAwQjg0N0YwIC8qIFNjcm9sbEJlaGF2aW9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbEJlaGF2aW9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMzU1LDE0ICsxMDM1NSwxNCBAQAog
CQkxQTU2OUNDRTBEN0UyQjgyMDA3QzM5ODMgLyogam5pICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1OUVFMTIzMTExMDYwODI5MDA4ODUxMTYgLyogSk5J
VXRpbGl0eS5oICovLAorCQkJCTU5RUUxMjJGMTEwNjA4MUYwMDg4NTExNiAvKiBKTklVdGlsaXR5
LmNwcCAqLywKIAkJCQk1OTlEMUUyRjEwQzk3RDRDMDBFMEVGMTIgLyoganNjICovLAogCQkJCTFB
NTY5Q0Q0MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfanNvYmplY3QuaCAqLywKIAkJCQkxQTU2OUNE
MzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0Lm1tICovLAogCQkJCTFBNTY5Q0Q1MEQ3
RTJCODIwMDdDMzk4MyAvKiBqbmlfb2JqYy5tbSAqLywKIAkJCQkxQTU2OUNENjBEN0UyQjgyMDA3
QzM5ODMgLyogam5pX3J1bnRpbWUuY3BwICovLAogCQkJCTFBNTY5Q0Q3MEQ3RTJCODIwMDdDMzk4
MyAvKiBqbmlfcnVudGltZS5oICovLAotCQkJCTFBNTY5Q0Q4MEQ3RTJCODIwMDdDMzk4MyAvKiBq
bmlfdXRpbGl0eS5jcHAgKi8sCi0JCQkJMUE1NjlDRDkwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV91
dGlsaXR5LmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IGpuaTsKIAkJCXBhdGggPSBicmlkZ2Uvam5p
OwpAQCAtMTEwNjgsMTMgKzExMDY4LDEzIEBACiAJCTU5OUQxRTJGMTBDOTdENEMwMEUwRUYxMiAv
KiBqc2MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTU5
RUUxMjJEMTEwNjA4MEYwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5oICovLAorCQkJCTU5
RUUxMjJCMTEwNjA4MDUwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5jcHAgKi8sCiAJCQkJ
NTlCQzM5M0UxMTA1NEExMzAwRkQ4NURCIC8qIEphdmFTdHJpbmdKU0MuaCAqLywKIAkJCQk1OUU1
NjBBODExMDUzMzZGMDBBQTEyNTggLyogSmF2YUNsYXNzSlNDLmNwcCAqLywKIAkJCQk1OUU1NjBB
NjExMDUzMzY2MDBBQTEyNTggLyogSmF2YUNsYXNzSlNDLmggKi8sCiAJCQkJNTlBOUU3QjExMTA0
NzU5NDAwREZCNEMxIC8qIEphdmFJbnN0YW5jZUpTQy5oICovLAogCQkJCTU5QTlFN0FGMTEwNDc1
ODgwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuY3BwICovLAotCQkJCTU5OUQxRTMwMTBDOTdE
NkUwMEUwRUYxMiAvKiBqbmlfdXRpbGl0eV9wcml2YXRlLmNwcCAqLywKLQkJCQk1OTlEMUUzMTEw
Qzk3RDZFMDBFMEVGMTIgLyogam5pX3V0aWxpdHlfcHJpdmF0ZS5oICovLAogCQkJKTsKIAkJCW5h
bWUgPSBqc2M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTcxNjYsNyArMTcxNjYs
NiBAQAogCQkJCTFDODFCOUZGMEU5NzMzQ0IwMDI2NkUwNyAvKiBKYXZhU2NyaXB0UHJvZmlsZU5v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDA0MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlf
anNvYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDA3MEQ3RTJCODIwMDdDMzk4MyAv
KiBqbmlfcnVudGltZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUE1NjlEMDkwRDdFMkI4MjAwN0Mz
OTgzIC8qIGpuaV91dGlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURGNDA5OUU2NDky
MDA1NkU1ODEgLyogSm9pblRleHROb2Rlc0NvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQx
OEY4ODA1MEZGOTU3QUYwMDgwRjA0NSAvKiBKU0Fic3RyYWN0V29ya2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2NURGMzFEQjA5RDFDMTIzMDAwQkUzMjUgLyogSlNBdHRyLmggaW4gSGVhZGVycyAq
LywKQEAgLTE4MzQ4LDcgKzE4MzQ3LDYgQEAKIAkJCQk3QTBFNzcwRjEwQzAwQTg4MDBBMDI3NkUg
LyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTBFNzcxRjEw
QzAwREIxMDBBMDI3NkUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUY0RUFGNEFGMTBDNzQyQjEwMDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNTk5RDFFMzMxMEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5
X3ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBREU3MjI2MTBDQkJCOUIwMDZCM0IzQSAv
KiBDb250ZXh0TWVudVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQzNGMUY1QjEwQzg4
NzEyMDBENzJDRTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBDNDUzNDI4MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggaW4g
SGVhZGVycyAqLywKQEAgLTE4Mzc2LDYgKzE4Mzc0LDggQEAKIAkJCQk1OUU1NjBBNzExMDUzMzY2
MDBBQTEyNTggLyogSmF2YUNsYXNzSlNDLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OUJDMzkzRjEx
MDU0QTEzMDBGRDg1REIgLyogSmF2YVN0cmluZ0pTQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTk5
RTc1OTAxMTA1NUExRjAwRDkwNEZBIC8qIEJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTlF
RTEyMkUxMTA2MDgwRjAwODg1MTE2IC8qIEpOSVV0aWxpdHlQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1OUVFMTIzMjExMDYwODI5MDA4ODUxMTYgLyogSk5JVXRpbGl0eS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0xOTM0NCw3ICsxOTM0NCw2IEBACiAJCQkJMUE1NjlEMDMwRDdFMkI4MjAwN0Mz
OTgzIC8qIGpuaV9qc29iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNTY5RDA1MEQ3RTJC
ODIwMDdDMzk4MyAvKiBqbmlfb2JqYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNTY5RDA2MEQ3
RTJCODIwMDdDMzk4MyAvKiBqbmlfcnVudGltZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQTU2
OUQwODBEN0UyQjgyMDA3QzM5ODMgLyogam5pX3V0aWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTMzMDlERjMwOTlFNjQ5MjAwNTZFNTgxIC8qIEpvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxOEY4ODA0MEZGOTU3QUUwMDgwRjA0NSAvKiBKU0Fic3RyYWN0
V29ya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNUI3QzU3MEZGNTk4RTYwMDY3NzBGNyAv
KiBKU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjA1MjQsNyAr
MjA1MjMsNiBAQAogCQkJCTdBMEU3NzFFMTBDMDBEQjEwMEEwMjc2RSAvKiBKU0luc3BlY3RvckZy
b250ZW5kSG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNEVBRjRBRTEwQzc0MkIxMDA5MTAw
RDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDAxQTI3QUQx
MEM5QkZEODAwMDI2QTQyIC8qIFNwYWNlU3BsaXRTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTk5RDFFMzIxMEM5N0Q2RTAwRTBFRjEyIC8qIGpuaV91dGlsaXR5X3ByaXZhdGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEMzRjFGNUExMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9y
bUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBDNDUzNDI3MTBDREJCRkEwMDg2OTE1
NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNTZD
QjIxMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yMDU0Myw2ICsyMDU0MSw4IEBACiAJCQkJNTlBOUU3QjAxMTA0NzU4ODAwREZC
NEMxIC8qIEphdmFJbnN0YW5jZUpTQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1OUU1NjBBOTEx
MDUzMzZGMDBBQTEyNTggLyogSmF2YUNsYXNzSlNDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU5
OUU3NTkyMTEwNTVBMkEwMEQ5MDRGQSAvKiBCcmlkZ2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTlFRTEyMkMxMTA2MDgwNTAwODg1MTE2IC8qIEpOSVV0aWxpdHlQcml2YXRlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTU5RUUxMjMwMTEwNjA4MUYwMDg4NTExNiAvKiBKTklVdGlsaXR5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL0pOSVV0aWxpdHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9KTklVdGlsaXR5LmNwcAkocmV2aXNpb24g
NTM0NTApCShmcm9tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5jcHA6NTM0NTApCisr
KyBXZWJDb3JlL2JyaWRnZS9qbmkvSk5JVXRpbGl0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJqbmlfdXRpbGl0eS5oIgorCisjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKKwor
I2luY2x1ZGUgPGRsZmNuLmg+CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQmluZGlu
Z3MgeworCitzdGF0aWMgamludCBLSlNfR2V0Q3JlYXRlZEphdmFWTXMoSmF2YVZNKiogdm1CdWYs
IGpzaXplIGJ1ZkxlbiwganNpemUqIG5WTXMpCit7CisgICAgc3RhdGljIHZvaWQqIGphdmFWTUZy
YW1ld29yayA9IDA7CisgICAgaWYgKCFqYXZhVk1GcmFtZXdvcmspCisgICAgICAgIGphdmFWTUZy
YW1ld29yayA9IGRsb3BlbigiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSmF2YVZNLmZyYW1l
d29yay9KYXZhVk0iLCBSVExEX0xBWlkpOworICAgIGlmICghamF2YVZNRnJhbWV3b3JrKQorICAg
ICAgICByZXR1cm4gSk5JX0VSUjsKKworICAgIHN0YXRpYyBqaW50KCpmdW5jdGlvblBvaW50ZXIp
KEphdmFWTSoqLCBqc2l6ZSwganNpemUgKikgPSAwOworICAgIGlmICghZnVuY3Rpb25Qb2ludGVy
KQorICAgICAgICBmdW5jdGlvblBvaW50ZXIgPSAoamludCgqKShKYXZhVk0qKiwganNpemUsIGpz
aXplICopKWRsc3ltKGphdmFWTUZyYW1ld29yaywgIkpOSV9HZXRDcmVhdGVkSmF2YVZNcyIpOwor
ICAgIGlmICghZnVuY3Rpb25Qb2ludGVyKQorICAgICAgICByZXR1cm4gSk5JX0VSUjsKKyAgICBy
ZXR1cm4gZnVuY3Rpb25Qb2ludGVyKHZtQnVmLCBidWZMZW4sIG5WTXMpOworfQorCitzdGF0aWMg
SmF2YVZNICpqdm0gPSAwOworCisvLyBQcm92aWRlIHRoZSBhYmlsaXR5IGZvciBhbiBvdXRzaWRl
IGNvbXBvbmVudCB0byBzcGVjaWZ5IHRoZSBKYXZhVk0gdG8gdXNlCisvLyBJZiB0aGUganZtIHZh
bHVlIGlzIHNldCwgdGhlIGdldEphdmFWTSBmdW5jdGlvbiBiZWxvdyB3aWxsIGp1c3QgcmV0dXJu
LiAKKy8vIEluIGdldEpOSUVudigpLCBpZiBBdHRhY2hDdXJyZW50VGhyZWFkIGlzIGNhbGxlZCB0
byBhIFZNIHRoYXQgaXMgYWxyZWFkeQorLy8gYXR0YWNoZWQsIHRoZSByZXN1bHQgaXMgYSBuby1v
cC4KK3ZvaWQgc2V0SmF2YVZNKEphdmFWTSAqamF2YVZNKQoreworICAgIGp2bSA9IGphdmFWTTsK
K30KKworSmF2YVZNICpnZXRKYXZhVk0oKQoreworICAgIGlmIChqdm0pCisgICAgICAgIHJldHVy
biBqdm07CisKKyAgICBKYXZhVk0gKmp2bUFycmF5WzFdOworICAgIGpzaXplIGJ1ZkxlbiA9IDE7
CisgICAganNpemUgbkpWTXMgPSAwOworICAgIGppbnQgam5pRXJyb3IgPSAwOworCisgICAgLy8g
QXNzdW1lcyBKVk0gaXMgYWxyZWFkeSBydW5uaW5nIC4uLiwgb25lIHBlciBwcm9jZXNzCisgICAg
am5pRXJyb3IgPSBLSlNfR2V0Q3JlYXRlZEphdmFWTXMoanZtQXJyYXksIGJ1ZkxlbiwgJm5KVk1z
KTsKKyAgICBpZiAoIGpuaUVycm9yID09IEpOSV9PSyAmJiBuSlZNcyA+IDAgKSB7CisgICAgICAg
IGp2bSA9IGp2bUFycmF5WzBdOworICAgIH0KKyAgICBlbHNlIAorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiVzOiBKTklfR2V0Q3JlYXRlZEphdmFWTXMgZmFpbGVkLCByZXR1cm5lZCAlbGRcbiIs
IF9fUFJFVFRZX0ZVTkNUSU9OX18sIChsb25nKWpuaUVycm9yKTsKKyAgICAgICAgCisgICAgcmV0
dXJuIGp2bTsKK30KKworSk5JRW52KiBnZXRKTklFbnYoKQoreworICAgIHVuaW9uIHsKKyAgICAg
ICAgSk5JRW52KiBlbnY7CisgICAgICAgIHZvaWQqIGR1bW15OworICAgIH0gdTsKKyAgICBqaW50
IGpuaUVycm9yID0gMDsKKworICAgIGpuaUVycm9yID0gKGdldEphdmFWTSgpKS0+QXR0YWNoQ3Vy
cmVudFRocmVhZCgmdS5kdW1teSwgTlVMTCk7CisgICAgaWYgKGpuaUVycm9yID09IEpOSV9PSykK
KyAgICAgICAgcmV0dXJuIHUuZW52OworICAgIGVsc2UKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIlczogQXR0YWNoQ3VycmVudFRocmVhZCBmYWlsZWQsIHJldHVybmVkICVsZFxuIiwgX19QUkVU
VFlfRlVOQ1RJT05fXywgKGxvbmcpam5pRXJyb3IpOworICAgIHJldHVybiBOVUxMOworfQorCitq
bWV0aG9kSUQgZ2V0TWV0aG9kSUQgKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25z
dCBjaGFyICpzaWcpCit7CisgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKKyAgICBqbWV0
aG9kSUQgbWlkID0gMDsKKyAgICAgICAgCisgICAgaWYgKCBlbnYgIT0gTlVMTCkgeworICAgIGpj
bGFzcyBjbHMgPSBlbnYtPkdldE9iamVjdENsYXNzKG9iaik7CisgICAgaWYgKCBjbHMgIT0gTlVM
TCApIHsKKyAgICAgICAgICAgIG1pZCA9IGVudi0+R2V0TWV0aG9kSUQoY2xzLCBuYW1lLCBzaWcp
OworICAgICAgICAgICAgaWYgKCFtaWQpIHsKKyAgICAgICAgICAgICAgICBlbnYtPkV4Y2VwdGlv
bkNsZWFyKCk7CisgICAgICAgICAgICAgICAgbWlkID0gZW52LT5HZXRTdGF0aWNNZXRob2RJRChj
bHMsIG5hbWUsIHNpZyk7CisgICAgICAgICAgICAgICAgaWYgKCFtaWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZW52LT5FeGNlcHRpb25DbGVhcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGNscyk7Cisg
ICAgfQorICAgIHJldHVybiBtaWQ7Cit9CisKK2NvbnN0IGNoYXIgKmdldENoYXJhY3RlcnNGcm9t
SlN0cmluZyAoanN0cmluZyBhSlN0cmluZykKK3sKKyAgICByZXR1cm4gZ2V0Q2hhcmFjdGVyc0Zy
b21KU3RyaW5nSW5FbnYgKGdldEpOSUVudigpLCBhSlN0cmluZyk7Cit9CisKK3ZvaWQgcmVsZWFz
ZUNoYXJhY3RlcnNGb3JKU3RyaW5nIChqc3RyaW5nIGFKU3RyaW5nLCBjb25zdCBjaGFyICpzKQor
eworICAgIHJlbGVhc2VDaGFyYWN0ZXJzRm9ySlN0cmluZ0luRW52IChnZXRKTklFbnYoKSwgYUpT
dHJpbmcsIHMpOworfQorCitjb25zdCBjaGFyICpnZXRDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJbkVu
diAoSk5JRW52ICplbnYsIGpzdHJpbmcgYUpTdHJpbmcpCit7CisgICAgamJvb2xlYW4gaXNDb3B5
OworICAgIGNvbnN0IGNoYXIgKnMgPSBlbnYtPkdldFN0cmluZ1VURkNoYXJzKChqc3RyaW5nKWFK
U3RyaW5nLCAmaXNDb3B5KTsKKyAgICBpZiAoIXMpIHsKKyAgICAgICAgZW52LT5FeGNlcHRpb25E
ZXNjcmliZSgpOworICAgICAgICBlbnYtPkV4Y2VwdGlvbkNsZWFyKCk7CisgICAgICAgICAgICAg
ICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9CisgICAgcmV0dXJuIHM7Cit9CisKK3Zv
aWQgcmVsZWFzZUNoYXJhY3RlcnNGb3JKU3RyaW5nSW5FbnYgKEpOSUVudiAqZW52LCBqc3RyaW5n
IGFKU3RyaW5nLCBjb25zdCBjaGFyICpzKQoreworICAgIGVudi0+UmVsZWFzZVN0cmluZ1VURkNo
YXJzIChhSlN0cmluZywgcyk7Cit9CisKK2NvbnN0IGpjaGFyICpnZXRVQ2hhcmFjdGVyc0Zyb21K
U3RyaW5nSW5FbnYgKEpOSUVudiAqZW52LCBqc3RyaW5nIGFKU3RyaW5nKQoreworICAgIGpib29s
ZWFuIGlzQ29weTsKKyAgICBjb25zdCBqY2hhciAqcyA9IGVudi0+R2V0U3RyaW5nQ2hhcnMoKGpz
dHJpbmcpYUpTdHJpbmcsICZpc0NvcHkpOworICAgIGlmICghcykgeworICAgICAgICBlbnYtPkV4
Y2VwdGlvbkRlc2NyaWJlKCk7CisgICAgICAgIGVudi0+RXhjZXB0aW9uQ2xlYXIoKTsKKyAgICAg
ICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgIH0KKyAgICByZXR1cm4gczsK
K30KKwordm9pZCByZWxlYXNlVUNoYXJhY3RlcnNGb3JKU3RyaW5nSW5FbnYgKEpOSUVudiAqZW52
LCBqc3RyaW5nIGFKU3RyaW5nLCBjb25zdCBqY2hhciAqcykKK3sKKyAgICBlbnYtPlJlbGVhc2VT
dHJpbmdDaGFycyAoYUpTdHJpbmcsIHMpOworfQorCitKTklUeXBlIEpOSVR5cGVGcm9tQ2xhc3NO
YW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgSk5JVHlwZSB0eXBlOworICAgIAorICAgIGlm
IChzdHJjbXAoImJ5dGUiLG5hbWUpID09IDApCisgICAgICAgIHR5cGUgPSBieXRlX3R5cGU7Cisg
ICAgZWxzZSBpZiAoc3RyY21wKCJzaG9ydCIsbmFtZSkgPT0gMCkKKyAgICAgICAgdHlwZSA9IHNo
b3J0X3R5cGU7CisgICAgZWxzZSBpZiAoc3RyY21wKCJpbnQiLG5hbWUpID09IDApCisgICAgICAg
IHR5cGUgPSBpbnRfdHlwZTsKKyAgICBlbHNlIGlmIChzdHJjbXAoImxvbmciLG5hbWUpID09IDAp
CisgICAgICAgIHR5cGUgPSBsb25nX3R5cGU7CisgICAgZWxzZSBpZiAoc3RyY21wKCJmbG9hdCIs
bmFtZSkgPT0gMCkKKyAgICAgICAgdHlwZSA9IGZsb2F0X3R5cGU7CisgICAgZWxzZSBpZiAoc3Ry
Y21wKCJkb3VibGUiLG5hbWUpID09IDApCisgICAgICAgIHR5cGUgPSBkb3VibGVfdHlwZTsKKyAg
ICBlbHNlIGlmIChzdHJjbXAoImNoYXIiLG5hbWUpID09IDApCisgICAgICAgIHR5cGUgPSBjaGFy
X3R5cGU7CisgICAgZWxzZSBpZiAoc3RyY21wKCJib29sZWFuIixuYW1lKSA9PSAwKQorICAgICAg
ICB0eXBlID0gYm9vbGVhbl90eXBlOworICAgIGVsc2UgaWYgKHN0cmNtcCgidm9pZCIsbmFtZSkg
PT0gMCkKKyAgICAgICAgdHlwZSA9IHZvaWRfdHlwZTsKKyAgICBlbHNlIGlmICgnWycgPT0gbmFt
ZVswXSkgCisgICAgICAgIHR5cGUgPSBhcnJheV90eXBlOworICAgIGVsc2UKKyAgICAgICAgdHlw
ZSA9IG9iamVjdF90eXBlOworICAgICAgICAKKyAgICByZXR1cm4gdHlwZTsKK30KKworY29uc3Qg
Y2hhciAqc2lnbmF0dXJlRnJvbVByaW1pdGl2ZVR5cGUoSk5JVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSl7CisgICAgICAgIGNhc2Ugdm9pZF90eXBlOiAKKyAgICAgICAgICAgIHJldHVy
biAiViI7CisgICAgICAgIAorICAgICAgICBjYXNlIGFycmF5X3R5cGU6CisgICAgICAgICAgICBy
ZXR1cm4gIlsiOworICAgICAgICAKKyAgICAgICAgY2FzZSBvYmplY3RfdHlwZToKKyAgICAgICAg
ICAgIHJldHVybiAiTCI7CisgICAgICAgIAorICAgICAgICBjYXNlIGJvb2xlYW5fdHlwZToKKyAg
ICAgICAgICAgIHJldHVybiAiWiI7CisgICAgICAgIAorICAgICAgICBjYXNlIGJ5dGVfdHlwZToK
KyAgICAgICAgICAgIHJldHVybiAiQiI7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBjaGFy
X3R5cGU6CisgICAgICAgICAgICByZXR1cm4gIkMiOworICAgICAgICAKKyAgICAgICAgY2FzZSBz
aG9ydF90eXBlOgorICAgICAgICAgICAgcmV0dXJuICJTIjsKKyAgICAgICAgCisgICAgICAgIGNh
c2UgaW50X3R5cGU6CisgICAgICAgICAgICByZXR1cm4gIkkiOworICAgICAgICAKKyAgICAgICAg
Y2FzZSBsb25nX3R5cGU6CisgICAgICAgICAgICByZXR1cm4gIkoiOworICAgICAgICAKKyAgICAg
ICAgY2FzZSBmbG9hdF90eXBlOgorICAgICAgICAgICAgcmV0dXJuICJGIjsKKyAgICAgICAgCisg
ICAgICAgIGNhc2UgZG91YmxlX3R5cGU6CisgICAgICAgICAgICByZXR1cm4gIkQiOworCisgICAg
ICAgIGNhc2UgaW52YWxpZF90eXBlOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuICIiOworfQorCitKTklUeXBlIEpOSVR5cGVGcm9tUHJpbWl0aXZl
VHlwZShjaGFyIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKXsKKyAgICAgICAgY2FzZSAnVic6
IAorICAgICAgICAgICAgcmV0dXJuIHZvaWRfdHlwZTsKKyAgICAgICAgCisgICAgICAgIGNhc2Ug
J0wnOgorICAgICAgICAgICAgcmV0dXJuIG9iamVjdF90eXBlOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgJ1snOgorICAgICAgICAgICAgcmV0dXJuIGFycmF5X3R5cGU7CisgICAgICAgIAor
ICAgICAgICBjYXNlICdaJzoKKyAgICAgICAgICAgIHJldHVybiBib29sZWFuX3R5cGU7CisgICAg
ICAgIAorICAgICAgICBjYXNlICdCJzoKKyAgICAgICAgICAgIHJldHVybiBieXRlX3R5cGU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSAnQyc6CisgICAgICAgICAgICByZXR1cm4gY2hhcl90
eXBlOworICAgICAgICAKKyAgICAgICAgY2FzZSAnUyc6CisgICAgICAgICAgICByZXR1cm4gc2hv
cnRfdHlwZTsKKyAgICAgICAgCisgICAgICAgIGNhc2UgJ0knOgorICAgICAgICAgICAgcmV0dXJu
IGludF90eXBlOworICAgICAgICAKKyAgICAgICAgY2FzZSAnSic6CisgICAgICAgICAgICByZXR1
cm4gbG9uZ190eXBlOworICAgICAgICAKKyAgICAgICAgY2FzZSAnRic6CisgICAgICAgICAgICBy
ZXR1cm4gZmxvYXRfdHlwZTsKKyAgICAgICAgCisgICAgICAgIGNhc2UgJ0QnOgorICAgICAgICAg
ICAgcmV0dXJuIGRvdWJsZV90eXBlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gaW52YWxpZF90eXBlOworfQorCitqdmFsdWUgZ2V0Sk5JRmll
bGQoIGpvYmplY3Qgb2JqLCBKTklUeXBlIHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo
YXIgKnNpZ25hdHVyZSkKK3sKKyAgICBKYXZhVk0gKmp2bSA9IGdldEphdmFWTSgpOworICAgIEpO
SUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7CisgICAganZhbHVlIHJlc3VsdDsKKworICAgIGJ6ZXJv
ICgmcmVzdWx0LCBzaXplb2YoanZhbHVlKSk7CisgICAgaWYgKCBvYmogIT0gTlVMTCAmJiBqdm0g
IT0gTlVMTCAmJiBlbnYgIT0gTlVMTCkgeworICAgICAgICBqY2xhc3MgY2xzID0gZW52LT5HZXRP
YmplY3RDbGFzcyhvYmopOworICAgICAgICBpZiAoIGNscyAhPSBOVUxMICkgeworICAgICAgICAg
ICAgamZpZWxkSUQgZmllbGQgPSBlbnYtPkdldEZpZWxkSUQoY2xzLCBuYW1lLCBzaWduYXR1cmUp
OworICAgICAgICAgICAgaWYgKCBmaWVsZCAhPSBOVUxMICkgeworICAgICAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgYXJyYXlfdHlwZToKKyAgICAgICAg
ICAgICAgICBjYXNlIG9iamVjdF90eXBlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQubCA9
IGVudi0+ZnVuY3Rpb25zLT5HZXRPYmplY3RGaWVsZChlbnYsIG9iaiwgZmllbGQpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGJvb2xlYW5fdHlwZToK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnogPSBlbnYtPmZ1bmN0aW9ucy0+R2V0Qm9vbGVh
bkZpZWxkKGVudiwgb2JqLCBmaWVsZCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgYnl0ZV90eXBlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQu
YiA9IGVudi0+ZnVuY3Rpb25zLT5HZXRCeXRlRmllbGQoZW52LCBvYmosIGZpZWxkKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBjaGFyX3R5cGU6Cisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jID0gZW52LT5mdW5jdGlvbnMtPkdldENoYXJGaWVs
ZChlbnYsIG9iaiwgZmllbGQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIHNob3J0X3R5cGU6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zID0g
ZW52LT5mdW5jdGlvbnMtPkdldFNob3J0RmllbGQoZW52LCBvYmosIGZpZWxkKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBpbnRfdHlwZToKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LmkgPSBlbnYtPmZ1bmN0aW9ucy0+R2V0SW50RmllbGQoZW52
LCBvYmosIGZpZWxkKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBsb25nX3R5cGU6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5qID0gZW52LT5m
dW5jdGlvbnMtPkdldExvbmdGaWVsZChlbnYsIG9iaiwgZmllbGQpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIGZsb2F0X3R5cGU6CisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5mID0gZW52LT5mdW5jdGlvbnMtPkdldEZsb2F0RmllbGQoZW52LCBv
YmosIGZpZWxkKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBkb3VibGVfdHlwZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmQgPSBlbnYtPmZ1
bmN0aW9ucy0+R2V0RG91YmxlRmllbGQoZW52LCBvYmosIGZpZWxkKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIlczogaW52YWxpZCBmaWVsZCB0eXBlICglZClcbiIsIF9fUFJF
VFRZX0ZVTkNUSU9OX18sIChpbnQpdHlwZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiJXM6IENvdWxkIG5vdCBmaW5kIGZpZWxkOiAlc1xuIiwgX19QUkVUVFlf
RlVOQ1RJT05fXywgbmFtZSk7CisgICAgICAgICAgICAgICAgZW52LT5FeGNlcHRpb25EZXNjcmli
ZSgpOworICAgICAgICAgICAgICAgIGVudi0+RXhjZXB0aW9uQ2xlYXIoKTsKKyAgICAgICAgICAg
ICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGNscyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBDb3VsZCBub3QgZmluZCBjbGFzcyBmb3Ig
b2JqZWN0XG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30gIC8vIGVuZCBvZiBuYW1lc3BhY2UgQmluZGluZ3MKKwor
fSAvLyBlbmQgb2YgbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKE1BQ19KQVZBX0JS
SURHRSkKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9KTklVdGlsaXR5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvSk5JVXRpbGl0eS5jcHAJKHJldmlzaW9uIDUzNDUwKQor
KysgV2ViQ29yZS9icmlkZ2Uvam5pL0pOSVV0aWxpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImpuaV91
dGlsaXR5LmgiCisjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgogCiAjaWYgRU5BQkxFKE1BQ19KQVZB
X0JSSURHRSkKIApJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL0pOSVV0aWxpdHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvSk5JVXRpbGl0eS5oCShyZXZpc2lvbiA1MzQ1MCkJ
KGZyb20gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5Lmg6NTM0NTApCisrKyBXZWJDb3Jl
L2JyaWRnZS9qbmkvSk5JVXRpbGl0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIF9KTklfVVRJTElUWV9IXworI2RlZmluZSBf
Sk5JX1VUSUxJVFlfSF8KKworI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisKKyNpbmNsdWRl
IDxKYXZhVk0vam5pLmg+CisKKy8vIFRoZSBvcmRlciBvZiB0aGVzZSBpdGVtcyBjYW4gbm90IGJl
IG1vZGlmaWVkIGFzIHRoZXkgYXJlIHRpZ2h0bHkKKy8vIGJvdW5kIHdpdGggdGhlIEpWTSBvbiBN
YWMgT1NYLiBJZiBuZXcgdHlwZXMgbmVlZCB0byBiZSBhZGRlZCwgdGhleQorLy8gc2hvdWxkIGJl
IGFkZGVkIHRvIHRoZSBlbmQuIEl0IGlzIHVzZWQgaW4gam5pX29iYy5tbSB3aGVuIGNhbGxpbmcK
Ky8vIHRocm91Z2ggdG8gdGhlIEpWTS4gTmV3bHkgYWRkZWQgaXRlbXMgbmVlZCB0byBiZSBtYWRl
IGNvbXBhdGlibGUKKy8vIGluIHRoYXQgZmlsZS4KK3R5cGVkZWYgZW51bSB7CisgICAgaW52YWxp
ZF90eXBlID0gMCwKKyAgICB2b2lkX3R5cGUsCisgICAgb2JqZWN0X3R5cGUsCisgICAgYm9vbGVh
bl90eXBlLAorICAgIGJ5dGVfdHlwZSwKKyAgICBjaGFyX3R5cGUsCisgICAgc2hvcnRfdHlwZSwK
KyAgICBpbnRfdHlwZSwKKyAgICBsb25nX3R5cGUsCisgICAgZmxvYXRfdHlwZSwKKyAgICBkb3Vi
bGVfdHlwZSwKKyAgICBhcnJheV90eXBlCit9IEpOSVR5cGU7CisKK25hbWVzcGFjZSBKU0Mgewor
CituYW1lc3BhY2UgQmluZGluZ3MgeworCitjbGFzcyBKYXZhUGFyYW1ldGVyOworCitjb25zdCBj
aGFyICpnZXRDaGFyYWN0ZXJzRnJvbUpTdHJpbmcoanN0cmluZyBhSlN0cmluZyk7Cit2b2lkIHJl
bGVhc2VDaGFyYWN0ZXJzRm9ySlN0cmluZyhqc3RyaW5nIGFKU3RyaW5nLCBjb25zdCBjaGFyICpz
KTsKKworY29uc3QgY2hhciAqZ2V0Q2hhcmFjdGVyc0Zyb21KU3RyaW5nSW5FbnYoSk5JRW52ICpl
bnYsIGpzdHJpbmcgYUpTdHJpbmcpOwordm9pZCByZWxlYXNlQ2hhcmFjdGVyc0ZvckpTdHJpbmdJ
bkVudihKTklFbnYgKmVudiwganN0cmluZyBhSlN0cmluZywgY29uc3QgY2hhciAqcyk7Citjb25z
dCBqY2hhciAqZ2V0VUNoYXJhY3RlcnNGcm9tSlN0cmluZ0luRW52KEpOSUVudiAqZW52LCBqc3Ry
aW5nIGFKU3RyaW5nKTsKK3ZvaWQgcmVsZWFzZVVDaGFyYWN0ZXJzRm9ySlN0cmluZ0luRW52KEpO
SUVudiAqZW52LCBqc3RyaW5nIGFKU3RyaW5nLCBjb25zdCBqY2hhciAqcyk7CisKK0pOSVR5cGUg
Sk5JVHlwZUZyb21DbGFzc05hbWUoY29uc3QgY2hhciAqbmFtZSk7CitKTklUeXBlIEpOSVR5cGVG
cm9tUHJpbWl0aXZlVHlwZShjaGFyIHR5cGUpOworY29uc3QgY2hhciAqc2lnbmF0dXJlRnJvbVBy
aW1pdGl2ZVR5cGUoSk5JVHlwZSB0eXBlKTsKKworanZhbHVlIGdldEpOSUZpZWxkKGpvYmplY3Qg
b2JqLCBKTklUeXBlIHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZ25hdHVy
ZSk7CisKK2ptZXRob2RJRCBnZXRNZXRob2RJRChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFt
ZSwgY29uc3QgY2hhciAqc2lnKTsKK0pOSUVudiogZ2V0Sk5JRW52KCk7CitKYXZhVk0qIGdldEph
dmFWTSgpOwordm9pZCBzZXRKYXZhVk0oSmF2YVZNKik7CisgICAgCisgICAgCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gc3RydWN0IEpOSUNhbGxlcjsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSk5JQ2Fs
bGVyPHZvaWQ+IHsKKyAgICBzdGF0aWMgdm9pZCBjYWxsQShqb2JqZWN0IG9iaiwgam1ldGhvZElE
IG1pZCwganZhbHVlKiBhcmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEpOSUVudigpLT5D
YWxsVm9pZE1ldGhvZEEob2JqLCBtaWQsIGFyZ3MpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBj
YWxsVihqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1pZCwgdmFfbGlzdCBhcmdzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdldEpOSUVudigpLT5DYWxsVm9pZE1ldGhvZFYob2JqLCBtaWQsIGFyZ3Mp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpOSUNhbGxlcjxqb2JqZWN0PiB7Cisg
ICAgc3RhdGljIGpvYmplY3QgY2FsbEEoam9iamVjdCBvYmosIGptZXRob2RJRCBtaWQsIGp2YWx1
ZSogYXJncykKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRKTklFbnYoKS0+Q2FsbE9iamVjdE1l
dGhvZEEob2JqLCBtaWQsIGFyZ3MpOworICAgIH0KKyAgICBzdGF0aWMgam9iamVjdCBjYWxsVihq
b2JqZWN0IG9iaiwgam1ldGhvZElEIG1pZCwgdmFfbGlzdCBhcmdzKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdldEpOSUVudigpLT5DYWxsT2JqZWN0TWV0aG9kVihvYmosIG1pZCwgYXJncyk7Cisg
ICAgfSAgICAKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpOSUNhbGxlcjxqYm9vbGVhbj4gewor
ICAgIHN0YXRpYyBqYm9vbGVhbiBjYWxsQShqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1pZCwganZh
bHVlKiBhcmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEpOSUVudigpLT5DYWxsQm9vbGVh
bk1ldGhvZEEob2JqLCBtaWQsIGFyZ3MpOworICAgIH0KKyAgICBzdGF0aWMgamJvb2xlYW4gY2Fs
bFYoam9iamVjdCBvYmosIGptZXRob2RJRCBtaWQsIHZhX2xpc3QgYXJncykKKyAgICB7CisgICAg
ICAgIHJldHVybiBnZXRKTklFbnYoKS0+Q2FsbEJvb2xlYW5NZXRob2RWKG9iaiwgbWlkLCBhcmdz
KTsKKyAgICB9CisgICAgc3RhdGljIGpib29sZWFuIGNhbGxTdGF0aWNWKGpjbGFzcyBjbHMsIGpt
ZXRob2RJRCBtaWQsIHZhX2xpc3QgYXJncykKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRKTklF
bnYoKS0+Q2FsbFN0YXRpY0Jvb2xlYW5NZXRob2QoY2xzLCBtaWQsIGFyZ3MpOworICAgIH0KKyAg
ICAKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpOSUNhbGxlcjxqYnl0ZT4geworICAgIHN0YXRp
YyBqYnl0ZSBjYWxsQShqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1pZCwganZhbHVlKiBhcmdzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEpOSUVudigpLT5DYWxsQnl0ZU1ldGhvZEEob2JqLCBt
aWQsIGFyZ3MpOworICAgIH0KKyAgICBzdGF0aWMgamJ5dGUgY2FsbFYoam9iamVjdCBvYmosIGpt
ZXRob2RJRCBtaWQsIHZhX2xpc3QgYXJncykKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRKTklF
bnYoKS0+Q2FsbEJ5dGVNZXRob2RWKG9iaiwgbWlkLCBhcmdzKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKTklDYWxsZXI8amNoYXI+IHsKKyAgICBzdGF0aWMgamNoYXIgY2FsbEEo
am9iamVjdCBvYmosIGptZXRob2RJRCBtaWQsIGp2YWx1ZSogYXJncykKKyAgICB7CisgICAgICAg
IHJldHVybiBnZXRKTklFbnYoKS0+Q2FsbENoYXJNZXRob2RBKG9iaiwgbWlkLCBhcmdzKTsKKyAg
ICB9CisgICAgc3RhdGljIGpjaGFyIGNhbGxWKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCB2
YV9saXN0IGFyZ3MpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxDaGFy
TWV0aG9kVihvYmosIG1pZCwgYXJncyk7CisgICAgfSAgICAKK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpOSUNhbGxlcjxqc2hvcnQ+IHsKKyAgICBzdGF0aWMganNob3J0IGNhbGxBKGpvYmplY3Qg
b2JqLCBqbWV0aG9kSUQgbWlkLCBqdmFsdWUqIGFyZ3MpCisgICAgeworICAgICAgICByZXR1cm4g
Z2V0Sk5JRW52KCktPkNhbGxTaG9ydE1ldGhvZEEob2JqLCBtaWQsIGFyZ3MpOworICAgIH0KKyAg
ICBzdGF0aWMganNob3J0IGNhbGxWKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCB2YV9saXN0
IGFyZ3MpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxTaG9ydE1ldGhv
ZFYob2JqLCBtaWQsIGFyZ3MpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpOSUNh
bGxlcjxqaW50PiB7CisgICAgc3RhdGljIGppbnQgY2FsbEEoam9iamVjdCBvYmosIGptZXRob2RJ
RCBtaWQsIGp2YWx1ZSogYXJncykKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRKTklFbnYoKS0+
Q2FsbEludE1ldGhvZEEob2JqLCBtaWQsIGFyZ3MpOworICAgIH0KKyAgICBzdGF0aWMgamludCBj
YWxsVihqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1pZCwgdmFfbGlzdCBhcmdzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdldEpOSUVudigpLT5DYWxsSW50TWV0aG9kVihvYmosIG1pZCwgYXJncyk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSk5JQ2FsbGVyPGpsb25nPiB7CisgICAg
c3RhdGljIGpsb25nIGNhbGxBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCBqdmFsdWUqIGFy
Z3MpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxMb25nTWV0aG9kQShv
YmosIG1pZCwgYXJncyk7CisgICAgfQorICAgIHN0YXRpYyBqbG9uZyBjYWxsVihqb2JqZWN0IG9i
aiwgam1ldGhvZElEIG1pZCwgdmFfbGlzdCBhcmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdl
dEpOSUVudigpLT5DYWxsTG9uZ01ldGhvZFYob2JqLCBtaWQsIGFyZ3MpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpOSUNhbGxlcjxqZmxvYXQ+IHsKKyAgICBzdGF0aWMgamZsb2F0
IGNhbGxBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCBqdmFsdWUqIGFyZ3MpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxGbG9hdE1ldGhvZEEob2JqLCBtaWQsIGFy
Z3MpOworICAgIH0KKyAgICBzdGF0aWMgamZsb2F0IGNhbGxWKGpvYmplY3Qgb2JqLCBqbWV0aG9k
SUQgbWlkLCB2YV9saXN0IGFyZ3MpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCkt
PkNhbGxGbG9hdE1ldGhvZFYob2JqLCBtaWQsIGFyZ3MpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEpOSUNhbGxlcjxqZG91YmxlPiB7CisgICAgc3RhdGljIGpkb3VibGUgY2FsbEEo
am9iamVjdCBvYmosIGptZXRob2RJRCBtaWQsIGp2YWx1ZSogYXJncykKKyAgICB7CisgICAgICAg
IHJldHVybiBnZXRKTklFbnYoKS0+Q2FsbERvdWJsZU1ldGhvZEEob2JqLCBtaWQsIGFyZ3MpOwor
ICAgIH0KKyAgICBzdGF0aWMgamRvdWJsZSBjYWxsVihqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1p
ZCwgdmFfbGlzdCBhcmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEpOSUVudigpLT5DYWxs
RG91YmxlTWV0aG9kVihvYmosIG1pZCwgYXJncyk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gVCBjYWxsSk5JTWV0aG9kSURBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCBq
dmFsdWUgKmFyZ3MpCit7CisgICAgcmV0dXJuIEpOSUNhbGxlcjxUPjo6Y2FsbEEob2JqLCBtaWQs
IGFyZ3MpOworfQorICAgIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyBUIGNhbGxKTklN
ZXRob2RWKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIHZh
X2xpc3QgYXJncykKK3sKKyAgICBKYXZhVk0gKmp2bSA9IGdldEphdmFWTSgpOworICAgIEpOSUVu
diAqZW52ID0gZ2V0Sk5JRW52KCk7CisgICAgCisgICAgaWYgKCBvYmogIT0gTlVMTCAmJiBqdm0g
IT0gTlVMTCAmJiBlbnYgIT0gTlVMTCkgeworICAgICAgICBqY2xhc3MgY2xzID0gZW52LT5HZXRP
YmplY3RDbGFzcyhvYmopOworICAgICAgICBpZiAoIGNscyAhPSBOVUxMICkgeworICAgICAgICAg
ICAgam1ldGhvZElEIG1pZCA9IGVudi0+R2V0TWV0aG9kSUQoY2xzLCBuYW1lLCBzaWcpOworICAg
ICAgICAgICAgaWYgKCBtaWQgIT0gTlVMTCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgLy8gQXZvaWRzIHJlZmVyZW5jZXMgdG8gY2xzIHdpdGhvdXQgcG9wcGluZyB0aGUgbG9jYWwg
ZnJhbWUuCisgICAgICAgICAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZihjbHMpOworICAgICAg
ICAgICAgICAgIHJldHVybiBKTklDYWxsZXI8VD46OmNhbGxWKG9iaiwgbWlkLCBhcmdzKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBDb3VsZCBub3QgZmluZCBtZXRob2Q6ICVzIGZvciAl
cFxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgbmFtZSwgb2JqKTsKKyAgICAgICAgICAgICAgICBl
bnYtPkV4Y2VwdGlvbkRlc2NyaWJlKCk7CisgICAgICAgICAgICAgICAgZW52LT5FeGNlcHRpb25D
bGVhcigpOworICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoY2xzKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IENvdWxk
IG5vdCBmaW5kIGNsYXNzIGZvciAlcFxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgb2JqKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorVCBjYWxsSk5JTWV0aG9kKGpvYmplY3Qgb2JqLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lLCBj
b25zdCBjaGFyKiBtZXRob2RTaWduYXR1cmUsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7Cisg
ICAgdmFfc3RhcnQoYXJncywgbWV0aG9kU2lnbmF0dXJlKTsKKyAgICAKKyAgICBUIHJlc3VsdD0g
Y2FsbEpOSU1ldGhvZFY8VD4ob2JqLCBtZXRob2ROYW1lLCBtZXRob2RTaWduYXR1cmUsIGFyZ3Mp
OworICAgIAorICAgIHZhX2VuZChhcmdzKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQor
ICAgIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QgY2FsbEpOSVN0YXRpY01ldGhvZChqY2xhc3Mg
Y2xzLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lLCBjb25zdCBjaGFyKiBtZXRob2RTaWduYXR1cmUs
IC4uLikKK3sKKyAgICBKYXZhVk0gKmp2bSA9IGdldEphdmFWTSgpOworICAgIEpOSUVudiAqZW52
ID0gZ2V0Sk5JRW52KCk7CisgICAgdmFfbGlzdCBhcmdzOworICAgIAorICAgIHZhX3N0YXJ0KGFy
Z3MsIG1ldGhvZFNpZ25hdHVyZSk7CisgICAgCisgICAgVCByZXN1bHQgPSAwOworICAgIAorICAg
IGlmIChjbHMgIT0gTlVMTCAmJiBqdm0gIT0gTlVMTCAmJiBlbnYgIT0gTlVMTCkgeworICAgICAg
ICBqbWV0aG9kSUQgbWlkID0gZW52LT5HZXRTdGF0aWNNZXRob2RJRChjbHMsIG1ldGhvZE5hbWUs
IG1ldGhvZFNpZ25hdHVyZSk7CisgICAgICAgIGlmIChtaWQgIT0gTlVMTCkgCisgICAgICAgICAg
ICByZXN1bHQgPSBKTklDYWxsZXI8VD46OmNhbGxTdGF0aWNWKGNscywgbWlkLCBhcmdzKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBDb3VsZCBub3Qg
ZmluZCBtZXRob2Q6ICVzIGZvciAlcFxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgbWV0aG9kTmFt
ZSwgY2xzKTsKKyAgICAgICAgICAgIGVudi0+RXhjZXB0aW9uRGVzY3JpYmUoKTsKKyAgICAgICAg
ICAgIGVudi0+RXhjZXB0aW9uQ2xlYXIoKTsKKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwg
IlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdmFfZW5kKGFyZ3MpOworICAgIAor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisK
KyNlbmRpZiAvLyBfSk5JX1VUSUxJVFlfSF8KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9KTklV
dGlsaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL0pOSVV0aWxpdHkuaAko
cmV2aXNpb24gNTM0NTApCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvSk5JVXRpbGl0eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIF9KTklfVVRJTElUWV9IXwotI2RlZmluZSBfSk5JX1VUSUxJVFlfSF8KKyNpZm5kZWYgSk5J
VXRpbGl0eV9oCisjZGVmaW5lIEpOSVV0aWxpdHlfaAogCiAjaWYgRU5BQkxFKE1BQ19KQVZBX0JS
SURHRSkKIApAQCAtMjc5LDQgKzI3OSw0IEBAIFQgY2FsbEpOSVN0YXRpY01ldGhvZChqY2xhc3Mg
Y2xzLCBjb25zdCAKIAogI2VuZGlmIC8vIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCiAKLSNlbmRp
ZiAvLyBfSk5JX1VUSUxJVFlfSF8KKyNlbmRpZiAvLyBKTklVdGlsaXR5X2gKSW5kZXg6IFdlYkNv
cmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlk
Z2Uvam5pL2puaV9qc29iamVjdC5tbQkocmV2aXNpb24gNTM0NTApCisrKyBXZWJDb3JlL2JyaWRn
ZS9qbmkvam5pX2pzb2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTMgQEAK
ICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJKTklVdGlsaXR5LmgiCisjaW5jbHVkZSAiSk5JVXRpbGl0eVByaXZhdGUuaCIKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiam5pX3J1bnRpbWUuaCIKLSNpbmNsdWRlICJqbmlfdXRpbGl0eS5oIgot
I2luY2x1ZGUgImpuaV91dGlsaXR5X3ByaXZhdGUuaCIKICNpbmNsdWRlICJydW50aW1lX29iamVj
dC5oIgogI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgogI2luY2x1ZGUgPGludGVycHJldGVyL0Nh
bGxGcmFtZS5oPgpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9vYmpjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfb2JqYy5tbQkocmV2aXNpb24gNTM0NTApCisr
KyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX29iamMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDgg
KzI4LDggQEAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCiAjaW1wb3J0IDxGb3VuZGF0
aW9uL0ZvdW5kYXRpb24uaD4KLSNpbXBvcnQgImpuaV91dGlsaXR5LmgiCi0jaW1wb3J0ICJqbmlf
dXRpbGl0eV9wcml2YXRlLmgiCisjaW1wb3J0ICJKTklVdGlsaXR5LmgiCisjaW1wb3J0ICJKTklV
dGlsaXR5UHJpdmF0ZS5oIgogI2ltcG9ydCAib2JqY191dGlsaXR5LmgiCiAjaW5jbHVkZSA8cnVu
dGltZS9KU0xvY2suaD4KIApJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9ydW50aW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3J1bnRpbWUuY3BwCShyZXZp
c2lvbiA1MzQ1MCkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDkgKzI5LDkgQEAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQog
CiAjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkpOSVV0aWxpdHkuaCIKKyNpbmNsdWRl
ICJKTklVdGlsaXR5UHJpdmF0ZS5oIgogI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKLSNpbmNs
dWRlICJqbmlfdXRpbGl0eS5oIgotI2luY2x1ZGUgImpuaV91dGlsaXR5X3ByaXZhdGUuaCIKICNp
bmNsdWRlICJydW50aW1lX2FycmF5LmgiCiAjaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKICNp
bmNsdWRlICJydW50aW1lX3Jvb3QuaCIKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVu
dGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5oCShy
ZXZpc2lvbiA1MzQ1MCkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfcnVudGltZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdF
KQogCisjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgogI2luY2x1ZGUgIkphdmFJbnN0YW5jZUpTQy5o
IgotI2luY2x1ZGUgImpuaV91dGlsaXR5LmgiCiAKICNpZiBVU0UoSlNDKQogI2luY2x1ZGUgIkph
dmFTdHJpbmdKU0MuaCIKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfdXRpbGl0eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV91dGlsaXR5LmNwcAkocmV2aXNp
b24gNTM0NTApCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDM0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiam5pX3V0aWxpdHkuaCIKLQotI2lmIEVOQUJMRShNQUNfSkFW
QV9CUklER0UpCi0KLSNpbmNsdWRlIDxkbGZjbi5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFt
ZXNwYWNlIEJpbmRpbmdzIHsKLQotc3RhdGljIGppbnQgS0pTX0dldENyZWF0ZWRKYXZhVk1zKEph
dmFWTSoqIHZtQnVmLCBqc2l6ZSBidWZMZW4sIGpzaXplKiBuVk1zKQotewotICAgIHN0YXRpYyB2
b2lkKiBqYXZhVk1GcmFtZXdvcmsgPSAwOwotICAgIGlmICghamF2YVZNRnJhbWV3b3JrKQotICAg
ICAgICBqYXZhVk1GcmFtZXdvcmsgPSBkbG9wZW4oIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L0phdmFWTS5mcmFtZXdvcmsvSmF2YVZNIiwgUlRMRF9MQVpZKTsKLSAgICBpZiAoIWphdmFWTUZy
YW1ld29yaykKLSAgICAgICAgcmV0dXJuIEpOSV9FUlI7Ci0KLSAgICBzdGF0aWMgamludCgqZnVu
Y3Rpb25Qb2ludGVyKShKYXZhVk0qKiwganNpemUsIGpzaXplICopID0gMDsKLSAgICBpZiAoIWZ1
bmN0aW9uUG9pbnRlcikKLSAgICAgICAgZnVuY3Rpb25Qb2ludGVyID0gKGppbnQoKikoSmF2YVZN
KiosIGpzaXplLCBqc2l6ZSAqKSlkbHN5bShqYXZhVk1GcmFtZXdvcmssICJKTklfR2V0Q3JlYXRl
ZEphdmFWTXMiKTsKLSAgICBpZiAoIWZ1bmN0aW9uUG9pbnRlcikKLSAgICAgICAgcmV0dXJuIEpO
SV9FUlI7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uUG9pbnRlcih2bUJ1ZiwgYnVmTGVuLCBuVk1zKTsK
LX0KLQotc3RhdGljIEphdmFWTSAqanZtID0gMDsKLQotLy8gUHJvdmlkZSB0aGUgYWJpbGl0eSBm
b3IgYW4gb3V0c2lkZSBjb21wb25lbnQgdG8gc3BlY2lmeSB0aGUgSmF2YVZNIHRvIHVzZQotLy8g
SWYgdGhlIGp2bSB2YWx1ZSBpcyBzZXQsIHRoZSBnZXRKYXZhVk0gZnVuY3Rpb24gYmVsb3cgd2ls
bCBqdXN0IHJldHVybi4gCi0vLyBJbiBnZXRKTklFbnYoKSwgaWYgQXR0YWNoQ3VycmVudFRocmVh
ZCBpcyBjYWxsZWQgdG8gYSBWTSB0aGF0IGlzIGFscmVhZHkKLS8vIGF0dGFjaGVkLCB0aGUgcmVz
dWx0IGlzIGEgbm8tb3AuCi12b2lkIHNldEphdmFWTShKYXZhVk0gKmphdmFWTSkKLXsKLSAgICBq
dm0gPSBqYXZhVk07Ci19Ci0KLUphdmFWTSAqZ2V0SmF2YVZNKCkKLXsKLSAgICBpZiAoanZtKQot
ICAgICAgICByZXR1cm4ganZtOwotCi0gICAgSmF2YVZNICpqdm1BcnJheVsxXTsKLSAgICBqc2l6
ZSBidWZMZW4gPSAxOwotICAgIGpzaXplIG5KVk1zID0gMDsKLSAgICBqaW50IGpuaUVycm9yID0g
MDsKLQotICAgIC8vIEFzc3VtZXMgSlZNIGlzIGFscmVhZHkgcnVubmluZyAuLi4sIG9uZSBwZXIg
cHJvY2VzcwotICAgIGpuaUVycm9yID0gS0pTX0dldENyZWF0ZWRKYXZhVk1zKGp2bUFycmF5LCBi
dWZMZW4sICZuSlZNcyk7Ci0gICAgaWYgKCBqbmlFcnJvciA9PSBKTklfT0sgJiYgbkpWTXMgPiAw
ICkgewotICAgICAgICBqdm0gPSBqdm1BcnJheVswXTsKLSAgICB9Ci0gICAgZWxzZSAKLSAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIlczogSk5JX0dldENyZWF0ZWRKYXZhVk1zIGZhaWxlZCwgcmV0
dXJuZWQgJWxkXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAobG9uZylqbmlFcnJvcik7Ci0gICAg
ICAgIAotICAgIHJldHVybiBqdm07Ci19Ci0KLUpOSUVudiogZ2V0Sk5JRW52KCkKLXsKLSAgICB1
bmlvbiB7Ci0gICAgICAgIEpOSUVudiogZW52OwotICAgICAgICB2b2lkKiBkdW1teTsKLSAgICB9
IHU7Ci0gICAgamludCBqbmlFcnJvciA9IDA7Ci0KLSAgICBqbmlFcnJvciA9IChnZXRKYXZhVk0o
KSktPkF0dGFjaEN1cnJlbnRUaHJlYWQoJnUuZHVtbXksIE5VTEwpOwotICAgIGlmIChqbmlFcnJv
ciA9PSBKTklfT0spCi0gICAgICAgIHJldHVybiB1LmVudjsKLSAgICBlbHNlCi0gICAgICAgIGZw
cmludGYoc3RkZXJyLCAiJXM6IEF0dGFjaEN1cnJlbnRUaHJlYWQgZmFpbGVkLCByZXR1cm5lZCAl
bGRcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIChsb25nKWpuaUVycm9yKTsKLSAgICByZXR1cm4g
TlVMTDsKLX0KLQotam1ldGhvZElEIGdldE1ldGhvZElEIChqb2JqZWN0IG9iaiwgY29uc3QgY2hh
ciAqbmFtZSwgY29uc3QgY2hhciAqc2lnKQotewotICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52
KCk7Ci0gICAgam1ldGhvZElEIG1pZCA9IDA7Ci0gICAgICAgIAotICAgIGlmICggZW52ICE9IE5V
TEwpIHsKLSAgICBqY2xhc3MgY2xzID0gZW52LT5HZXRPYmplY3RDbGFzcyhvYmopOwotICAgIGlm
ICggY2xzICE9IE5VTEwgKSB7Ci0gICAgICAgICAgICBtaWQgPSBlbnYtPkdldE1ldGhvZElEKGNs
cywgbmFtZSwgc2lnKTsKLSAgICAgICAgICAgIGlmICghbWlkKSB7Ci0gICAgICAgICAgICAgICAg
ZW52LT5FeGNlcHRpb25DbGVhcigpOwotICAgICAgICAgICAgICAgIG1pZCA9IGVudi0+R2V0U3Rh
dGljTWV0aG9kSUQoY2xzLCBuYW1lLCBzaWcpOwotICAgICAgICAgICAgICAgIGlmICghbWlkKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGVudi0+RXhjZXB0aW9uQ2xlYXIoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZW52LT5EZWxldGVMb2Nh
bFJlZihjbHMpOwotICAgIH0KLSAgICByZXR1cm4gbWlkOwotfQotCi1jb25zdCBjaGFyICpnZXRD
aGFyYWN0ZXJzRnJvbUpTdHJpbmcgKGpzdHJpbmcgYUpTdHJpbmcpCi17Ci0gICAgcmV0dXJuIGdl
dENoYXJhY3RlcnNGcm9tSlN0cmluZ0luRW52IChnZXRKTklFbnYoKSwgYUpTdHJpbmcpOwotfQot
Ci12b2lkIHJlbGVhc2VDaGFyYWN0ZXJzRm9ySlN0cmluZyAoanN0cmluZyBhSlN0cmluZywgY29u
c3QgY2hhciAqcykKLXsKLSAgICByZWxlYXNlQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVudiAoZ2V0
Sk5JRW52KCksIGFKU3RyaW5nLCBzKTsKLX0KLQotY29uc3QgY2hhciAqZ2V0Q2hhcmFjdGVyc0Zy
b21KU3RyaW5nSW5FbnYgKEpOSUVudiAqZW52LCBqc3RyaW5nIGFKU3RyaW5nKQotewotICAgIGpi
b29sZWFuIGlzQ29weTsKLSAgICBjb25zdCBjaGFyICpzID0gZW52LT5HZXRTdHJpbmdVVEZDaGFy
cygoanN0cmluZylhSlN0cmluZywgJmlzQ29weSk7Ci0gICAgaWYgKCFzKSB7Ci0gICAgICAgIGVu
di0+RXhjZXB0aW9uRGVzY3JpYmUoKTsKLSAgICAgICAgZW52LT5FeGNlcHRpb25DbGVhcigpOwot
ICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7Ci0gICAgfQotICAgIHJldHVy
biBzOwotfQotCi12b2lkIHJlbGVhc2VDaGFyYWN0ZXJzRm9ySlN0cmluZ0luRW52IChKTklFbnYg
KmVudiwganN0cmluZyBhSlN0cmluZywgY29uc3QgY2hhciAqcykKLXsKLSAgICBlbnYtPlJlbGVh
c2VTdHJpbmdVVEZDaGFycyAoYUpTdHJpbmcsIHMpOwotfQotCi1jb25zdCBqY2hhciAqZ2V0VUNo
YXJhY3RlcnNGcm9tSlN0cmluZ0luRW52IChKTklFbnYgKmVudiwganN0cmluZyBhSlN0cmluZykK
LXsKLSAgICBqYm9vbGVhbiBpc0NvcHk7Ci0gICAgY29uc3QgamNoYXIgKnMgPSBlbnYtPkdldFN0
cmluZ0NoYXJzKChqc3RyaW5nKWFKU3RyaW5nLCAmaXNDb3B5KTsKLSAgICBpZiAoIXMpIHsKLSAg
ICAgICAgZW52LT5FeGNlcHRpb25EZXNjcmliZSgpOwotICAgICAgICBlbnYtPkV4Y2VwdGlvbkNs
ZWFyKCk7Ci0gICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHM7Ci19Ci0KLXZvaWQgcmVsZWFzZVVDaGFyYWN0ZXJzRm9ySlN0cmluZ0luRW52
IChKTklFbnYgKmVudiwganN0cmluZyBhSlN0cmluZywgY29uc3QgamNoYXIgKnMpCi17Ci0gICAg
ZW52LT5SZWxlYXNlU3RyaW5nQ2hhcnMgKGFKU3RyaW5nLCBzKTsKLX0KLQotSk5JVHlwZSBKTklU
eXBlRnJvbUNsYXNzTmFtZShjb25zdCBjaGFyICpuYW1lKQotewotICAgIEpOSVR5cGUgdHlwZTsK
LSAgICAKLSAgICBpZiAoc3RyY21wKCJieXRlIixuYW1lKSA9PSAwKQotICAgICAgICB0eXBlID0g
Ynl0ZV90eXBlOwotICAgIGVsc2UgaWYgKHN0cmNtcCgic2hvcnQiLG5hbWUpID09IDApCi0gICAg
ICAgIHR5cGUgPSBzaG9ydF90eXBlOwotICAgIGVsc2UgaWYgKHN0cmNtcCgiaW50IixuYW1lKSA9
PSAwKQotICAgICAgICB0eXBlID0gaW50X3R5cGU7Ci0gICAgZWxzZSBpZiAoc3RyY21wKCJsb25n
IixuYW1lKSA9PSAwKQotICAgICAgICB0eXBlID0gbG9uZ190eXBlOwotICAgIGVsc2UgaWYgKHN0
cmNtcCgiZmxvYXQiLG5hbWUpID09IDApCi0gICAgICAgIHR5cGUgPSBmbG9hdF90eXBlOwotICAg
IGVsc2UgaWYgKHN0cmNtcCgiZG91YmxlIixuYW1lKSA9PSAwKQotICAgICAgICB0eXBlID0gZG91
YmxlX3R5cGU7Ci0gICAgZWxzZSBpZiAoc3RyY21wKCJjaGFyIixuYW1lKSA9PSAwKQotICAgICAg
ICB0eXBlID0gY2hhcl90eXBlOwotICAgIGVsc2UgaWYgKHN0cmNtcCgiYm9vbGVhbiIsbmFtZSkg
PT0gMCkKLSAgICAgICAgdHlwZSA9IGJvb2xlYW5fdHlwZTsKLSAgICBlbHNlIGlmIChzdHJjbXAo
InZvaWQiLG5hbWUpID09IDApCi0gICAgICAgIHR5cGUgPSB2b2lkX3R5cGU7Ci0gICAgZWxzZSBp
ZiAoJ1snID09IG5hbWVbMF0pIAotICAgICAgICB0eXBlID0gYXJyYXlfdHlwZTsKLSAgICBlbHNl
Ci0gICAgICAgIHR5cGUgPSBvYmplY3RfdHlwZTsKLSAgICAgICAgCi0gICAgcmV0dXJuIHR5cGU7
Ci19Ci0KLWNvbnN0IGNoYXIgKnNpZ25hdHVyZUZyb21QcmltaXRpdmVUeXBlKEpOSVR5cGUgdHlw
ZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpewotICAgICAgICBjYXNlIHZvaWRfdHlwZTogCi0gICAg
ICAgICAgICByZXR1cm4gIlYiOwotICAgICAgICAKLSAgICAgICAgY2FzZSBhcnJheV90eXBlOgot
ICAgICAgICAgICAgcmV0dXJuICJbIjsKLSAgICAgICAgCi0gICAgICAgIGNhc2Ugb2JqZWN0X3R5
cGU6Ci0gICAgICAgICAgICByZXR1cm4gIkwiOwotICAgICAgICAKLSAgICAgICAgY2FzZSBib29s
ZWFuX3R5cGU6Ci0gICAgICAgICAgICByZXR1cm4gIloiOwotICAgICAgICAKLSAgICAgICAgY2Fz
ZSBieXRlX3R5cGU6Ci0gICAgICAgICAgICByZXR1cm4gIkIiOwotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgY2hhcl90eXBlOgotICAgICAgICAgICAgcmV0dXJuICJDIjsKLSAgICAgICAgCi0g
ICAgICAgIGNhc2Ugc2hvcnRfdHlwZToKLSAgICAgICAgICAgIHJldHVybiAiUyI7Ci0gICAgICAg
IAotICAgICAgICBjYXNlIGludF90eXBlOgotICAgICAgICAgICAgcmV0dXJuICJJIjsKLSAgICAg
ICAgCi0gICAgICAgIGNhc2UgbG9uZ190eXBlOgotICAgICAgICAgICAgcmV0dXJuICJKIjsKLSAg
ICAgICAgCi0gICAgICAgIGNhc2UgZmxvYXRfdHlwZToKLSAgICAgICAgICAgIHJldHVybiAiRiI7
Ci0gICAgICAgIAotICAgICAgICBjYXNlIGRvdWJsZV90eXBlOgotICAgICAgICAgICAgcmV0dXJu
ICJEIjsKLQotICAgICAgICBjYXNlIGludmFsaWRfdHlwZToKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiAiIjsKLX0KLQotSk5JVHlwZSBKTklUeXBl
RnJvbVByaW1pdGl2ZVR5cGUoY2hhciB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSl7Ci0gICAg
ICAgIGNhc2UgJ1YnOiAKLSAgICAgICAgICAgIHJldHVybiB2b2lkX3R5cGU7Ci0gICAgICAgIAot
ICAgICAgICBjYXNlICdMJzoKLSAgICAgICAgICAgIHJldHVybiBvYmplY3RfdHlwZTsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlICdbJzoKLSAgICAgICAgICAgIHJldHVybiBhcnJheV90eXBl
OwotICAgICAgICAKLSAgICAgICAgY2FzZSAnWic6Ci0gICAgICAgICAgICByZXR1cm4gYm9vbGVh
bl90eXBlOwotICAgICAgICAKLSAgICAgICAgY2FzZSAnQic6Ci0gICAgICAgICAgICByZXR1cm4g
Ynl0ZV90eXBlOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgJ0MnOgotICAgICAgICAgICAg
cmV0dXJuIGNoYXJfdHlwZTsKLSAgICAgICAgCi0gICAgICAgIGNhc2UgJ1MnOgotICAgICAgICAg
ICAgcmV0dXJuIHNob3J0X3R5cGU7Ci0gICAgICAgIAotICAgICAgICBjYXNlICdJJzoKLSAgICAg
ICAgICAgIHJldHVybiBpbnRfdHlwZTsKLSAgICAgICAgCi0gICAgICAgIGNhc2UgJ0onOgotICAg
ICAgICAgICAgcmV0dXJuIGxvbmdfdHlwZTsKLSAgICAgICAgCi0gICAgICAgIGNhc2UgJ0YnOgot
ICAgICAgICAgICAgcmV0dXJuIGZsb2F0X3R5cGU7Ci0gICAgICAgIAotICAgICAgICBjYXNlICdE
JzoKLSAgICAgICAgICAgIHJldHVybiBkb3VibGVfdHlwZTsKLQotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGludmFsaWRfdHlwZTsKLX0KLQotanZh
bHVlIGdldEpOSUZpZWxkKCBqb2JqZWN0IG9iaiwgSk5JVHlwZSB0eXBlLCBjb25zdCBjaGFyICpu
YW1lLCBjb25zdCBjaGFyICpzaWduYXR1cmUpCi17Ci0gICAgSmF2YVZNICpqdm0gPSBnZXRKYXZh
Vk0oKTsKLSAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwotICAgIGp2YWx1ZSByZXN1bHQ7
Ci0KLSAgICBiemVybyAoJnJlc3VsdCwgc2l6ZW9mKGp2YWx1ZSkpOwotICAgIGlmICggb2JqICE9
IE5VTEwgJiYganZtICE9IE5VTEwgJiYgZW52ICE9IE5VTEwpIHsKLSAgICAgICAgamNsYXNzIGNs
cyA9IGVudi0+R2V0T2JqZWN0Q2xhc3Mob2JqKTsKLSAgICAgICAgaWYgKCBjbHMgIT0gTlVMTCAp
IHsKLSAgICAgICAgICAgIGpmaWVsZElEIGZpZWxkID0gZW52LT5HZXRGaWVsZElEKGNscywgbmFt
ZSwgc2lnbmF0dXJlKTsKLSAgICAgICAgICAgIGlmICggZmllbGQgIT0gTlVMTCApIHsKLSAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIGFycmF5X3R5
cGU6Ci0gICAgICAgICAgICAgICAgY2FzZSBvYmplY3RfdHlwZToKLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmwgPSBlbnYtPmZ1bmN0aW9ucy0+R2V0T2JqZWN0RmllbGQoZW52LCBvYmosIGZp
ZWxkKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBi
b29sZWFuX3R5cGU6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC56ID0gZW52LT5mdW5jdGlv
bnMtPkdldEJvb2xlYW5GaWVsZChlbnYsIG9iaiwgZmllbGQpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIGJ5dGVfdHlwZToKLSAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LmIgPSBlbnYtPmZ1bmN0aW9ucy0+R2V0Qnl0ZUZpZWxkKGVudiwgb2JqLCBm
aWVsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
Y2hhcl90eXBlOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYyA9IGVudi0+ZnVuY3Rpb25z
LT5HZXRDaGFyRmllbGQoZW52LCBvYmosIGZpZWxkKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBzaG9ydF90eXBlOgotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQucyA9IGVudi0+ZnVuY3Rpb25zLT5HZXRTaG9ydEZpZWxkKGVudiwgb2JqLCBmaWVs
ZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgaW50
X3R5cGU6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pID0gZW52LT5mdW5jdGlvbnMtPkdl
dEludEZpZWxkKGVudiwgb2JqLCBmaWVsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgbG9uZ190eXBlOgotICAgICAgICAgICAgICAgICAgICByZXN1
bHQuaiA9IGVudi0+ZnVuY3Rpb25zLT5HZXRMb25nRmllbGQoZW52LCBvYmosIGZpZWxkKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBmbG9hdF90eXBl
OgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuZiA9IGVudi0+ZnVuY3Rpb25zLT5HZXRGbG9h
dEZpZWxkKGVudiwgb2JqLCBmaWVsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgZG91YmxlX3R5cGU6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5kID0gZW52LT5mdW5jdGlvbnMtPkdldERvdWJsZUZpZWxkKGVudiwgb2JqLCBmaWVsZCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGludmFsaWQgZmllbGQgdHlwZSAo
JWQpXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAoaW50KXR5cGUpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBDb3VsZCBub3QgZmluZCBmaWVsZDogJXNc
biIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIG5hbWUpOwotICAgICAgICAgICAgICAgIGVudi0+RXhj
ZXB0aW9uRGVzY3JpYmUoKTsKLSAgICAgICAgICAgICAgICBlbnYtPkV4Y2VwdGlvbkNsZWFyKCk7
Ci0gICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZihjbHMpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogQ291bGQgbm90IGZp
bmQgY2xhc3MgZm9yIG9iamVjdFxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19ICAvLyBlbmQgb2YgbmFtZXNwYWNl
IEJpbmRpbmdzCi0KLX0gLy8gZW5kIG9mIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJM
RShNQUNfSkFWQV9CUklER0UpCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHkuaAkocmV2aXNp
b24gNTM0NTApCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX3V0aWxpdHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwyODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBfSk5J
X1VUSUxJVFlfSF8KLSNkZWZpbmUgX0pOSV9VVElMSVRZX0hfCi0KLSNpZiBFTkFCTEUoTUFDX0pB
VkFfQlJJREdFKQotCi0jaW5jbHVkZSA8SmF2YVZNL2puaS5oPgotCi0vLyBUaGUgb3JkZXIgb2Yg
dGhlc2UgaXRlbXMgY2FuIG5vdCBiZSBtb2RpZmllZCBhcyB0aGV5IGFyZSB0aWdodGx5Ci0vLyBi
b3VuZCB3aXRoIHRoZSBKVk0gb24gTWFjIE9TWC4gSWYgbmV3IHR5cGVzIG5lZWQgdG8gYmUgYWRk
ZWQsIHRoZXkKLS8vIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgZW5kLiBJdCBpcyB1c2VkIGluIGpu
aV9vYmMubW0gd2hlbiBjYWxsaW5nCi0vLyB0aHJvdWdoIHRvIHRoZSBKVk0uIE5ld2x5IGFkZGVk
IGl0ZW1zIG5lZWQgdG8gYmUgbWFkZSBjb21wYXRpYmxlCi0vLyBpbiB0aGF0IGZpbGUuCi10eXBl
ZGVmIGVudW0gewotICAgIGludmFsaWRfdHlwZSA9IDAsCi0gICAgdm9pZF90eXBlLAotICAgIG9i
amVjdF90eXBlLAotICAgIGJvb2xlYW5fdHlwZSwKLSAgICBieXRlX3R5cGUsCi0gICAgY2hhcl90
eXBlLAotICAgIHNob3J0X3R5cGUsCi0gICAgaW50X3R5cGUsCi0gICAgbG9uZ190eXBlLAotICAg
IGZsb2F0X3R5cGUsCi0gICAgZG91YmxlX3R5cGUsCi0gICAgYXJyYXlfdHlwZQotfSBKTklUeXBl
OwotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIEJpbmRpbmdzIHsKLQotY2xhc3MgSmF2
YVBhcmFtZXRlcjsKLQotY29uc3QgY2hhciAqZ2V0Q2hhcmFjdGVyc0Zyb21KU3RyaW5nKGpzdHJp
bmcgYUpTdHJpbmcpOwotdm9pZCByZWxlYXNlQ2hhcmFjdGVyc0ZvckpTdHJpbmcoanN0cmluZyBh
SlN0cmluZywgY29uc3QgY2hhciAqcyk7Ci0KLWNvbnN0IGNoYXIgKmdldENoYXJhY3RlcnNGcm9t
SlN0cmluZ0luRW52KEpOSUVudiAqZW52LCBqc3RyaW5nIGFKU3RyaW5nKTsKLXZvaWQgcmVsZWFz
ZUNoYXJhY3RlcnNGb3JKU3RyaW5nSW5FbnYoSk5JRW52ICplbnYsIGpzdHJpbmcgYUpTdHJpbmcs
IGNvbnN0IGNoYXIgKnMpOwotY29uc3QgamNoYXIgKmdldFVDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJ
bkVudihKTklFbnYgKmVudiwganN0cmluZyBhSlN0cmluZyk7Ci12b2lkIHJlbGVhc2VVQ2hhcmFj
dGVyc0ZvckpTdHJpbmdJbkVudihKTklFbnYgKmVudiwganN0cmluZyBhSlN0cmluZywgY29uc3Qg
amNoYXIgKnMpOwotCi1KTklUeXBlIEpOSVR5cGVGcm9tQ2xhc3NOYW1lKGNvbnN0IGNoYXIgKm5h
bWUpOwotSk5JVHlwZSBKTklUeXBlRnJvbVByaW1pdGl2ZVR5cGUoY2hhciB0eXBlKTsKLWNvbnN0
IGNoYXIgKnNpZ25hdHVyZUZyb21QcmltaXRpdmVUeXBlKEpOSVR5cGUgdHlwZSk7Ci0KLWp2YWx1
ZSBnZXRKTklGaWVsZChqb2JqZWN0IG9iaiwgSk5JVHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1l
LCBjb25zdCBjaGFyICpzaWduYXR1cmUpOwotCi1qbWV0aG9kSUQgZ2V0TWV0aG9kSUQoam9iamVj
dCBvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZyk7Ci1KTklFbnYqIGdldEpO
SUVudigpOwotSmF2YVZNKiBnZXRKYXZhVk0oKTsKLXZvaWQgc2V0SmF2YVZNKEphdmFWTSopOwot
ICAgIAotICAgIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBKTklDYWxsZXI7Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpOSUNhbGxlcjx2b2lkPiB7Ci0gICAgc3RhdGljIHZvaWQgY2FsbEEo
am9iamVjdCBvYmosIGptZXRob2RJRCBtaWQsIGp2YWx1ZSogYXJncykKLSAgICB7Ci0gICAgICAg
IHJldHVybiBnZXRKTklFbnYoKS0+Q2FsbFZvaWRNZXRob2RBKG9iaiwgbWlkLCBhcmdzKTsKLSAg
ICB9Ci0gICAgc3RhdGljIHZvaWQgY2FsbFYoam9iamVjdCBvYmosIGptZXRob2RJRCBtaWQsIHZh
X2xpc3QgYXJncykKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRKTklFbnYoKS0+Q2FsbFZvaWRN
ZXRob2RWKG9iaiwgbWlkLCBhcmdzKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
TklDYWxsZXI8am9iamVjdD4gewotICAgIHN0YXRpYyBqb2JqZWN0IGNhbGxBKGpvYmplY3Qgb2Jq
LCBqbWV0aG9kSUQgbWlkLCBqdmFsdWUqIGFyZ3MpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0
Sk5JRW52KCktPkNhbGxPYmplY3RNZXRob2RBKG9iaiwgbWlkLCBhcmdzKTsKLSAgICB9Ci0gICAg
c3RhdGljIGpvYmplY3QgY2FsbFYoam9iamVjdCBvYmosIGptZXRob2RJRCBtaWQsIHZhX2xpc3Qg
YXJncykKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRKTklFbnYoKS0+Q2FsbE9iamVjdE1ldGhv
ZFYob2JqLCBtaWQsIGFyZ3MpOwotICAgIH0gICAgCi19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
TklDYWxsZXI8amJvb2xlYW4+IHsKLSAgICBzdGF0aWMgamJvb2xlYW4gY2FsbEEoam9iamVjdCBv
YmosIGptZXRob2RJRCBtaWQsIGp2YWx1ZSogYXJncykKLSAgICB7Ci0gICAgICAgIHJldHVybiBn
ZXRKTklFbnYoKS0+Q2FsbEJvb2xlYW5NZXRob2RBKG9iaiwgbWlkLCBhcmdzKTsKLSAgICB9Ci0g
ICAgc3RhdGljIGpib29sZWFuIGNhbGxWKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCB2YV9s
aXN0IGFyZ3MpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxCb29sZWFu
TWV0aG9kVihvYmosIG1pZCwgYXJncyk7Ci0gICAgfQotICAgIHN0YXRpYyBqYm9vbGVhbiBjYWxs
U3RhdGljVihqY2xhc3MgY2xzLCBqbWV0aG9kSUQgbWlkLCB2YV9saXN0IGFyZ3MpCi0gICAgewot
ICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kKGNscywg
bWlkLCBhcmdzKTsKLSAgICB9Ci0gICAgCi19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKTklDYWxs
ZXI8amJ5dGU+IHsKLSAgICBzdGF0aWMgamJ5dGUgY2FsbEEoam9iamVjdCBvYmosIGptZXRob2RJ
RCBtaWQsIGp2YWx1ZSogYXJncykKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRKTklFbnYoKS0+
Q2FsbEJ5dGVNZXRob2RBKG9iaiwgbWlkLCBhcmdzKTsKLSAgICB9Ci0gICAgc3RhdGljIGpieXRl
IGNhbGxWKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCB2YV9saXN0IGFyZ3MpCi0gICAgewot
ICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxCeXRlTWV0aG9kVihvYmosIG1pZCwgYXJn
cyk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSk5JQ2FsbGVyPGpjaGFyPiB7Ci0g
ICAgc3RhdGljIGpjaGFyIGNhbGxBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCBqdmFsdWUq
IGFyZ3MpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxDaGFyTWV0aG9k
QShvYmosIG1pZCwgYXJncyk7Ci0gICAgfQotICAgIHN0YXRpYyBqY2hhciBjYWxsVihqb2JqZWN0
IG9iaiwgam1ldGhvZElEIG1pZCwgdmFfbGlzdCBhcmdzKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGdldEpOSUVudigpLT5DYWxsQ2hhck1ldGhvZFYob2JqLCBtaWQsIGFyZ3MpOwotICAgIH0gICAg
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKTklDYWxsZXI8anNob3J0PiB7Ci0gICAgc3RhdGlj
IGpzaG9ydCBjYWxsQShqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1pZCwganZhbHVlKiBhcmdzKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdldEpOSUVudigpLT5DYWxsU2hvcnRNZXRob2RBKG9iaiwg
bWlkLCBhcmdzKTsKLSAgICB9Ci0gICAgc3RhdGljIGpzaG9ydCBjYWxsVihqb2JqZWN0IG9iaiwg
am1ldGhvZElEIG1pZCwgdmFfbGlzdCBhcmdzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldEpO
SUVudigpLT5DYWxsU2hvcnRNZXRob2RWKG9iaiwgbWlkLCBhcmdzKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKTklDYWxsZXI8amludD4gewotICAgIHN0YXRpYyBqaW50IGNhbGxB
KGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCBqdmFsdWUqIGFyZ3MpCi0gICAgewotICAgICAg
ICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxJbnRNZXRob2RBKG9iaiwgbWlkLCBhcmdzKTsKLSAg
ICB9Ci0gICAgc3RhdGljIGppbnQgY2FsbFYoam9iamVjdCBvYmosIGptZXRob2RJRCBtaWQsIHZh
X2xpc3QgYXJncykKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRKTklFbnYoKS0+Q2FsbEludE1l
dGhvZFYob2JqLCBtaWQsIGFyZ3MpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpO
SUNhbGxlcjxqbG9uZz4gewotICAgIHN0YXRpYyBqbG9uZyBjYWxsQShqb2JqZWN0IG9iaiwgam1l
dGhvZElEIG1pZCwganZhbHVlKiBhcmdzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldEpOSUVu
digpLT5DYWxsTG9uZ01ldGhvZEEob2JqLCBtaWQsIGFyZ3MpOwotICAgIH0KLSAgICBzdGF0aWMg
amxvbmcgY2FsbFYoam9iamVjdCBvYmosIGptZXRob2RJRCBtaWQsIHZhX2xpc3QgYXJncykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBnZXRKTklFbnYoKS0+Q2FsbExvbmdNZXRob2RWKG9iaiwgbWlk
LCBhcmdzKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKTklDYWxsZXI8amZsb2F0
PiB7Ci0gICAgc3RhdGljIGpmbG9hdCBjYWxsQShqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1pZCwg
anZhbHVlKiBhcmdzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldEpOSUVudigpLT5DYWxsRmxv
YXRNZXRob2RBKG9iaiwgbWlkLCBhcmdzKTsKLSAgICB9Ci0gICAgc3RhdGljIGpmbG9hdCBjYWxs
Vihqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1pZCwgdmFfbGlzdCBhcmdzKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGdldEpOSUVudigpLT5DYWxsRmxvYXRNZXRob2RWKG9iaiwgbWlkLCBhcmdzKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKTklDYWxsZXI8amRvdWJsZT4gewotICAg
IHN0YXRpYyBqZG91YmxlIGNhbGxBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCBqdmFsdWUq
IGFyZ3MpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxEb3VibGVNZXRo
b2RBKG9iaiwgbWlkLCBhcmdzKTsKLSAgICB9Ci0gICAgc3RhdGljIGpkb3VibGUgY2FsbFYoam9i
amVjdCBvYmosIGptZXRob2RJRCBtaWQsIHZhX2xpc3QgYXJncykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBnZXRKTklFbnYoKS0+Q2FsbERvdWJsZU1ldGhvZFYob2JqLCBtaWQsIGFyZ3MpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY2FsbEpOSU1ldGhvZElEQShqb2JqZWN0
IG9iaiwgam1ldGhvZElEIG1pZCwganZhbHVlICphcmdzKQotewotICAgIHJldHVybiBKTklDYWxs
ZXI8VD46OmNhbGxBKG9iaiwgbWlkLCBhcmdzKTsKLX0KLSAgICAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1zdGF0aWMgVCBjYWxsSk5JTWV0aG9kVihqb2JqZWN0IG9iaiwgY29uc3QgY2hhciAqbmFt
ZSwgY29uc3QgY2hhciAqc2lnLCB2YV9saXN0IGFyZ3MpCi17Ci0gICAgSmF2YVZNICpqdm0gPSBn
ZXRKYXZhVk0oKTsKLSAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwotICAgIAotICAgIGlm
ICggb2JqICE9IE5VTEwgJiYganZtICE9IE5VTEwgJiYgZW52ICE9IE5VTEwpIHsKLSAgICAgICAg
amNsYXNzIGNscyA9IGVudi0+R2V0T2JqZWN0Q2xhc3Mob2JqKTsKLSAgICAgICAgaWYgKCBjbHMg
IT0gTlVMTCApIHsKLSAgICAgICAgICAgIGptZXRob2RJRCBtaWQgPSBlbnYtPkdldE1ldGhvZElE
KGNscywgbmFtZSwgc2lnKTsKLSAgICAgICAgICAgIGlmICggbWlkICE9IE5VTEwgKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIC8vIEF2b2lkcyByZWZlcmVuY2VzIHRvIGNscyB3aXRo
b3V0IHBvcHBpbmcgdGhlIGxvY2FsIGZyYW1lLgotICAgICAgICAgICAgICAgIGVudi0+RGVsZXRl
TG9jYWxSZWYoY2xzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gSk5JQ2FsbGVyPFQ+OjpjYWxs
VihvYmosIG1pZCwgYXJncyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogQ291bGQgbm90
IGZpbmQgbWV0aG9kOiAlcyBmb3IgJXBcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIG5hbWUsIG9i
aik7Ci0gICAgICAgICAgICAgICAgZW52LT5FeGNlcHRpb25EZXNjcmliZSgpOwotICAgICAgICAg
ICAgICAgIGVudi0+RXhjZXB0aW9uQ2xlYXIoKTsKLSAgICAgICAgICAgICAgICBmcHJpbnRmIChz
dGRlcnIsICJcbiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbnYtPkRlbGV0ZUxv
Y2FsUmVmKGNscyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiVzOiBDb3VsZCBub3QgZmluZCBjbGFzcyBmb3IgJXBcbiIsIF9fUFJFVFRZ
X0ZVTkNUSU9OX18sIG9iaik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgY2FsbEpOSU1ldGhvZChqb2JqZWN0IG9iaiwgY29u
c3QgY2hhciogbWV0aG9kTmFtZSwgY29uc3QgY2hhciogbWV0aG9kU2lnbmF0dXJlLCAuLi4pCi17
Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIG1ldGhvZFNpZ25hdHVyZSk7
Ci0gICAgCi0gICAgVCByZXN1bHQ9IGNhbGxKTklNZXRob2RWPFQ+KG9iaiwgbWV0aG9kTmFtZSwg
bWV0aG9kU2lnbmF0dXJlLCBhcmdzKTsKLSAgICAKLSAgICB2YV9lbmQoYXJncyk7Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIGNhbGxK
TklTdGF0aWNNZXRob2QoamNsYXNzIGNscywgY29uc3QgY2hhciogbWV0aG9kTmFtZSwgY29uc3Qg
Y2hhciogbWV0aG9kU2lnbmF0dXJlLCAuLi4pCi17Ci0gICAgSmF2YVZNICpqdm0gPSBnZXRKYXZh
Vk0oKTsKLSAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwotICAgIHZhX2xpc3QgYXJnczsK
LSAgICAKLSAgICB2YV9zdGFydChhcmdzLCBtZXRob2RTaWduYXR1cmUpOwotICAgIAotICAgIFQg
cmVzdWx0ID0gMDsKLSAgICAKLSAgICBpZiAoY2xzICE9IE5VTEwgJiYganZtICE9IE5VTEwgJiYg
ZW52ICE9IE5VTEwpIHsKLSAgICAgICAgam1ldGhvZElEIG1pZCA9IGVudi0+R2V0U3RhdGljTWV0
aG9kSUQoY2xzLCBtZXRob2ROYW1lLCBtZXRob2RTaWduYXR1cmUpOwotICAgICAgICBpZiAobWlk
ICE9IE5VTEwpIAotICAgICAgICAgICAgcmVzdWx0ID0gSk5JQ2FsbGVyPFQ+OjpjYWxsU3RhdGlj
VihjbHMsIG1pZCwgYXJncyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICIlczogQ291bGQgbm90IGZpbmQgbWV0aG9kOiAlcyBmb3IgJXBcbiIsIF9fUFJFVFRZ
X0ZVTkNUSU9OX18sIG1ldGhvZE5hbWUsIGNscyk7Ci0gICAgICAgICAgICBlbnYtPkV4Y2VwdGlv
bkRlc2NyaWJlKCk7Ci0gICAgICAgICAgICBlbnYtPkV4Y2VwdGlvbkNsZWFyKCk7Ci0gICAgICAg
ICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IHZhX2VuZChhcmdzKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotICAgIAotfSAvLyBu
YW1lc3BhY2UgQmluZGluZ3MKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFC
TEUoTUFDX0pBVkFfQlJJREdFKQotCi0jZW5kaWYgLy8gX0pOSV9VVElMSVRZX0hfCkluZGV4OiBX
ZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAkocmV2aXNpb24g
NTM0NTApCShmcm9tIFdlYkNvcmUvYnJpZGdlL2puaS9qc2Mvam5pX3V0aWxpdHlfcHJpdmF0ZS5j
cHA6NTM0NTApCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImpuaV91dGlsaXR5X3ByaXZhdGUuaCIKKworI2lmIEVO
QUJMRShNQUNfSkFWQV9CUklER0UpCisKKyNpbmNsdWRlICJqbmlfcnVudGltZS5oIgorI2luY2x1
ZGUgInJ1bnRpbWVfYXJyYXkuaCIKKyNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQmluZGluZ3MgeworCitzdGF0aWMgam9iamVjdCBj
b252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2YUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSog
anNBcnJheSwgY29uc3QgY2hhciogamF2YUNsYXNzTmFtZSkKK3sKKyAgICBKTklFbnYqIGVudiA9
IGdldEpOSUVudigpOworICAgIC8vIEFzIEpTIEFycmF5cyBjYW4gY29udGFpbiBhIG1peHR1cmUg
b2Ygb2JqZWN0cywgYXNzdW1lIHdlIGNhbiBjb252ZXJ0IHRvCisgICAgLy8gdGhlIHJlcXVlc3Rl
ZCBKYXZhIEFycmF5IHR5cGUgcmVxdWVzdGVkLCB1bmxlc3MgdGhlIGFycmF5IHR5cGUgaXMgc29t
ZSBvYmplY3QgYXJyYXkKKyAgICAvLyBvdGhlciB0aGFuIGEgc3RyaW5nLgorICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGpzQXJyYXktPmxlbmd0aCgpOworICAgIGpvYmplY3RBcnJheSBqYXJyYXkgPSAw
OworCisgICAgLy8gQnVpbGQgdGhlIGNvcnJlY3QgYXJyYXkgdHlwZQorICAgIHN3aXRjaCAoSk5J
VHlwZUZyb21QcmltaXRpdmVUeXBlKGphdmFDbGFzc05hbWVbMV0pKSB7CisgICAgY2FzZSBvYmpl
Y3RfdHlwZToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE9ubHkgc3VwcG9ydCBzdHJp
bmcgb2JqZWN0IHR5cGVzCisgICAgICAgICAgICBpZiAoIXN0cmNtcCgiW0xqYXZhLmxhbmcuU3Ry
aW5nOyIsIGphdmFDbGFzc05hbWUpKSB7CisgICAgICAgICAgICAgICAgamFycmF5ID0gKGpvYmpl
Y3RBcnJheSllbnYtPk5ld09iamVjdEFycmF5KGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
ZW52LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9TdHJpbmciKSwKKyAgICAgICAgICAgICAgICAgICAg
ZW52LT5OZXdTdHJpbmdVVEYoIiIpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVt
ID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHN0
cmluZ1ZhbHVlID0gaXRlbS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgZW52
LT5TZXRPYmplY3RBcnJheUVsZW1lbnQoamFycmF5LCBpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgZW52LT5mdW5jdGlvbnMtPk5ld1N0cmluZyhlbnYsIChjb25zdCBqY2hhciAqKXN0cmluZ1Zh
bHVlLmRhdGEoKSwgc3RyaW5nVmFsdWUuc2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGNhc2UgYm9v
bGVhbl90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5
KWVudi0+TmV3Qm9vbGVhbkFycmF5KGxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0g
PSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgamJvb2xlYW4gdmFsdWUg
PSAoamJvb2xlYW4paXRlbS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICBlbnYtPlNl
dEJvb2xlYW5BcnJheVJlZ2lvbigoamJvb2xlYW5BcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNp
emUpMSwgJnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICBjYXNlIGJ5dGVfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgamFycmF5
ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0J5dGVBcnJheShsZW5ndGgpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
SlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgIGpi
eXRlIHZhbHVlID0gKGpieXRlKWl0ZW0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAg
ZW52LT5TZXRCeXRlQXJyYXlSZWdpb24oKGpieXRlQXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpz
aXplKTEsICZ2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgY2FzZSBjaGFyX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGphcnJh
eSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdDaGFyQXJyYXkobGVuZ3RoKTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAg
IEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBV
U3RyaW5nIHN0cmluZ1ZhbHVlID0gaXRlbS50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgICAg
ICBqY2hhciB2YWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKHN0cmluZ1ZhbHVlLnNpemUo
KSA+IDApCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKChjb25zdCBqY2hhciopc3RyaW5n
VmFsdWUuZGF0YSgpKVswXTsKKyAgICAgICAgICAgICAgICBlbnYtPlNldENoYXJBcnJheVJlZ2lv
bigoamNoYXJBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICBjYXNlIHNob3J0
X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52
LT5OZXdTaG9ydEFycmF5KGxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0Fy
cmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAganNob3J0IHZhbHVlID0gKGpzaG9y
dClpdGVtLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgIGVudi0+U2V0U2hvcnRBcnJh
eVJlZ2lvbigoanNob3J0QXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgY2Fz
ZSBpbnRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJh
eSllbnYtPk5ld0ludEFycmF5KGxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBq
c0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgamludCB2YWx1ZSA9IChqaW50
KWl0ZW0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgZW52LT5TZXRJbnRBcnJheVJl
Z2lvbigoamludEFycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGNhc2UgbG9u
Z190eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVu
di0+TmV3TG9uZ0FycmF5KGxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0Fy
cmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgamxvbmcgdmFsdWUgPSAoamxvbmcp
aXRlbS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgICAgICBlbnYtPlNldExvbmdBcnJheVJl
Z2lvbigoamxvbmdBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICBjYXNlIGZs
b2F0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkp
ZW52LT5OZXdGbG9hdEFycmF5KGxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBq
c0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgamZsb2F0IHZhbHVlID0gKGpm
bG9hdClpdGVtLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgICAgIGVudi0+U2V0RmxvYXRB
cnJheVJlZ2lvbigoamZsb2F0QXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
Y2FzZSBkb3VibGVfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgamFycmF5ID0gKGpvYmpl
Y3RBcnJheSllbnYtPk5ld0RvdWJsZUFycmF5KGxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
IGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgamRvdWJsZSB2
YWx1ZSA9IChqZG91YmxlKWl0ZW0udG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICAgICAgZW52
LT5TZXREb3VibGVBcnJheVJlZ2lvbigoamRvdWJsZUFycmF5KWphcnJheSwgKGpzaXplKWksIChq
c2l6ZSkxLCAmdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgIGNhc2UgYXJyYXlfdHlwZTogLy8gZG9uJ3QgaGFuZGxlIGVtYmVkZGVkIGFy
cmF5cworICAgIGNhc2Ugdm9pZF90eXBlOiAvLyBEb24ndCBleHBlY3QgYXJyYXlzIG9mIHZvaWQg
b2JqZWN0cworICAgIGNhc2UgaW52YWxpZF90eXBlOiAvLyBBcnJheSBvZiB1bmtub3duIG9iamVj
dHMKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gaWYgaXQgd2FzIG5vdCBvbmUgb2Yg
dGhlIGNhc2VzIGhhbmRsZWQsIHRoZW4gbnVsbCBpcyByZXR1cm5lZAorICAgIHJldHVybiBqYXJy
YXk7Cit9CisKK2p2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUsIEpOSVR5cGUgam5pVHlwZSwgY29uc3QgY2hhciogamF2YUNsYXNzTmFtZSkK
K3sKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworCisgICAganZhbHVl
IHJlc3VsdDsKKworICAgIHN3aXRjaCAoam5pVHlwZSkgeworICAgIGNhc2UgYXJyYXlfdHlwZToK
KyAgICBjYXNlIG9iamVjdF90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQubCA9
IChqb2JqZWN0KTA7CisKKyAgICAgICAgICAgIC8vIEZpcnN0IHNlZSBpZiB3ZSBoYXZlIGEgSmF2
YSBpbnN0YW5jZS4KKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAg
ICAgICAgICAgSlNPYmplY3QqIG9iamVjdEltcCA9IGFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBpZiAob2JqZWN0SW1wLT5jbGFzc0luZm8oKSA9PSAmUnVudGltZU9iamVjdEltcDo6
c19pbmZvKSB7CisgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVPYmplY3RJbXAqIGltcCA9IHN0
YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAqPihvYmplY3RJbXApOworICAgICAgICAgICAgICAg
ICAgICBKYXZhSW5zdGFuY2UqIGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8SmF2YUluc3RhbmNlKj4o
aW1wLT5nZXRJbnRlcm5hbEluc3RhbmNlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5z
dGFuY2UpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubCA9IGluc3RhbmNlLT5qYXZh
SW5zdGFuY2UoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdEltcC0+Y2xhc3NJ
bmZvKCkgPT0gJlJ1bnRpbWVBcnJheTo6c19pbmZvKSB7CisgICAgICAgICAgICAgICAgLy8gSW5w
dXQgaXMgYSBKYXZhU2NyaXB0IEFycmF5IHRoYXQgd2FzIG9yaWdpbmFsbHkgY3JlYXRlZCBmcm9t
IGEgSmF2YSBBcnJheQorICAgICAgICAgICAgICAgICAgICBSdW50aW1lQXJyYXkqIGltcCA9IHN0
YXRpY19jYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVjdEltcCk7CisgICAgICAgICAgICAgICAgICAg
IEphdmFBcnJheSogYXJyYXkgPSBzdGF0aWNfY2FzdDxKYXZhQXJyYXkqPihpbXAtPmdldENvbmNy
ZXRlQXJyYXkoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gYXJyYXktPmphdmFB
cnJheSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0SW1wLT5jbGFzc0luZm8o
KSA9PSAmSlNBcnJheTo6aW5mbykgeworICAgICAgICAgICAgICAgICAgICAvLyBJbnB1dCBpcyBh
IEphdmFzY3JpcHQgQXJyYXkuIFdlIG5lZWQgdG8gY3JlYXRlIGl0IHRvIGEgSmF2YSBBcnJheS4K
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmwgPSBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2
YUFycmF5KGV4ZWMsIGFzQXJyYXkodmFsdWUpLCBqYXZhQ2xhc3NOYW1lKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vdyBjb252ZXJ0IHZhbHVl
IHRvIGEgc3RyaW5nIGlmIHRoZSB0YXJnZXQgdHlwZSBpcyBhIGphdmEubGFuZy5zdHJpbmcsIGFu
ZCB3ZSdyZSBub3QKKyAgICAgICAgICAgIC8vIGNvbnZlcnRpbmcgZnJvbSBhIE51bGwuCisgICAg
ICAgICAgICBpZiAoIXJlc3VsdC5sICYmICFzdHJjbXAoamF2YUNsYXNzTmFtZSwgImphdmEubGFu
Zy5TdHJpbmciKSkgeworI2lmZGVmIENPTlZFUlRfTlVMTF9UT19FTVBUWV9TVFJJTkcKKyAgICAg
ICAgICAgICAgICBpZiAodmFsdWUtPmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIEpO
SUVudiogZW52ID0gZ2V0Sk5JRW52KCk7CisgICAgICAgICAgICAgICAgICAgIGpjaGFyIGJ1Zlsy
XTsKKyAgICAgICAgICAgICAgICAgICAgam9iamVjdCBqYXZhU3RyaW5nID0gZW52LT5mdW5jdGlv
bnMtPk5ld1N0cmluZyhlbnYsIGJ1ZiwgMCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5s
ID0gamF2YVN0cmluZzsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyNlbHNlCisgICAgICAgICAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkKKyNlbmRpZgorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgVVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4
ZWMpOworICAgICAgICAgICAgICAgICAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOworICAg
ICAgICAgICAgICAgICAgICBqb2JqZWN0IGphdmFTdHJpbmcgPSBlbnYtPmZ1bmN0aW9ucy0+TmV3
U3RyaW5nKGVudiwgKGNvbnN0IGpjaGFyICopc3RyaW5nVmFsdWUuZGF0YSgpLCBzdHJpbmdWYWx1
ZS5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQubCA9IGphdmFTdHJpbmc7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICghcmVzdWx0LmwpCisgICAg
ICAgICAgICAgICAgYnplcm8oJnJlc3VsdCwgc2l6ZW9mKGp2YWx1ZSkpOyAvLyBIYW5kbGUgaXQg
dGhlIHNhbWUgYXMgYSB2b2lkIGNhc2UKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAg
IGNhc2UgYm9vbGVhbl90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQueiA9IChq
Ym9vbGVhbil2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KworICAgIGNhc2UgYnl0ZV90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQuYiA9
IChqYnl0ZSl2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KworICAgIGNhc2UgY2hhcl90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQuYyA9
IChqY2hhcil2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KworICAgIGNhc2Ugc2hvcnRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0LnMg
PSAoanNob3J0KXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBpbnRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0Lmkg
PSAoamludCl2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KworICAgIGNhc2UgbG9uZ190eXBlOgorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQuaiA9
IChqbG9uZyl2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KworICAgIGNhc2UgZmxvYXRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0LmYg
PSAoamZsb2F0KXZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBkb3VibGVfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0
LmQgPSAoamRvdWJsZSl2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgaW52YWxpZF90eXBlOgorICAgIGRl
ZmF1bHQ6CisgICAgY2FzZSB2b2lkX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGJ6ZXJv
KCZyZXN1bHQsIHNpemVvZihqdmFsdWUpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAgLy8gZW5kIG9mIG5hbWVzcGFjZSBCaW5k
aW5ncworCit9IC8vIGVuZCBvZiBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoTUFD
X0pBVkFfQlJJREdFKQpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJp
dmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5
UHJpdmF0ZS5jcHAJKHJldmlzaW9uIDUzNDUwKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9K
TklVdGlsaXR5UHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiam5pX3V0aWxpdHlfcHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2YXRlLmgiCiAKICNpZiBFTkFCTEUoTUFDX0pBVkFf
QlJJREdFKQogCkBAIC0xODksNyArMTg5LDcgQEAganZhbHVlIGNvbnZlcnRWYWx1ZVRvSlZhbHVl
KEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQubCA9IGluc3RhbmNlLT5qYXZhSW5zdGFuY2UoKTsKICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdEltcC0+Y2xhc3NJbmZvKCkgPT0gJlJ1bnRp
bWVBcnJheTo6c19pbmZvKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW5wdXQgaXMgYSBKYXZhU2Ny
aXB0IEFycmF5IHRoYXQgd2FzIG9yaWdpbmFsbHkgY3JlYXRlZCBmcm9tIGEgSmF2YSBBcnJheQor
ICAgICAgICAgICAgICAgICAgICAvLyBJbnB1dCBpcyBhIEphdmFTY3JpcHQgQXJyYXkgdGhhdCB3
YXMgb3JpZ2luYWxseSBjcmVhdGVkIGZyb20gYSBKYXZhIEFycmF5CiAgICAgICAgICAgICAgICAg
ICAgIFJ1bnRpbWVBcnJheSogaW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0
SW1wKTsKICAgICAgICAgICAgICAgICAgICAgSmF2YUFycmF5KiBhcnJheSA9IHN0YXRpY19jYXN0
PEphdmFBcnJheSo+KGltcC0+Z2V0Q29uY3JldGVBcnJheSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmwgPSBhcnJheS0+amF2YUFycmF5KCk7CkBAIC0yODQsNyArMjg0LDcgQEAganZh
bHVlIGNvbnZlcnRWYWx1ZVRvSlZhbHVlKEV4ZWNTdGF0ZSogZQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLX0gIC8vIGVuZCBvZiBuYW1lc3BhY2UgQmluZGluZ3MKK30gLy8gZW5kIG9mIG5hbWVz
cGFjZSBCaW5kaW5ncwogCiB9IC8vIGVuZCBvZiBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFdlYkNv
cmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmgJKHJldmlzaW9uIDUzNDUwKQko
ZnJvbSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL2puaV91dGlsaXR5X3ByaXZhdGUuaDo1MzQ1MCkK
KysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDksIFRo
ZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9KTklfVVRJTElU
WV9QUklWQVRFX0hfCisjZGVmaW5lIF9KTklfVVRJTElUWV9QUklWQVRFX0hfCisKKyNpZiBFTkFC
TEUoTUFDX0pBVkFfQlJJREdFKQorCisjaW5jbHVkZSAiam5pX3V0aWxpdHkuaCIKKyNpbmNsdWRl
IDxydW50aW1lL0pTVmFsdWUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEV4ZWNTdGF0
ZTsKK2NsYXNzIEpTT2JqZWN0OworCituYW1lc3BhY2UgQmluZGluZ3MgeworCitqdmFsdWUgY29u
dmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSk5JVHlwZSwgY29uc3QgY2hh
ciogamF2YUNsYXNzTmFtZSk7Citib29sIGRpc3BhdGNoSk5JQ2FsbChFeGVjU3RhdGUqLCBjb25z
dCB2b2lkKiB0YXJnZXRBcHBsZXRWaWV3LCBqb2JqZWN0IG9iaiwgYm9vbCBpc1N0YXRpYywgSk5J
VHlwZSByZXR1cm5UeXBlLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGp2YWx1ZSogYXJncywganZhbHVl
JiByZXN1bHQsIGNvbnN0IGNoYXIqIGNhbGxpbmdVUkwsIEpTVmFsdWUmIGV4Y2VwdGlvbkRlc2Ny
aXB0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQorCisjZW5kaWYgLy8gX0pOSV9V
VElMSVRZX0hfCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0
ZS5oCShyZXZpc2lvbiA1MzQ1MCkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0
eVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTIgKzI0LDEyIEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgX0pOSV9VVElMSVRZX1BSSVZBVEVfSF8KLSNkZWZpbmUgX0pO
SV9VVElMSVRZX1BSSVZBVEVfSF8KKyNpZm5kZWYgSk5JVXRpbGl0eVByaXZhdGVfaAorI2RlZmlu
ZSBKTklVdGlsaXR5UHJpdmF0ZV9oCiAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCi0j
aW5jbHVkZSAiam5pX3V0aWxpdHkuaCIKKyNpbmNsdWRlICJKTklVdGlsaXR5LmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9KU1ZhbHVlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDgsNCArNDgsNCBA
QCBib29sIGRpc3BhdGNoSk5JQ2FsbChFeGVjU3RhdGUqLCBjb25zdCB2CiAKICNlbmRpZiAvLyBF
TkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCi0jZW5kaWYgLy8gX0pOSV9VVElMSVRZX0hfCisjZW5k
aWYgLy8gSk5JVXRpbGl0eVByaXZhdGVfaApJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9K
YXZhQ2xhc3NKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2
YUNsYXNzSlNDLmNwcAkocmV2aXNpb24gNTM0NTApCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvanNj
L0phdmFDbGFzc0pTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxMSBAQAogCiAj
aWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKIAorI2luY2x1ZGUgIkpOSVV0aWxpdHkuaCIKICNp
bmNsdWRlICJKU0RPTVdpbmRvdy5oIgorI2luY2x1ZGUgImpuaV9ydW50aW1lLmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9JZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNp
bmNsdWRlICJqbmlfdXRpbGl0eS5oIgotI2luY2x1ZGUgImpuaV9ydW50aW1lLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M6OkJpbmRpbmdzOwogCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvanNj
L0phdmFJbnN0YW5jZUpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2pz
Yy9KYXZhSW5zdGFuY2VKU0MuY3BwCShyZXZpc2lvbiA1MzQ1MCkKKysrIFdlYkNvcmUvYnJpZGdl
L2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4
LDEwIEBACiAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQogCisjaW5jbHVkZSAiSk5JVXRp
bGl0eS5oIgorI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2YXRlLmgiCiAjaW5jbHVkZSAiSmF2YUNs
YXNzSlNDLmgiCiAjaW5jbHVkZSAiam5pX3J1bnRpbWUuaCIKLSNpbmNsdWRlICJqbmlfdXRpbGl0
eS5oIgotI2luY2x1ZGUgImpuaV91dGlsaXR5X3ByaXZhdGUuaCIKICNpbmNsdWRlICJydW50aW1l
X29iamVjdC5oIgogI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
QXJnTGlzdC5oPgpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgJKHJl
dmlzaW9uIDUzNDUwKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpZm5kZWYgSmF2YVN0cmluZ0pTQ19o
CiAjZGVmaW5lIEphdmFTdHJpbmdKU0NfaAogCisjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgogI2lu
Y2x1ZGUgIkphdmFJbnN0YW5jZUpTQy5oIgotI2luY2x1ZGUgImpuaV91dGlsaXR5LmgiCiAjaW5j
bHVkZSA8cnVudGltZS9KU0xvY2suaD4KIAogCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvanNj
L2puaV91dGlsaXR5X3ByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2pu
aS9qc2Mvam5pX3V0aWxpdHlfcHJpdmF0ZS5jcHAJKHJldmlzaW9uIDUzNDUwKQorKysgV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwyOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5k
cm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgImpuaV91dGlsaXR5X3ByaXZhdGUuaCIKLQotI2lmIEVOQUJMRShNQUNfSkFWQV9CUklE
R0UpCi0KLSNpbmNsdWRlICJqbmlfcnVudGltZS5oIgotI2luY2x1ZGUgInJ1bnRpbWVfYXJyYXku
aCIKLSNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJh
eS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1u
YW1lc3BhY2UgQmluZGluZ3MgewotCi1zdGF0aWMgam9iamVjdCBjb252ZXJ0QXJyYXlJbnN0YW5j
ZVRvSmF2YUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSoganNBcnJheSwgY29uc3QgY2hh
ciogamF2YUNsYXNzTmFtZSkKLXsKLSAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOwotICAg
IC8vIEFzIEpTIEFycmF5cyBjYW4gY29udGFpbiBhIG1peHR1cmUgb2Ygb2JqZWN0cywgYXNzdW1l
IHdlIGNhbiBjb252ZXJ0IHRvCi0gICAgLy8gdGhlIHJlcXVlc3RlZCBKYXZhIEFycmF5IHR5cGUg
cmVxdWVzdGVkLCB1bmxlc3MgdGhlIGFycmF5IHR5cGUgaXMgc29tZSBvYmplY3QgYXJyYXkKLSAg
ICAvLyBvdGhlciB0aGFuIGEgc3RyaW5nLgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGpzQXJyYXkt
Pmxlbmd0aCgpOwotICAgIGpvYmplY3RBcnJheSBqYXJyYXkgPSAwOwotCi0gICAgLy8gQnVpbGQg
dGhlIGNvcnJlY3QgYXJyYXkgdHlwZQotICAgIHN3aXRjaCAoSk5JVHlwZUZyb21QcmltaXRpdmVU
eXBlKGphdmFDbGFzc05hbWVbMV0pKSB7Ci0gICAgY2FzZSBvYmplY3RfdHlwZToKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIE9ubHkgc3VwcG9ydCBzdHJpbmcgb2JqZWN0IHR5cGVzCi0g
ICAgICAgICAgICBpZiAoIXN0cmNtcCgiW0xqYXZhLmxhbmcuU3RyaW5nOyIsIGphdmFDbGFzc05h
bWUpKSB7Ci0gICAgICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld09i
amVjdEFycmF5KGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgZW52LT5GaW5kQ2xhc3MoImph
dmEvbGFuZy9TdHJpbmciKSwKLSAgICAgICAgICAgICAgICAgICAgZW52LT5OZXdTdHJpbmdVVEYo
IiIpKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4
ZWMsIGkpOwotICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVlID0gaXRlbS50
b1N0cmluZyhleGVjKTsKLSAgICAgICAgICAgICAgICAgICAgZW52LT5TZXRPYmplY3RBcnJheUVs
ZW1lbnQoamFycmF5LCBpLAotICAgICAgICAgICAgICAgICAgICAgICAgZW52LT5mdW5jdGlvbnMt
Pk5ld1N0cmluZyhlbnYsIChjb25zdCBqY2hhciAqKXN0cmluZ1ZhbHVlLmRhdGEoKSwgc3RyaW5n
VmFsdWUuc2l6ZSgpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgYm9vbGVhbl90eXBlOgotICAgICAg
ICB7Ci0gICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3Qm9vbGVhbkFy
cmF5KGxlbmd0aCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhl
YywgaSk7Ci0gICAgICAgICAgICAgICAgamJvb2xlYW4gdmFsdWUgPSAoamJvb2xlYW4paXRlbS50
b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBlbnYtPlNldEJvb2xlYW5BcnJheVJlZ2lv
bigoamJvb2xlYW5BcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBjYXNlIGJ5
dGVfdHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSll
bnYtPk5ld0J5dGVBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNB
cnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgIGpieXRlIHZhbHVlID0gKGpieXRl
KWl0ZW0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgZW52LT5TZXRCeXRlQXJyYXlS
ZWdpb24oKGpieXRlQXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgY2FzZSBj
aGFyX3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkp
ZW52LT5OZXdDaGFyQXJyYXkobGVuZ3RoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGpz
QXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHN0cmluZ1ZhbHVl
ID0gaXRlbS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgICAgICAgICBqY2hhciB2YWx1ZSA9IDA7
Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmluZ1ZhbHVlLnNpemUoKSA+IDApCi0gICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0gKChjb25zdCBqY2hhciopc3RyaW5nVmFsdWUuZGF0YSgpKVswXTsK
LSAgICAgICAgICAgICAgICBlbnYtPlNldENoYXJBcnJheVJlZ2lvbigoamNoYXJBcnJheSlqYXJy
YXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBjYXNlIHNob3J0X3R5cGU6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdTaG9ydEFycmF5KGxl
bmd0aCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7
Ci0gICAgICAgICAgICAgICAganNob3J0IHZhbHVlID0gKGpzaG9ydClpdGVtLnRvTnVtYmVyKGV4
ZWMpOwotICAgICAgICAgICAgICAgIGVudi0+U2V0U2hvcnRBcnJheVJlZ2lvbigoanNob3J0QXJy
YXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgY2FzZSBpbnRfdHlwZToKLSAgICAg
ICAgewotICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0ludEFycmF5
KGxlbmd0aCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywg
aSk7Ci0gICAgICAgICAgICAgICAgamludCB2YWx1ZSA9IChqaW50KWl0ZW0udG9OdW1iZXIoZXhl
Yyk7Ci0gICAgICAgICAgICAgICAgZW52LT5TZXRJbnRBcnJheVJlZ2lvbigoamludEFycmF5KWph
cnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgbG9uZ190eXBlOgotICAgICAgICB7
Ci0gICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+TmV3TG9uZ0FycmF5KGxl
bmd0aCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywgaSk7
Ci0gICAgICAgICAgICAgICAgamxvbmcgdmFsdWUgPSAoamxvbmcpaXRlbS50b051bWJlcihleGVj
KTsKLSAgICAgICAgICAgICAgICBlbnYtPlNldExvbmdBcnJheVJlZ2lvbigoamxvbmdBcnJheSlq
YXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBjYXNlIGZsb2F0X3R5cGU6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdGbG9hdEFycmF5
KGxlbmd0aCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5nZXQoZXhlYywg
aSk7Ci0gICAgICAgICAgICAgICAgamZsb2F0IHZhbHVlID0gKGpmbG9hdClpdGVtLnRvTnVtYmVy
KGV4ZWMpOwotICAgICAgICAgICAgICAgIGVudi0+U2V0RmxvYXRBcnJheVJlZ2lvbigoamZsb2F0
QXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgY2FzZSBkb3VibGVfdHlwZToK
LSAgICAgICAgewotICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld0Rv
dWJsZUFycmF5KGxlbmd0aCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5LT5n
ZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgamRvdWJsZSB2YWx1ZSA9IChqZG91YmxlKWl0
ZW0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgZW52LT5TZXREb3VibGVBcnJheVJl
Z2lvbigoamRvdWJsZUFycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGNhc2Ug
YXJyYXlfdHlwZTogLy8gZG9uJ3QgaGFuZGxlIGVtYmVkZGVkIGFycmF5cwotICAgIGNhc2Ugdm9p
ZF90eXBlOiAvLyBEb24ndCBleHBlY3QgYXJyYXlzIG9mIHZvaWQgb2JqZWN0cwotICAgIGNhc2Ug
aW52YWxpZF90eXBlOiAvLyBBcnJheSBvZiB1bmtub3duIG9iamVjdHMKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgLy8gaWYgaXQgd2FzIG5vdCBvbmUgb2YgdGhlIGNhc2VzIGhhbmRsZWQs
IHRoZW4gbnVsbCBpcyByZXR1cm5lZAotICAgIHJldHVybiBqYXJyYXk7Ci19Ci0KLWp2YWx1ZSBj
b252ZXJ0VmFsdWVUb0pWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEpOSVR5
cGUgam5pVHlwZSwgY29uc3QgY2hhciogamF2YUNsYXNzTmFtZSkKLXsKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCi0gICAganZhbHVlIHJlc3VsdDsKLQotICAgIHN3
aXRjaCAoam5pVHlwZSkgewotICAgIGNhc2UgYXJyYXlfdHlwZToKLSAgICBjYXNlIG9iamVjdF90
eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQubCA9IChqb2JqZWN0KTA7Ci0KLSAg
ICAgICAgICAgIC8vIEZpcnN0IHNlZSBpZiB3ZSBoYXZlIGEgSmF2YSBpbnN0YW5jZS4KLSAgICAg
ICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgSlNPYmplY3Qq
IG9iamVjdEltcCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAob2JqZWN0
SW1wLT5jbGFzc0luZm8oKSA9PSAmUnVudGltZU9iamVjdEltcDo6c19pbmZvKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFJ1bnRpbWVPYmplY3RJbXAqIGltcCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVP
YmplY3RJbXAqPihvYmplY3RJbXApOwotICAgICAgICAgICAgICAgICAgICBKYXZhSW5zdGFuY2Uq
IGluc3RhbmNlID0gc3RhdGljX2Nhc3Q8SmF2YUluc3RhbmNlKj4oaW1wLT5nZXRJbnRlcm5hbElu
c3RhbmNlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQubCA9IGluc3RhbmNlLT5qYXZhSW5zdGFuY2UoKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdEltcC0+Y2xhc3NJbmZvKCkgPT0gJlJ1bnRpbWVB
cnJheTo6c19pbmZvKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW5wdXQgaXMgYSBKYXZhU2NyaXB0
IEFycmF5IHRoYXQgd2FzIG9yaWdpbmFsbHkgY3JlYXRlZCBmcm9tIGEgSmF2YSBBcnJheQotICAg
ICAgICAgICAgICAgICAgICBSdW50aW1lQXJyYXkqIGltcCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVB
cnJheSo+KG9iamVjdEltcCk7Ci0gICAgICAgICAgICAgICAgICAgIEphdmFBcnJheSogYXJyYXkg
PSBzdGF0aWNfY2FzdDxKYXZhQXJyYXkqPihpbXAtPmdldENvbmNyZXRlQXJyYXkoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gYXJyYXktPmphdmFBcnJheSgpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAob2JqZWN0SW1wLT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6aW5m
bykgewotICAgICAgICAgICAgICAgICAgICAvLyBJbnB1dCBpcyBhIEphdmFzY3JpcHQgQXJyYXku
IFdlIG5lZWQgdG8gY3JlYXRlIGl0IHRvIGEgSmF2YSBBcnJheS4KLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmwgPSBjb252ZXJ0QXJyYXlJbnN0YW5jZVRvSmF2YUFycmF5KGV4ZWMsIGFzQXJy
YXkodmFsdWUpLCBqYXZhQ2xhc3NOYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIE5vdyBjb252ZXJ0IHZhbHVlIHRvIGEgc3RyaW5nIGlmIHRo
ZSB0YXJnZXQgdHlwZSBpcyBhIGphdmEubGFuZy5zdHJpbmcsIGFuZCB3ZSdyZSBub3QKLSAgICAg
ICAgICAgIC8vIGNvbnZlcnRpbmcgZnJvbSBhIE51bGwuCi0gICAgICAgICAgICBpZiAoIXJlc3Vs
dC5sICYmICFzdHJjbXAoamF2YUNsYXNzTmFtZSwgImphdmEubGFuZy5TdHJpbmciKSkgewotI2lm
ZGVmIENPTlZFUlRfTlVMTF9UT19FTVBUWV9TVFJJTkcKLSAgICAgICAgICAgICAgICBpZiAodmFs
dWUtPmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEpOSUVudiogZW52ID0gZ2V0Sk5J
RW52KCk7Ci0gICAgICAgICAgICAgICAgICAgIGpjaGFyIGJ1ZlsyXTsKLSAgICAgICAgICAgICAg
ICAgICAgam9iamVjdCBqYXZhU3RyaW5nID0gZW52LT5mdW5jdGlvbnMtPk5ld1N0cmluZyhlbnYs
IGJ1ZiwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gamF2YVN0cmluZzsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UKLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5p
c051bGwoKSkKLSNlbmRpZgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
VVN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICAgICAg
ICAgICAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOwotICAgICAgICAgICAgICAgICAgICBq
b2JqZWN0IGphdmFTdHJpbmcgPSBlbnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nKGVudiwgKGNvbnN0
IGpjaGFyICopc3RyaW5nVmFsdWUuZGF0YSgpLCBzdHJpbmdWYWx1ZS5zaXplKCkpOwotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQubCA9IGphdmFTdHJpbmc7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIGlmICghcmVzdWx0LmwpCi0gICAgICAgICAgICAgICAgYnplcm8o
JnJlc3VsdCwgc2l6ZW9mKGp2YWx1ZSkpOyAvLyBIYW5kbGUgaXQgdGhlIHNhbWUgYXMgYSB2b2lk
IGNhc2UKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgYm9vbGVhbl90eXBl
OgotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQueiA9IChqYm9vbGVhbil2YWx1ZS50b051
bWJlcihleGVjKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgYnl0ZV90
eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQuYiA9IChqYnl0ZSl2YWx1ZS50b051
bWJlcihleGVjKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgY2hhcl90
eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQuYyA9IChqY2hhcil2YWx1ZS50b051
bWJlcihleGVjKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ugc2hvcnRf
dHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0LnMgPSAoanNob3J0KXZhbHVlLnRv
TnVtYmVyKGV4ZWMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBpbnRf
dHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0LmkgPSAoamludCl2YWx1ZS50b051
bWJlcihleGVjKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgbG9uZ190
eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQuaiA9IChqbG9uZyl2YWx1ZS50b051
bWJlcihleGVjKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgZmxvYXRf
dHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0LmYgPSAoamZsb2F0KXZhbHVlLnRv
TnVtYmVyKGV4ZWMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBkb3Vi
bGVfdHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0LmQgPSAoamRvdWJsZSl2YWx1
ZS50b051bWJlcihleGVjKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgaW52YWxpZF90eXBlOgotICAgIGRlZmF1bHQ6Ci0gICAgY2FzZSB2
b2lkX3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGJ6ZXJvKCZyZXN1bHQsIHNpemVvZihq
dmFsdWUpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotfSAgLy8gZW5kIG9mIG5hbWVzcGFjZSBCaW5kaW5ncwotCi19IC8vIGVuZCBv
ZiBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQpJbmRl
eDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9qbmlfdXRpbGl0eV9wcml2YXRlLmgJKHJldmlz
aW9uIDUzNDUwKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9qbmlfdXRpbGl0eV9wcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBfSk5JX1VUSUxJVFlfUFJJVkFURV9IXwotI2RlZmluZSBfSk5JX1VUSUxJVFlfUFJJVkFURV9I
XwotCi0jaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKLQotI2luY2x1ZGUgImpuaV91dGlsaXR5
LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBKU09iamVjdDsKLQotbmFtZXNwYWNlIEJpbmRpbmdzIHsK
LQotanZhbHVlIGNvbnZlcnRWYWx1ZVRvSlZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpOSVR5
cGUsIGNvbnN0IGNoYXIqIGphdmFDbGFzc05hbWUpOwotYm9vbCBkaXNwYXRjaEpOSUNhbGwoRXhl
Y1N0YXRlKiwgY29uc3Qgdm9pZCogdGFyZ2V0QXBwbGV0Vmlldywgam9iamVjdCBvYmosIGJvb2wg
aXNTdGF0aWMsIEpOSVR5cGUgcmV0dXJuVHlwZSwgam1ldGhvZElEIG1ldGhvZElELCBqdmFsdWUq
IGFyZ3MsIGp2YWx1ZSYgcmVzdWx0LCBjb25zdCBjaGFyKiBjYWxsaW5nVVJMLCBKU1ZhbHVlJiBl
eGNlcHRpb25EZXNjcmlwdGlvbik7Ci0KLX0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCi0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKLQotI2Vu
ZGlmIC8vIF9KTklfVVRJTElUWV9IXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0dl
b2xvY2F0aW9uU2VydmljZUJyaWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9hbmRyb2lkL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5jcHAJKHJldmlzaW9uIDUzNDUwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJQb3NpdGlvbkVycm9y
LmgiCiAjaW5jbHVkZSAiV2ViVmlld0NvcmUuaCIKICNpbmNsdWRlIDxKTklIZWxwLmg+Ci0jaW5j
bHVkZSA8am5pX3V0aWxpdHkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2FuZHJvaWQvR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0dlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5o
CShyZXZpc2lvbiA1MzQ1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9HZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRl
ZiBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2VfaAogI2RlZmluZSBHZW9sb2NhdGlvblNlcnZpY2VC
cmlkZ2VfaAogCi0jaW5jbHVkZSA8am5pX3V0aWxpdHkuaD4KKyNpbmNsdWRlICJKTklVdGlsaXR5
LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAJKHJldmlzaW9uIDUzNDUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEwICs4MiwxMCBAQAogCiAjaWYg
VVNFKEpTQykKICNpbmNsdWRlICJBUEkvSlNDbGFzc1JlZi5oIgorI2luY2x1ZGUgIkpOSVV0aWxp
dHlQcml2YXRlLmgiCiAjaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IkphdmFTY3JpcHREZWJ1Z1NlcnZlci5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRQcm9maWxlLmgi
Ci0jaW5jbHVkZSAiam5pX3V0aWxpdHlfcHJpdmF0ZS5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwo=
</data>
<flag name="review"
          id="29249"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>