<?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>68116</bug_id>
          
          <creation_ts>2011-09-14 14:12:43 -0700</creation_ts>
          <short_desc>Tiered compilation heuristics do not account for value profile fullness</short_desc>
          <delta_ts>2011-09-14 16:00:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>467330</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-14 14:12:43 -0700</bug_when>
    <thetext>When tiered compilation decides to optimize a code block, some value profiles might not contain sufficient information to make wise optimization decisions.  Tiered compilation does not take this into account.  One way that tiered compilation could take this into account is to postpone optimization a bit if some value profiles are unusually empty.  It can also work around problems with value profiles containing only a few samples due to resonance in the bucketCounterRegister by converting the buckets into a prediction and then clearing them, so that even with resonance happening, after a few iterations of optimization postponement the prediction will contain everything we need to know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467353</commentid>
    <comment_count>1</comment_count>
      <attachid>107395</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-14 14:44:31 -0700</bug_when>
    <thetext>Created attachment 107395
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467356</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-14 14:47:19 -0700</bug_when>
    <thetext>Attachment 107395 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1

Source/JavaScriptCore/bytecode/ValueProfile.h:278:  The parameter name &quot;classInfo&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/ValueProfile.h:278:  The parameter name &quot;statistics&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/ValueProfile.h:281:  The parameter name &quot;statistics&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467359</commentid>
    <comment_count>3</comment_count>
      <attachid>107398</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-14 14:50:48 -0700</bug_when>
    <thetext>Created attachment 107398
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467363</commentid>
    <comment_count>4</comment_count>
      <attachid>107395</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-14 14:53:17 -0700</bug_when>
    <thetext>Comment on attachment 107395
the patch

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

Basically okay, but it needs an actual changelog and can you convert the magic numbers into named constants?

Given you&apos;re adding a new cpp file you&apos;ll need to add it to GNUMakefile, JavaScriptCore.pro and CMakeLists.txt

&gt; Source/JavaScriptCore/ChangeLog:7
&gt; +

You do need an actual changelog entry you know :D

&gt; Source/JavaScriptCore/jit/JIT.cpp:102
&gt; -    Jump skipOptimize = branchAdd32(Signed, TrustedImm32(kind == LoopOptimizationCheck ? 1 : 30), AbsoluteAddress(&amp;m_codeBlock-&gt;m_executeCounter));
&gt; +    Jump skipOptimize = branchAdd32(Signed, TrustedImm32(kind == LoopOptimizationCheck ? 1 : 15), AbsoluteAddress(m_codeBlock-&gt;addressOfExecuteCounter()));

Ahhh magic numbers!!! L-( I have no idea what this number means -- can we hoist it into a named constant?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467375</commentid>
    <comment_count>5</comment_count>
      <attachid>107399</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-14 15:00:54 -0700</bug_when>
    <thetext>Created attachment 107399
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467383</commentid>
    <comment_count>6</comment_count>
      <attachid>107399</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-14 15:07:34 -0700</bug_when>
    <thetext>Comment on attachment 107399
the patch

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

Correct the printf bit before landing.

Would be nice to avoid unnecessary renames (buckets-&gt;m_buckets, etc) in future, as they add noise to the patch.

&gt; Source/JavaScriptCore/jit/JITStubs.cpp:1840
&gt; +        if (error)
&gt; +            fprintf(stderr, &quot;WARNING: optimized compilation from loop failed.\n&quot;);

Should be in a VERBOSE_OSR block?

Future patch might want to define a OSR_LOG() macro which might be nicer in the long run</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467384</commentid>
    <comment_count>7</comment_count>
      <attachid>107399</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-09-14 15:09:17 -0700</bug_when>
    <thetext>Comment on attachment 107399
the patch

Attachment 107399 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9661650</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467391</commentid>
    <comment_count>8</comment_count>
      <attachid>107399</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-14 15:13:49 -0700</bug_when>
    <thetext>Comment on attachment 107399
the patch

Attachment 107399 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9659685</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467447</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-14 16:00:36 -0700</bug_when>
    <thetext>Landed in r95134.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107395</attachid>
            <date>2011-09-14 14:44:31 -0700</date>
            <delta_ts>2011-09-14 15:00:54 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>smartwarmup_patch_2.diff</filename>
            <type>text/plain</type>
            <size>41841</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUxMjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAK
KzIwMTEtMDktMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBU
aWVyZWQgY29tcGlsYXRpb24gaGV1cmlzdGljcyBkbyBub3QgYWNjb3VudCBmb3IgdmFsdWUgcHJv
ZmlsZSBmdWxsbmVzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjgxMTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUucHJvOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0V2Vh
a1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcyk6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHJlZGljdGVkVHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OnByZWRpY3Rpb25Ub1N0cmluZyk6CisgICAgICAgICogYnl0
ZWNvZGUvUHJlZGljdGVkVHlwZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6OmNvbXB1dGVTdGF0aXN0aWNz
KToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24p
OgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1
ZVByb2ZpbGU6OlZhbHVlUHJvZmlsZSk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6Y2xh
c3NJbmZvKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpudW1iZXJPZlNhbXBsZXMpOgor
ICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6OnRvdGFsTnVtYmVyT2ZTYW1wbGVzKToKKyAgICAg
ICAgKEpTQzo6VmFsdWVQcm9maWxlOjppc0xpdmUpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2Zp
bGU6Om51bWJlck9mSW50MzJzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpudW1iZXJP
ZkRvdWJsZXMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om51bWJlck9mQm9vbGVhbnMp
OgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6OmR1bXApOgorICAgICAgICAoSlNDOjpnZXRW
YWx1ZVByb2ZpbGVCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3Ryb25nbHlQcmVk
aWN0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0
aE9TUik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omp1bXBGcm9tU3BlY3VsYXRp
dmVUb05vblNwZWN1bGF0aXZlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVN
ZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSk6Cisg
ICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVO
Q1RJT04pOgorCiAyMDExLTA5LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguICBUdXJuIG9mZiB0aWVyZWQgY29tcGlsYXRp
b24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NTEx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMzcsOCArMzcsMTAgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRl
Y29kZS9Db2RlQmxvY2suY3BwCiAgICAgYnl0ZWNvZGUvSnVtcFRhYmxlLmNwcAogICAgIGJ5dGVj
b2RlL09wY29kZS5jcHAKKyAgICBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAogICAgIGJ5dGVj
b2RlL1NhbXBsaW5nVG9vbC5jcHAKICAgICBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAK
KyAgICBieXRlY29kZS9WYWx1ZVByb2ZpbGUuY3BwCiAKICAgICBieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCiAgICAgYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5NTEx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC04OSwxMCArODksMTQgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wY29kZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJl
ZGljdGVkVHlwZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0
ZWRUeXBlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmNwcCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmggXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA5NTExNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTY2LDgg
KzY2LDEwIEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHAgXAogICAg
IGJ5dGVjb2RlL0p1bXBUYWJsZS5jcHAgXAogICAgIGJ5dGVjb2RlL09wY29kZS5jcHAgXAorICAg
IGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwIFwKICAgICBieXRlY29kZS9TYW1wbGluZ1Rvb2wu
Y3BwIFwKICAgICBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgXAorICAgIGJ5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5jcHAgXAogICAgIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAgXAogICAgIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIFwKICAgICBoZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gOTUxMTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQ1OCw2ICsxNDU4LDE0IEBA
CiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5
dGVjb2RlXFByZWRpY3RlZFR5cGUuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxQcmVkaWN0ZWRUeXBlLmgiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXFNh
bXBsaW5nVG9vbC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTQ3Myw2ICsxNDgxLDE0IEBA
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxTdHJ1Y3R1cmVTdHViSW5mby5oIgog
CQkJCT4KIAkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRl
Y29kZVxWYWx1ZVByb2ZpbGUuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxWYWx1ZVByb2ZpbGUuaCIKKwkJCQk+CisJCQk8
L0ZpbGU+CiAJCTwvRmlsdGVyPgogCQk8RmlsdGVyCiAJCQlOYW1lPSJkZWJ1Z2dlciIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5NTExNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBACiAJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5
NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODJFNTMxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFODUxNDFG
M0ZFMzAwMTc5Qzk0IC8qIEJvdW5kc0NoZWNrZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4MjE0MUYzRkM5MDAxNzlDOTQgLyog
Qm91bmRzQ2hlY2tlZFBvaW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJlZGljdGVkVHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4
MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi87IH07CisJCTBGRDgy
RTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8q
IFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBP
U0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2OTMxMkE2RjlFMTAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2Nh
dG9yUG9zaXguY3BwICovOyB9OwogCQkxNDA1NjZDNDEwN0VDMjU1MDA1REJDOEQgLyogSlNBUElW
YWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAq
LzsgfTsKQEAgLTgxMSw2ICs4MTIsNyBAQAogCQkwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyog
REZHT1NSRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRW50
cnkuaDsgcGF0aCA9IGRmZy9ERkdPU1JFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkQ4MkU4MjE0MUYzRkM5MDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm91bmRzQ2hlY2tlZFBvaW50ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8q
IFByZWRpY3RlZFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHJlZGljdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRThF
MTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBv
c2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9y
UG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5
MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzEz
LDYgKzIzMTUsNyBAQAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDgyRThFMTQy
MDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovLAogCQkJCTBGRDgyRTg0MTQxRjNG
REEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLywKIAkJCQkwRkQ4MkU0RjE0MURBRUEx
MDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovLAogCQkJCTBGRDgyRTUwMTQxREFFQTEwMDE3
OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oICovLApAQCAtMzA5MCw2ICszMDkzLDcgQEAKIAkJ
CWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1
ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0
IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYw
ODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTYzQjJD
MTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDk1MTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjgsNiArMTQyOCw3IEBAIENvZGVCbG9jazo6Q29kZUJs
b2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fc291cmNlT2Zmc2V0KHNvdXJjZU9mZnNl
dCkKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltVGFiKQogICAgICwgbV9hbHRlcm5hdGl2ZShhbHRl
cm5hdGl2ZSkKKyAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCiB7CiAgICAgQVNT
RVJUKG1fc291cmNlKTsKICAgICAKQEAgLTE0NDEsMTcgKzE0NDIsNyBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogewog
I2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCi0gICAgZnByaW50ZihzdGRlcnIsICJW
YWx1ZVByb2ZpbGUgZm9yICVwOlxuIiwgdGhpcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bWJlck9mVmFsdWVQcm9maWxlcygpOyArK2kpIHsKLSAgICAgICAgVmFsdWVQcm9maWxl
KiBwcm9maWxlID0gdmFsdWVQcm9maWxlKGkpOwotICAgICAgICBpZiAocHJvZmlsZS0+Ynl0ZWNv
ZGVPZmZzZXQgPCAwKSB7Ci0gICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+Ynl0ZWNvZGVPZmZz
ZXQgPT0gLTEpOwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICBhcmcgPSAldTogIiwg
aSArIDEpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAg
YmMgPSAlZDogIiwgcHJvZmlsZS0+Ynl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBwcm9maWxlLT5k
dW1wKHN0ZGVycik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKLSAgICB9CisgICAg
ZHVtcFZhbHVlUHJvZmlsZXMoKTsKICNlbmRpZgogICAgIAogI2lmIEVOQUJMRShKSVQpCkBAIC0x
NTkwLDE0ICsxNTgxLDE0IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXQKICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gdmFsdWVQcm9maWxlKHByb2ZpbGVJ
bmRleCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0czsgKytpbmRleCkgewotICAgICAgICAgICAg
aWYgKCFwcm9maWxlLT5idWNrZXRzW2luZGV4XSkgewotICAgICAgICAgICAgICAgIGlmICghIXBy
b2ZpbGUtPndlYWtCdWNrZXRzW2luZGV4XSkKKyAgICAgICAgICAgIGlmICghcHJvZmlsZS0+bV9i
dWNrZXRzW2luZGV4XSkgeworICAgICAgICAgICAgICAgIGlmICghIXByb2ZpbGUtPm1fd2Vha0J1
Y2tldHNbaW5kZXhdKQogICAgICAgICAgICAgICAgICAgICBoYW5kbGVXZWFrUmVmZXJlbmNlcyA9
IHRydWU7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICghSlNWYWx1ZTo6ZGVjb2RlKHByb2ZpbGUtPmJ1Y2tldHNb
aW5kZXhdKS5pc0NlbGwoKSkgewotICAgICAgICAgICAgICAgIHByb2ZpbGUtPndlYWtCdWNrZXRz
W2luZGV4XSA9IFZhbHVlUHJvZmlsZTo6V2Vha0J1Y2tldCgpOworICAgICAgICAgICAgaWYgKCFK
U1ZhbHVlOjpkZWNvZGUocHJvZmlsZS0+bV9idWNrZXRzW2luZGV4XSkuaXNDZWxsKCkpIHsKKyAg
ICAgICAgICAgICAgICBwcm9maWxlLT5tX3dlYWtCdWNrZXRzW2luZGV4XSA9IFZhbHVlUHJvZmls
ZTo6V2Vha0J1Y2tldCgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC0xNjE3LDggKzE2MDgsOCBAQCB2b2lkIENvZGVCbG9jazo6dmlz
aXRXZWFrUmVmZXJlbmNlcyhTbG90CiAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IHZh
bHVlUHJvZmlsZShwcm9maWxlSW5kZXgpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IDA7IGluZGV4IDwgVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHM7ICsraW5k
ZXgpIHsKLSAgICAgICAgICAgIGlmICghIXByb2ZpbGUtPmJ1Y2tldHNbaW5kZXhdKSB7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShwcm9maWxlLT5idWNr
ZXRzW2luZGV4XSk7CisgICAgICAgICAgICBpZiAoISFwcm9maWxlLT5tX2J1Y2tldHNbaW5kZXhd
KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShwcm9m
aWxlLT5tX2J1Y2tldHNbaW5kZXhdKTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzQ2Vs
bCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKQEAg
LTE2MjYsMTEgKzE2MTcsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha1JlZmVyZW5jZXMo
U2xvdAogICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
cHJvZmlsZS0+YnVja2V0c1tpbmRleF0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAg
ICAgICAgICAgICAgICBwcm9maWxlLT53ZWFrQnVja2V0c1tpbmRleF0gPSBjZWxsLT5zdHJ1Y3R1
cmUoKTsKKyAgICAgICAgICAgICAgICBwcm9maWxlLT5tX2J1Y2tldHNbaW5kZXhdID0gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcHJvZmlsZS0+bV93ZWFrQnVj
a2V0c1tpbmRleF0gPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgVmFsdWVQcm9maWxlOjpXZWFrQnVja2V0IHdlYWsgPSBwcm9maWxl
LT53ZWFrQnVja2V0c1tpbmRleF07CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGU6OldlYWtCdWNr
ZXQgd2VhayA9IHByb2ZpbGUtPm1fd2Vha0J1Y2tldHNbaW5kZXhdOwogICAgICAgICAgICAgaWYg
KCF3ZWFrIHx8IHdlYWsuaXNDbGFzc0luZm8oKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIApAQCAtMTYzOCw3ICsxNjI5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0
V2Vha1JlZmVyZW5jZXMoU2xvdAogICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHdlYWsu
YXNTdHJ1Y3R1cmUoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIHByb2ZpbGUtPndlYWtCdWNrZXRzW2luZGV4XSA9IHdlYWsuYXNTdHJ1Y3R1
cmUoKS0+Y2xhc3NJbmZvKCk7CisgICAgICAgICAgICBwcm9maWxlLT5tX3dlYWtCdWNrZXRzW2lu
ZGV4XSA9IHdlYWsuYXNTdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCk7CiAgICAgICAgIH0KICAgICB9
CiAjZW5kaWYKQEAgLTE5NDYsNCArMTkzNyw3MiBAQCBib29sIEZ1bmN0aW9uQ29kZUJsb2NrOjpj
YW5Db21waWxlV2l0aERGCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
K2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCit7CisjaWYgRU5BQkxFKEpJVF9W
RVJCT1NFX09TUikKKyAgICBwcmludGYoIkNvbnNpZGVyaW5nIG9wdGltaXppbmcgJXAuLi5cbiIs
IHRoaXMpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQorICAg
IGR1bXBWYWx1ZVByb2ZpbGVzKCk7CisjZW5kaWYKKworICAgIGlmIChtX29wdGltaXphdGlvbkRl
bGF5Q291bnRlciA+PSA1KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA9IDA7CisgICAgdW5zaWduZWQgbnVt
YmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID0gMDsKKyAgICB1bnNpZ25lZCBudW1i
ZXJPZlNhbXBsZXNJblByb2ZpbGVzID0gMDsgLy8gSWYgdGhpcyBkaXZpZGVkIGJ5IFZhbHVlUHJv
ZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIGVxdWFscyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB0aGVu
IHZhbHVlIHByb2ZpbGVzIGFyZSBmdWxsLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytpKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSogcHJv
ZmlsZSA9IHZhbHVlUHJvZmlsZShpKTsKKyAgICAgICAgdW5zaWduZWQgbnVtU2FtcGxlcyA9IHBy
b2ZpbGUtPnRvdGFsTnVtYmVyT2ZTYW1wbGVzKCk7CisgICAgICAgIGlmIChudW1TYW1wbGVzID4g
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMpCisgICAgICAgICAgICBudW1TYW1wbGVzID0g
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHM7IC8vIFdlIGRvbid0IHdhbnQgcHJvZmlsZXMg
dGhhdCBhcmUgZXh0cmVtZWx5IGhvdCB0byBiZSBnaXZlbiBtb3JlIHdlaWdodC4KKyAgICAgICAg
bnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyArPSBudW1TYW1wbGVzOworICAgICAgICBpZiAocHJv
ZmlsZS0+bV9ieXRlY29kZU9mZnNldCA8IDApIHsKKyAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbigpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICAgICAgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMrKzsKKyAgICAgICAgaWYg
KHByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpIHx8IHByb2ZpbGUtPm1fcHJlZGljdGlvbiAhPSBQ
cmVkaWN0Tm9uZSkKKyAgICAgICAgICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9m
aWxlcysrOworICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKKyAg
ICB9CisKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiUHJvZmlsZSBo
b3RuZXNzOiAlbGYsICVsZlxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVl
UHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgKGRvdWJsZSludW1i
ZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBu
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CisjZW5kaWYKKworICAgIGlmICgoZG91YmxlKW51bWJl
ck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mTm9uQXJndW1lbnRWYWx1
ZVByb2ZpbGVzID49IDAuNzUKKyAgICAgICAgJiYgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblBy
b2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVlUHJv
ZmlsZXMoKSA+PSAwLjUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyKys7CisgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJPRklM
RSkKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcygpCit7CisgICAgZnByaW50Zihz
dGRlcnIsICJWYWx1ZVByb2ZpbGUgZm9yICVwOlxuIiwgdGhpcyk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mVmFsdWVQcm9maWxlcygpOyArK2kpIHsKKyAgICAgICAgVmFs
dWVQcm9maWxlKiBwcm9maWxlID0gdmFsdWVQcm9maWxlKGkpOworICAgICAgICBpZiAocHJvZmls
ZS0+bV9ieXRlY29kZU9mZnNldCA8IDApIHsKKyAgICAgICAgICAgIEFTU0VSVChwcm9maWxlLT5t
X2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAg
YXJnID0gJXU6ICIsIGkgKyAxKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiAgIGJjID0gJWQ6ICIsIHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQpOworICAg
ICAgICBpZiAoIXByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpICYmIHByb2ZpbGUtPm1fcHJlZGlj
dGlvbiA9PSBQcmVkaWN0Tm9uZSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI8ZW1w
dHk+XG4iKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHByb2Zp
bGUtPmR1bXAoc3RkZXJyKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgIH0K
K30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk1MTE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDQs
NiArMzQ0LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBj
b21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKikgPSAwOwogICAgICAg
ICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBjYW5Db21waWxlV2l0aERGRygpID0gMDsKKyAgICAgICAgYm9vbCBoYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChnZXRKSVRUeXBlKCkg
PT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSByZXBs
YWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPiBnZXRKSVRUeXBlKCk7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVw
bGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlw
ZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVw
bGFjZW1lbnQoKSA9PSB0aGlzKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQogI2Vsc2UKICAgICAgICAgSklUQ29kZTo6SklUVHlw
ZSBnZXRKSVRUeXBlKCkgeyByZXR1cm4gSklUQ29kZTo6QmFzZWxpbmVKSVQ7IH0KICNlbmRpZgpA
QCAtNDQ5LDcgKzQ2Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpbmRleCkgPj0gbV92YWx1ZVByb2ZpbGVzLnNpemUoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0g
dmFsdWVQcm9maWxlKGFyZ3VtZW50SW5kZXggLSAxKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQt
PmJ5dGVjb2RlT2Zmc2V0ICE9IC0xKQorICAgICAgICAgICAgaWYgKHJlc3VsdC0+bV9ieXRlY29k
ZU9mZnNldCAhPSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTY3NSw4ICs2ODksMTQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gLTEwMDsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgaW50MzJfdCBtX2V4ZWN1dGVDb3VudGVyOworI2lmIEVOQUJMRShWQUxV
RV9QUk9GSUxFUikKKyAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5vdygpOworI2VuZGlmCiAK
KyNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQorICAgICAgICB2b2lkIGR1bXBWYWx1
ZVByb2ZpbGVzKCk7CisjZW5kaWYKKyAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRo
ZXNlIHJlbWFpbmluZyBtZW1iZXJzIHByaXZhdGUuCiAKICAgICAgICAgaW50IG1fbnVtQ2FsbGVl
UmVnaXN0ZXJzOwpAQCAtNzYyLDYgKzc4Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAK
ICAgICAgICAgT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBtX3ByZWRpY3Rpb25zOwogCisgICAg
ICAgIGludDMyX3QgbV9leGVjdXRlQ291bnRlcjsKKyAgICAgICAgdWludDhfdCBtX29wdGltaXph
dGlvbkRlbGF5Q291bnRlcjsKKwogICAgICAgICBzdHJ1Y3QgUmFyZURhdGEgewogICAgICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgcHVibGljOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAkocmV2aXNp
b24gOTUxMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCiAKKyNpbmNsdWRlICJWYWx1ZVByb2ZpbGUu
aCIKICNpbmNsdWRlIDx3dGYvQm91bmRzQ2hlY2tlZFBvaW50ZXIuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC02MSw3ICs2Miw3IEBAIGNvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVk
aWN0ZWQKICAgICAgICAgcHRyLnN0cmNhdCgiQXJyYXkiKTsKICAgICAKICAgICBpZiAodmFsdWUg
JiBQcmVkaWN0U3RyaW5nKQotICAgICAgICBwdHIuc3RyY2F0KCJTdHIiKTsKKyAgICAgICAgcHRy
LnN0cmNhdCgiU3RyaW5nIik7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEludDMyKQog
ICAgICAgICBwdHIuc3RyY2F0KCJJbnQiKTsKQEAgLTgxLDQ2ICs4Miw2IEBAIGNvbnN0IGNoYXIq
IHByZWRpY3Rpb25Ub1N0cmluZyhQcmVkaWN0ZWQKIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKFZB
TFVFX1BST0ZJTEVSKQotUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihjb25zdCBWYWx1ZVBy
b2ZpbGUmIHByb2ZpbGUpCi17Ci0gICAgVmFsdWVQcm9maWxlOjpTdGF0aXN0aWNzIHN0YXRpc3Rp
Y3M7Ci0gICAgcHJvZmlsZS5jb21wdXRlU3RhdGlzdGljcyhzdGF0aXN0aWNzKTsKLSAgICAKLSAg
ICBpZiAoIXN0YXRpc3RpY3Muc2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwot
ICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmludDMycyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCi0g
ICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEludDMyOwotICAgIAot
ICAgIGlmIChzdGF0aXN0aWNzLmRvdWJsZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAg
ICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3REb3VibGU7Ci0gICAgCi0gICAg
aWYgKHN0YXRpc3RpY3MuaW50MzJzICsgc3RhdGlzdGljcy5kb3VibGVzID09IHN0YXRpc3RpY3Mu
c2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0TnVt
YmVyOwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmFycmF5cyA9PSBzdGF0aXN0aWNzLnNhbXBs
ZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEFycmF5Owot
ICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmZpbmFsT2JqZWN0cyA9PSBzdGF0aXN0aWNzLnNhbXBs
ZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEZpbmFsT2Jq
ZWN0OwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLnN0cmluZ3MgPT0gc3RhdGlzdGljcy5zYW1w
bGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RTdHJpbmc7
Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3Mub2JqZWN0cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMp
Ci0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdE9iamVjdE90aGVy
OwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmNlbGxzID09IHN0YXRpc3RpY3Muc2FtcGxlcykK
LSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Q2VsbE90aGVyOwot
ICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmJvb2xlYW5zID09IHN0YXRpc3RpY3Muc2FtcGxlcykK
LSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Qm9vbGVhbjsKLSAg
ICAKLSAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RPdGhlcjsKLX0KLSNl
bmRpZgotCiBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tVmFsdWUoSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCShyZXZpc2lvbiA5NTExNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDcgQEAKICNpZm5kZWYgUHJlZGljdGVkVHlwZV9oCiAjZGVmaW5lIFByZWRp
Y3RlZFR5cGVfaAogCi0jaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisjaW5jbHVkZSAiSlNWYWx1
ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzcsNyArMzcsNyBAQCB0eXBlZGVmIHVpbnQx
Nl90IFByZWRpY3RlZFR5cGU7CiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0Tm9u
ZSAgICAgICAgICA9IDB4MDAwMDsgLy8gV2UgZG9uJ3Qga25vdyBhbnl0aGluZyB5ZXQuCiBzdGF0
aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0RmluYWxPYmplY3QgICA9IDB4MDAwMTsgLy8g
SXQncyBkZWZpbml0ZWx5IGEgSlNGaW5hbE9iamVjdC4KIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRU
eXBlIFByZWRpY3RBcnJheSAgICAgICAgID0gMHgwMDAyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBK
U0FycmF5Lgotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdE9iamVjdE90aGVyICAg
PSAweDAwMTA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3Qgb3RoZXIgdGhhbiBKU0ZpbmFs
T2JqZWN0IG9yIEpTQXJyYXkuCitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0T2Jq
ZWN0T3RoZXIgICA9IDB4MDAxMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIG9iamVjdCBidXQgbm90
IEpTRmluYWxPYmplY3Qgb3IgSlNBcnJheS4KIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFBy
ZWRpY3RPYmplY3RVbmtub3duID0gMHgwMDIwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gb2JqZWN0
LCBidXQgd2UgZGlkbid0IHJlY29yZCBlbm91Z2ggaW5mb3JtYXRpbiB0byBrbm93IG1vcmUuCiBz
dGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0T2JqZWN0TWFzayAgICA9IDB4MDAzZjsg
Ly8gQml0bWFzayB1c2VkIGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBvZiBvYmplY3QgcHJlZGlj
dGlvbi4KIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RTdHJpbmcgICAgICAgID0g
MHgwMDQwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZy4KQEAgLTE1MCwxMCArMTUwLDYg
QEAgaW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oUHJlZAogICAgIHJldHVybiB0
eXBlIHwgKHNvdXJjZSA9PSBTdHJvbmdQcmVkaWN0aW9uID8gU3Ryb25nUHJlZGljdGlvblRhZyA6
IDApOwogfQogCi0jaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQotUHJlZGljdGVkVHlwZSBtYWtl
UHJlZGljdGlvbihjb25zdCBWYWx1ZVByb2ZpbGUmKTsKLSNlbmRpZgotCiBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb25Gcm9tVmFsdWUoSlNWYWx1ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCit2b2lkIFZhbHVlUHJvZmlsZTo6Y29tcHV0ZVN0YXRpc3Rp
Y3MoY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpCit7
CisgICAgc3RhdGlzdGljcy5jZWxscysrOworICAgIAorICAgIGlmIChjbGFzc0luZm8gPT0gJkpT
RmluYWxPYmplY3Q6OnNfaW5mbykgeworICAgICAgICBzdGF0aXN0aWNzLmZpbmFsT2JqZWN0cysr
OworICAgICAgICBzdGF0aXN0aWNzLm9iamVjdHMrKzsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBpZiAoY2xhc3NJbmZvID09ICZKU0FycmF5OjpzX2luZm8pIHsKKyAgICAgICAg
c3RhdGlzdGljcy5hcnJheXMrKzsKKyAgICAgICAgc3RhdGlzdGljcy5vYmplY3RzKys7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNTdHJpbmc6
OnNfaW5mbykgeworICAgICAgICBzdGF0aXN0aWNzLnN0cmluZ3MrKzsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoJkpTT2JqZWN0
OjpzX2luZm8pKQorICAgICAgICBzdGF0aXN0aWNzLm9iamVjdHMrKzsKK30KKwordm9pZCBWYWx1
ZVByb2ZpbGU6OmNvbXB1dGVTdGF0aXN0aWNzKFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIGNvbnN0
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7
CisgICAgICAgIGlmICghbV9idWNrZXRzW2ldKSB7CisgICAgICAgICAgICBXZWFrQnVja2V0IHdl
YWtCdWNrZXQgPSBtX3dlYWtCdWNrZXRzW2ldOworICAgICAgICAgICAgaWYgKCEhd2Vha0J1Y2tl
dCkgeworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3Muc2FtcGxlcysrOworICAgICAgICAgICAg
ICAgIGNvbXB1dGVTdGF0aXN0aWNzKHdlYWtCdWNrZXQuZ2V0Q2xhc3NJbmZvKCksIHN0YXRpc3Rp
Y3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGlzdGljcy5zYW1wbGVzKys7CisgICAg
ICAgIAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKG1fYnVja2V0c1tp
XSk7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICBzdGF0aXN0aWNz
LmludDMycysrOworICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0RvdWJsZSgpKQorICAgICAgICAg
ICAgc3RhdGlzdGljcy5kb3VibGVzKys7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlLmlzQ2VsbCgp
KQorICAgICAgICAgICAgY29tcHV0ZVN0YXRpc3RpY3ModmFsdWUuYXNDZWxsKCktPnN0cnVjdHVy
ZSgpLT5jbGFzc0luZm8oKSwgc3RhdGlzdGljcyk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlLmlz
Qm9vbGVhbigpKQorICAgICAgICAgICAgc3RhdGlzdGljcy5ib29sZWFucysrOworICAgIH0KK30K
KworUHJlZGljdGVkVHlwZSBWYWx1ZVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigp
Cit7CisgICAgVmFsdWVQcm9maWxlOjpTdGF0aXN0aWNzIHN0YXRpc3RpY3M7CisgICAgY29tcHV0
ZVN0YXRpc3RpY3Moc3RhdGlzdGljcyk7CisgICAgCisgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0
aW9uOworICAgIAorICAgIGlmICghc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICBwcmVkaWN0
aW9uID0gUHJlZGljdE5vbmU7CisgICAgZWxzZSBpZiAoc3RhdGlzdGljcy5pbnQzMnMgPT0gc3Rh
dGlzdGljcy5zYW1wbGVzKQorICAgICAgICBwcmVkaWN0aW9uID0gU3Ryb25nUHJlZGljdGlvblRh
ZyB8IFByZWRpY3RJbnQzMjsKKyAgICBlbHNlIGlmIChzdGF0aXN0aWNzLmRvdWJsZXMgPT0gc3Rh
dGlzdGljcy5zYW1wbGVzKQorICAgICAgICBwcmVkaWN0aW9uID0gU3Ryb25nUHJlZGljdGlvblRh
ZyB8IFByZWRpY3REb3VibGU7CisgICAgZWxzZSBpZiAoc3RhdGlzdGljcy5pbnQzMnMgKyBzdGF0
aXN0aWNzLmRvdWJsZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICBwcmVkaWN0aW9u
ID0gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3ROdW1iZXI7CisgICAgZWxzZSBpZiAoc3Rh
dGlzdGljcy5hcnJheXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICBwcmVkaWN0aW9u
ID0gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RBcnJheTsKKyAgICBlbHNlIGlmIChzdGF0
aXN0aWNzLmZpbmFsT2JqZWN0cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHByZWRp
Y3Rpb24gPSBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEZpbmFsT2JqZWN0OworICAgIGVs
c2UgaWYgKHN0YXRpc3RpY3Muc3RyaW5ncyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAg
IHByZWRpY3Rpb24gPSBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdFN0cmluZzsKKyAgICBl
bHNlIGlmIChzdGF0aXN0aWNzLm9iamVjdHMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAg
ICBwcmVkaWN0aW9uID0gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RPYmplY3RPdGhlcjsK
KyAgICBlbHNlIGlmIChzdGF0aXN0aWNzLmNlbGxzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAg
ICAgICAgcHJlZGljdGlvbiA9IFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Q2VsbE90aGVy
OworICAgIGVsc2UgaWYgKHN0YXRpc3RpY3MuYm9vbGVhbnMgPT0gc3RhdGlzdGljcy5zYW1wbGVz
KQorICAgICAgICBwcmVkaWN0aW9uID0gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RCb29s
ZWFuOworICAgIGVsc2UKKyAgICAgICAgcHJlZGljdGlvbiA9IFN0cm9uZ1ByZWRpY3Rpb25UYWcg
fCBQcmVkaWN0T3RoZXI7CisKKyAgICBtX251bWJlck9mU2FtcGxlc0luUHJlZGljdGlvbiArPSBz
dGF0aXN0aWNzLnNhbXBsZXM7CisgICAgbWVyZ2VQcmVkaWN0aW9uKG1fcHJlZGljdGlvbiwgcHJl
ZGljdGlvbik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsg
KytpKSB7CisgICAgICAgIG1fYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OworICAgICAgICBtX3dlYWtCdWNrZXRzW2ldID0gV2Vha0J1Y2tldCgpOworICAgIH0KKyAgICBy
ZXR1cm4gbV9wcmVkaWN0aW9uOworfQorI2VuZGlmIC8vIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
KworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiA5NTExNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogI2RlZmluZSBWYWx1ZVByb2ZpbGVfaAogCiAjaW5jbHVkZSAiSlNBcnJheS5oIgor
I2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNs
dWRlICJXcml0ZUJhcnJpZXIuaCIKIApAQCAtNDQsMzMgKzQ1LDQ5IEBAIHN0cnVjdCBWYWx1ZVBy
b2ZpbGUgewogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYWpvcml0eSA9IGNlcnRhaW50eSAv
IDI7CiAgICAgCiAgICAgVmFsdWVQcm9maWxlKGludCBieXRlY29kZU9mZnNldCkKLSAgICAgICAg
OiBieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKKyAgICAgICAgOiBtX2J5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkK
KyAgICAgICAgLCBtX251bWJlck9mU2FtcGxlc0luUHJlZGljdGlvbigwKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKQotICAgICAg
ICAgICAgYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICAg
ICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgfQogICAg
IAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tldCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIGlmICghIWJ1Y2tldHNbYnVja2V0XSkgewotICAgICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShidWNrZXRzW2J1Y2tldF0pOworICAgICAgICBp
ZiAoISFtX2J1Y2tldHNbYnVja2V0XSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShtX2J1Y2tldHNbYnVja2V0XSk7CiAgICAgICAgICAgICBpZiAoIXZhbHVl
LmlzQ2VsbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCk7CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHdlYWtCdWNrZXRzW2J1Y2tldF0uZ2V0Q2xhc3NJbmZvKCk7CisgICAgICAg
IHJldHVybiBtX3dlYWtCdWNrZXRzW2J1Y2tldF0uZ2V0Q2xhc3NJbmZvKCk7CiAgICAgfQogICAg
IAogICAgIHVuc2lnbmVkIG51bWJlck9mU2FtcGxlcygpIGNvbnN0CiAgICAgewogICAgICAgICB1
bnNpZ25lZCByZXN1bHQgPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZCdWNrZXRzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghIWJ1Y2tldHNbaV0gfHwgISF3
ZWFrQnVja2V0c1tpXSkKKyAgICAgICAgICAgIGlmICghIW1fYnVja2V0c1tpXSB8fCAhIW1fd2Vh
a0J1Y2tldHNbaV0pCiAgICAgICAgICAgICAgICAgcmVzdWx0Kys7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgdW5zaWduZWQgdG90YWxOdW1iZXJP
ZlNhbXBsZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mU2FtcGxlcygp
ICsgbV9udW1iZXJPZlNhbXBsZXNJblByZWRpY3Rpb247CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNMaXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZkJ1Y2tldHM7ICsraSkgeworICAgICAgICAgICAgaWYgKCEhbV9idWNrZXRzW2ldIHx8
ICEhbV93ZWFrQnVja2V0c1tpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAogICAgIHN0YXRpYyB1bnNp
Z25lZCBjb21wdXRlUHJvYmFiaWxpdHkodW5zaWduZWQgY291bnRzLCB1bnNpZ25lZCBudW1iZXJP
ZlNhbXBsZXMpCiAgICAgewogICAgICAgICBpZiAoIW51bWJlck9mU2FtcGxlcykKQEAgLTgyLDcg
Kzk5LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZSB7CiAgICAgewogICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNr
ZXRzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghIWJ1Y2tldHNbaV0gJiYgSlNWYWx1ZTo6ZGVj
b2RlKGJ1Y2tldHNbaV0pLmlzSW50MzIoKSkKKyAgICAgICAgICAgIGlmICghIW1fYnVja2V0c1tp
XSAmJiBKU1ZhbHVlOjpkZWNvZGUobV9idWNrZXRzW2ldKS5pc0ludDMyKCkpCiAgICAgICAgICAg
ICAgICAgcmVzdWx0Kys7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTky
LDcgKzEwOSw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgIHsKICAgICAgICAgdW5zaWdu
ZWQgcmVzdWx0ID0gMDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9m
QnVja2V0czsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoISFidWNrZXRzW2ldICYmIEpTVmFsdWU6
OmRlY29kZShidWNrZXRzW2ldKS5pc0RvdWJsZSgpKQorICAgICAgICAgICAgaWYgKCEhbV9idWNr
ZXRzW2ldICYmIEpTVmFsdWU6OmRlY29kZShtX2J1Y2tldHNbaV0pLmlzRG91YmxlKCkpCiAgICAg
ICAgICAgICAgICAgcmVzdWx0Kys7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
QEAgLTE1Myw3ICsxNzAsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICB7CiAgICAgICAg
IHVuc2lnbmVkIHJlc3VsdCA9IDA7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZkJ1Y2tldHM7ICsraSkgewotICAgICAgICAgICAgaWYgKCEhYnVja2V0c1tpXSAmJiBK
U1ZhbHVlOjpkZWNvZGUoYnVja2V0c1tpXSkuaXNCb29sZWFuKCkpCisgICAgICAgICAgICBpZiAo
ISFtX2J1Y2tldHNbaV0gJiYgSlNWYWx1ZTo6ZGVjb2RlKG1fYnVja2V0c1tpXSkuaXNCb29sZWFu
KCkpCiAgICAgICAgICAgICAgICAgcmVzdWx0Kys7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKQEAgLTIwOCw3ICsyMjUsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICB2
b2lkIGR1bXAoRklMRSogb3V0KQogICAgIHsKICAgICAgICAgZnByaW50ZihvdXQsCi0gICAgICAg
ICAgICAgICAgInNhbXBsZXMgPSAldSwgaW50MzIgPSAldSAoJXUpLCBkb3VibGUgPSAldSAoJXUp
LCBjZWxsID0gJXUgKCV1KSwgb2JqZWN0ID0gJXUgKCV1KSwgZmluYWwgb2JqZWN0ID0gJXUgKCV1
KSwgYXJyYXkgPSAldSAoJXUpLCBzdHJpbmcgPSAldSAoJXUpLCBib29sZWFuID0gJXUgKCV1KSIs
CisgICAgICAgICAgICAgICAgInNhbXBsZXMgPSAldSwgaW50MzIgPSAldSAoJXUpLCBkb3VibGUg
PSAldSAoJXUpLCBjZWxsID0gJXUgKCV1KSwgb2JqZWN0ID0gJXUgKCV1KSwgZmluYWwgb2JqZWN0
ID0gJXUgKCV1KSwgYXJyYXkgPSAldSAoJXUpLCBzdHJpbmcgPSAldSAoJXUpLCBib29sZWFuID0g
JXUgKCV1KSwgcHJlZGljdGlvbiA9ICVzLCBzYW1wbGVzIGluIHByZWRpY3Rpb24gPSAldSIsCiAg
ICAgICAgICAgICAgICAgbnVtYmVyT2ZTYW1wbGVzKCksCiAgICAgICAgICAgICAgICAgcHJvYmFi
aWxpdHlPZkludDMyKCksIG51bWJlck9mSW50MzJzKCksCiAgICAgICAgICAgICAgICAgcHJvYmFi
aWxpdHlPZkRvdWJsZSgpLCBudW1iZXJPZkRvdWJsZXMoKSwKQEAgLTIxNywxMCArMjM0LDExIEBA
IHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZGaW5h
bE9iamVjdCgpLCBudW1iZXJPZkZpbmFsT2JqZWN0cygpLAogICAgICAgICAgICAgICAgIHByb2Jh
YmlsaXR5T2ZBcnJheSgpLCBudW1iZXJPZkFycmF5cygpLAogICAgICAgICAgICAgICAgIHByb2Jh
YmlsaXR5T2ZTdHJpbmcoKSwgbnVtYmVyT2ZTdHJpbmdzKCksCi0gICAgICAgICAgICAgICAgcHJv
YmFiaWxpdHlPZkJvb2xlYW4oKSwgbnVtYmVyT2ZCb29sZWFucygpKTsKKyAgICAgICAgICAgICAg
ICBwcm9iYWJpbGl0eU9mQm9vbGVhbigpLCBudW1iZXJPZkJvb2xlYW5zKCksCisgICAgICAgICAg
ICAgICAgcHJlZGljdGlvblRvU3RyaW5nKG1fcHJlZGljdGlvbiksIG1fbnVtYmVyT2ZTYW1wbGVz
SW5QcmVkaWN0aW9uKTsKICAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkJ1Y2tldHM7ICsraSkgewotICAgICAgICAgICAg
aWYgKCEhYnVja2V0c1tpXSB8fCAhIXdlYWtCdWNrZXRzW2ldKSB7CisgICAgICAgICAgICBpZiAo
ISFtX2J1Y2tldHNbaV0gfHwgISFtX3dlYWtCdWNrZXRzW2ldKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGZpcnN0KSB7CiAgICAgICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiOiAiKTsKICAg
ICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKQEAgLTIyOCwxMCArMjQ2LDEwIEBAIHN0
cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiwg
Iik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghIWJ1Y2tl
dHNbaV0pCi0gICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICIlcyIsIEpTVmFsdWU6OmRlY29k
ZShidWNrZXRzW2ldKS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgIGlmICghIW1fYnVja2V0
c1tpXSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiVzIiwgSlNWYWx1ZTo6ZGVjb2Rl
KG1fYnVja2V0c1tpXSkuZGVzY3JpcHRpb24oKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICghIXdlYWtCdWNrZXRzW2ldKQorICAgICAgICAgICAgaWYgKCEhbV93ZWFrQnVja2V0c1tp
XSkKICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIkRlYWRDZWxsIik7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yNTcsNjEgKzI3NSwyMCBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICAv
LyBNZXRob2QgZm9yIGluY3JlbWVudGluZyBhbGwgcmVsZXZhbnQgc3RhdGlzdGljcyBmb3IgYSBD
bGFzc0luZm8sIGV4Y2VwdCBmb3IKICAgICAvLyBpbmNyZW1lbnRpbmcgdGhlIG51bWJlciBvZiBz
YW1wbGVzLCB3aGljaCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgogICAgIC8vIGRvaW5n
LgotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVTdGF0aXN0aWNzKGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvLCBTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKQotICAgIHsKLSAgICAgICAgc3RhdGlzdGlj
cy5jZWxscysrOwotICAgICAgICAKLSAgICAgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNGaW5hbE9i
amVjdDo6c19pbmZvKSB7Ci0gICAgICAgICAgICBzdGF0aXN0aWNzLmZpbmFsT2JqZWN0cysrOwot
ICAgICAgICAgICAgc3RhdGlzdGljcy5vYmplY3RzKys7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChjbGFzc0luZm8gPT0gJkpTQXJyYXk6OnNf
aW5mbykgewotICAgICAgICAgICAgc3RhdGlzdGljcy5hcnJheXMrKzsKLSAgICAgICAgICAgIHN0
YXRpc3RpY3Mub2JqZWN0cysrOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoY2xhc3NJbmZvID09ICZKU1N0cmluZzo6c19pbmZvKSB7Ci0gICAg
ICAgICAgICBzdGF0aXN0aWNzLnN0cmluZ3MrKzsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKCZKU09i
amVjdDo6c19pbmZvKSkKLSAgICAgICAgICAgIHN0YXRpc3RpY3Mub2JqZWN0cysrOwotICAgIH0K
KyAgICBzdGF0aWMgdm9pZCBjb21wdXRlU3RhdGlzdGljcyhjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbywgU3RhdGlzdGljcyYgc3RhdGlzdGljcyk7CiAKICAgICAvLyBPcHRpbWl6ZWQgbWV0aG9k
IGZvciBnZXR0aW5nIGFsbCBjb3VudHMgYXQgb25jZS4KLSAgICB2b2lkIGNvbXB1dGVTdGF0aXN0
aWNzKFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKLSAgICAgICAgICAgIGlm
ICghYnVja2V0c1tpXSkgewotICAgICAgICAgICAgICAgIFdlYWtCdWNrZXQgd2Vha0J1Y2tldCA9
IHdlYWtCdWNrZXRzW2ldOwotICAgICAgICAgICAgICAgIGlmICghIXdlYWtCdWNrZXQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy5zYW1wbGVzKys7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbXB1dGVTdGF0aXN0aWNzKHdlYWtCdWNrZXQuZ2V0Q2xhc3NJbmZvKCksIHN0YXRpc3Rp
Y3MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3Rh
dGlzdGljcy5zYW1wbGVzKys7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoYnVja2V0c1tpXSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUu
aXNJbnQzMigpKQotICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuaW50MzJzKys7Ci0gICAgICAg
ICAgICBlbHNlIGlmICh2YWx1ZS5pc0RvdWJsZSgpKQotICAgICAgICAgICAgICAgIHN0YXRpc3Rp
Y3MuZG91YmxlcysrOwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNDZWxsKCkpCi0gICAg
ICAgICAgICAgICAgY29tcHV0ZVN0YXRpc3RpY3ModmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKSwgc3RhdGlzdGljcyk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5p
c0Jvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmJvb2xlYW5zKys7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgdm9pZCBjb21wdXRlU3RhdGlzdGljcyhTdGF0aXN0aWNzJiBzdGF0
aXN0aWNzKSBjb25zdDsKKyAgICAKKyAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCBy
ZXR1cm5zIHRoZSBuZXcgb25lLgorICAgIFByZWRpY3RlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVk
aWN0aW9uKCk7CisgICAgCisgICAgaW50IG1fYnl0ZWNvZGVPZmZzZXQ7IC8vIC0xIGZvciBwcm9s
b2d1ZQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgbV9wcmVkaWN0aW9uOworICAgIHVuc2lnbmVk
IG1fbnVtYmVyT2ZTYW1wbGVzSW5QcmVkaWN0aW9uOwogICAgIAotICAgIGludCBieXRlY29kZU9m
ZnNldDsgLy8gLTEgZm9yIHByb2xvZ3VlCi0gICAgRW5jb2RlZEpTVmFsdWUgYnVja2V0c1tudW1i
ZXJPZkJ1Y2tldHNdOworICAgIEVuY29kZWRKU1ZhbHVlIG1fYnVja2V0c1tudW1iZXJPZkJ1Y2tl
dHNdOwogICAgIAogICAgIGNsYXNzIFdlYWtCdWNrZXQgewogICAgIHB1YmxpYzoKQEAgLTM3NSwx
MiArMzUyLDEyIEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgICAgICB1aW50cHRyX3QgbV92
YWx1ZTsKICAgICB9OwogICAgIAotICAgIFdlYWtCdWNrZXQgd2Vha0J1Y2tldHNbbnVtYmVyT2ZC
dWNrZXRzXTsgLy8gdGhpcyBpcyBub3QgY292ZXJlZCBieSBhIHdyaXRlIGJhcnJpZXIgYmVjYXVz
ZSBpdCBpcyBvbmx5IHNldCBmcm9tIEdDCisgICAgV2Vha0J1Y2tldCBtX3dlYWtCdWNrZXRzW251
bWJlck9mQnVja2V0c107IC8vIHRoaXMgaXMgbm90IGNvdmVyZWQgYnkgYSB3cml0ZSBiYXJyaWVy
IGJlY2F1c2UgaXQgaXMgb25seSBzZXQgZnJvbSBHQwogfTsKIAogaW5saW5lIGludCBnZXRWYWx1
ZVByb2ZpbGVCeXRlY29kZU9mZnNldChWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZSkKIHsKLSAg
ICByZXR1cm4gdmFsdWVQcm9maWxlLT5ieXRlY29kZU9mZnNldDsKKyAgICByZXR1cm4gdmFsdWVQ
cm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0OwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTEx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NzksMTQgKzQ3OSw5IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKERZ
TkFNSUNfT1BUSU1JWkFUSU9OKQogICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBtX3By
b2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgp
OwogICAgICAgICBBU1NFUlQocHJvZmlsZSk7CisgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5w
cmVkaWN0KHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpICYgflByZWRpY3Rpb25U
YWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9uKTsKICNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0Up
Ci0gICAgICAgIHByaW50ZigiRHluYW1pYyBwcm9maWxlIFsldSwgJXVdOiAiLCBub2RlSW5kZXgs
IGJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBwcm9maWxlLT5kdW1wKHN0ZG91dCk7Ci0gICAgICAg
IHByaW50ZigiXG4iKTsKLSNlbmRpZgotICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ucHJlZGlj
dChtYWtlUHJlZGljdGlvbigqcHJvZmlsZSkgJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1By
ZWRpY3Rpb24pOwotI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAgcHJpbnRm
KCIgICAgUHJlZGljdGlvbjogJXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX2dyYXBoW25vZGVJ
bmRleF0uZ2V0UHJlZGljdGlvbigpKSk7CisgICAgICAgIHByaW50ZigiRHluYW1pYyBbJXUsICV1
XSBwcmVkaWN0aW9uOiAlc1xuIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4LCBwcmVkaWN0aW9u
VG9TdHJpbmcobV9ncmFwaFtub2RlSW5kZXhdLmdldFByZWRpY3Rpb24oKSkpOwogI2VuZGlmCiAj
ZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0obm9kZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5NTExNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTgsMTYgKzIx
OCwxMCBAQCB2b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhCiAgICAgICAg
IGlmICghcHJvZmlsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSNpZiBFTkFC
TEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiQXJndW1lbnQgcHJvZmlsZSBb
JWx1XTogIiwgYXJnKTsKLSAgICAgICAgcHJvZmlsZS0+ZHVtcChzdGRvdXQpOwotICAgICAgICBw
cmludGYoIlxuIik7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIG1fcHJlZGljdGlvbnMucHJl
ZGljdEFyZ3VtZW50KGFyZywgbWFrZVByZWRpY3Rpb24oKnByb2ZpbGUpICYgflByZWRpY3Rpb25U
YWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9uKTsKKyAgICAgICAgbV9wcmVkaWN0aW9ucy5wcmVkaWN0
QXJndW1lbnQoYXJnLCBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKSAmIH5QcmVk
aWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CiAgICAgICAgIAogI2lmIEVOQUJMRShE
RkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCIgICAgUHJlZGljdGlvbjogJXNcbiIs
IHByZWRpY3Rpb25Ub1N0cmluZyhtX3ByZWRpY3Rpb25zLmdldEFyZ3VtZW50UHJlZGljdGlvbihh
cmcpKSk7CisgICAgICAgIHByaW50ZigiQXJndW1lbnQgWyVsdV0gcHJlZGljdGlvbjogJXNcbiIs
IGFyZywgcHJlZGljdGlvblRvU3RyaW5nKG1fcHJlZGljdGlvbnMuZ2V0QXJndW1lbnRQcmVkaWN0
aW9uKGFyZykpKTsKICNlbmRpZgogICAgIH0KICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTUxMTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIyLDYgKzEyMiwxMSBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRo
T1NSCiAgICAgZGVidWdDYWxsKGRlYnVnT3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUs
IGRlYnVnSW5mbyk7CiAjZW5kaWYKICAgICAKKyNpZiBFTkFCTEUoREZHX1NVQ0NFU1NfU1RBVFMp
CisgICAgc3RhdGljIFNhbXBsaW5nQ291bnRlciBjb3VudGVyKCJTcGVjdWxhdGlvbkZhaWx1cmUi
KTsKKyAgICBlbWl0Q291bnQoY291bnRlcik7CisjZW5kaWYKKwogICAgIC8vIDIpIFBlcmZvcm0g
c3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBv
cGVyYXRpb24KICAgICAvLyAgICBzdGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWlu
ZyB0aGUgc3BlY3VsYXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4KICAgICAKQEAgLTg2Miw2ICs4
NjcsMTEgQEAgdm9pZCBKSVRDb21waWxlcjo6anVtcEZyb21TcGVjdWxhdGl2ZVRvTgogICAgIGRl
YnVnQ2FsbChkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8p
OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoREZHX1NVQ0NFU1NfU1RBVFMpCisgICAgc3RhdGljIFNh
bXBsaW5nQ291bnRlciBjb3VudGVyKCJTcGVjdWxhdGlvbkZhaWx1cmUiKTsKKyAgICBlbWl0Q291
bnQoY291bnRlcik7CisjZW5kaWYKKwogICAgIC8vIERvZXMgdGhpcyBzcGVjdWxhdGlvbiBjaGVj
ayByZXF1aXJlIGFueSBhZGRpdGlvbmFsIHJlY292ZXJ5IHRvIGJlIHBlcmZvcm1lZCwKICAgICAv
LyB0byByZXN0b3JlIGFueSBzdGF0ZSB0aGF0IGhhcyBiZWVuIG92ZXJ3cml0dGVuIGJlZm9yZSB3
ZSBlbnRlciBiYWNrIGluIHRvIHRoZQogICAgIC8vIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gOTUxMTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcg
QEAgdm9pZCBKSVQ6OmVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6YQogICAgIGlmICghc2hv
dWxkRW1pdFByb2ZpbGluZygpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgSnVtcCBza2lw
T3B0aW1pemUgPSBicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihraW5kID09IExvb3BP
cHRpbWl6YXRpb25DaGVjayA/IDEgOiAzMCksIEFic29sdXRlQWRkcmVzcygmbV9jb2RlQmxvY2st
Pm1fZXhlY3V0ZUNvdW50ZXIpKTsKKyAgICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMy
KFNpZ25lZCwgVHJ1c3RlZEltbTMyKGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrID8gMSA6
IDE1KSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZFeGVjdXRlQ291bnRl
cigpKSk7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywga2luZCA9PSBMb29wT3B0aW1p
emF0aW9uQ2hlY2sgPyBjdGlfb3B0aW1pemVfZnJvbV9sb29wIDogY3RpX29wdGltaXplX2Zyb21f
cmV0KTsKICAgICBpZiAoa2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2spCiAgICAgICAgIHN0
dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKG1fYnl0ZWNvZGVPZmZzZXQpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiA5NTEx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTYsNyArNDU2LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKAogICAgIGVsc2UKICAgICAgICAgYWRkMzIoSW1tMzIoMyksIGJ1Y2tldENv
dW50ZXJSZWdpc3Rlcik7CiAgICAgYW5kMzIoSW1tMzIoVmFsdWVQcm9maWxlOjpidWNrZXRJbmRl
eE1hc2spLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIpOwotICAgIG1vdmUoSW1tUHRyKHZhbHVlUHJv
ZmlsZS0+YnVja2V0cyksIHNjcmF0Y2gpOworICAgIG1vdmUoSW1tUHRyKHZhbHVlUHJvZmlsZS0+
bV9idWNrZXRzKSwgc2NyYXRjaCk7CiAgICAgc3RvcmVQdHIodmFsdWUsIEJhc2VJbmRleChzY3Jh
dGNoLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIsIFRpbWVzRWlnaHQpKTsKIH0KICNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk1MTE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4MjMsMjEgKzE4MjMsMzEgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1p
emVfZnJvbQogICAgIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxs
RnJhbWU7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygp
OwotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWlu
KCk7CiAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQz
MigpOwotICAgIAotICAgIEpTT2JqZWN0KiBlcnJvciA9IGNvZGVCbG9jay0+Y29tcGlsZU9wdGlt
aXplZChjYWxsRnJhbWUsIHNjb3BlQ2hhaW4pOwotICAgIGlmIChlcnJvcikKLSAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJXQVJOSU5HOiBvcHRpbWl6ZWQgY29tcGlsYXRpb24gZnJvbSBsb29wIGZh
aWxlZC5cbiIpOwotICAgIAotICAgIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkgPT0gY29k
ZUJsb2NrKSB7CisKKyAgICBpZiAoIWNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQo
KSkgeworICAgICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgewogI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBm
cm9tIGxvb3AgZmFpbGVkLlxuIiwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHByaW50ZigiRGVs
YXlpbmcgb3B0aW1pemF0aW9uIGZvciAlcCAoaW4gbG9vcCkgYmVjYXVzZSBvZiBpbnN1ZmZpY2ll
bnQgcHJvZmlsaW5nLlxuIiwgY29kZUJsb2NrKTsKICNlbmRpZgotCi0gICAgICAgIEFTU0VSVChj
b2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgICAg
IGNvZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOworICAgICAgICAK
KyAgICAgICAgSlNPYmplY3QqIGVycm9yID0gY29kZUJsb2NrLT5jb21waWxlT3B0aW1pemVkKGNh
bGxGcmFtZSwgc2NvcGVDaGFpbik7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZyb20gbG9vcCBm
YWlsZWQuXG4iKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCkgPT0gY29kZUJsb2NrKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAg
ICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9tIGxvb3AgZmFpbGVkLlxuIiwgY29kZUJsb2Nr
KTsKKyNlbmRpZgorICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5n
ZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgICAgICAgICAgY29kZUJs
b2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2NrID0g
Y29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwpAQCAtMTg2OCw2ICsxODc4LDE3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICAgICAKICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNP
cHRpbWl6ZWRSZXBsYWNlbWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFj
b2RlQmxvY2stPnNob3VsZE9wdGltaXplTm93KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQorICAgICAgICBwcmludGYoIkRlbGF5aW5nIG9wdGltaXphdGlvbiBmb3IgJXAgKGluIHJl
dHVybikgYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmlsaW5nLlxuIiwgY29kZUJsb2NrKTsK
KyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CiAKICAgICBKU09iamVjdCog
ZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWlu
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107398</attachid>
            <date>2011-09-14 14:50:48 -0700</date>
            <delta_ts>2011-09-14 15:00:54 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>smartwarmup_patch_3.diff</filename>
            <type>text/plain</type>
            <size>41809</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUxMjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAK
KzIwMTEtMDktMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBU
aWVyZWQgY29tcGlsYXRpb24gaGV1cmlzdGljcyBkbyBub3QgYWNjb3VudCBmb3IgdmFsdWUgcHJv
ZmlsZSBmdWxsbmVzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjgxMTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUucHJvOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0V2Vh
a1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcyk6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHJlZGljdGVkVHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OnByZWRpY3Rpb25Ub1N0cmluZyk6CisgICAgICAgICogYnl0
ZWNvZGUvUHJlZGljdGVkVHlwZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6OmNvbXB1dGVTdGF0aXN0aWNz
KToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24p
OgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1
ZVByb2ZpbGU6OlZhbHVlUHJvZmlsZSk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6Y2xh
c3NJbmZvKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpudW1iZXJPZlNhbXBsZXMpOgor
ICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6OnRvdGFsTnVtYmVyT2ZTYW1wbGVzKToKKyAgICAg
ICAgKEpTQzo6VmFsdWVQcm9maWxlOjppc0xpdmUpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2Zp
bGU6Om51bWJlck9mSW50MzJzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpudW1iZXJP
ZkRvdWJsZXMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om51bWJlck9mQm9vbGVhbnMp
OgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6OmR1bXApOgorICAgICAgICAoSlNDOjpnZXRW
YWx1ZVByb2ZpbGVCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3Ryb25nbHlQcmVk
aWN0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0
aE9TUik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omp1bXBGcm9tU3BlY3VsYXRp
dmVUb05vblNwZWN1bGF0aXZlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVN
ZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSk6Cisg
ICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVO
Q1RJT04pOgorCiAyMDExLTA5LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguICBUdXJuIG9mZiB0aWVyZWQgY29tcGlsYXRp
b24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NTEx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMzcsOCArMzcsMTAgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRl
Y29kZS9Db2RlQmxvY2suY3BwCiAgICAgYnl0ZWNvZGUvSnVtcFRhYmxlLmNwcAogICAgIGJ5dGVj
b2RlL09wY29kZS5jcHAKKyAgICBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAogICAgIGJ5dGVj
b2RlL1NhbXBsaW5nVG9vbC5jcHAKICAgICBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAK
KyAgICBieXRlY29kZS9WYWx1ZVByb2ZpbGUuY3BwCiAKICAgICBieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCiAgICAgYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5NTEx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC04OSwxMCArODksMTQgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wY29kZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJl
ZGljdGVkVHlwZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0
ZWRUeXBlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmNwcCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmggXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA5NTExNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTY2LDgg
KzY2LDEwIEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHAgXAogICAg
IGJ5dGVjb2RlL0p1bXBUYWJsZS5jcHAgXAogICAgIGJ5dGVjb2RlL09wY29kZS5jcHAgXAorICAg
IGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwIFwKICAgICBieXRlY29kZS9TYW1wbGluZ1Rvb2wu
Y3BwIFwKICAgICBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgXAorICAgIGJ5dGVjb2Rl
L1ZhbHVlUHJvZmlsZS5jcHAgXAogICAgIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAgXAogICAgIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIFwKICAgICBoZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gOTUxMTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQ1OCw2ICsxNDU4LDE0IEBA
CiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5
dGVjb2RlXFByZWRpY3RlZFR5cGUuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxQcmVkaWN0ZWRUeXBlLmgiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXFNh
bXBsaW5nVG9vbC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTQ3Myw2ICsxNDgxLDE0IEBA
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxTdHJ1Y3R1cmVTdHViSW5mby5oIgog
CQkJCT4KIAkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRl
Y29kZVxWYWx1ZVByb2ZpbGUuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxWYWx1ZVByb2ZpbGUuaCIKKwkJCQk+CisJCQk8
L0ZpbGU+CiAJCTwvRmlsdGVyPgogCQk8RmlsdGVyCiAJCQlOYW1lPSJkZWJ1Z2dlciIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5NTExNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBACiAJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5
NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODJFNTMxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEODJFODUxNDFG
M0ZFMzAwMTc5Qzk0IC8qIEJvdW5kc0NoZWNrZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4MjE0MUYzRkM5MDAxNzlDOTQgLyog
Qm91bmRzQ2hlY2tlZFBvaW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJlZGljdGVkVHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4
MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi87IH07CisJCTBGRDgy
RTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8q
IFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBP
U0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2OTMxMkE2RjlFMTAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2Nh
dG9yUG9zaXguY3BwICovOyB9OwogCQkxNDA1NjZDNDEwN0VDMjU1MDA1REJDOEQgLyogSlNBUElW
YWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAq
LzsgfTsKQEAgLTgxMSw2ICs4MTIsNyBAQAogCQkwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyog
REZHT1NSRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRW50
cnkuaDsgcGF0aCA9IGRmZy9ERkdPU1JFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkQ4MkU4MjE0MUYzRkM5MDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm91bmRzQ2hlY2tlZFBvaW50ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8q
IFByZWRpY3RlZFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHJlZGljdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRThF
MTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBv
c2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9y
UG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5
MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzEz
LDYgKzIzMTUsNyBAQAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDgyRThFMTQy
MDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovLAogCQkJCTBGRDgyRTg0MTQxRjNG
REEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLywKIAkJCQkwRkQ4MkU0RjE0MURBRUEx
MDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovLAogCQkJCTBGRDgyRTUwMTQxREFFQTEwMDE3
OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oICovLApAQCAtMzA5MCw2ICszMDkzLDcgQEAKIAkJ
CWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1
ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0
IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYw
ODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTYzQjJD
MTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDk1MTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjgsNiArMTQyOCw3IEBAIENvZGVCbG9jazo6Q29kZUJs
b2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fc291cmNlT2Zmc2V0KHNvdXJjZU9mZnNl
dCkKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltVGFiKQogICAgICwgbV9hbHRlcm5hdGl2ZShhbHRl
cm5hdGl2ZSkKKyAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCiB7CiAgICAgQVNT
RVJUKG1fc291cmNlKTsKICAgICAKQEAgLTE0NDEsMTcgKzE0NDIsNyBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogewog
I2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCi0gICAgZnByaW50ZihzdGRlcnIsICJW
YWx1ZVByb2ZpbGUgZm9yICVwOlxuIiwgdGhpcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bWJlck9mVmFsdWVQcm9maWxlcygpOyArK2kpIHsKLSAgICAgICAgVmFsdWVQcm9maWxl
KiBwcm9maWxlID0gdmFsdWVQcm9maWxlKGkpOwotICAgICAgICBpZiAocHJvZmlsZS0+Ynl0ZWNv
ZGVPZmZzZXQgPCAwKSB7Ci0gICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+Ynl0ZWNvZGVPZmZz
ZXQgPT0gLTEpOwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICBhcmcgPSAldTogIiwg
aSArIDEpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAg
YmMgPSAlZDogIiwgcHJvZmlsZS0+Ynl0ZWNvZGVPZmZzZXQpOwotICAgICAgICBwcm9maWxlLT5k
dW1wKHN0ZGVycik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKLSAgICB9CisgICAg
ZHVtcFZhbHVlUHJvZmlsZXMoKTsKICNlbmRpZgogICAgIAogI2lmIEVOQUJMRShKSVQpCkBAIC0x
NTkwLDE0ICsxNTgxLDE0IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXQKICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gdmFsdWVQcm9maWxlKHByb2ZpbGVJ
bmRleCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0czsgKytpbmRleCkgewotICAgICAgICAgICAg
aWYgKCFwcm9maWxlLT5idWNrZXRzW2luZGV4XSkgewotICAgICAgICAgICAgICAgIGlmICghIXBy
b2ZpbGUtPndlYWtCdWNrZXRzW2luZGV4XSkKKyAgICAgICAgICAgIGlmICghcHJvZmlsZS0+bV9i
dWNrZXRzW2luZGV4XSkgeworICAgICAgICAgICAgICAgIGlmICghIXByb2ZpbGUtPm1fd2Vha0J1
Y2tldHNbaW5kZXhdKQogICAgICAgICAgICAgICAgICAgICBoYW5kbGVXZWFrUmVmZXJlbmNlcyA9
IHRydWU7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICghSlNWYWx1ZTo6ZGVjb2RlKHByb2ZpbGUtPmJ1Y2tldHNb
aW5kZXhdKS5pc0NlbGwoKSkgewotICAgICAgICAgICAgICAgIHByb2ZpbGUtPndlYWtCdWNrZXRz
W2luZGV4XSA9IFZhbHVlUHJvZmlsZTo6V2Vha0J1Y2tldCgpOworICAgICAgICAgICAgaWYgKCFK
U1ZhbHVlOjpkZWNvZGUocHJvZmlsZS0+bV9idWNrZXRzW2luZGV4XSkuaXNDZWxsKCkpIHsKKyAg
ICAgICAgICAgICAgICBwcm9maWxlLT5tX3dlYWtCdWNrZXRzW2luZGV4XSA9IFZhbHVlUHJvZmls
ZTo6V2Vha0J1Y2tldCgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC0xNjE3LDggKzE2MDgsOCBAQCB2b2lkIENvZGVCbG9jazo6dmlz
aXRXZWFrUmVmZXJlbmNlcyhTbG90CiAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IHZh
bHVlUHJvZmlsZShwcm9maWxlSW5kZXgpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IDA7IGluZGV4IDwgVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHM7ICsraW5k
ZXgpIHsKLSAgICAgICAgICAgIGlmICghIXByb2ZpbGUtPmJ1Y2tldHNbaW5kZXhdKSB7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShwcm9maWxlLT5idWNr
ZXRzW2luZGV4XSk7CisgICAgICAgICAgICBpZiAoISFwcm9maWxlLT5tX2J1Y2tldHNbaW5kZXhd
KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShwcm9m
aWxlLT5tX2J1Y2tldHNbaW5kZXhdKTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzQ2Vs
bCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKQEAg
LTE2MjYsMTEgKzE2MTcsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha1JlZmVyZW5jZXMo
U2xvdAogICAgICAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
cHJvZmlsZS0+YnVja2V0c1tpbmRleF0gPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAg
ICAgICAgICAgICAgICBwcm9maWxlLT53ZWFrQnVja2V0c1tpbmRleF0gPSBjZWxsLT5zdHJ1Y3R1
cmUoKTsKKyAgICAgICAgICAgICAgICBwcm9maWxlLT5tX2J1Y2tldHNbaW5kZXhdID0gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcHJvZmlsZS0+bV93ZWFrQnVj
a2V0c1tpbmRleF0gPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgVmFsdWVQcm9maWxlOjpXZWFrQnVja2V0IHdlYWsgPSBwcm9maWxl
LT53ZWFrQnVja2V0c1tpbmRleF07CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGU6OldlYWtCdWNr
ZXQgd2VhayA9IHByb2ZpbGUtPm1fd2Vha0J1Y2tldHNbaW5kZXhdOwogICAgICAgICAgICAgaWYg
KCF3ZWFrIHx8IHdlYWsuaXNDbGFzc0luZm8oKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIApAQCAtMTYzOCw3ICsxNjI5LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0
V2Vha1JlZmVyZW5jZXMoU2xvdAogICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKHdlYWsu
YXNTdHJ1Y3R1cmUoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIHByb2ZpbGUtPndlYWtCdWNrZXRzW2luZGV4XSA9IHdlYWsuYXNTdHJ1Y3R1
cmUoKS0+Y2xhc3NJbmZvKCk7CisgICAgICAgICAgICBwcm9maWxlLT5tX3dlYWtCdWNrZXRzW2lu
ZGV4XSA9IHdlYWsuYXNTdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCk7CiAgICAgICAgIH0KICAgICB9
CiAjZW5kaWYKQEAgLTE5NDYsNCArMTkzNyw3MiBAQCBib29sIEZ1bmN0aW9uQ29kZUJsb2NrOjpj
YW5Db21waWxlV2l0aERGCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
K2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCit7CisjaWYgRU5BQkxFKEpJVF9W
RVJCT1NFX09TUikKKyAgICBwcmludGYoIkNvbnNpZGVyaW5nIG9wdGltaXppbmcgJXAuLi5cbiIs
IHRoaXMpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQorICAg
IGR1bXBWYWx1ZVByb2ZpbGVzKCk7CisjZW5kaWYKKworICAgIGlmIChtX29wdGltaXphdGlvbkRl
bGF5Q291bnRlciA+PSA1KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA9IDA7CisgICAgdW5zaWduZWQgbnVt
YmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID0gMDsKKyAgICB1bnNpZ25lZCBudW1i
ZXJPZlNhbXBsZXNJblByb2ZpbGVzID0gMDsgLy8gSWYgdGhpcyBkaXZpZGVkIGJ5IFZhbHVlUHJv
ZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIGVxdWFscyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB0aGVu
IHZhbHVlIHByb2ZpbGVzIGFyZSBmdWxsLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytpKSB7CisgICAgICAgIFZhbHVlUHJvZmlsZSogcHJv
ZmlsZSA9IHZhbHVlUHJvZmlsZShpKTsKKyAgICAgICAgdW5zaWduZWQgbnVtU2FtcGxlcyA9IHBy
b2ZpbGUtPnRvdGFsTnVtYmVyT2ZTYW1wbGVzKCk7CisgICAgICAgIGlmIChudW1TYW1wbGVzID4g
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMpCisgICAgICAgICAgICBudW1TYW1wbGVzID0g
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHM7IC8vIFdlIGRvbid0IHdhbnQgcHJvZmlsZXMg
dGhhdCBhcmUgZXh0cmVtZWx5IGhvdCB0byBiZSBnaXZlbiBtb3JlIHdlaWdodC4KKyAgICAgICAg
bnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyArPSBudW1TYW1wbGVzOworICAgICAgICBpZiAocHJv
ZmlsZS0+bV9ieXRlY29kZU9mZnNldCA8IDApIHsKKyAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbigpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICAgICAgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMrKzsKKyAgICAgICAgaWYg
KHByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpIHx8IHByb2ZpbGUtPm1fcHJlZGljdGlvbiAhPSBQ
cmVkaWN0Tm9uZSkKKyAgICAgICAgICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9m
aWxlcysrOworICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKKyAg
ICB9CisKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiUHJvZmlsZSBo
b3RuZXNzOiAlbGYsICVsZlxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVl
UHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgKGRvdWJsZSludW1i
ZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBu
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CisjZW5kaWYKKworICAgIGlmICgoZG91YmxlKW51bWJl
ck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mTm9uQXJndW1lbnRWYWx1
ZVByb2ZpbGVzID49IDAuNzUKKyAgICAgICAgJiYgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblBy
b2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVlUHJv
ZmlsZXMoKSA+PSAwLjUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyKys7CisgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJPRklM
RSkKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcygpCit7CisgICAgZnByaW50Zihz
dGRlcnIsICJWYWx1ZVByb2ZpbGUgZm9yICVwOlxuIiwgdGhpcyk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mVmFsdWVQcm9maWxlcygpOyArK2kpIHsKKyAgICAgICAgVmFs
dWVQcm9maWxlKiBwcm9maWxlID0gdmFsdWVQcm9maWxlKGkpOworICAgICAgICBpZiAocHJvZmls
ZS0+bV9ieXRlY29kZU9mZnNldCA8IDApIHsKKyAgICAgICAgICAgIEFTU0VSVChwcm9maWxlLT5t
X2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAg
YXJnID0gJXU6ICIsIGkgKyAxKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiAgIGJjID0gJWQ6ICIsIHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQpOworICAg
ICAgICBpZiAoIXByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpICYmIHByb2ZpbGUtPm1fcHJlZGlj
dGlvbiA9PSBQcmVkaWN0Tm9uZSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI8ZW1w
dHk+XG4iKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHByb2Zp
bGUtPmR1bXAoc3RkZXJyKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgIH0K
K30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk1MTE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDQs
NiArMzQ0LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBj
b21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKikgPSAwOwogICAgICAg
ICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBjYW5Db21waWxlV2l0aERGRygpID0gMDsKKyAgICAgICAgYm9vbCBoYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChnZXRKSVRUeXBlKCkg
PT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSByZXBs
YWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPiBnZXRKSVRUeXBlKCk7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVw
bGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlw
ZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVw
bGFjZW1lbnQoKSA9PSB0aGlzKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQogI2Vsc2UKICAgICAgICAgSklUQ29kZTo6SklUVHlw
ZSBnZXRKSVRUeXBlKCkgeyByZXR1cm4gSklUQ29kZTo6QmFzZWxpbmVKSVQ7IH0KICNlbmRpZgpA
QCAtNDQ5LDcgKzQ2Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpbmRleCkgPj0gbV92YWx1ZVByb2ZpbGVzLnNpemUoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0g
dmFsdWVQcm9maWxlKGFyZ3VtZW50SW5kZXggLSAxKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQt
PmJ5dGVjb2RlT2Zmc2V0ICE9IC0xKQorICAgICAgICAgICAgaWYgKHJlc3VsdC0+bV9ieXRlY29k
ZU9mZnNldCAhPSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTY3NSw4ICs2ODksMTQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gLTEwMDsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgaW50MzJfdCBtX2V4ZWN1dGVDb3VudGVyOworI2lmIEVOQUJMRShWQUxV
RV9QUk9GSUxFUikKKyAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5vdygpOworI2VuZGlmCiAK
KyNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQorICAgICAgICB2b2lkIGR1bXBWYWx1
ZVByb2ZpbGVzKCk7CisjZW5kaWYKKyAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRo
ZXNlIHJlbWFpbmluZyBtZW1iZXJzIHByaXZhdGUuCiAKICAgICAgICAgaW50IG1fbnVtQ2FsbGVl
UmVnaXN0ZXJzOwpAQCAtNzYyLDYgKzc4Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAK
ICAgICAgICAgT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBtX3ByZWRpY3Rpb25zOwogCisgICAg
ICAgIGludDMyX3QgbV9leGVjdXRlQ291bnRlcjsKKyAgICAgICAgdWludDhfdCBtX29wdGltaXph
dGlvbkRlbGF5Q291bnRlcjsKKwogICAgICAgICBzdHJ1Y3QgUmFyZURhdGEgewogICAgICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgcHVibGljOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAkocmV2aXNp
b24gOTUxMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCiAKKyNpbmNsdWRlICJWYWx1ZVByb2ZpbGUu
aCIKICNpbmNsdWRlIDx3dGYvQm91bmRzQ2hlY2tlZFBvaW50ZXIuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC02MSw3ICs2Miw3IEBAIGNvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVk
aWN0ZWQKICAgICAgICAgcHRyLnN0cmNhdCgiQXJyYXkiKTsKICAgICAKICAgICBpZiAodmFsdWUg
JiBQcmVkaWN0U3RyaW5nKQotICAgICAgICBwdHIuc3RyY2F0KCJTdHIiKTsKKyAgICAgICAgcHRy
LnN0cmNhdCgiU3RyaW5nIik7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEludDMyKQog
ICAgICAgICBwdHIuc3RyY2F0KCJJbnQiKTsKQEAgLTgxLDQ2ICs4Miw2IEBAIGNvbnN0IGNoYXIq
IHByZWRpY3Rpb25Ub1N0cmluZyhQcmVkaWN0ZWQKIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKFZB
TFVFX1BST0ZJTEVSKQotUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihjb25zdCBWYWx1ZVBy
b2ZpbGUmIHByb2ZpbGUpCi17Ci0gICAgVmFsdWVQcm9maWxlOjpTdGF0aXN0aWNzIHN0YXRpc3Rp
Y3M7Ci0gICAgcHJvZmlsZS5jb21wdXRlU3RhdGlzdGljcyhzdGF0aXN0aWNzKTsKLSAgICAKLSAg
ICBpZiAoIXN0YXRpc3RpY3Muc2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwot
ICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmludDMycyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCi0g
ICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEludDMyOwotICAgIAot
ICAgIGlmIChzdGF0aXN0aWNzLmRvdWJsZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAg
ICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3REb3VibGU7Ci0gICAgCi0gICAg
aWYgKHN0YXRpc3RpY3MuaW50MzJzICsgc3RhdGlzdGljcy5kb3VibGVzID09IHN0YXRpc3RpY3Mu
c2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0TnVt
YmVyOwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmFycmF5cyA9PSBzdGF0aXN0aWNzLnNhbXBs
ZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEFycmF5Owot
ICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmZpbmFsT2JqZWN0cyA9PSBzdGF0aXN0aWNzLnNhbXBs
ZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEZpbmFsT2Jq
ZWN0OwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLnN0cmluZ3MgPT0gc3RhdGlzdGljcy5zYW1w
bGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RTdHJpbmc7
Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3Mub2JqZWN0cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMp
Ci0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdE9iamVjdE90aGVy
OwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmNlbGxzID09IHN0YXRpc3RpY3Muc2FtcGxlcykK
LSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Q2VsbE90aGVyOwot
ICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmJvb2xlYW5zID09IHN0YXRpc3RpY3Muc2FtcGxlcykK
LSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Qm9vbGVhbjsKLSAg
ICAKLSAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RPdGhlcjsKLX0KLSNl
bmRpZgotCiBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tVmFsdWUoSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCShyZXZpc2lvbiA5NTExNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDcgQEAKICNpZm5kZWYgUHJlZGljdGVkVHlwZV9oCiAjZGVmaW5lIFByZWRp
Y3RlZFR5cGVfaAogCi0jaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisjaW5jbHVkZSAiSlNWYWx1
ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzcsNyArMzcsNyBAQCB0eXBlZGVmIHVpbnQx
Nl90IFByZWRpY3RlZFR5cGU7CiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0Tm9u
ZSAgICAgICAgICA9IDB4MDAwMDsgLy8gV2UgZG9uJ3Qga25vdyBhbnl0aGluZyB5ZXQuCiBzdGF0
aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0RmluYWxPYmplY3QgICA9IDB4MDAwMTsgLy8g
SXQncyBkZWZpbml0ZWx5IGEgSlNGaW5hbE9iamVjdC4KIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRU
eXBlIFByZWRpY3RBcnJheSAgICAgICAgID0gMHgwMDAyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBK
U0FycmF5Lgotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdE9iamVjdE90aGVyICAg
PSAweDAwMTA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3Qgb3RoZXIgdGhhbiBKU0ZpbmFs
T2JqZWN0IG9yIEpTQXJyYXkuCitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0T2Jq
ZWN0T3RoZXIgICA9IDB4MDAxMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIG9iamVjdCBidXQgbm90
IEpTRmluYWxPYmplY3Qgb3IgSlNBcnJheS4KIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFBy
ZWRpY3RPYmplY3RVbmtub3duID0gMHgwMDIwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gb2JqZWN0
LCBidXQgd2UgZGlkbid0IHJlY29yZCBlbm91Z2ggaW5mb3JtYXRpbiB0byBrbm93IG1vcmUuCiBz
dGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0T2JqZWN0TWFzayAgICA9IDB4MDAzZjsg
Ly8gQml0bWFzayB1c2VkIGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBvZiBvYmplY3QgcHJlZGlj
dGlvbi4KIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RTdHJpbmcgICAgICAgID0g
MHgwMDQwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZy4KQEAgLTE1MCwxMCArMTUwLDYg
QEAgaW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oUHJlZAogICAgIHJldHVybiB0
eXBlIHwgKHNvdXJjZSA9PSBTdHJvbmdQcmVkaWN0aW9uID8gU3Ryb25nUHJlZGljdGlvblRhZyA6
IDApOwogfQogCi0jaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQotUHJlZGljdGVkVHlwZSBtYWtl
UHJlZGljdGlvbihjb25zdCBWYWx1ZVByb2ZpbGUmKTsKLSNlbmRpZgotCiBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb25Gcm9tVmFsdWUoSlNWYWx1ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCit2b2lkIFZhbHVlUHJvZmlsZTo6Y29tcHV0ZVN0YXRpc3Rp
Y3MoY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpCit7
CisgICAgc3RhdGlzdGljcy5jZWxscysrOworICAgIAorICAgIGlmIChjbGFzc0luZm8gPT0gJkpT
RmluYWxPYmplY3Q6OnNfaW5mbykgeworICAgICAgICBzdGF0aXN0aWNzLmZpbmFsT2JqZWN0cysr
OworICAgICAgICBzdGF0aXN0aWNzLm9iamVjdHMrKzsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBpZiAoY2xhc3NJbmZvID09ICZKU0FycmF5OjpzX2luZm8pIHsKKyAgICAgICAg
c3RhdGlzdGljcy5hcnJheXMrKzsKKyAgICAgICAgc3RhdGlzdGljcy5vYmplY3RzKys7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNTdHJpbmc6
OnNfaW5mbykgeworICAgICAgICBzdGF0aXN0aWNzLnN0cmluZ3MrKzsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoJkpTT2JqZWN0
OjpzX2luZm8pKQorICAgICAgICBzdGF0aXN0aWNzLm9iamVjdHMrKzsKK30KKwordm9pZCBWYWx1
ZVByb2ZpbGU6OmNvbXB1dGVTdGF0aXN0aWNzKFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIGNvbnN0
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7
CisgICAgICAgIGlmICghbV9idWNrZXRzW2ldKSB7CisgICAgICAgICAgICBXZWFrQnVja2V0IHdl
YWtCdWNrZXQgPSBtX3dlYWtCdWNrZXRzW2ldOworICAgICAgICAgICAgaWYgKCEhd2Vha0J1Y2tl
dCkgeworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3Muc2FtcGxlcysrOworICAgICAgICAgICAg
ICAgIGNvbXB1dGVTdGF0aXN0aWNzKHdlYWtCdWNrZXQuZ2V0Q2xhc3NJbmZvKCksIHN0YXRpc3Rp
Y3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGlzdGljcy5zYW1wbGVzKys7CisgICAg
ICAgIAorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKG1fYnVja2V0c1tp
XSk7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICBzdGF0aXN0aWNz
LmludDMycysrOworICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0RvdWJsZSgpKQorICAgICAgICAg
ICAgc3RhdGlzdGljcy5kb3VibGVzKys7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlLmlzQ2VsbCgp
KQorICAgICAgICAgICAgY29tcHV0ZVN0YXRpc3RpY3ModmFsdWUuYXNDZWxsKCktPnN0cnVjdHVy
ZSgpLT5jbGFzc0luZm8oKSwgc3RhdGlzdGljcyk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlLmlz
Qm9vbGVhbigpKQorICAgICAgICAgICAgc3RhdGlzdGljcy5ib29sZWFucysrOworICAgIH0KK30K
KworUHJlZGljdGVkVHlwZSBWYWx1ZVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigp
Cit7CisgICAgVmFsdWVQcm9maWxlOjpTdGF0aXN0aWNzIHN0YXRpc3RpY3M7CisgICAgY29tcHV0
ZVN0YXRpc3RpY3Moc3RhdGlzdGljcyk7CisgICAgCisgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0
aW9uOworICAgIAorICAgIGlmICghc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICBwcmVkaWN0
aW9uID0gUHJlZGljdE5vbmU7CisgICAgZWxzZSBpZiAoc3RhdGlzdGljcy5pbnQzMnMgPT0gc3Rh
dGlzdGljcy5zYW1wbGVzKQorICAgICAgICBwcmVkaWN0aW9uID0gU3Ryb25nUHJlZGljdGlvblRh
ZyB8IFByZWRpY3RJbnQzMjsKKyAgICBlbHNlIGlmIChzdGF0aXN0aWNzLmRvdWJsZXMgPT0gc3Rh
dGlzdGljcy5zYW1wbGVzKQorICAgICAgICBwcmVkaWN0aW9uID0gU3Ryb25nUHJlZGljdGlvblRh
ZyB8IFByZWRpY3REb3VibGU7CisgICAgZWxzZSBpZiAoc3RhdGlzdGljcy5pbnQzMnMgKyBzdGF0
aXN0aWNzLmRvdWJsZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICBwcmVkaWN0aW9u
ID0gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3ROdW1iZXI7CisgICAgZWxzZSBpZiAoc3Rh
dGlzdGljcy5hcnJheXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICBwcmVkaWN0aW9u
ID0gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RBcnJheTsKKyAgICBlbHNlIGlmIChzdGF0
aXN0aWNzLmZpbmFsT2JqZWN0cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHByZWRp
Y3Rpb24gPSBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEZpbmFsT2JqZWN0OworICAgIGVs
c2UgaWYgKHN0YXRpc3RpY3Muc3RyaW5ncyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAg
IHByZWRpY3Rpb24gPSBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdFN0cmluZzsKKyAgICBl
bHNlIGlmIChzdGF0aXN0aWNzLm9iamVjdHMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAg
ICBwcmVkaWN0aW9uID0gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RPYmplY3RPdGhlcjsK
KyAgICBlbHNlIGlmIChzdGF0aXN0aWNzLmNlbGxzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAg
ICAgICAgcHJlZGljdGlvbiA9IFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Q2VsbE90aGVy
OworICAgIGVsc2UgaWYgKHN0YXRpc3RpY3MuYm9vbGVhbnMgPT0gc3RhdGlzdGljcy5zYW1wbGVz
KQorICAgICAgICBwcmVkaWN0aW9uID0gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RCb29s
ZWFuOworICAgIGVsc2UKKyAgICAgICAgcHJlZGljdGlvbiA9IFN0cm9uZ1ByZWRpY3Rpb25UYWcg
fCBQcmVkaWN0T3RoZXI7CisKKyAgICBtX251bWJlck9mU2FtcGxlc0luUHJlZGljdGlvbiArPSBz
dGF0aXN0aWNzLnNhbXBsZXM7CisgICAgbWVyZ2VQcmVkaWN0aW9uKG1fcHJlZGljdGlvbiwgcHJl
ZGljdGlvbik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsg
KytpKSB7CisgICAgICAgIG1fYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OworICAgICAgICBtX3dlYWtCdWNrZXRzW2ldID0gV2Vha0J1Y2tldCgpOworICAgIH0KKyAgICBy
ZXR1cm4gbV9wcmVkaWN0aW9uOworfQorI2VuZGlmIC8vIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
KworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiA5NTExNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogI2RlZmluZSBWYWx1ZVByb2ZpbGVfaAogCiAjaW5jbHVkZSAiSlNBcnJheS5oIgor
I2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNs
dWRlICJXcml0ZUJhcnJpZXIuaCIKIApAQCAtNDQsMzMgKzQ1LDQ5IEBAIHN0cnVjdCBWYWx1ZVBy
b2ZpbGUgewogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYWpvcml0eSA9IGNlcnRhaW50eSAv
IDI7CiAgICAgCiAgICAgVmFsdWVQcm9maWxlKGludCBieXRlY29kZU9mZnNldCkKLSAgICAgICAg
OiBieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKKyAgICAgICAgOiBtX2J5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkK
KyAgICAgICAgLCBtX251bWJlck9mU2FtcGxlc0luUHJlZGljdGlvbigwKQogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKQotICAgICAg
ICAgICAgYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgICAgICAg
ICAgbV9idWNrZXRzW2ldID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgfQogICAg
IAogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKHVuc2lnbmVkIGJ1Y2tldCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIGlmICghIWJ1Y2tldHNbYnVja2V0XSkgewotICAgICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShidWNrZXRzW2J1Y2tldF0pOworICAgICAgICBp
ZiAoISFtX2J1Y2tldHNbYnVja2V0XSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShtX2J1Y2tldHNbYnVja2V0XSk7CiAgICAgICAgICAgICBpZiAoIXZhbHVl
LmlzQ2VsbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCk7CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHdlYWtCdWNrZXRzW2J1Y2tldF0uZ2V0Q2xhc3NJbmZvKCk7CisgICAgICAg
IHJldHVybiBtX3dlYWtCdWNrZXRzW2J1Y2tldF0uZ2V0Q2xhc3NJbmZvKCk7CiAgICAgfQogICAg
IAogICAgIHVuc2lnbmVkIG51bWJlck9mU2FtcGxlcygpIGNvbnN0CiAgICAgewogICAgICAgICB1
bnNpZ25lZCByZXN1bHQgPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZCdWNrZXRzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghIWJ1Y2tldHNbaV0gfHwgISF3
ZWFrQnVja2V0c1tpXSkKKyAgICAgICAgICAgIGlmICghIW1fYnVja2V0c1tpXSB8fCAhIW1fd2Vh
a0J1Y2tldHNbaV0pCiAgICAgICAgICAgICAgICAgcmVzdWx0Kys7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgdW5zaWduZWQgdG90YWxOdW1iZXJP
ZlNhbXBsZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mU2FtcGxlcygp
ICsgbV9udW1iZXJPZlNhbXBsZXNJblByZWRpY3Rpb247CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNMaXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZkJ1Y2tldHM7ICsraSkgeworICAgICAgICAgICAgaWYgKCEhbV9idWNrZXRzW2ldIHx8
ICEhbV93ZWFrQnVja2V0c1tpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAogICAgIHN0YXRpYyB1bnNp
Z25lZCBjb21wdXRlUHJvYmFiaWxpdHkodW5zaWduZWQgY291bnRzLCB1bnNpZ25lZCBudW1iZXJP
ZlNhbXBsZXMpCiAgICAgewogICAgICAgICBpZiAoIW51bWJlck9mU2FtcGxlcykKQEAgLTgyLDcg
Kzk5LDcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZSB7CiAgICAgewogICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNr
ZXRzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghIWJ1Y2tldHNbaV0gJiYgSlNWYWx1ZTo6ZGVj
b2RlKGJ1Y2tldHNbaV0pLmlzSW50MzIoKSkKKyAgICAgICAgICAgIGlmICghIW1fYnVja2V0c1tp
XSAmJiBKU1ZhbHVlOjpkZWNvZGUobV9idWNrZXRzW2ldKS5pc0ludDMyKCkpCiAgICAgICAgICAg
ICAgICAgcmVzdWx0Kys7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTky
LDcgKzEwOSw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgIHsKICAgICAgICAgdW5zaWdu
ZWQgcmVzdWx0ID0gMDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9m
QnVja2V0czsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoISFidWNrZXRzW2ldICYmIEpTVmFsdWU6
OmRlY29kZShidWNrZXRzW2ldKS5pc0RvdWJsZSgpKQorICAgICAgICAgICAgaWYgKCEhbV9idWNr
ZXRzW2ldICYmIEpTVmFsdWU6OmRlY29kZShtX2J1Y2tldHNbaV0pLmlzRG91YmxlKCkpCiAgICAg
ICAgICAgICAgICAgcmVzdWx0Kys7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
QEAgLTE1Myw3ICsxNzAsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICB7CiAgICAgICAg
IHVuc2lnbmVkIHJlc3VsdCA9IDA7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZkJ1Y2tldHM7ICsraSkgewotICAgICAgICAgICAgaWYgKCEhYnVja2V0c1tpXSAmJiBK
U1ZhbHVlOjpkZWNvZGUoYnVja2V0c1tpXSkuaXNCb29sZWFuKCkpCisgICAgICAgICAgICBpZiAo
ISFtX2J1Y2tldHNbaV0gJiYgSlNWYWx1ZTo6ZGVjb2RlKG1fYnVja2V0c1tpXSkuaXNCb29sZWFu
KCkpCiAgICAgICAgICAgICAgICAgcmVzdWx0Kys7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKQEAgLTIwOCw3ICsyMjUsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICB2
b2lkIGR1bXAoRklMRSogb3V0KQogICAgIHsKICAgICAgICAgZnByaW50ZihvdXQsCi0gICAgICAg
ICAgICAgICAgInNhbXBsZXMgPSAldSwgaW50MzIgPSAldSAoJXUpLCBkb3VibGUgPSAldSAoJXUp
LCBjZWxsID0gJXUgKCV1KSwgb2JqZWN0ID0gJXUgKCV1KSwgZmluYWwgb2JqZWN0ID0gJXUgKCV1
KSwgYXJyYXkgPSAldSAoJXUpLCBzdHJpbmcgPSAldSAoJXUpLCBib29sZWFuID0gJXUgKCV1KSIs
CisgICAgICAgICAgICAgICAgInNhbXBsZXMgPSAldSwgaW50MzIgPSAldSAoJXUpLCBkb3VibGUg
PSAldSAoJXUpLCBjZWxsID0gJXUgKCV1KSwgb2JqZWN0ID0gJXUgKCV1KSwgZmluYWwgb2JqZWN0
ID0gJXUgKCV1KSwgYXJyYXkgPSAldSAoJXUpLCBzdHJpbmcgPSAldSAoJXUpLCBib29sZWFuID0g
JXUgKCV1KSwgcHJlZGljdGlvbiA9ICVzLCBzYW1wbGVzIGluIHByZWRpY3Rpb24gPSAldSIsCiAg
ICAgICAgICAgICAgICAgbnVtYmVyT2ZTYW1wbGVzKCksCiAgICAgICAgICAgICAgICAgcHJvYmFi
aWxpdHlPZkludDMyKCksIG51bWJlck9mSW50MzJzKCksCiAgICAgICAgICAgICAgICAgcHJvYmFi
aWxpdHlPZkRvdWJsZSgpLCBudW1iZXJPZkRvdWJsZXMoKSwKQEAgLTIxNywxMCArMjM0LDExIEBA
IHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZGaW5h
bE9iamVjdCgpLCBudW1iZXJPZkZpbmFsT2JqZWN0cygpLAogICAgICAgICAgICAgICAgIHByb2Jh
YmlsaXR5T2ZBcnJheSgpLCBudW1iZXJPZkFycmF5cygpLAogICAgICAgICAgICAgICAgIHByb2Jh
YmlsaXR5T2ZTdHJpbmcoKSwgbnVtYmVyT2ZTdHJpbmdzKCksCi0gICAgICAgICAgICAgICAgcHJv
YmFiaWxpdHlPZkJvb2xlYW4oKSwgbnVtYmVyT2ZCb29sZWFucygpKTsKKyAgICAgICAgICAgICAg
ICBwcm9iYWJpbGl0eU9mQm9vbGVhbigpLCBudW1iZXJPZkJvb2xlYW5zKCksCisgICAgICAgICAg
ICAgICAgcHJlZGljdGlvblRvU3RyaW5nKG1fcHJlZGljdGlvbiksIG1fbnVtYmVyT2ZTYW1wbGVz
SW5QcmVkaWN0aW9uKTsKICAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkJ1Y2tldHM7ICsraSkgewotICAgICAgICAgICAg
aWYgKCEhYnVja2V0c1tpXSB8fCAhIXdlYWtCdWNrZXRzW2ldKSB7CisgICAgICAgICAgICBpZiAo
ISFtX2J1Y2tldHNbaV0gfHwgISFtX3dlYWtCdWNrZXRzW2ldKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGZpcnN0KSB7CiAgICAgICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiOiAiKTsKICAg
ICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKQEAgLTIyOCwxMCArMjQ2LDEwIEBAIHN0
cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiwg
Iik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghIWJ1Y2tl
dHNbaV0pCi0gICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICIlcyIsIEpTVmFsdWU6OmRlY29k
ZShidWNrZXRzW2ldKS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgIGlmICghIW1fYnVja2V0
c1tpXSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiVzIiwgSlNWYWx1ZTo6ZGVjb2Rl
KG1fYnVja2V0c1tpXSkuZGVzY3JpcHRpb24oKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICghIXdlYWtCdWNrZXRzW2ldKQorICAgICAgICAgICAgaWYgKCEhbV93ZWFrQnVja2V0c1tp
XSkKICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIkRlYWRDZWxsIik7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yNTcsNjEgKzI3NSwyMCBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICAv
LyBNZXRob2QgZm9yIGluY3JlbWVudGluZyBhbGwgcmVsZXZhbnQgc3RhdGlzdGljcyBmb3IgYSBD
bGFzc0luZm8sIGV4Y2VwdCBmb3IKICAgICAvLyBpbmNyZW1lbnRpbmcgdGhlIG51bWJlciBvZiBz
YW1wbGVzLCB3aGljaCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgogICAgIC8vIGRvaW5n
LgotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVTdGF0aXN0aWNzKGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvLCBTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKQotICAgIHsKLSAgICAgICAgc3RhdGlzdGlj
cy5jZWxscysrOwotICAgICAgICAKLSAgICAgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNGaW5hbE9i
amVjdDo6c19pbmZvKSB7Ci0gICAgICAgICAgICBzdGF0aXN0aWNzLmZpbmFsT2JqZWN0cysrOwot
ICAgICAgICAgICAgc3RhdGlzdGljcy5vYmplY3RzKys7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChjbGFzc0luZm8gPT0gJkpTQXJyYXk6OnNf
aW5mbykgewotICAgICAgICAgICAgc3RhdGlzdGljcy5hcnJheXMrKzsKLSAgICAgICAgICAgIHN0
YXRpc3RpY3Mub2JqZWN0cysrOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoY2xhc3NJbmZvID09ICZKU1N0cmluZzo6c19pbmZvKSB7Ci0gICAg
ICAgICAgICBzdGF0aXN0aWNzLnN0cmluZ3MrKzsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKCZKU09i
amVjdDo6c19pbmZvKSkKLSAgICAgICAgICAgIHN0YXRpc3RpY3Mub2JqZWN0cysrOwotICAgIH0K
KyAgICBzdGF0aWMgdm9pZCBjb21wdXRlU3RhdGlzdGljcyhjb25zdCBDbGFzc0luZm8qLCBTdGF0
aXN0aWNzJik7CiAKICAgICAvLyBPcHRpbWl6ZWQgbWV0aG9kIGZvciBnZXR0aW5nIGFsbCBjb3Vu
dHMgYXQgb25jZS4KLSAgICB2b2lkIGNvbXB1dGVTdGF0aXN0aWNzKFN0YXRpc3RpY3MmIHN0YXRp
c3RpY3MpIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZCdWNrZXRzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghYnVja2V0c1tpXSkgewotICAg
ICAgICAgICAgICAgIFdlYWtCdWNrZXQgd2Vha0J1Y2tldCA9IHdlYWtCdWNrZXRzW2ldOwotICAg
ICAgICAgICAgICAgIGlmICghIXdlYWtCdWNrZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3Rh
dGlzdGljcy5zYW1wbGVzKys7Ci0gICAgICAgICAgICAgICAgICAgIGNvbXB1dGVTdGF0aXN0aWNz
KHdlYWtCdWNrZXQuZ2V0Q2xhc3NJbmZvKCksIHN0YXRpc3RpY3MpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3RhdGlzdGljcy5zYW1wbGVzKys7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
YnVja2V0c1tpXSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICAg
ICAgICAgIHN0YXRpc3RpY3MuaW50MzJzKys7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5p
c0RvdWJsZSgpKQotICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuZG91YmxlcysrOwotICAgICAg
ICAgICAgZWxzZSBpZiAodmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICAgICAgY29tcHV0ZVN0
YXRpc3RpY3ModmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSwgc3RhdGlz
dGljcyk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKLSAgICAgICAg
ICAgICAgICBzdGF0aXN0aWNzLmJvb2xlYW5zKys7Ci0gICAgICAgIH0KLSAgICB9CisgICAgdm9p
ZCBjb21wdXRlU3RhdGlzdGljcyhTdGF0aXN0aWNzJikgY29uc3Q7CisgICAgCisgICAgLy8gVXBk
YXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0dXJucyB0aGUgbmV3IG9uZS4KKyAgICBQcmVkaWN0
ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOworICAgIAorICAgIGludCBtX2J5dGVj
b2RlT2Zmc2V0OyAvLyAtMSBmb3IgcHJvbG9ndWUKKyAgICAKKyAgICBQcmVkaWN0ZWRUeXBlIG1f
cHJlZGljdGlvbjsKKyAgICB1bnNpZ25lZCBtX251bWJlck9mU2FtcGxlc0luUHJlZGljdGlvbjsK
ICAgICAKLSAgICBpbnQgYnl0ZWNvZGVPZmZzZXQ7IC8vIC0xIGZvciBwcm9sb2d1ZQotICAgIEVu
Y29kZWRKU1ZhbHVlIGJ1Y2tldHNbbnVtYmVyT2ZCdWNrZXRzXTsKKyAgICBFbmNvZGVkSlNWYWx1
ZSBtX2J1Y2tldHNbbnVtYmVyT2ZCdWNrZXRzXTsKICAgICAKICAgICBjbGFzcyBXZWFrQnVja2V0
IHsKICAgICBwdWJsaWM6CkBAIC0zNzUsMTIgKzM1MiwxMiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxl
IHsKICAgICAgICAgdWludHB0cl90IG1fdmFsdWU7CiAgICAgfTsKICAgICAKLSAgICBXZWFrQnVj
a2V0IHdlYWtCdWNrZXRzW251bWJlck9mQnVja2V0c107IC8vIHRoaXMgaXMgbm90IGNvdmVyZWQg
YnkgYSB3cml0ZSBiYXJyaWVyIGJlY2F1c2UgaXQgaXMgb25seSBzZXQgZnJvbSBHQworICAgIFdl
YWtCdWNrZXQgbV93ZWFrQnVja2V0c1tudW1iZXJPZkJ1Y2tldHNdOyAvLyB0aGlzIGlzIG5vdCBj
b3ZlcmVkIGJ5IGEgd3JpdGUgYmFycmllciBiZWNhdXNlIGl0IGlzIG9ubHkgc2V0IGZyb20gR0MK
IH07CiAKIGlubGluZSBpbnQgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQoVmFsdWVQcm9m
aWxlKiB2YWx1ZVByb2ZpbGUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlUHJvZmlsZS0+Ynl0ZWNvZGVP
ZmZzZXQ7CisgICAgcmV0dXJuIHZhbHVlUHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldDsKIH0KICNl
bmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gOTUxMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDE0ICs0NzksOSBA
QCBwcml2YXRlOgogI2lmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKICAgICAgICAgVmFs
dWVQcm9maWxlKiBwcm9maWxlID0gbV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZUluZGV4KTsKICAgICAgICAgQVNTRVJUKHByb2ZpbGUpOworICAg
ICAgICBtX2dyYXBoW25vZGVJbmRleF0ucHJlZGljdChwcm9maWxlLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24oKSAmIH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CiAjaWYg
RU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmludGYoIkR5bmFtaWMgcHJvZmls
ZSBbJXUsICV1XTogIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4KTsKLSAgICAgICAgcHJvZmls
ZS0+ZHVtcChzdGRvdXQpOwotICAgICAgICBwcmludGYoIlxuIik7Ci0jZW5kaWYKLSAgICAgICAg
bV9ncmFwaFtub2RlSW5kZXhdLnByZWRpY3QobWFrZVByZWRpY3Rpb24oKnByb2ZpbGUpICYgflBy
ZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9uKTsKLSNpZiBFTkFCTEUoREZHX0RFQlVH
X1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiICAgIFByZWRpY3Rpb246ICVzXG4iLCBwcmVkaWN0
aW9uVG9TdHJpbmcobV9ncmFwaFtub2RlSW5kZXhdLmdldFByZWRpY3Rpb24oKSkpOworICAgICAg
ICBwcmludGYoIkR5bmFtaWMgWyV1LCAldV0gcHJlZGljdGlvbjogJXNcbiIsIG5vZGVJbmRleCwg
Ynl0ZWNvZGVJbmRleCwgcHJlZGljdGlvblRvU3RyaW5nKG1fZ3JhcGhbbm9kZUluZGV4XS5nZXRQ
cmVkaWN0aW9uKCkpKTsKICNlbmRpZgogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKG5vZGVJ
bmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNp
b24gOTUxMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjE4LDE2ICsyMTgsMTAgQEAgdm9pZCBHcmFwaDo6cHJlZGljdEFyZ3Vt
ZW50VHlwZXMoRXhlY1N0YQogICAgICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgCi0jaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBw
cmludGYoIkFyZ3VtZW50IHByb2ZpbGUgWyVsdV06ICIsIGFyZyk7Ci0gICAgICAgIHByb2ZpbGUt
PmR1bXAoc3Rkb3V0KTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotI2VuZGlmCi0gICAgICAgIAot
ICAgICAgICBtX3ByZWRpY3Rpb25zLnByZWRpY3RBcmd1bWVudChhcmcsIG1ha2VQcmVkaWN0aW9u
KCpwcm9maWxlKSAmIH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CisgICAg
ICAgIG1fcHJlZGljdGlvbnMucHJlZGljdEFyZ3VtZW50KGFyZywgcHJvZmlsZS0+Y29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKCkgJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24p
OwogICAgICAgICAKICNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50
ZigiICAgIFByZWRpY3Rpb246ICVzXG4iLCBwcmVkaWN0aW9uVG9TdHJpbmcobV9wcmVkaWN0aW9u
cy5nZXRBcmd1bWVudFByZWRpY3Rpb24oYXJnKSkpOworICAgICAgICBwcmludGYoIkFyZ3VtZW50
IFslbHVdIHByZWRpY3Rpb246ICVzXG4iLCBhcmcsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3ByZWRp
Y3Rpb25zLmdldEFyZ3VtZW50UHJlZGljdGlvbihhcmcpKSk7CiAjZW5kaWYKICAgICB9CiAjZWxz
ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJ
KHJldmlzaW9uIDk1MTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsMTEgQEAgdm9pZCBKSVRDb21w
aWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgIGRlYnVnQ2FsbChkZWJ1Z09wZXJhdGlv
blByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOwogI2VuZGlmCiAgICAgCisjaWYg
RU5BQkxFKERGR19TVUNDRVNTX1NUQVRTKQorICAgIHN0YXRpYyBTYW1wbGluZ0NvdW50ZXIgY291
bnRlcigiU3BlY3VsYXRpb25GYWlsdXJlIik7CisgICAgZW1pdENvdW50KGNvdW50ZXIpOworI2Vu
ZGlmCisKICAgICAvLyAyKSBQZXJmb3JtIHNwZWN1bGF0aW9uIHJlY292ZXJ5LiBUaGlzIG9ubHkg
Y29tZXMgaW50byBwbGF5IHdoZW4gYW4gb3BlcmF0aW9uCiAgICAgLy8gICAgc3RhcnRzIG11dGF0
aW5nIHN0YXRlIGJlZm9yZSB2ZXJpZnlpbmcgdGhlIHNwZWN1bGF0aW9uIGl0IGhhcyBhbHJlYWR5
IG1hZGUuCiAgICAgCkBAIC04NjIsNiArODY3LDExIEBAIHZvaWQgSklUQ29tcGlsZXI6Omp1bXBG
cm9tU3BlY3VsYXRpdmVUb04KICAgICBkZWJ1Z0NhbGwoZGVidWdPcGVyYXRpb25QcmludFNwZWN1
bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKERGR19TVUND
RVNTX1NUQVRTKQorICAgIHN0YXRpYyBTYW1wbGluZ0NvdW50ZXIgY291bnRlcigiU3BlY3VsYXRp
b25GYWlsdXJlIik7CisgICAgZW1pdENvdW50KGNvdW50ZXIpOworI2VuZGlmCisKICAgICAvLyBE
b2VzIHRoaXMgc3BlY3VsYXRpb24gY2hlY2sgcmVxdWlyZSBhbnkgYWRkaXRpb25hbCByZWNvdmVy
eSB0byBiZSBwZXJmb3JtZWQsCiAgICAgLy8gdG8gcmVzdG9yZSBhbnkgc3RhdGUgdGhhdCBoYXMg
YmVlbiBvdmVyd3JpdHRlbiBiZWZvcmUgd2UgZW50ZXIgYmFjayBpbiB0byB0aGUKICAgICAvLyBu
b24tc3BlY3VsYXRpdmUgcGF0aC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJl
dmlzaW9uIDk1MTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgSklUOjplbWl0T3B0aW1pemF0aW9uQ2hl
Y2soT3B0aW1pemEKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIEp1bXAgc2tpcE9wdGltaXplID0gYnJhbmNoQWRkMzIoU2lnbmVkLCBU
cnVzdGVkSW1tMzIoa2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2sgPyAxIDogMzApLCBBYnNv
bHV0ZUFkZHJlc3MoJm1fY29kZUJsb2NrLT5tX2V4ZWN1dGVDb3VudGVyKSk7CisgICAgSnVtcCBz
a2lwT3B0aW1pemUgPSBicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihraW5kID09IExv
b3BPcHRpbWl6YXRpb25DaGVjayA/IDEgOiAxNSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9j
ay0+YWRkcmVzc09mRXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrID8gY3RpX29wdGltaXplX2Zyb21f
bG9vcCA6IGN0aV9vcHRpbWl6ZV9mcm9tX3JldCk7CiAgICAgaWYgKGtpbmQgPT0gTG9vcE9wdGlt
aXphdGlvbkNoZWNrKQogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW0zMihtX2J5dGVj
b2RlT2Zmc2V0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1l
dGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZU1ldGhvZHMuaAkocmV2aXNpb24gOTUxMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDcgKzQ1Niw3IEBAIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgKICAgICBlbHNlCiAgICAgICAg
IGFkZDMyKEltbTMyKDMpLCBidWNrZXRDb3VudGVyUmVnaXN0ZXIpOwogICAgIGFuZDMyKEltbTMy
KFZhbHVlUHJvZmlsZTo6YnVja2V0SW5kZXhNYXNrKSwgYnVja2V0Q291bnRlclJlZ2lzdGVyKTsK
LSAgICBtb3ZlKEltbVB0cih2YWx1ZVByb2ZpbGUtPmJ1Y2tldHMpLCBzY3JhdGNoKTsKKyAgICBt
b3ZlKEltbVB0cih2YWx1ZVByb2ZpbGUtPm1fYnVja2V0cyksIHNjcmF0Y2gpOwogICAgIHN0b3Jl
UHRyKHZhbHVlLCBCYXNlSW5kZXgoc2NyYXRjaCwgYnVja2V0Q291bnRlclJlZ2lzdGVyLCBUaW1l
c0VpZ2h0KSk7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCShyZXZpc2lvbiA5NTExNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIzLDIxICsxODIzLDMxIEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICAgICAKICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
biA9IGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpOwogICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgg
PSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKLSAgICAKLSAgICBKU09iamVjdCogZXJyb3Ig
PSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKLSAg
ICBpZiAoZXJyb3IpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVk
IGNvbXBpbGF0aW9uIGZyb20gbG9vcCBmYWlsZWQuXG4iKTsKLSAgICAKLSAgICBpZiAoY29kZUJs
b2NrLT5yZXBsYWNlbWVudCgpID09IGNvZGVCbG9jaykgeworCisgICAgaWYgKCFjb2RlQmxvY2st
Pmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgaWYgKCFjb2RlQmxvY2stPnNo
b3VsZE9wdGltaXplTm93KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAg
ICBwcmludGYoIk9wdGltaXppbmcgJXAgZnJvbSBsb29wIGZhaWxlZC5cbiIsIGNvZGVCbG9jayk7
CisgICAgICAgICAgICBwcmludGYoIkRlbGF5aW5nIG9wdGltaXphdGlvbiBmb3IgJXAgKGluIGxv
b3ApIGJlY2F1c2Ugb2YgaW5zdWZmaWNpZW50IHByb2ZpbGluZy5cbiIsIGNvZGVCbG9jayk7CiAj
ZW5kaWYKLQotICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29k
ZTo6QmFzZWxpbmVKSVQpOwotICAgICAgICBjb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVT
b29uKCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUt
PnNjb3BlQ2hhaW4oKTsKKyAgICAgICAgCisgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGNvZGVC
bG9jay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJhbWUsIHNjb3BlQ2hhaW4pOworICAgICAgICBp
ZiAoZXJyb3IpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IG9wdGltaXpl
ZCBjb21waWxhdGlvbiBmcm9tIGxvb3AgZmFpbGVkLlxuIik7CisgICAgICAgIAorICAgICAgICBp
ZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpID09IGNvZGVCbG9jaykgeworI2lmIEVOQUJMRShK
SVRfVkVSQk9TRV9PU1IpCisgICAgICAgICAgICBwcmludGYoIk9wdGltaXppbmcgJXAgZnJvbSBs
b29wIGZhaWxlZC5cbiIsIGNvZGVCbG9jayk7CisjZW5kaWYKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5l
SklUKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBDb2RlQmxv
Y2sqIG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKQEAgLTE4
NjgsNiArMTg3OCwxNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9t
CiAgICAgCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAg
CisgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGlmICghY29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZU5vdygpKSB7
CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJpbnRmKCJEZWxheWluZyBv
cHRpbWl6YXRpb24gZm9yICVwIChpbiByZXR1cm4pIGJlY2F1c2Ugb2YgaW5zdWZmaWNpZW50IHBy
b2ZpbGluZy5cbiIsIGNvZGVCbG9jayk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpOwogCiAgICAgSlNPYmplY3QqIGVycm9yID0gY29kZUJsb2NrLT5jb21waWxlT3B0aW1p
emVkKGNhbGxGcmFtZSwgc2NvcGVDaGFpbik7Cg==
</data>
<flag name="review"
          id="104089"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107399</attachid>
            <date>2011-09-14 15:00:54 -0700</date>
            <delta_ts>2011-09-14 15:13:49 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>smartwarmup_patch_4.diff</filename>
            <type>text/plain</type>
            <size>42707</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUxMjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAK
KzIwMTEtMDktMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBU
aWVyZWQgY29tcGlsYXRpb24gaGV1cmlzdGljcyBkbyBub3QgYWNjb3VudCBmb3IgdmFsdWUgcHJv
ZmlsZSBmdWxsbmVzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjgxMTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRpZXJlZCBjb21waWxhdGlvbiBhdm9pZHMgaW52b2tpbmcgdGhlIERGRyBK
SVQgaWYgaXQgZmluZHMgdGhhdCB2YWx1ZQorICAgICAgICBwcm9maWxlcyBjb250YWluIGluc3Vm
ZmljaWVudCBpbmZvcm1hdGlvbi4gSW5zdGVhZCwgaXQgcHJvZHVjZXMgYQorICAgICAgICBwcmVk
aWN0aW9uIGZyb20gdGhlIGN1cnJlbnQgdmFsdWUgcHJvZmlsZSwgYW5kIHRoZW4gY2xlYXJzIHRo
ZSB2YWx1ZQorICAgICAgICBwcm9maWxlLiBUaGlzIGFsbG93cyB0aGUgdmFsdWUgcHJvZmlsZSB0
byBoZWF0IHVwIGZyb20gc2NyYXRjaCBmb3IKKyAgICAgICAgc29tZSBudW1iZXIgb2YgYWRkaXRp
b25hbCBleGVjdXRpb25zLiBUaGUgbmV3IHByb2ZpbGVzIHdpbGwgdGhlbiBiZQorICAgICAgICBt
ZXJnZWQgd2l0aCB0aGUgcHJldmlvdXMgcHJlZGljdGlvbi4gT25jZSB0aGUgYW1vdW50IG9mIGlu
Zm9ybWF0aW9uCisgICAgICAgIGluIHByZWRpY3Rpb25zIGlzIGVub3VnaCBhY2NvcmRpbmcgdG8g
aGV1cmlzdGljcyBpbiBDb2RlQmxvY2suY3BwLAorICAgICAgICBERkcgb3B0aW1pemF0aW9uIGlz
IGFsbG93ZWQgdG8gcHJvY2VlZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUucHJvOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6fkNvZGVC
bG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpk
dW1wVmFsdWVQcm9maWxlcyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAg
ICAgICogYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OnByZWRpY3Rp
b25Ub1N0cmluZyk6CisgICAgICAgICogYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpWYWx1
ZVByb2ZpbGU6OmNvbXB1dGVTdGF0aXN0aWNzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxl
Ojpjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJv
ZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6OlZhbHVlUHJvZmlsZSk6CisgICAg
ICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6Y2xhc3NJbmZvKToKKyAgICAgICAgKEpTQzo6VmFsdWVQ
cm9maWxlOjpudW1iZXJPZlNhbXBsZXMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6OnRv
dGFsTnVtYmVyT2ZTYW1wbGVzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjppc0xpdmUp
OgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om51bWJlck9mSW50MzJzKToKKyAgICAgICAg
KEpTQzo6VmFsdWVQcm9maWxlOjpudW1iZXJPZkRvdWJsZXMpOgorICAgICAgICAoSlNDOjpWYWx1
ZVByb2ZpbGU6Om51bWJlck9mQm9vbGVhbnMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6
OmR1bXApOgorICAgICAgICAoSlNDOjpnZXRWYWx1ZVByb2ZpbGVCeXRlY29kZU9mZnNldCk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6c3Ryb25nbHlQcmVkaWN0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyk6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUik6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6Omp1bXBGcm9tU3BlY3VsYXRpdmVUb05vblNwZWN1bGF0aXZlKToKKyAgICAgICAg
KiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2sp
OgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAg
ICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorCiAyMDExLTA5LTE0ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXgu
ICBUdXJuIG9mZiB0aWVyZWQgY29tcGlsYXRpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NTExNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsMTAgQEAgU0VUKEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9Db2RlQmxvY2suY3BwCiAgICAgYnl0ZWNv
ZGUvSnVtcFRhYmxlLmNwcAogICAgIGJ5dGVjb2RlL09wY29kZS5jcHAKKyAgICBieXRlY29kZS9Q
cmVkaWN0ZWRUeXBlLmNwcAogICAgIGJ5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAKICAgICBieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKKyAgICBieXRlY29kZS9WYWx1ZVByb2ZpbGUuY3Bw
CiAKICAgICBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCiAgICAgYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5NTExNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxMCArODksMTQgQEAgamF2
YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0p1bXBUYWJsZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAgXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU2FtcGxpbmdUb29sLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViSW5mby5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVl
UHJvZmlsZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xh
YmVsLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShy
ZXZpc2lvbiA5NTExNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5w
cm8JKHdvcmtpbmcgY29weSkKQEAgLTY2LDggKzY2LDEwIEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5
dGVjb2RlL0NvZGVCbG9jay5jcHAgXAogICAgIGJ5dGVjb2RlL0p1bXBUYWJsZS5jcHAgXAogICAg
IGJ5dGVjb2RlL09wY29kZS5jcHAgXAorICAgIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwIFwK
ICAgICBieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwIFwKICAgICBieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHAgXAorICAgIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5jcHAgXAogICAgIGJ5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgXAogICAgIGJ5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwIFwKICAgICBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
agkocmV2aXNpb24gOTUxMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTQ1OCw2ICsxNDU4LDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXFByZWRpY3RlZFR5cGUuY3BwIgorCQkJ
CT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29k
ZVxQcmVkaWN0ZWRUeXBlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXFNhbXBsaW5nVG9vbC5jcHAiCiAJCQkJPgogCQkJPC9G
aWxlPgpAQCAtMTQ3Myw2ICsxNDgxLDE0IEBACiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRl
Y29kZVxTdHJ1Y3R1cmVTdHViSW5mby5oIgogCQkJCT4KIAkJCTwvRmlsZT4KKwkJCTxGaWxlCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxWYWx1ZVByb2ZpbGUuY3BwIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxW
YWx1ZVByb2ZpbGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CiAJCTwvRmlsdGVyPgogCQk8RmlsdGVy
CiAJCQlOYW1lPSJkZWJ1Z2dlciIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiA5NTExNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBA
CiAJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNTMxNDFEQUVERTAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZEODJFODUxNDFGM0ZFMzAwMTc5Qzk0IC8qIEJvdW5kc0NoZWNrZWRQ
b2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkQ4MkU4MjE0MUYzRkM5MDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4MkU4NjE0MUYz
RkYxMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGlj
dGVkVHlwZS5jcHAgKi87IH07CisJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVBy
b2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTE0
MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8q
IE9TQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2OTIx
MkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkxNDA1NjZD
NDEwN0VDMjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1
IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAgLTgxMSw2ICs4MTIsNyBAQAogCQkw
RkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRW50cnkuaDsgcGF0aCA9IGRmZy9ERkdPU1JFbnRyeS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU4MjE0MUYzRkM5MDAxNzlDOTQg
LyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQm91bmRzQ2hlY2tlZFBvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJlZGljdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2Zp
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFsdWVQcm9maWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAwNjRE
MTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9T
QWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjkyMTJBNkY5
RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzEzLDYgKzIzMTUsNyBAQAogCQk5NjlBMDc4RjBFRDFE
M0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTBGRDgyRThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUu
Y3BwICovLAogCQkJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNw
cCAqLywKIAkJCQkwRkQ4MkU0RjE0MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICov
LAogCQkJCTBGRDgyRTUwMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oICov
LApAQCAtMzA5MCw2ICszMDkzLDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwog
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTBGRDgy
RTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOTYzQjJDMTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk1MTE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjgsNiAr
MTQyOCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAs
IG1fc291cmNlT2Zmc2V0KHNvdXJjZU9mZnNldCkKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltVGFi
KQogICAgICwgbV9hbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSkKKyAgICAsIG1fb3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyKDApCiB7CiAgICAgQVNTRVJUKG1fc291cmNlKTsKICAgICAKQEAgLTE0NDEs
MTcgKzE0NDIsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiBD
b2RlQmxvY2s6On5Db2RlQmxvY2soKQogewogI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJ
TEUpCi0gICAgZnByaW50ZihzdGRlcnIsICJWYWx1ZVByb2ZpbGUgZm9yICVwOlxuIiwgdGhpcyk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mVmFsdWVQcm9maWxlcygpOyAr
K2kpIHsKLSAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gdmFsdWVQcm9maWxlKGkpOwot
ICAgICAgICBpZiAocHJvZmlsZS0+Ynl0ZWNvZGVPZmZzZXQgPCAwKSB7Ci0gICAgICAgICAgICBB
U1NFUlQocHJvZmlsZS0+Ynl0ZWNvZGVPZmZzZXQgPT0gLTEpOwotICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICIgICBhcmcgPSAldTogIiwgaSArIDEpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgYmMgPSAlZDogIiwgcHJvZmlsZS0+Ynl0ZWNvZGVP
ZmZzZXQpOwotICAgICAgICBwcm9maWxlLT5kdW1wKHN0ZGVycik7Ci0gICAgICAgIGZwcmludGYo
c3RkZXJyLCAiXG4iKTsKLSAgICB9CisgICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKICNlbmRpZgog
ICAgIAogI2lmIEVOQUJMRShKSVQpCkBAIC0xNTkwLDE0ICsxNTgxLDE0IEBAIHZvaWQgQ29kZUJs
b2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9m
aWxlID0gdmFsdWVQcm9maWxlKHByb2ZpbGVJbmRleCk7CiAgICAgICAgIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0
czsgKytpbmRleCkgewotICAgICAgICAgICAgaWYgKCFwcm9maWxlLT5idWNrZXRzW2luZGV4XSkg
ewotICAgICAgICAgICAgICAgIGlmICghIXByb2ZpbGUtPndlYWtCdWNrZXRzW2luZGV4XSkKKyAg
ICAgICAgICAgIGlmICghcHJvZmlsZS0+bV9idWNrZXRzW2luZGV4XSkgeworICAgICAgICAgICAg
ICAgIGlmICghIXByb2ZpbGUtPm1fd2Vha0J1Y2tldHNbaW5kZXhdKQogICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVXZWFrUmVmZXJlbmNlcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghSlNWYWx1
ZTo6ZGVjb2RlKHByb2ZpbGUtPmJ1Y2tldHNbaW5kZXhdKS5pc0NlbGwoKSkgewotICAgICAgICAg
ICAgICAgIHByb2ZpbGUtPndlYWtCdWNrZXRzW2luZGV4XSA9IFZhbHVlUHJvZmlsZTo6V2Vha0J1
Y2tldCgpOworICAgICAgICAgICAgaWYgKCFKU1ZhbHVlOjpkZWNvZGUocHJvZmlsZS0+bV9idWNr
ZXRzW2luZGV4XSkuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlLT5tX3dlYWtC
dWNrZXRzW2luZGV4XSA9IFZhbHVlUHJvZmlsZTo6V2Vha0J1Y2tldCgpOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xNjE3LDggKzE2
MDgsOCBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90CiAgICAgICAg
IFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IHZhbHVlUHJvZmlsZShwcm9maWxlSW5kZXgpOwogICAg
ICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgVmFsdWVQcm9m
aWxlOjpudW1iZXJPZkJ1Y2tldHM7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGlmICghIXByb2Zp
bGUtPmJ1Y2tldHNbaW5kZXhdKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShwcm9maWxlLT5idWNrZXRzW2luZGV4XSk7CisgICAgICAgICAgICBpZiAo
ISFwcm9maWxlLT5tX2J1Y2tldHNbaW5kZXhdKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShwcm9maWxlLT5tX2J1Y2tldHNbaW5kZXhdKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICAKQEAgLTE2MjYsMTEgKzE2MTcsMTEgQEAgdm9pZCBDb2Rl
QmxvY2s6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdAogICAgICAgICAgICAgICAgIGlmIChIZWFw
Ojppc01hcmtlZChjZWxsKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgcHJvZmlsZS0+YnVja2V0c1tpbmRleF0gPSBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBwcm9maWxlLT53ZWFrQnVj
a2V0c1tpbmRleF0gPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBwcm9maWxl
LT5tX2J1Y2tldHNbaW5kZXhdID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgICAg
ICAgICAgICAgcHJvZmlsZS0+bV93ZWFrQnVja2V0c1tpbmRleF0gPSBjZWxsLT5zdHJ1Y3R1cmUo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgVmFsdWVQcm9maWxl
OjpXZWFrQnVja2V0IHdlYWsgPSBwcm9maWxlLT53ZWFrQnVja2V0c1tpbmRleF07CisgICAgICAg
ICAgICBWYWx1ZVByb2ZpbGU6OldlYWtCdWNrZXQgd2VhayA9IHByb2ZpbGUtPm1fd2Vha0J1Y2tl
dHNbaW5kZXhdOwogICAgICAgICAgICAgaWYgKCF3ZWFrIHx8IHdlYWsuaXNDbGFzc0luZm8oKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIApAQCAtMTYzOCw3ICsxNjI5
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdAogICAgICAgICAg
ICAgaWYgKEhlYXA6OmlzTWFya2VkKHdlYWsuYXNTdHJ1Y3R1cmUoKSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHByb2ZpbGUtPndlYWtCdWNr
ZXRzW2luZGV4XSA9IHdlYWsuYXNTdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCk7CisgICAgICAgICAg
ICBwcm9maWxlLT5tX3dlYWtCdWNrZXRzW2luZGV4XSA9IHdlYWsuYXNTdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAgLTE5NDYsNCArMTkzNyw3MiBA
QCBib29sIEZ1bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGCiB9CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKK2Jvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6
ZU5vdygpCit7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIkNvbnNp
ZGVyaW5nIG9wdGltaXppbmcgJXAuLi5cbiIsIHRoaXMpOworI2VuZGlmCisKKyNpZiBFTkFCTEUo
VkVSQk9TRV9WQUxVRV9QUk9GSUxFKQorICAgIGR1bXBWYWx1ZVByb2ZpbGVzKCk7CisjZW5kaWYK
KworICAgIGlmIChtX29wdGltaXphdGlvbkRlbGF5Q291bnRlciA+PSA1KQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9m
aWxlcyA9IDA7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2Zp
bGVzID0gMDsKKyAgICB1bnNpZ25lZCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzID0gMDsgLy8g
SWYgdGhpcyBkaXZpZGVkIGJ5IFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIGVxdWFscyBu
dW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB0aGVuIHZhbHVlIHByb2ZpbGVzIGFyZSBmdWxsLgorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytpKSB7
CisgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IHZhbHVlUHJvZmlsZShpKTsKKyAgICAg
ICAgdW5zaWduZWQgbnVtU2FtcGxlcyA9IHByb2ZpbGUtPnRvdGFsTnVtYmVyT2ZTYW1wbGVzKCk7
CisgICAgICAgIGlmIChudW1TYW1wbGVzID4gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMp
CisgICAgICAgICAgICBudW1TYW1wbGVzID0gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHM7
IC8vIFdlIGRvbid0IHdhbnQgcHJvZmlsZXMgdGhhdCBhcmUgZXh0cmVtZWx5IGhvdCB0byBiZSBn
aXZlbiBtb3JlIHdlaWdodC4KKyAgICAgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyArPSBu
dW1TYW1wbGVzOworICAgICAgICBpZiAocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA8IDApIHsK
KyAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgbnVtYmVyT2ZOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMrKzsKKyAgICAgICAgaWYgKHByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpIHx8
IHByb2ZpbGUtPm1fcHJlZGljdGlvbiAhPSBQcmVkaWN0Tm9uZSkKKyAgICAgICAgICAgIG51bWJl
ck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcysrOworICAgICAgICBwcm9maWxlLT5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQorICAgIHByaW50ZigiUHJvZmlsZSBob3RuZXNzOiAlbGYsICVsZlxuIiwgKGRvdWJsZSlu
dW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50
VmFsdWVQcm9maWxlcywgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQ
cm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CisjZW5k
aWYKKworICAgIGlmICgoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxl
cyAvIG51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID49IDAuNzUKKyAgICAgICAgJiYg
KGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJP
ZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSAwLjUpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIAorICAgIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKys7CisgICAgb3B0
aW1pemVBZnRlcldhcm1VcCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCisjaWYg
RU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKK3ZvaWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQ
cm9maWxlcygpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJWYWx1ZVByb2ZpbGUgZm9yICVwOlxu
IiwgdGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mVmFsdWVQcm9m
aWxlcygpOyArK2kpIHsKKyAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gdmFsdWVQcm9m
aWxlKGkpOworICAgICAgICBpZiAocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA8IDApIHsKKyAg
ICAgICAgICAgIEFTU0VSVChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgYXJnID0gJXU6ICIsIGkgKyAxKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIGJjID0gJWQ6ICIsIHByb2Zp
bGUtPm1fYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBpZiAoIXByb2ZpbGUtPm51bWJlck9mU2Ft
cGxlcygpICYmIHByb2ZpbGUtPm1fcHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSkgeworICAgICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICI8ZW1wdHk+XG4iKTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisgICAgICAgIHByb2ZpbGUtPmR1bXAoc3RkZXJyKTsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJcbiIpOworICAgIH0KK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDk1MTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDQsNiArMzQ0LDIwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNj
b3BlQ2hhaW5Ob2RlKikgPSAwOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1l
bnQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpID0gMDsK
KyAgICAgICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAg
ICAgICAgICAgYm9vbCByZXN1bHQgPSByZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPiBnZXRK
SVRUeXBlKCk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAgICAgaWYgKHJlc3VsdCkK
KyAgICAgICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJ
VENvZGU6OkRGR0pJVCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQocmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSA9PSB0aGlzKTsKKyAgICAgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQogI2Vs
c2UKICAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkgeyByZXR1cm4gSklUQ29k
ZTo6QmFzZWxpbmVKSVQ7IH0KICNlbmRpZgpAQCAtNDQ5LDcgKzQ2Myw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPj0gbV92
YWx1ZVByb2ZpbGVzLnNpemUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
ICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gdmFsdWVQcm9maWxlKGFyZ3VtZW50SW5kZXggLSAx
KTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQtPmJ5dGVjb2RlT2Zmc2V0ICE9IC0xKQorICAgICAg
ICAgICAgaWYgKHJlc3VsdC0+bV9ieXRlY29kZU9mZnNldCAhPSAtMSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KQEAgLTY3
NSw4ICs2ODksMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2V4ZWN1dGVDb3Vu
dGVyID0gLTEwMDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW50MzJfdCBtX2V4ZWN1
dGVDb3VudGVyOworICAgICAgICAvLyBUaGUgYW1vdW50IGJ5IHdoaWNoIHRoZSBKSVQgd2lsbCBp
bmNyZW1lbnQgbV9leGVjdXRlQ291bnRlci4KKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGV4ZWN1dGVDb3VudGVySW5jcmVtZW50Rm9yTG9vcCA9IDE7CisgICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvclJldHVybiA9IDE1OworICAgICAg
ICAKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgICAgIGJvb2wgc2hvdWxkT3B0aW1p
emVOb3coKTsKKyNlbmRpZgogCisjaWYgRU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKKyAg
ICAgICAgdm9pZCBkdW1wVmFsdWVQcm9maWxlcygpOworI2VuZGlmCisgICAgICAgIAogICAgICAg
ICAvLyBGSVhNRTogTWFrZSB0aGVzZSByZW1haW5pbmcgbWVtYmVycyBwcml2YXRlLgogCiAgICAg
ICAgIGludCBtX251bUNhbGxlZVJlZ2lzdGVyczsKQEAgLTc2Miw2ICs3ODYsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIE93blB0cjxQcmVkaWN0aW9uVHJhY2tlcj4gbV9w
cmVkaWN0aW9uczsKIAorICAgICAgICBpbnQzMl90IG1fZXhlY3V0ZUNvdW50ZXI7CisgICAgICAg
IHVpbnQ4X3QgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXI7CisKICAgICAgICAgc3RydWN0IFJh
cmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgICAgIHB1
YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGlj
dGVkVHlwZS5jcHAJKHJldmlzaW9uIDk1MTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgogCisjaW5j
bHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSA8d3RmL0JvdW5kc0NoZWNrZWRQb2ludGVy
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNjEsNyArNjIsNyBAQCBjb25zdCBjaGFyKiBwcmVk
aWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkCiAgICAgICAgIHB0ci5zdHJjYXQoIkFycmF5Iik7CiAg
ICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdFN0cmluZykKLSAgICAgICAgcHRyLnN0cmNhdCgi
U3RyIik7CisgICAgICAgIHB0ci5zdHJjYXQoIlN0cmluZyIpOwogICAgIAogICAgIGlmICh2YWx1
ZSAmIFByZWRpY3RJbnQzMikKICAgICAgICAgcHRyLnN0cmNhdCgiSW50Iik7CkBAIC04MSw0NiAr
ODIsNiBAQCBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkCiB9CiAjZW5k
aWYKIAotI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLVByZWRpY3RlZFR5cGUgbWFrZVByZWRp
Y3Rpb24oY29uc3QgVmFsdWVQcm9maWxlJiBwcm9maWxlKQotewotICAgIFZhbHVlUHJvZmlsZTo6
U3RhdGlzdGljcyBzdGF0aXN0aWNzOwotICAgIHByb2ZpbGUuY29tcHV0ZVN0YXRpc3RpY3Moc3Rh
dGlzdGljcyk7Ci0gICAgCi0gICAgaWYgKCFzdGF0aXN0aWNzLnNhbXBsZXMpCi0gICAgICAgIHJl
dHVybiBQcmVkaWN0Tm9uZTsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5pbnQzMnMgPT0gc3Rh
dGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFBy
ZWRpY3RJbnQzMjsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5kb3VibGVzID09IHN0YXRpc3Rp
Y3Muc2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0
RG91YmxlOwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmludDMycyArIHN0YXRpc3RpY3MuZG91
YmxlcyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0
aW9uVGFnIHwgUHJlZGljdE51bWJlcjsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5hcnJheXMg
PT0gc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRh
ZyB8IFByZWRpY3RBcnJheTsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5maW5hbE9iamVjdHMg
PT0gc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRh
ZyB8IFByZWRpY3RGaW5hbE9iamVjdDsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5zdHJpbmdz
ID09IHN0YXRpc3RpY3Muc2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25U
YWcgfCBQcmVkaWN0U3RyaW5nOwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLm9iamVjdHMgPT0g
c3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8
IFByZWRpY3RPYmplY3RPdGhlcjsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5jZWxscyA9PSBz
dGF0aXN0aWNzLnNhbXBsZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwg
UHJlZGljdENlbGxPdGhlcjsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5ib29sZWFucyA9PSBz
dGF0aXN0aWNzLnNhbXBsZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwg
UHJlZGljdEJvb2xlYW47Ci0gICAgCi0gICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQ
cmVkaWN0T3RoZXI7Ci19Ci0jZW5kaWYKLQogUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbVZh
bHVlKEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkocmV2aXNp
b24gOTUxMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWZuZGVmIFByZWRpY3RlZFR5
cGVfaAogI2RlZmluZSBQcmVkaWN0ZWRUeXBlX2gKIAotI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5o
IgorI2luY2x1ZGUgIkpTVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM3LDcgKzM3
LDcgQEAgdHlwZWRlZiB1aW50MTZfdCBQcmVkaWN0ZWRUeXBlOwogc3RhdGljIGNvbnN0IFByZWRp
Y3RlZFR5cGUgUHJlZGljdE5vbmUgICAgICAgICAgPSAweDAwMDA7IC8vIFdlIGRvbid0IGtub3cg
YW55dGhpbmcgeWV0Lgogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEZpbmFsT2Jq
ZWN0ICAgPSAweDAwMDE7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTRmluYWxPYmplY3QuCiBzdGF0
aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0QXJyYXkgICAgICAgICA9IDB4MDAwMjsgLy8g
SXQncyBkZWZpbml0ZWx5IGEgSlNBcnJheS4KLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFBy
ZWRpY3RPYmplY3RPdGhlciAgID0gMHgwMDEwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gb2JqZWN0
IG90aGVyIHRoYW4gSlNGaW5hbE9iamVjdCBvciBKU0FycmF5Lgorc3RhdGljIGNvbnN0IFByZWRp
Y3RlZFR5cGUgUHJlZGljdE9iamVjdE90aGVyICAgPSAweDAwMTA7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBvYmplY3QgYnV0IG5vdCBKU0ZpbmFsT2JqZWN0IG9yIEpTQXJyYXkuCiBzdGF0aWMgY29u
c3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0T2JqZWN0VW5rbm93biA9IDB4MDAyMDsgLy8gSXQncyBk
ZWZpbml0ZWx5IGFuIG9iamVjdCwgYnV0IHdlIGRpZG4ndCByZWNvcmQgZW5vdWdoIGluZm9ybWF0
aW4gdG8ga25vdyBtb3JlLgogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdE9iamVj
dE1hc2sgICAgPSAweDAwM2Y7IC8vIEJpdG1hc2sgdXNlZCBmb3IgdGVzdGluZyBmb3IgYW55IGtp
bmQgb2Ygb2JqZWN0IHByZWRpY3Rpb24uCiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVk
aWN0U3RyaW5nICAgICAgICA9IDB4MDA0MDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcu
CkBAIC0xNTAsMTAgKzE1MCw2IEBAIGlubGluZSBQcmVkaWN0ZWRUeXBlIG1ha2VQcmVkaWN0aW9u
KFByZWQKICAgICByZXR1cm4gdHlwZSB8IChzb3VyY2UgPT0gU3Ryb25nUHJlZGljdGlvbiA/IFN0
cm9uZ1ByZWRpY3Rpb25UYWcgOiAwKTsKIH0KIAotI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
LVByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oY29uc3QgVmFsdWVQcm9maWxlJik7Ci0jZW5k
aWYKLQogUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbVZhbHVlKEpTVmFsdWUpOwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVByb2ZpbGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQordm9pZCBWYWx1ZVByb2Zp
bGU6OmNvbXB1dGVTdGF0aXN0aWNzKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBTdGF0aXN0
aWNzJiBzdGF0aXN0aWNzKQoreworICAgIHN0YXRpc3RpY3MuY2VsbHMrKzsKKyAgICAKKyAgICBp
ZiAoY2xhc3NJbmZvID09ICZKU0ZpbmFsT2JqZWN0OjpzX2luZm8pIHsKKyAgICAgICAgc3RhdGlz
dGljcy5maW5hbE9iamVjdHMrKzsKKyAgICAgICAgc3RhdGlzdGljcy5vYmplY3RzKys7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNBcnJheTo6
c19pbmZvKSB7CisgICAgICAgIHN0YXRpc3RpY3MuYXJyYXlzKys7CisgICAgICAgIHN0YXRpc3Rp
Y3Mub2JqZWN0cysrOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChjbGFz
c0luZm8gPT0gJkpTU3RyaW5nOjpzX2luZm8pIHsKKyAgICAgICAgc3RhdGlzdGljcy5zdHJpbmdz
Kys7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGNsYXNzSW5mby0+aXNT
dWJDbGFzc09mKCZKU09iamVjdDo6c19pbmZvKSkKKyAgICAgICAgc3RhdGlzdGljcy5vYmplY3Rz
Kys7Cit9CisKK3ZvaWQgVmFsdWVQcm9maWxlOjpjb21wdXRlU3RhdGlzdGljcyhTdGF0aXN0aWNz
JiBzdGF0aXN0aWNzKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1i
ZXJPZkJ1Y2tldHM7ICsraSkgeworICAgICAgICBpZiAoIW1fYnVja2V0c1tpXSkgeworICAgICAg
ICAgICAgV2Vha0J1Y2tldCB3ZWFrQnVja2V0ID0gbV93ZWFrQnVja2V0c1tpXTsKKyAgICAgICAg
ICAgIGlmICghIXdlYWtCdWNrZXQpIHsKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnNhbXBs
ZXMrKzsKKyAgICAgICAgICAgICAgICBjb21wdXRlU3RhdGlzdGljcyh3ZWFrQnVja2V0LmdldENs
YXNzSW5mbygpLCBzdGF0aXN0aWNzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpc3Rp
Y3Muc2FtcGxlcysrOworICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShtX2J1Y2tldHNbaV0pOworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAg
ICAgICAgICAgc3RhdGlzdGljcy5pbnQzMnMrKzsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNE
b3VibGUoKSkKKyAgICAgICAgICAgIHN0YXRpc3RpY3MuZG91YmxlcysrOworICAgICAgICBlbHNl
IGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIGNvbXB1dGVTdGF0aXN0aWNzKHZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCksIHN0YXRpc3RpY3MpOworICAgICAg
ICBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgICAgIHN0YXRpc3RpY3MuYm9v
bGVhbnMrKzsKKyAgICB9Cit9CisKK1ByZWRpY3RlZFR5cGUgVmFsdWVQcm9maWxlOjpjb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24oKQoreworICAgIFZhbHVlUHJvZmlsZTo6U3RhdGlzdGljcyBzdGF0
aXN0aWNzOworICAgIGNvbXB1dGVTdGF0aXN0aWNzKHN0YXRpc3RpY3MpOworICAgIAorICAgIFBy
ZWRpY3RlZFR5cGUgcHJlZGljdGlvbjsKKyAgICAKKyAgICBpZiAoIXN0YXRpc3RpY3Muc2FtcGxl
cykKKyAgICAgICAgcHJlZGljdGlvbiA9IFByZWRpY3ROb25lOworICAgIGVsc2UgaWYgKHN0YXRp
c3RpY3MuaW50MzJzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcHJlZGljdGlvbiA9
IFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0SW50MzI7CisgICAgZWxzZSBpZiAoc3RhdGlz
dGljcy5kb3VibGVzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcHJlZGljdGlvbiA9
IFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0RG91YmxlOworICAgIGVsc2UgaWYgKHN0YXRp
c3RpY3MuaW50MzJzICsgc3RhdGlzdGljcy5kb3VibGVzID09IHN0YXRpc3RpY3Muc2FtcGxlcykK
KyAgICAgICAgcHJlZGljdGlvbiA9IFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0TnVtYmVy
OworICAgIGVsc2UgaWYgKHN0YXRpc3RpY3MuYXJyYXlzID09IHN0YXRpc3RpY3Muc2FtcGxlcykK
KyAgICAgICAgcHJlZGljdGlvbiA9IFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0QXJyYXk7
CisgICAgZWxzZSBpZiAoc3RhdGlzdGljcy5maW5hbE9iamVjdHMgPT0gc3RhdGlzdGljcy5zYW1w
bGVzKQorICAgICAgICBwcmVkaWN0aW9uID0gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RG
aW5hbE9iamVjdDsKKyAgICBlbHNlIGlmIChzdGF0aXN0aWNzLnN0cmluZ3MgPT0gc3RhdGlzdGlj
cy5zYW1wbGVzKQorICAgICAgICBwcmVkaWN0aW9uID0gU3Ryb25nUHJlZGljdGlvblRhZyB8IFBy
ZWRpY3RTdHJpbmc7CisgICAgZWxzZSBpZiAoc3RhdGlzdGljcy5vYmplY3RzID09IHN0YXRpc3Rp
Y3Muc2FtcGxlcykKKyAgICAgICAgcHJlZGljdGlvbiA9IFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQ
cmVkaWN0T2JqZWN0T3RoZXI7CisgICAgZWxzZSBpZiAoc3RhdGlzdGljcy5jZWxscyA9PSBzdGF0
aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHByZWRpY3Rpb24gPSBTdHJvbmdQcmVkaWN0aW9uVGFn
IHwgUHJlZGljdENlbGxPdGhlcjsKKyAgICBlbHNlIGlmIChzdGF0aXN0aWNzLmJvb2xlYW5zID09
IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcHJlZGljdGlvbiA9IFN0cm9uZ1ByZWRpY3Rp
b25UYWcgfCBQcmVkaWN0Qm9vbGVhbjsKKyAgICBlbHNlCisgICAgICAgIHByZWRpY3Rpb24gPSBT
dHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdE90aGVyOworCisgICAgbV9udW1iZXJPZlNhbXBs
ZXNJblByZWRpY3Rpb24gKz0gc3RhdGlzdGljcy5zYW1wbGVzOworICAgIG1lcmdlUHJlZGljdGlv
bihtX3ByZWRpY3Rpb24sIHByZWRpY3Rpb24pOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1iZXJPZkJ1Y2tldHM7ICsraSkgeworICAgICAgICBtX2J1Y2tldHNbaV0gPSBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICAgICAgbV93ZWFrQnVja2V0c1tpXSA9IFdlYWtCdWNr
ZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKK30KKyNlbmRpZiAvLyBFTkFC
TEUoVkFMVUVfUFJPRklMRVIpCisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gOTUxMTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgVmFsdWVQcm9maWxlX2gKIAogI2lu
Y2x1ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAKQEAgLTQ0LDMzICs0NSw0
OSBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWFq
b3JpdHkgPSBjZXJ0YWludHkgLyAyOwogICAgIAogICAgIFZhbHVlUHJvZmlsZShpbnQgYnl0ZWNv
ZGVPZmZzZXQpCi0gICAgICAgIDogYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisgICAg
ICAgIDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBtX3ByZWRp
Y3Rpb24oUHJlZGljdE5vbmUpCisgICAgICAgICwgbV9udW1iZXJPZlNhbXBsZXNJblByZWRpY3Rp
b24oMCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkJ1
Y2tldHM7ICsraSkKLSAgICAgICAgICAgIGJ1Y2tldHNbaV0gPSBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKTsKKyAgICAgICAgICAgIG1fYnVja2V0c1tpXSA9IEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIH0KICAgICAKICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyh1bnNp
Z25lZCBidWNrZXQpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAoISFidWNrZXRzW2J1Y2tldF0p
IHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYnVja2V0c1ti
dWNrZXRdKTsKKyAgICAgICAgaWYgKCEhbV9idWNrZXRzW2J1Y2tldF0pIHsKKyAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUobV9idWNrZXRzW2J1Y2tldF0pOwogICAg
ICAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmNsYXNzSW5m
bygpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiB3ZWFrQnVja2V0c1tidWNrZXRdLmdldENs
YXNzSW5mbygpOworICAgICAgICByZXR1cm4gbV93ZWFrQnVja2V0c1tidWNrZXRdLmdldENsYXNz
SW5mbygpOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBudW1iZXJPZlNhbXBsZXMoKSBjb25z
dAogICAgIHsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
ISFidWNrZXRzW2ldIHx8ICEhd2Vha0J1Y2tldHNbaV0pCisgICAgICAgICAgICBpZiAoISFtX2J1
Y2tldHNbaV0gfHwgISFtX3dlYWtCdWNrZXRzW2ldKQogICAgICAgICAgICAgICAgIHJlc3VsdCsr
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIHVu
c2lnbmVkIHRvdGFsTnVtYmVyT2ZTYW1wbGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBudW1iZXJPZlNhbXBsZXMoKSArIG1fbnVtYmVyT2ZTYW1wbGVzSW5QcmVkaWN0aW9uOworICAg
IH0KKyAgICAKKyAgICBib29sIGlzTGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAgICAgICAgICAgIGlm
ICghIW1fYnVja2V0c1tpXSB8fCAhIW1fd2Vha0J1Y2tldHNbaV0pCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKICAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVByb2JhYmlsaXR5KHVuc2lnbmVkIGNvdW50
cywgdW5zaWduZWQgbnVtYmVyT2ZTYW1wbGVzKQogICAgIHsKICAgICAgICAgaWYgKCFudW1iZXJP
ZlNhbXBsZXMpCkBAIC04Miw3ICs5OSw3IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgIHsK
ICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoISFidWNrZXRz
W2ldICYmIEpTVmFsdWU6OmRlY29kZShidWNrZXRzW2ldKS5pc0ludDMyKCkpCisgICAgICAgICAg
ICBpZiAoISFtX2J1Y2tldHNbaV0gJiYgSlNWYWx1ZTo6ZGVjb2RlKG1fYnVja2V0c1tpXSkuaXNJ
bnQzMigpKQogICAgICAgICAgICAgICAgIHJlc3VsdCsrOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC05Miw3ICsxMDksNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAg
ICB7CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1iZXJPZkJ1Y2tldHM7ICsraSkgewotICAgICAgICAgICAgaWYgKCEhYnVj
a2V0c1tpXSAmJiBKU1ZhbHVlOjpkZWNvZGUoYnVja2V0c1tpXSkuaXNEb3VibGUoKSkKKyAgICAg
ICAgICAgIGlmICghIW1fYnVja2V0c1tpXSAmJiBKU1ZhbHVlOjpkZWNvZGUobV9idWNrZXRzW2ld
KS5pc0RvdWJsZSgpKQogICAgICAgICAgICAgICAgIHJlc3VsdCsrOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNTMsNyArMTcwLDcgQEAgc3RydWN0IFZhbHVlUHJvZmls
ZSB7CiAgICAgewogICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKLSAgICAgICAgICAgIGlm
ICghIWJ1Y2tldHNbaV0gJiYgSlNWYWx1ZTo6ZGVjb2RlKGJ1Y2tldHNbaV0pLmlzQm9vbGVhbigp
KQorICAgICAgICAgICAgaWYgKCEhbV9idWNrZXRzW2ldICYmIEpTVmFsdWU6OmRlY29kZShtX2J1
Y2tldHNbaV0pLmlzQm9vbGVhbigpKQogICAgICAgICAgICAgICAgIHJlc3VsdCsrOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMDgsNyArMjI1LDcgQEAgc3RydWN0IFZh
bHVlUHJvZmlsZSB7CiAgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkKICAgICB7CiAgICAgICAgIGZw
cmludGYob3V0LAotICAgICAgICAgICAgICAgICJzYW1wbGVzID0gJXUsIGludDMyID0gJXUgKCV1
KSwgZG91YmxlID0gJXUgKCV1KSwgY2VsbCA9ICV1ICgldSksIG9iamVjdCA9ICV1ICgldSksIGZp
bmFsIG9iamVjdCA9ICV1ICgldSksIGFycmF5ID0gJXUgKCV1KSwgc3RyaW5nID0gJXUgKCV1KSwg
Ym9vbGVhbiA9ICV1ICgldSkiLAorICAgICAgICAgICAgICAgICJzYW1wbGVzID0gJXUsIGludDMy
ID0gJXUgKCV1KSwgZG91YmxlID0gJXUgKCV1KSwgY2VsbCA9ICV1ICgldSksIG9iamVjdCA9ICV1
ICgldSksIGZpbmFsIG9iamVjdCA9ICV1ICgldSksIGFycmF5ID0gJXUgKCV1KSwgc3RyaW5nID0g
JXUgKCV1KSwgYm9vbGVhbiA9ICV1ICgldSksIHByZWRpY3Rpb24gPSAlcywgc2FtcGxlcyBpbiBw
cmVkaWN0aW9uID0gJXUiLAogICAgICAgICAgICAgICAgIG51bWJlck9mU2FtcGxlcygpLAogICAg
ICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZJbnQzMigpLCBudW1iZXJPZkludDMycygpLAogICAg
ICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZEb3VibGUoKSwgbnVtYmVyT2ZEb3VibGVzKCksCkBA
IC0yMTcsMTAgKzIzNCwxMSBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICAgICAgICAgICAg
ICBwcm9iYWJpbGl0eU9mRmluYWxPYmplY3QoKSwgbnVtYmVyT2ZGaW5hbE9iamVjdHMoKSwKICAg
ICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mQXJyYXkoKSwgbnVtYmVyT2ZBcnJheXMoKSwKICAg
ICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9mU3RyaW5nKCksIG51bWJlck9mU3RyaW5ncygpLAot
ICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZCb29sZWFuKCksIG51bWJlck9mQm9vbGVhbnMo
KSk7CisgICAgICAgICAgICAgICAgcHJvYmFiaWxpdHlPZkJvb2xlYW4oKSwgbnVtYmVyT2ZCb29s
ZWFucygpLAorICAgICAgICAgICAgICAgIHByZWRpY3Rpb25Ub1N0cmluZyhtX3ByZWRpY3Rpb24p
LCBtX251bWJlck9mU2FtcGxlc0luUHJlZGljdGlvbik7CiAgICAgICAgIGJvb2wgZmlyc3QgPSB0
cnVlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyAr
K2kpIHsKLSAgICAgICAgICAgIGlmICghIWJ1Y2tldHNbaV0gfHwgISF3ZWFrQnVja2V0c1tpXSkg
eworICAgICAgICAgICAgaWYgKCEhbV9idWNrZXRzW2ldIHx8ICEhbV93ZWFrQnVja2V0c1tpXSkg
ewogICAgICAgICAgICAgICAgIGlmIChmaXJzdCkgewogICAgICAgICAgICAgICAgICAgICBmcHJp
bnRmKG91dCwgIjogIik7CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CkBAIC0y
MjgsMTAgKzI0NiwxMCBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICAgICAgICAgICAgICAg
ICAgZnByaW50ZihvdXQsICIsICIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoISFidWNrZXRzW2ldKQotICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAi
JXMiLCBKU1ZhbHVlOjpkZWNvZGUoYnVja2V0c1tpXSkuZGVzY3JpcHRpb24oKSk7CisgICAgICAg
ICAgICBpZiAoISFtX2J1Y2tldHNbaV0pCisgICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICIl
cyIsIEpTVmFsdWU6OmRlY29kZShtX2J1Y2tldHNbaV0pLmRlc2NyaXB0aW9uKCkpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoISF3ZWFrQnVja2V0c1tpXSkKKyAgICAgICAgICAgIGlm
ICghIW1fd2Vha0J1Y2tldHNbaV0pCiAgICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICJEZWFk
Q2VsbCIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjU3LDYxICsyNzUsMjAgQEAgc3RydWN0IFZh
bHVlUHJvZmlsZSB7CiAgICAgLy8gTWV0aG9kIGZvciBpbmNyZW1lbnRpbmcgYWxsIHJlbGV2YW50
IHN0YXRpc3RpY3MgZm9yIGEgQ2xhc3NJbmZvLCBleGNlcHQgZm9yCiAgICAgLy8gaW5jcmVtZW50
aW5nIHRoZSBudW1iZXIgb2Ygc2FtcGxlcywgd2hpY2ggdGhlIGNhbGxlciBpcyByZXNwb25zaWJs
ZSBmb3IKICAgICAvLyBkb2luZy4KLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlU3RhdGlzdGljcyhj
b25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgU3RhdGlzdGljcyYgc3RhdGlzdGljcykKLSAgICB7
Ci0gICAgICAgIHN0YXRpc3RpY3MuY2VsbHMrKzsKLSAgICAgICAgCi0gICAgICAgIGlmIChjbGFz
c0luZm8gPT0gJkpTRmluYWxPYmplY3Q6OnNfaW5mbykgewotICAgICAgICAgICAgc3RhdGlzdGlj
cy5maW5hbE9iamVjdHMrKzsKLSAgICAgICAgICAgIHN0YXRpc3RpY3Mub2JqZWN0cysrOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoY2xhc3NJ
bmZvID09ICZKU0FycmF5OjpzX2luZm8pIHsKLSAgICAgICAgICAgIHN0YXRpc3RpY3MuYXJyYXlz
Kys7Ci0gICAgICAgICAgICBzdGF0aXN0aWNzLm9iamVjdHMrKzsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNTdHJp
bmc6OnNfaW5mbykgewotICAgICAgICAgICAgc3RhdGlzdGljcy5zdHJpbmdzKys7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChjbGFzc0luZm8t
PmlzU3ViQ2xhc3NPZigmSlNPYmplY3Q6OnNfaW5mbykpCi0gICAgICAgICAgICBzdGF0aXN0aWNz
Lm9iamVjdHMrKzsKLSAgICB9CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZVN0YXRpc3RpY3MoY29u
c3QgQ2xhc3NJbmZvKiwgU3RhdGlzdGljcyYpOwogCiAgICAgLy8gT3B0aW1pemVkIG1ldGhvZCBm
b3IgZ2V0dGluZyBhbGwgY291bnRzIGF0IG9uY2UuCi0gICAgdm9pZCBjb21wdXRlU3RhdGlzdGlj
cyhTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
IWJ1Y2tldHNbaV0pIHsKLSAgICAgICAgICAgICAgICBXZWFrQnVja2V0IHdlYWtCdWNrZXQgPSB3
ZWFrQnVja2V0c1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoISF3ZWFrQnVja2V0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0YXRpc3RpY3Muc2FtcGxlcysrOwotICAgICAgICAgICAgICAgICAg
ICBjb21wdXRlU3RhdGlzdGljcyh3ZWFrQnVja2V0LmdldENsYXNzSW5mbygpLCBzdGF0aXN0aWNz
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0YXRp
c3RpY3Muc2FtcGxlcysrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGJ1Y2tldHNbaV0pOwotICAgICAgICAgICAgaWYgKHZhbHVlLmlz
SW50MzIoKSkKLSAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmludDMycysrOwotICAgICAgICAg
ICAgZWxzZSBpZiAodmFsdWUuaXNEb3VibGUoKSkKLSAgICAgICAgICAgICAgICBzdGF0aXN0aWNz
LmRvdWJsZXMrKzsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmlzQ2VsbCgpKQotICAgICAg
ICAgICAgICAgIGNvbXB1dGVTdGF0aXN0aWNzKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+
Y2xhc3NJbmZvKCksIHN0YXRpc3RpY3MpOwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNC
b29sZWFuKCkpCi0gICAgICAgICAgICAgICAgc3RhdGlzdGljcy5ib29sZWFucysrOwotICAgICAg
ICB9Ci0gICAgfQorICAgIHZvaWQgY29tcHV0ZVN0YXRpc3RpY3MoU3RhdGlzdGljcyYpIGNvbnN0
OworICAgIAorICAgIC8vIFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5l
dyBvbmUuCisgICAgUHJlZGljdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKKyAg
ICAKKyAgICBpbnQgbV9ieXRlY29kZU9mZnNldDsgLy8gLTEgZm9yIHByb2xvZ3VlCisgICAgCisg
ICAgUHJlZGljdGVkVHlwZSBtX3ByZWRpY3Rpb247CisgICAgdW5zaWduZWQgbV9udW1iZXJPZlNh
bXBsZXNJblByZWRpY3Rpb247CiAgICAgCi0gICAgaW50IGJ5dGVjb2RlT2Zmc2V0OyAvLyAtMSBm
b3IgcHJvbG9ndWUKLSAgICBFbmNvZGVkSlNWYWx1ZSBidWNrZXRzW251bWJlck9mQnVja2V0c107
CisgICAgRW5jb2RlZEpTVmFsdWUgbV9idWNrZXRzW251bWJlck9mQnVja2V0c107CiAgICAgCiAg
ICAgY2xhc3MgV2Vha0J1Y2tldCB7CiAgICAgcHVibGljOgpAQCAtMzc1LDEyICszNTIsMTIgQEAg
c3RydWN0IFZhbHVlUHJvZmlsZSB7CiAgICAgICAgIHVpbnRwdHJfdCBtX3ZhbHVlOwogICAgIH07
CiAgICAgCi0gICAgV2Vha0J1Y2tldCB3ZWFrQnVja2V0c1tudW1iZXJPZkJ1Y2tldHNdOyAvLyB0
aGlzIGlzIG5vdCBjb3ZlcmVkIGJ5IGEgd3JpdGUgYmFycmllciBiZWNhdXNlIGl0IGlzIG9ubHkg
c2V0IGZyb20gR0MKKyAgICBXZWFrQnVja2V0IG1fd2Vha0J1Y2tldHNbbnVtYmVyT2ZCdWNrZXRz
XTsgLy8gdGhpcyBpcyBub3QgY292ZXJlZCBieSBhIHdyaXRlIGJhcnJpZXIgYmVjYXVzZSBpdCBp
cyBvbmx5IHNldCBmcm9tIEdDCiB9OwogCiBpbmxpbmUgaW50IGdldFZhbHVlUHJvZmlsZUJ5dGVj
b2RlT2Zmc2V0KFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlKQogewotICAgIHJldHVybiB2YWx1
ZVByb2ZpbGUtPmJ5dGVjb2RlT2Zmc2V0OworICAgIHJldHVybiB2YWx1ZVByb2ZpbGUtPm1fYnl0
ZWNvZGVPZmZzZXQ7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk1MTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3OSwxNCArNDc5LDkgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoRFlOQU1JQ19PUFRJTUla
QVRJT04pCiAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IG1fcHJvZmlsZWRCbG9jay0+
dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIEFT
U0VSVChwcm9maWxlKTsKKyAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLnByZWRpY3QocHJvZmls
ZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCkgJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9u
Z1ByZWRpY3Rpb24pOwogI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAgcHJp
bnRmKCJEeW5hbWljIHByb2ZpbGUgWyV1LCAldV06ICIsIG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgICAgIHByb2ZpbGUtPmR1bXAoc3Rkb3V0KTsKLSAgICAgICAgcHJpbnRmKCJcbiIp
OwotI2VuZGlmCi0gICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5wcmVkaWN0KG1ha2VQcmVkaWN0
aW9uKCpwcm9maWxlKSAmIH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7Ci0j
aWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmludGYoIiAgICBQcmVkaWN0
aW9uOiAlc1xuIiwgcHJlZGljdGlvblRvU3RyaW5nKG1fZ3JhcGhbbm9kZUluZGV4XS5nZXRQcmVk
aWN0aW9uKCkpKTsKKyAgICAgICAgcHJpbnRmKCJEeW5hbWljIFsldSwgJXVdIHByZWRpY3Rpb246
ICVzXG4iLCBub2RlSW5kZXgsIGJ5dGVjb2RlSW5kZXgsIHByZWRpY3Rpb25Ub1N0cmluZyhtX2dy
YXBoW25vZGVJbmRleF0uZ2V0UHJlZGljdGlvbigpKSk7CiAjZW5kaWYKICNlbHNlCiAgICAgICAg
IFVOVVNFRF9QQVJBTShub2RlSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHJldmlzaW9uIDk1MTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOCwxNiArMjE4LDEwIEBAIHZvaWQg
R3JhcGg6OnByZWRpY3RBcmd1bWVudFR5cGVzKEV4ZWNTdGEKICAgICAgICAgaWYgKCFwcm9maWxl
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotI2lmIEVOQUJMRShERkdfREVCVUdf
VkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCJBcmd1bWVudCBwcm9maWxlIFslbHVdOiAiLCBhcmcp
OwotICAgICAgICBwcm9maWxlLT5kdW1wKHN0ZG91dCk7Ci0gICAgICAgIHByaW50ZigiXG4iKTsK
LSNlbmRpZgotICAgICAgICAKLSAgICAgICAgbV9wcmVkaWN0aW9ucy5wcmVkaWN0QXJndW1lbnQo
YXJnLCBtYWtlUHJlZGljdGlvbigqcHJvZmlsZSkgJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9u
Z1ByZWRpY3Rpb24pOworICAgICAgICBtX3ByZWRpY3Rpb25zLnByZWRpY3RBcmd1bWVudChhcmcs
IHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpICYgflByZWRpY3Rpb25UYWdNYXNr
LCBTdHJvbmdQcmVkaWN0aW9uKTsKICAgICAgICAgCiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJC
T1NFKQotICAgICAgICBwcmludGYoIiAgICBQcmVkaWN0aW9uOiAlc1xuIiwgcHJlZGljdGlvblRv
U3RyaW5nKG1fcHJlZGljdGlvbnMuZ2V0QXJndW1lbnRQcmVkaWN0aW9uKGFyZykpKTsKKyAgICAg
ICAgcHJpbnRmKCJBcmd1bWVudCBbJWx1XSBwcmVkaWN0aW9uOiAlc1xuIiwgYXJnLCBwcmVkaWN0
aW9uVG9TdHJpbmcobV9wcmVkaWN0aW9ucy5nZXRBcmd1bWVudFByZWRpY3Rpb24oYXJnKSkpOwog
I2VuZGlmCiAgICAgfQogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5NTExNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIy
LDExIEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICAgICBkZWJ1
Z0NhbGwoZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsK
ICNlbmRpZgogICAgIAorI2lmIEVOQUJMRShERkdfU1VDQ0VTU19TVEFUUykKKyAgICBzdGF0aWMg
U2FtcGxpbmdDb3VudGVyIGNvdW50ZXIoIlNwZWN1bGF0aW9uRmFpbHVyZSIpOworICAgIGVtaXRD
b3VudChjb3VudGVyKTsKKyNlbmRpZgorCiAgICAgLy8gMikgUGVyZm9ybSBzcGVjdWxhdGlvbiBy
ZWNvdmVyeS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3aGVuIGFuIG9wZXJhdGlvbgogICAg
IC8vICAgIHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUgdmVyaWZ5aW5nIHRoZSBzcGVjdWxh
dGlvbiBpdCBoYXMgYWxyZWFkeSBtYWRlLgogICAgIApAQCAtODYyLDYgKzg2NywxMSBAQCB2b2lk
IEpJVENvbXBpbGVyOjpqdW1wRnJvbVNwZWN1bGF0aXZlVG9OCiAgICAgZGVidWdDYWxsKGRlYnVn
T3BlcmF0aW9uUHJpbnRTcGVjdWxhdGlvbkZhaWx1cmUsIGRlYnVnSW5mbyk7CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShERkdfU1VDQ0VTU19TVEFUUykKKyAgICBzdGF0aWMgU2FtcGxpbmdDb3VudGVy
IGNvdW50ZXIoIlNwZWN1bGF0aW9uRmFpbHVyZSIpOworICAgIGVtaXRDb3VudChjb3VudGVyKTsK
KyNlbmRpZgorCiAgICAgLy8gRG9lcyB0aGlzIHNwZWN1bGF0aW9uIGNoZWNrIHJlcXVpcmUgYW55
IGFkZGl0aW9uYWwgcmVjb3ZlcnkgdG8gYmUgcGVyZm9ybWVkLAogICAgIC8vIHRvIHJlc3RvcmUg
YW55IHN0YXRlIHRoYXQgaGFzIGJlZW4gb3ZlcndyaXR0ZW4gYmVmb3JlIHdlIGVudGVyIGJhY2sg
aW4gdG8gdGhlCiAgICAgLy8gbm9uLXNwZWN1bGF0aXZlIHBhdGguCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NTExNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCB2b2lkIEpJVDo6
ZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphCiAgICAgaWYgKCFzaG91bGRFbWl0UHJvZmls
aW5nKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJy
YW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNo
ZWNrID8gMSA6IDMwKSwgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+bV9leGVjdXRlQ291
bnRlcikpOworICAgIEp1bXAgc2tpcE9wdGltaXplID0gYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVz
dGVkSW1tMzIoa2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2sgPyBDb2RlQmxvY2s6OmV4ZWN1
dGVDb3VudGVySW5jcmVtZW50Rm9yTG9vcCA6IENvZGVCbG9jazo6ZXhlY3V0ZUNvdW50ZXJJbmNy
ZW1lbnRGb3JSZXR1cm4pLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkV4
ZWN1dGVDb3VudGVyKCkpKTsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBraW5kID09
IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IGN0aV9vcHRpbWl6ZV9mcm9tX2xvb3AgOiBjdGlfb3B0
aW1pemVfZnJvbV9yZXQpOwogICAgIGlmIChraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjaykK
ICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIobV9ieXRlY29kZU9mZnNldCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJl
dmlzaW9uIDk1MTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRo
b2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1Niw3ICs0NTYsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoCiAgICAgZWxzZQogICAgICAgICBhZGQzMihJbW0zMigz
KSwgYnVja2V0Q291bnRlclJlZ2lzdGVyKTsKICAgICBhbmQzMihJbW0zMihWYWx1ZVByb2ZpbGU6
OmJ1Y2tldEluZGV4TWFzayksIGJ1Y2tldENvdW50ZXJSZWdpc3Rlcik7Ci0gICAgbW92ZShJbW1Q
dHIodmFsdWVQcm9maWxlLT5idWNrZXRzKSwgc2NyYXRjaCk7CisgICAgbW92ZShJbW1QdHIodmFs
dWVQcm9maWxlLT5tX2J1Y2tldHMpLCBzY3JhdGNoKTsKICAgICBzdG9yZVB0cih2YWx1ZSwgQmFz
ZUluZGV4KHNjcmF0Y2gsIGJ1Y2tldENvdW50ZXJSZWdpc3RlciwgVGltZXNFaWdodCkpOwogfQog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNp
b24gOTUxMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgyMywyMSArMTgyMywzMSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2
b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAgCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFj
a0ZyYW1lLmNhbGxGcmFtZTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7Ci0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUt
PnNjb3BlQ2hhaW4oKTsKICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gc3RhY2tGcmFtZS5h
cmdzWzBdLmludDMyKCk7Ci0gICAgCi0gICAgSlNPYmplY3QqIGVycm9yID0gY29kZUJsb2NrLT5j
b21waWxlT3B0aW1pemVkKGNhbGxGcmFtZSwgc2NvcGVDaGFpbik7Ci0gICAgaWYgKGVycm9yKQot
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBm
cm9tIGxvb3AgZmFpbGVkLlxuIik7Ci0gICAgCi0gICAgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKSA9PSBjb2RlQmxvY2spIHsKKworICAgIGlmICghY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKSB7CisgICAgICAgIGlmICghY29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZU5v
dygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgcHJpbnRmKCJPcHRp
bWl6aW5nICVwIGZyb20gbG9vcCBmYWlsZWQuXG4iLCBjb2RlQmxvY2spOworICAgICAgICAgICAg
cHJpbnRmKCJEZWxheWluZyBvcHRpbWl6YXRpb24gZm9yICVwIChpbiBsb29wKSBiZWNhdXNlIG9m
IGluc3VmZmljaWVudCBwcm9maWxpbmcuXG4iLCBjb2RlQmxvY2spOwogI2VuZGlmCi0KLSAgICAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKLSAgICAgICAgY29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7
CisgICAgICAgIAorICAgICAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVP
cHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKKyAgICAgICAgaWYgKGVycm9yKQorICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBvcHRpbWl6ZWQgY29tcGlsYXRpb24g
ZnJvbSBsb29wIGZhaWxlZC5cbiIpOworICAgICAgICAKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+
cmVwbGFjZW1lbnQoKSA9PSBjb2RlQmxvY2spIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NS
KQorICAgICAgICAgICAgcHJpbnRmKCJPcHRpbWl6aW5nICVwIGZyb20gbG9vcCBmYWlsZWQuXG4i
LCBjb2RlQmxvY2spOworI2VuZGlmCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChj
b2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgICAg
ICAgICBjb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRD
b2RlQmxvY2sgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7CkBAIC0xODY4LDYgKzE4NzgsMTcg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogICAgIAogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIAorICAgIGlmIChjb2Rl
QmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgeworI2lmIEVOQUJMRShK
SVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiRGVsYXlpbmcgb3B0aW1pemF0aW9uIGZv
ciAlcCAoaW4gcmV0dXJuKSBiZWNhdXNlIG9mIGluc3VmZmljaWVudCBwcm9maWxpbmcuXG4iLCBj
b2RlQmxvY2spOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKIAogICAg
IEpTT2JqZWN0KiBlcnJvciA9IGNvZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJhbWUs
IHNjb3BlQ2hhaW4pOwo=
</data>
<flag name="review"
          id="104090"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="104093"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>