<?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>99287</bug_id>
          
          <creation_ts>2012-10-14 20:21:44 -0700</creation_ts>
          <short_desc>DFG should have some facility for recognizing redundant CheckArrays and Arrayifies</short_desc>
          <delta_ts>2012-10-19 23:54:22 -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>
          
          <blocked>99371</blocked>
    
    <blocked>98606</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>cabanier</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>741696</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-14 20:21:44 -0700</bug_when>
    <thetext>Currently if we emit those things, then they don&apos;t get killed even if they&apos;re obviously redundant, like:

a[i] + a[i + 1];

If i is predicted int, and a is predicted to be almost any sensible array mode, then we should only be checking a&apos;s type once.  That works fine if we also predict a&apos;s structure.  But if we don&apos;t have a structure prediction, and just have an array mode prediction, then this all falls apart, and we end up with two CheckArray nodes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741697</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-14 20:23:13 -0700</bug_when>
    <thetext>The easiest way to do this is to teach the CSE about these things.  But to be able to do things like CheckArray/Arrayify hoisting, we really need the CFA to know about array mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742475</commentid>
    <comment_count>2</comment_count>
      <attachid>168788</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-15 14:42:48 -0700</bug_when>
    <thetext>Created attachment 168788
the patch

I think it&apos;s ready.  Still testing though, so not marking r? yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742534</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-15 15:53:15 -0700</bug_when>
    <thetext>Attachment 168788 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/bytecode/ArrayProfile.h:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:53:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:54:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:55:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 10 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>742601</commentid>
    <comment_count>4</comment_count>
      <attachid>168788</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-15 17:10:27 -0700</bug_when>
    <thetext>Comment on attachment 168788
the patch

Attachment 168788 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14292928</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742608</commentid>
    <comment_count>5</comment_count>
      <attachid>168788</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-15 17:16:21 -0700</bug_when>
    <thetext>Comment on attachment 168788
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGArrayMode.cpp:201
&gt; +        if (arrayModesAlreadyChecked(value.m_arrayModes, asArrayModes(NonArrayWithArrayStorage) | asArrayModes(ArrayWithArrayStorage) | asArrayModes(NonArrayWithSlowPutArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage)))

I&apos;m confused by this. Is this supposed to return true like the others? If not, the return should probably be indented. Also, is &quot;|&quot; set intersection or union? It looks like all of these are SlowPutArrayStorage, but you check for anything with ArrayStorage? Sorry if I&apos;m being dense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742621</commentid>
    <comment_count>6</comment_count>
      <attachid>168788</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-15 17:24:59 -0700</bug_when>
    <thetext>Comment on attachment 168788
the patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGArrayMode.cpp:201
&gt;&gt; +        if (arrayModesAlreadyChecked(value.m_arrayModes, asArrayModes(NonArrayWithArrayStorage) | asArrayModes(ArrayWithArrayStorage) | asArrayModes(NonArrayWithSlowPutArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage)))
&gt; 
&gt; I&apos;m confused by this. Is this supposed to return true like the others? If not, the return should probably be indented. Also, is &quot;|&quot; set intersection or union? It looks like all of these are SlowPutArrayStorage, but you check for anything with ArrayStorage? Sorry if I&apos;m being dense.

Oh, good catch.  This should be &apos;return true&apos;.

The expression &quot;asArrayModes(NonArrayWithArrayStorage) | asArrayModes(ArrayWithArrayStorage) | asArrayModes(NonArrayWithSlowPutArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage)&quot; denotes the set of all objects that have array storage or slow put array storage.

This is in contrast to &quot;asArrayModes(NonArrayWithArrayStorage) | asArrayModes(ArrayWithArrayStorage)&quot; which denotes the set of all objects that have array storage.

Or &quot;asArrayModes(NonArrayWithArrayStorage) | asArrayModes(NonArrayWithSlowPutArrayStorage)&quot; which denotes the set of all non-array objects that have array storage or slow put array storage.

And so on.

I&apos;ll add the &apos;return true&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742628</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-15 17:28:01 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 168788 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168788&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGArrayMode.cpp:201
&gt; &gt; +        if (arrayModesAlreadyChecked(value.m_arrayModes, asArrayModes(NonArrayWithArrayStorage) | asArrayModes(ArrayWithArrayStorage) | asArrayModes(NonArrayWithSlowPutArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage)))
&gt; 
&gt; I&apos;m confused by this. Is this supposed to return true like the others? If not, the return should probably be indented. Also, is &quot;|&quot; set intersection or union? It looks like all of these are SlowPutArrayStorage, but you check for anything with ArrayStorage? Sorry if I&apos;m being dense.

Oh, sorry - I think I know what you&apos;re asking.  The point is that if we&apos;re compiling an array access in slow put mode, then we&apos;re willing to accept any kind of array storage object (array or not, slow put or not).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742630</commentid>
    <comment_count>8</comment_count>
      <attachid>168816</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-15 17:28:30 -0700</bug_when>
    <thetext>Created attachment 168816
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742635</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-15 17:31:28 -0700</bug_when>
    <thetext>Attachment 168816 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/bytecode/ArrayProfile.h:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:53:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:54:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:55:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 10 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>742636</commentid>
    <comment_count>10</comment_count>
      <attachid>168817</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-15 17:31:51 -0700</bug_when>
    <thetext>Created attachment 168817
the patch

fix Windows build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742637</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-15 17:32:31 -0700</bug_when>
    <thetext>Attachment 168817 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/bytecode/ArrayProfile.h:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:53:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:54:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:55:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 10 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>742655</commentid>
    <comment_count>12</comment_count>
      <attachid>168821</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-15 17:44:02 -0700</bug_when>
    <thetext>Created attachment 168821
the patch

just rebasing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742675</commentid>
    <comment_count>13</comment_count>
      <attachid>168821</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-15 18:10:42 -0700</bug_when>
    <thetext>Comment on attachment 168821
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742772</commentid>
    <comment_count>14</comment_count>
    <who name="Rik Cabanier">cabanier</who>
    <bug_when>2012-10-15 21:10:10 -0700</bug_when>
    <thetext>Attachment 168821 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
WARNING: Patch&apos;s size is 28 kbytes.
Patches 20k or smaller are more likely to be reviewed. Larger patches may sit unreviewed for a long time.
Source/JavaScriptCore/bytecode/ArrayProfile.h:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:53:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:54:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/bytecode/ArrayProfile.h:55:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 10 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>743036</commentid>
    <comment_count>15</comment_count>
      <attachid>168821</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-16 03:40:16 -0700</bug_when>
    <thetext>Comment on attachment 168821
the patch

Attachment 168821 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14385147

New failing tests:
inspector/elements/insert-node.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746928</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-19 23:54:22 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/131982</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168788</attachid>
            <date>2012-10-15 14:42:48 -0700</date>
            <delta_ts>2012-10-15 17:28:30 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>cfaarray_1.patch</filename>
            <type>text/plain</type>
            <size>26534</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMzU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDEyLTEwLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIHNvbWUgZmFjaWxpdHkgZm9yIHJlY29nbml6aW5nIHJlZHVuZGFudCBD
aGVja0FycmF5cyBhbmQgQXJyYXlpZmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTkyODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRzIHJlYXNvbmluZyBhYm91dCBpbmRleGluZyB0eXBlIHNldHMg
KGkuZS4gQXJyYXlNb2RlcykgdG8gQWJzdHJhY3RWYWx1ZSwgd2hpY2gKKyAgICAgICAgdGhlbiBl
bmFibGVzIHVzIHRvIGZvbGQgYXdheSBDaGVja0FycmF5J3MgYW5kIEFycmF5aWZ5J3MgdGhhdCBh
cmUgcmVkdW5kYW50LgorCisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6YXJyYXlNb2Rlc1RvU3RyaW5nKToKKyAgICAgICAgKEpTQyk6CisgICAgICAg
ICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjptZXJnZUFycmF5TW9kZXMpOgorICAgICAgICAoSlNDOjphcnJheU1vZGVzQWxyZWFkeUNoZWNr
ZWQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5oOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6OmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcyk6CisgICAgICAgIChTdHJ1Y3R1
cmVTZXQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OkFic3RyYWN0VmFs
dWUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc0NsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChBYnN0cmFjdFZhbHVlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6OnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWVy
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZpbHRlcik6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQXJyYXlNb2Rlcyk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0VmFsdWU6OmNoZWNrQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0VmFsdWU6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2Ji
ZXJBcnJheU1vZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjbG9iYmVy
QXJyYXlNb2Rlc1Nsb3cpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldEZ1
dHVyZVBvc3NpYmxlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpmaWx0ZXJGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSk6CisgICAgICAgICogZGZnL0RGR0FycmF5
TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToKKyAgICAg
ICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6YXJyYXlNb2Rlc0Zv
cik6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25z
dGFudHMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKwogMjAxMi0xMC0xNSAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgQ29waWVk
U3BhY2UgYW5kIE1hcmtlZFNwYWNlIHJlZ2lvbnMgaW5kZXBlbmRlbnQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCShyZXZpc2lvbiAx
MzEzMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNDAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NvbnN0IGNoYXIqIGFycmF5TW9kZXNUb1N0cmluZyhBcnJheU1vZGVzIGFycmF5TW9kZXMpCit7
CisgICAgaWYgKCFhcnJheU1vZGVzKQorICAgICAgICByZXR1cm4gIjA6PGVtcHR5PiI7CisgICAg
CisgICAgaWYgKGFycmF5TW9kZXMgPT0gQUxMX0FSUkFZX01PREVTKQorICAgICAgICByZXR1cm4g
IlRPUCI7CisKKyAgICBib29sIGlzTm9uQXJyYXkgPSAhIShhcnJheU1vZGVzICYgTm9uQXJyYXkp
OworICAgIGJvb2wgaXNOb25BcnJheVdpdGhDb250aWd1b3VzID0gISEoYXJyYXlNb2RlcyAmIE5v
bkFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgIGJvb2wgaXNOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2UgPSAhIShhcnJheU1vZGVzICYgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKKyAgICBib29s
IGlzTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSA9ICEhKGFycmF5TW9kZXMgJiBOb25B
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICBib29sIGlzQXJyYXkgPSAhIShhcnJh
eU1vZGVzICYgQXJyYXlDbGFzcyk7CisgICAgYm9vbCBpc0FycmF5V2l0aENvbnRpZ3VvdXMgPSAh
IShhcnJheU1vZGVzICYgQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgYm9vbCBpc0FycmF5V2l0
aEFycmF5U3RvcmFnZSA9ICEhKGFycmF5TW9kZXMgJiBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwor
ICAgIGJvb2wgaXNBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlID0gISEoYXJyYXlNb2RlcyAm
IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOworICAgIAorICAgIHN0YXRpYyBjaGFyIHJl
c3VsdFsyNTZdOworICAgIHNucHJpbnRmKAorICAgICAgICByZXN1bHQsIHNpemVvZihyZXN1bHQp
LAorICAgICAgICAiJXU6JXMlcyVzJXMlcyVzJXMlcyIsCisgICAgICAgIGFycmF5TW9kZXMsCisg
ICAgICAgIGlzTm9uQXJyYXkgPyAiTm9uQXJyYXkiIDogIiIsCisgICAgICAgIGlzTm9uQXJyYXlX
aXRoQ29udGlndW91cyA/ICJOb25BcnJheVdpdGhDb250aWd1b3VzIiA6ICIiLAorICAgICAgICBp
c05vbkFycmF5V2l0aEFycmF5U3RvcmFnZSA/ICIgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlIiA6
ICIiLAorICAgICAgICBpc05vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UgPyAiTm9uQXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSIgOiAiIiwKKyAgICAgICAgaXNBcnJheSA/ICJBcnJh
eUNsYXNzIiA6ICIiLAorICAgICAgICBpc0FycmF5V2l0aENvbnRpZ3VvdXMgPyAiQXJyYXlXaXRo
Q29udGlndW91cyIgOiAiIiwKKyAgICAgICAgaXNBcnJheVdpdGhBcnJheVN0b3JhZ2UgPyAiIEFy
cmF5V2l0aEFycmF5U3RvcmFnZSIgOiAiIiwKKyAgICAgICAgaXNBcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlID8gIkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UiIDogIiIpOworICAgIAor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQXJyYXlQcm9maWxlOjpjb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24oT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24pCiB7CiAgICAgaWYgKG1f
bGFzdFNlZW5TdHJ1Y3R1cmUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BcnJheVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHJldmlzaW9uIDEzMTMyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMg
KzQwLDQ0IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIHR5cGVkZWYgdW5zaWduZWQg
QXJyYXlNb2RlczsKIAogI2RlZmluZSBhc0FycmF5TW9kZXModHlwZSkgXAotICAgICgxIDw8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSkKKyAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEp
IDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSkKKworI2RlZmluZSBBTExfTk9OX0FSUkFZ
X0FSUkFZX01PREVTICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGFzQXJyYXlNb2RlcyhO
b25BcnJheSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfCBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgICAgICAgICAgICAgXAorICAgICB8IGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpICAgICAgICAgICBcCisgICAgIHwgYXNBcnJh
eU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKQorCisjZGVmaW5lIEFMTF9B
UlJBWV9BUlJBWV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoYXNBcnJh
eU1vZGVzKEFycmF5Q2xhc3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB8IGFz
QXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSAgICAgICAgICAgICAgICBcCisgICAgIHwg
YXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgICAgICAgICAgICAgIFwKKyAgICAg
fCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpCisKKyNkZWZpbmUg
QUxMX0FSUkFZX01PREVTIChBTExfTk9OX0FSUkFZX0FSUkFZX01PREVTIHwgQUxMX0FSUkFZX0FS
UkFZX01PREVTKQogCiBpbmxpbmUgQXJyYXlNb2RlcyBhcnJheU1vZGVGcm9tU3RydWN0dXJlKFN0
cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBhc0FycmF5TW9kZXMoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSk7CiB9CiAKK2NvbnN0IGNoYXIqIGFycmF5TW9kZXNUb1N0cmluZyhB
cnJheU1vZGVzKTsKKworaW5saW5lIGJvb2wgbWVyZ2VBcnJheU1vZGVzKEFycmF5TW9kZXMmIGxl
ZnQsIEFycmF5TW9kZXMgcmlnaHQpCit7CisgICAgQXJyYXlNb2RlcyBuZXdNb2RlcyA9IGxlZnQg
fCByaWdodDsKKyAgICBpZiAobmV3TW9kZXMgPT0gbGVmdCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGxlZnQgPSBuZXdNb2RlczsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQ2hlY2tz
IGlmIHByb3ZlbiBpcyBhIHN1YnNldCBvZiBleHBlY3RlZC4KK2lubGluZSBib29sIGFycmF5TW9k
ZXNBbHJlYWR5Q2hlY2tlZChBcnJheU1vZGVzIHByb3ZlbiwgQXJyYXlNb2RlcyBleHBlY3RlZCkK
K3sKKyAgICByZXR1cm4gKGV4cGVjdGVkIHwgcHJvdmVuKSA9PSBleHBlY3RlZDsKK30KKwogY2xh
c3MgQXJyYXlQcm9maWxlIHsKIHB1YmxpYzoKICAgICBBcnJheVByb2ZpbGUoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24g
MTMxMzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZVNldF9o
CiAjZGVmaW5lIFN0cnVjdHVyZVNldF9oCiAKKyNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKICNp
bmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1
ZGUgPHN0ZGlvLmg+CkBAIC0xMzcsNiArMTM4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgQXJyYXlNb2RlcyBhcnJheU1vZGVzRnJvbVN0cnVj
dHVyZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQXJyYXlNb2RlcyByZXN1bHQgPSAwOworICAg
ICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICBtZXJnZUFycmF5TW9kZXMocmVzdWx0LCBhc0FycmF5TW9kZXMo
bV9zdHJ1Y3R1cmVzW2ldLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cnVj
dHVyZVNldCYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9zdHJ1Y3R1cmVzLnNp
emUoKSAhPSBvdGhlci5tX3N0cnVjdHVyZXMuc2l6ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMzEzMjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDIwLDkgKzE0MjAsMTUgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlckFycmF5TW9kZXMoYXJyYXlNb2Rlc0Zvcihub2RlLmFycmF5TW9kZSgpKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5OiB7CisgICAgICAgIGlmIChtb2RlQWxy
ZWFkeUNoZWNrZWQoZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpIHsK
KyAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
TU9ERVM6CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CkBAIC0xNDMxLDkgKzE0
MzcsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGNsb2JiZXJT
dHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlckFycmF5TW9kZXMoYXJyYXlNb2Rlc0Zvcihub2RlLmFycmF5TW9kZSgpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDEzMTMyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkFycmF5UHJvZmls
ZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJK
U0NlbGwuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgpAQCAtNDAsMTIgKzQxLDE0IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsK
ICAgICBBYnN0cmFjdFZhbHVlKCkKICAgICAgICAgOiBtX3R5cGUoU3BlY05vbmUpCisgICAgICAg
ICwgbV9hcnJheU1vZGVzKDApCiAgICAgewogICAgIH0KICAgICAKICAgICB2b2lkIGNsZWFyKCkK
ICAgICB7CiAgICAgICAgIG1fdHlwZSA9IFNwZWNOb25lOworICAgICAgICBtX2FycmF5TW9kZXMg
PSAwOwogICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICBt
X2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fdmFsdWUgPSBKU1Zh
bHVlKCk7CkBAIC01NCw3ICs1Nyw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAKICAg
ICBib29sIGlzQ2xlYXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBtX3R5
cGUgPT0gU3BlY05vbmUgJiYgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpICYmIG1f
ZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNDbGVhcigpOworICAgICAgICBib29sIHJlc3VsdCA9
IG1fdHlwZSA9PSBTcGVjTm9uZSAmJiAhbV9hcnJheU1vZGVzICYmIG1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmlzQ2xlYXIoKSAmJiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzQ2xlYXIoKTsK
ICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZSk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CkBAIC02Myw2ICs2Niw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVl
IHsKICAgICB2b2lkIG1ha2VUb3AoKQogICAgIHsKICAgICAgICAgbV90eXBlID0gU3BlY1RvcDsK
KyAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOwogICAgICAgICBtX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwpAQCAtNzEsMTMg
Kzc1LDE2IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAKICAgICB2b2lkIGNsb2JiZXJT
dHJ1Y3R1cmVzKCkKICAgICB7Ci0gICAgICAgIGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkKKyAgICAg
ICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7CiAgICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5tYWtlVG9wKCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNsb2JiZXJBcnJh
eU1vZGVzKCk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9hcnJheU1v
ZGVzKTsKKyAgICAgICAgfQogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQotICAg
IAorICAgICAgICAKICAgICB2b2lkIGNsb2JiZXJWYWx1ZSgpCiAgICAgewogICAgICAgICBtX3Zh
bHVlID0gSlNWYWx1ZSgpOwpAQCAtMTA1LDI5ICsxMTIsMTcgQEAgc3RydWN0IEFic3RyYWN0VmFs
dWUgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldEZ1
dHVyZVBvc3NpYmxlU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkK
LSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpbHRlckZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKFN0
cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgIG1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUuZmlsdGVyKFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoc3RydWN0dXJlKSk7
Ci0gICAgfQotICAgIAogICAgIHZvaWQgc2V0TW9zdFNwZWNpZmljKEpTVmFsdWUgdmFsdWUpCiAg
ICAgewogICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewogICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7CiAg
ICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICAgICAg
ICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgICAgICAgICBt
X2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVh
cigpOwogICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOworICAg
ICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
bV90eXBlID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpOwpAQCAtMTQwLDEwICsxMzUsMTQg
QEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgaWYgKCEhdmFsdWUgJiYg
dmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLm1h
a2VUb3AoKTsKLSAgICAgICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKHZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIHNldEZ1dHVyZVBvc3Np
YmxlU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0Fy
cmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgICAgICBjbG9iYmVy
QXJyYXlNb2RlcygpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlKTsKQEAg
LTE1Niw2ICsxNTUsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICBt
X2N1cnJlbnRLbm93blN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICAgICAgc2V0RnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKKyAgICAgICAgbV9hcnJheU1vZGVzID0gYXNBcnJh
eU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICBtX3R5cGUgPSBzcGVj
dWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFs
dWUoKTsKICAgICAgICAgCkBAIC0xNjcsOSArMTY3LDExIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVl
IHsKICAgICAgICAgaWYgKHR5cGUgJiBTcGVjQ2VsbCkgewogICAgICAgICAgICAgbV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0
cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBBTExfQVJSQVlf
TU9ERVM7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5jbGVhcigpOwogICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVh
cigpOworICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKICAgICAgICAgfQogICAgICAgICBt
X3R5cGUgPSB0eXBlOwogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwpAQCAtMTc5LDYgKzE4
MSw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
QWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV90eXBl
ID09IG90aGVyLm1fdHlwZQorICAgICAgICAgICAgJiYgbV9hcnJheU1vZGVzID09IG90aGVyLm1f
YXJyYXlNb2RlcwogICAgICAgICAgICAgJiYgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgPT0gb3Ro
ZXIubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUKICAgICAgICAgICAgICYmIG1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUgPT0gb3RoZXIubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZQogICAgICAgICAg
ICAgJiYgbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOwpAQCAtMTk5LDYgKzIwMiw3IEBAIHN0cnVj
dCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgICAgIHJlc3VsdCA9ICFvdGhlci5pc0NsZWFyKCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgfD0gbWVyZ2VTcGVjdWxhdGlv
bihtX3R5cGUsIG90aGVyLm1fdHlwZSk7CisgICAgICAgICAgICByZXN1bHQgfD0gbWVyZ2VBcnJh
eU1vZGVzKG1fYXJyYXlNb2Rlcywgb3RoZXIubV9hcnJheU1vZGVzKTsKICAgICAgICAgICAgIHJl
c3VsdCB8PSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUpOwogICAgICAgICAgICAgcmVzdWx0IHw9IG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUuYWRkQWxsKG90aGVyLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUpOwogICAgICAgICAg
ICAgaWYgKG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZSkgewpAQCAtMjE4LDYgKzIyMiw3IEBAIHN0
cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgaWYgKHR5cGUgJiBTcGVjQ2VsbCkgewogICAg
ICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICAgICAg
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBtX2FycmF5
TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAgICAgIH0KICAgICAgICAgbV92YWx1ZSA9IEpT
VmFsdWUoKTsKIApAQCAtMjI3LDYgKzIzMiw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAg
ICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQogICAgIHsKICAgICAgICAg
bV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICAgICAgbV9h
cnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwogICAgICAgICBt
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5maWx0ZXIob3RoZXIpOwogICAgICAgICBpZiAobV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKQogICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS5jbGVhcigpOwpAQCAtMjQ2LDYgKzI1MiwxOCBAQCBzdHJ1Y3QgQWJzdHJhY3RW
YWx1ZSB7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAgICAgCisgICAgdm9p
ZCBmaWx0ZXJBcnJheU1vZGVzKEFycmF5TW9kZXMgYXJyYXlNb2RlcykKKyAgICB7CisgICAgICAg
IEFTU0VSVChhcnJheU1vZGVzKTsKKyAgICAgICAgCisgICAgICAgIG1fdHlwZSAmPSBTcGVjQ2Vs
bDsKKyAgICAgICAgbV9hcnJheU1vZGVzICY9IGFycmF5TW9kZXM7CisgICAgICAgIAorICAgICAg
ICAvLyBJIGNvdWxkIGRvIG1vcmUgZmFuY3kgZmlsdGVyaW5nIGhlcmUuIEJ1dCBpdCBwcm9iYWJs
eSB3b24ndCBtYWtlIGFueSBkaWZmZXJlbmNlLgorICAgICAgICAKKyAgICAgICAgY2hlY2tDb25z
aXN0ZW5jeSgpOworICAgIH0KKyAgICAKICAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSB0
eXBlKQogICAgIHsKICAgICAgICAgaWYgKHR5cGUgPT0gU3BlY1RvcCkKQEAgLTI1OCw2ICsyNzYs
MTMgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICAvLyB0aGUgbmV3IHR5cGUgKE5v
bmUpIHJhdGhlciB0aGFuIHRoZSBvbmUgcGFzc2VkIChBcnJheSkuCiAgICAgICAgIG1fY3VycmVu
dEtub3duU3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOwogICAgICAgICBtX2Z1dHVyZVBvc3NpYmxl
U3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOworICAgICAgICAKKyAgICAgICAgaWYgKCEobV90eXBl
ICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKKyAgICAgICAgZWxz
ZSBpZiAoIShtX3R5cGUgJiB+U3BlY0FycmF5KSkKKyAgICAgICAgICAgIG1fYXJyYXlNb2RlcyAm
PSBBTExfQVJSQVlfQVJSQVlfTU9ERVM7CisgICAgICAgIGVsc2UgaWYgKCEobV90eXBlICYgU3Bl
Y0FycmF5KSkKKyAgICAgICAgICAgIG1fYXJyYXlNb2RlcyAmPSBBTExfTk9OX0FSUkFZX0FSUkFZ
X01PREVTOwogCiAgICAgICAgIGZpbHRlclZhbHVlQnlUeXBlKCk7CiAgICAgICAgIApAQCAtMzE5
LDcgKzM0NCw4IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgICAgIEFTU0VSVCht
X3R5cGUgJiBTcGVjQ2VsbCk7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZh
bHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgJiYgbV9m
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpOworICAgICAgICAgICAg
ICAgICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0dXJlKQorICAg
ICAgICAgICAgICAgICYmIChtX2FycmF5TW9kZXMgJiBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTMzMCw2ICszNTYsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIGlm
ICghKG1fdHlwZSAmIFNwZWNDZWxsKSkgewogICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEtu
b3duU3RydWN0dXJlLmlzQ2xlYXIoKSk7CiAgICAgICAgICAgICBBU1NFUlQobV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZS5pc0NsZWFyKCkpOworICAgICAgICAgICAgQVNTRVJUKCFtX2FycmF5TW9k
ZXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaXNDbGVhcigpKQpAQCAtMzQ2
LDcgKzM3Myw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAKICAgICB2b2lkIGR1bXAo
RklMRSogb3V0KSBjb25zdAogICAgIHsKLSAgICAgICAgZnByaW50ZihvdXQsICIoJXMsICIsIHNw
ZWN1bGF0aW9uVG9TdHJpbmcobV90eXBlKSk7CisgICAgICAgIGZwcmludGYob3V0LCAiKCVzLCAl
cywgIiwgc3BlY3VsYXRpb25Ub1N0cmluZyhtX3R5cGUpLCBhcnJheU1vZGVzVG9TdHJpbmcobV9h
cnJheU1vZGVzKSk7CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmR1bXAob3V0KTsK
ICAgICAgICAgZGF0YUxvZygiLCAiKTsKICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZS5kdW1wKG91dCk7CkBAIC00MzcsNiArNDY0LDEzIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsK
ICAgICAvLyB1bmlmaWVkIHdpdGggdGhlIHNldCBvZiBhbGwgb2JqZWN0cyB3aXRoIHN0cnVjdHVy
ZSAweDEyMzQ1LgogICAgIFNwZWN1bGF0ZWRUeXBlIG1fdHlwZTsKICAgICAKKyAgICAvLyBUaGlz
IGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHBvc3NpYmxlIGluZGV4aW5nIHR5cGVzIHRo
YXQgdGhpcyB2YWx1ZQorICAgIC8vIGNhbiBoYXZlIHJpZ2h0IG5vdy4gSXQgYWxzbyBpbXBsaWNp
dGx5IGNvbnN0cmFpbnRzIHRoZSBzZXQgb2Ygc3RydWN0dXJlcworICAgIC8vIHRoYXQgdGhlIHZh
bHVlIG1heSBoYXZlIHJpZ2h0IG5vdywgc2luY2UgYSBzdHJ1Y3R1cmUgaGFzIGFuIGltbXV0YWJs
ZQorICAgIC8vIGluZGV4aW5nIHR5cGUuIFRoaXMgaXMgc3ViamVjdCB0byBjaGFuZ2UgdXBvbiBy
ZWFzc2lnbm1lbnQsIG9yIGFueSBzaWRlCisgICAgLy8gZWZmZWN0IHRoYXQgbWFrZXMgbm9uLW9i
dmlvdXMgY2hhbmdlcyB0byB0aGUgaGVhcC4KKyAgICBBcnJheU1vZGVzIG1fYXJyYXlNb2RlczsK
KyAgICAKICAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHBvc3NpYmxl
IHZhbHVlcyB0aGF0IHRoaXMgdmFsdWUgY2FuCiAgICAgLy8gaGF2ZSBub3cgb3IgYW55IHRpbWUg
aW4gdGhlIGZ1dHVyZSwgdW5sZXNzIGl0IGlzIHJlYXNzaWduZWQuIE5vdGUgdGhhdCB0aGlzCiAg
ICAgLy8gaW1wbGllcyBub3RoaW5nIGFib3V0IHRoZSBzdHJ1Y3R1cmUuIE9kZGx5LCBKU1ZhbHVl
KCkgKGkuZS4gdGhlIGVtcHR5IHZhbHVlKQpAQCAtNDQ0LDYgKzQ3OCw0NiBAQCBzdHJ1Y3QgQWJz
dHJhY3RWYWx1ZSB7CiAgICAgLy8gQk9UVE9NIHRoZW4gSlNWYWx1ZSgpIG1lYW5zIEJPVFRPTTsg
aWYgbV90eXBlIGlzIG5vdCBCT1RUT00gdGhlbiBKU1ZhbHVlKCkKICAgICAvLyBtZWFucyBUT1Au
CiAgICAgSlNWYWx1ZSBtX3ZhbHVlOworCitwcml2YXRlOgorICAgIHZvaWQgY2xvYmJlckFycmF5
TW9kZXMoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYXJyYXlNb2RlcyA9PSBBTExfQVJSQVlfTU9E
RVMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoTElLRUxZKG1f
YXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhOb25BcnJheSkpKQorICAgICAgICAgICAgbV9hcnJh
eU1vZGVzID0gQUxMX0FSUkFZX01PREVTOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjbG9i
YmVyQXJyYXlNb2Rlc1Nsb3coKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9iYmVyQXJyYXlN
b2Rlc1Nsb3coKQorICAgIHsKKyAgICAgICAgaWYgKG1fYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2Rl
cyhBcnJheUNsYXNzKSkKKyAgICAgICAgICAgIG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RF
UzsKKyAgICAgICAgZWxzZSBpZiAobV9hcnJheU1vZGVzICYgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aENvbnRpZ3VvdXMpKQorICAgICAgICAgICAgbV9hcnJheU1vZGVzIHw9IGFzQXJyYXlNb2Rl
cyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2UpOworICAgICAgICBlbHNlIGlmIChtX2FycmF5TW9kZXMgJiBhc0Fy
cmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cykpCisgICAgICAgICAgICBtX2FycmF5TW9kZXMg
fD0gYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAgIGVsc2UgaWYgKG1fYXJyYXlNb2Rl
cyAmIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpKQorICAgICAgICAgICAg
bV9hcnJheU1vZGVzIHw9IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlKTsKKyAgICAgICAgZWxzZSBpZiAobV9hcnJheU1vZGVzICYgYXNBcnJheU1vZGVzKEFycmF5
V2l0aEFycmF5U3RvcmFnZSkpCisgICAgICAgICAgICBtX2FycmF5TW9kZXMgfD0gYXNBcnJheU1v
ZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRGdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAg
ICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBmaWx0ZXJGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxl
U3RydWN0dXJlLmZpbHRlcihTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKHN0cnVjdHVyZSkpOworICAg
IH0KIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDEzMTMyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY3LDEyICsxNjcsMTcgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYg
dgogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKICAgICBjYXNl
IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CiAgICAgY2FzZSBBcnJh
eTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgY2FzZSBBcnJh
eTo6VG9Db250aWd1b3VzOgorICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZh
bHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwg
YXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2lu
Z2xldG9uKCkKICAgICAgICAgICAgICYmIGhhc0NvbnRpZ3VvdXModmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgCiAgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKICAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhDb250aWd1b3VzVG9UYWlsOgogICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kczoKKyAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5t
X2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAgICAgICAmJiBoYXNDb250aWd1b3VzKHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSkKICAg
ICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+
aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKQEAgLTE4MywyOSArMTg4LDM3IEBAIGJvb2wgbW9k
ZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHYKICAgICBjYXNlIEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aEFycmF5U3RvcmFnZVRvSG9sZToKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgIGNhc2UgQXJyYXk6OlRvQXJyYXlTdG9yYWdlOgor
ICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlUb0FycmF5U3RvcmFnZToKKyAgICAgICAgaWYg
KGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2Rl
cyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5
U3RvcmFnZSkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJldHVybiB2YWx1
ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQogICAgICAgICAgICAgJiYg
aGFzRmFzdEFycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0
b24oKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpTbG93UHV0
QXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAg
ICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0Fy
cmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdp
dGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0
b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKICAg
ICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigp
CiAgICAgICAgICAgICAmJiBoYXNBcnJheVN0b3JhZ2UodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgCiAgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFy
cmF5U3RvcmFnZVRvSG9sZToKICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kczoKKyAgICBjYXNlIEFycmF5OjpBcnJheVRvQXJyYXlTdG9yYWdlOgorICAgICAg
ICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJh
eU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0
b24oKQogICAgICAgICAgICAgJiYgaGFzRmFzdEFycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpCiAgICAgICAgICAgICAm
JiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlw
ZSgpICYgSXNBcnJheSk7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2U6CisgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFs
dWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFz
QXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
Lmhhc1NpbmdsZXRvbigpCiAgICAgICAgICAgICAmJiBoYXNBcnJheVN0b3JhZ2UodmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKQogICAgICAg
ICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRl
eGluZ1R5cGUoKSAmIElzQXJyYXkpOwogICAgICAgICAKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
TU9ERVM6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gaXNBcmd1bWVudHNTcGVjdWxhdGlvbih2YWx1ZS5t
X3R5cGUpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJy
YXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuaAkocmV2aXNpb24gMTMxMzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ5LDYgKzM0OSw1MSBAQCBpbmxpbmUg
Ym9vbCBpc0VmZmVjdGZ1bChBcnJheTo6TW9kZSBtb2RlCiAgICAgfQogfQogCisvLyBUaGlzIHJl
dHVybnMgdGhlIHNldCBvZiBhcnJheSBtb2RlcyB0aGF0IHdpbGwgcGFzcyBmaWx0ZXJpbmcgb2Yg
YSBDaGVja0FycmF5IG9yCisvLyBBcnJheWlmeSB3aXRoIHRoZSBnaXZlbiBtb2RlLgoraW5saW5l
IEFycmF5TW9kZXMgYXJyYXlNb2Rlc0ZvcihBcnJheTo6TW9kZSBhcnJheU1vZGUpCit7CisgICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICBy
ZXR1cm4gQUxMX0FSUkFZX01PREVTOworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
T3V0T2ZCb3VuZHM6CisgICAgY2FzZSBBcnJheTo6VG9Db250aWd1b3VzOgorICAgICAgICByZXR1
cm4gYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cyk7
CisgICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgICAgIHJldHVybiBh
c0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZToKKyAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKKyAgICBjYXNlIEFycmF5OjpUb0FycmF5U3Rv
cmFnZToKKyAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2UpOworICAgIGNhc2UgQXJyYXk6OlRvU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFy
cmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZSk7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0
b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hv
bGU6CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kczoKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5VG9BcnJheVN0b3JhZ2U6CisgICAg
ICAgIHJldHVybiBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJy
YXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOworICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2Rl
cyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5
U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkg
fCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFy
cmF5U3RvcmFnZVRvSG9sZToKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kczoKKyAgICBjYXNlIEFycmF5OjpBcnJheVRvQXJyYXlTdG9yYWdlOgorICAgICAg
ICByZXR1cm4gYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIGFzQXJy
YXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2UpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBhc0FycmF5
TW9kZXMoTm9uQXJyYXkpOworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTMx
MzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2FzZSBDaGVja0FycmF5OiB7CisgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6Cisg
ICAgICAgICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgICAgICAgICAgaWYgKCFtb2RlQWxy
ZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9k
ZSgpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KG5vZGUucmVmQ291bnQoKSA9PSAxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMzEzMjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTU5LDEwICs1NTksMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSYg
bm9kZQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSYgbm9kZSkKIHsKICAgICBB
U1NFUlQobW9kZUlzU3BlY2lmaWMobm9kZS5hcnJheU1vZGUoKSkpOwotICAgIEFTU0VSVCghbW9k
ZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJh
eU1vZGUoKSkpOwogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgCisgICAgaWYgKG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgIEdQUlRl
bXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgdGVtcC5ncHIoKSk7CisgICAgICAgIHN0b3JhZ2VSZXN1bHQodGVtcC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIGlmICgh
bm9kZS5jaGlsZDIoKSkgewogICAgICAgICBhcnJheWlmeShub2RlLCBiYXNlLmdwcigpLCBJbnZh
bGlkR1BSUmVnKTsKICAgICAgICAgcmV0dXJuOwo=
</data>
<flag name="commit-queue"
          id="181898"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168816</attachid>
            <date>2012-10-15 17:28:30 -0700</date>
            <delta_ts>2012-10-15 17:31:51 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>cfaarray_2.patch</filename>
            <type>text/plain</type>
            <size>28606</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMzU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDEyLTEwLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIHNvbWUgZmFjaWxpdHkgZm9yIHJlY29nbml6aW5nIHJlZHVuZGFudCBD
aGVja0FycmF5cyBhbmQgQXJyYXlpZmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTkyODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRzIHJlYXNvbmluZyBhYm91dCBpbmRleGluZyB0eXBlIHNldHMg
KGkuZS4gQXJyYXlNb2RlcykgdG8gQWJzdHJhY3RWYWx1ZSwgd2hpY2gKKyAgICAgICAgdGhlbiBl
bmFibGVzIHVzIHRvIGZvbGQgYXdheSBDaGVja0FycmF5J3MgYW5kIEFycmF5aWZ5J3MgdGhhdCBh
cmUgcmVkdW5kYW50LgorCisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6YXJyYXlNb2Rlc1RvU3RyaW5nKToKKyAgICAgICAgKEpTQyk6CisgICAgICAg
ICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjptZXJnZUFycmF5TW9kZXMpOgorICAgICAgICAoSlNDOjphcnJheU1vZGVzQWxyZWFkeUNoZWNr
ZWQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5oOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6OmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcyk6CisgICAgICAgIChTdHJ1Y3R1
cmVTZXQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OkFic3RyYWN0VmFs
dWUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc0NsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChBYnN0cmFjdFZhbHVlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6OnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWVy
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZpbHRlcik6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQXJyYXlNb2Rlcyk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0VmFsdWU6OmNoZWNrQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0VmFsdWU6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2Ji
ZXJBcnJheU1vZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjbG9iYmVy
QXJyYXlNb2Rlc1Nsb3cpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldEZ1
dHVyZVBvc3NpYmxlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpmaWx0ZXJGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSk6CisgICAgICAgICogZGZnL0RGR0FycmF5
TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToKKyAgICAg
ICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6YXJyYXlNb2Rlc0Zv
cik6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25z
dGFudHMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKwogMjAxMi0xMC0xNSAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgQ29waWVk
U3BhY2UgYW5kIE1hcmtlZFNwYWNlIHJlZ2lvbnMgaW5kZXBlbmRlbnQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCShyZXZpc2lvbiAx
MzEzMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNDAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NvbnN0IGNoYXIqIGFycmF5TW9kZXNUb1N0cmluZyhBcnJheU1vZGVzIGFycmF5TW9kZXMpCit7
CisgICAgaWYgKCFhcnJheU1vZGVzKQorICAgICAgICByZXR1cm4gIjA6PGVtcHR5PiI7CisgICAg
CisgICAgaWYgKGFycmF5TW9kZXMgPT0gQUxMX0FSUkFZX01PREVTKQorICAgICAgICByZXR1cm4g
IlRPUCI7CisKKyAgICBib29sIGlzTm9uQXJyYXkgPSAhIShhcnJheU1vZGVzICYgTm9uQXJyYXkp
OworICAgIGJvb2wgaXNOb25BcnJheVdpdGhDb250aWd1b3VzID0gISEoYXJyYXlNb2RlcyAmIE5v
bkFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgIGJvb2wgaXNOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2UgPSAhIShhcnJheU1vZGVzICYgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKKyAgICBib29s
IGlzTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSA9ICEhKGFycmF5TW9kZXMgJiBOb25B
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICBib29sIGlzQXJyYXkgPSAhIShhcnJh
eU1vZGVzICYgQXJyYXlDbGFzcyk7CisgICAgYm9vbCBpc0FycmF5V2l0aENvbnRpZ3VvdXMgPSAh
IShhcnJheU1vZGVzICYgQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgYm9vbCBpc0FycmF5V2l0
aEFycmF5U3RvcmFnZSA9ICEhKGFycmF5TW9kZXMgJiBBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwor
ICAgIGJvb2wgaXNBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlID0gISEoYXJyYXlNb2RlcyAm
IEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOworICAgIAorICAgIHN0YXRpYyBjaGFyIHJl
c3VsdFsyNTZdOworICAgIHNucHJpbnRmKAorICAgICAgICByZXN1bHQsIHNpemVvZihyZXN1bHQp
LAorICAgICAgICAiJXU6JXMlcyVzJXMlcyVzJXMlcyIsCisgICAgICAgIGFycmF5TW9kZXMsCisg
ICAgICAgIGlzTm9uQXJyYXkgPyAiTm9uQXJyYXkiIDogIiIsCisgICAgICAgIGlzTm9uQXJyYXlX
aXRoQ29udGlndW91cyA/ICJOb25BcnJheVdpdGhDb250aWd1b3VzIiA6ICIiLAorICAgICAgICBp
c05vbkFycmF5V2l0aEFycmF5U3RvcmFnZSA/ICIgTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlIiA6
ICIiLAorICAgICAgICBpc05vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UgPyAiTm9uQXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSIgOiAiIiwKKyAgICAgICAgaXNBcnJheSA/ICJBcnJh
eUNsYXNzIiA6ICIiLAorICAgICAgICBpc0FycmF5V2l0aENvbnRpZ3VvdXMgPyAiQXJyYXlXaXRo
Q29udGlndW91cyIgOiAiIiwKKyAgICAgICAgaXNBcnJheVdpdGhBcnJheVN0b3JhZ2UgPyAiIEFy
cmF5V2l0aEFycmF5U3RvcmFnZSIgOiAiIiwKKyAgICAgICAgaXNBcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlID8gIkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UiIDogIiIpOworICAgIAor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQXJyYXlQcm9maWxlOjpjb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24oT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24pCiB7CiAgICAgaWYgKG1f
bGFzdFNlZW5TdHJ1Y3R1cmUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BcnJheVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHJldmlzaW9uIDEzMTMyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMg
KzQwLDQ0IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIHR5cGVkZWYgdW5zaWduZWQg
QXJyYXlNb2RlczsKIAogI2RlZmluZSBhc0FycmF5TW9kZXModHlwZSkgXAotICAgICgxIDw8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSkKKyAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEp
IDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSkKKworI2RlZmluZSBBTExfTk9OX0FSUkFZ
X0FSUkFZX01PREVTICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGFzQXJyYXlNb2RlcyhO
b25BcnJheSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfCBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgICAgICAgICAgICAgXAorICAgICB8IGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpICAgICAgICAgICBcCisgICAgIHwgYXNBcnJh
eU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKQorCisjZGVmaW5lIEFMTF9B
UlJBWV9BUlJBWV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoYXNBcnJh
eU1vZGVzKEFycmF5Q2xhc3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB8IGFz
QXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSAgICAgICAgICAgICAgICBcCisgICAgIHwg
YXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgICAgICAgICAgICAgIFwKKyAgICAg
fCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpCisKKyNkZWZpbmUg
QUxMX0FSUkFZX01PREVTIChBTExfTk9OX0FSUkFZX0FSUkFZX01PREVTIHwgQUxMX0FSUkFZX0FS
UkFZX01PREVTKQogCiBpbmxpbmUgQXJyYXlNb2RlcyBhcnJheU1vZGVGcm9tU3RydWN0dXJlKFN0
cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVybiBhc0FycmF5TW9kZXMoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSk7CiB9CiAKK2NvbnN0IGNoYXIqIGFycmF5TW9kZXNUb1N0cmluZyhB
cnJheU1vZGVzKTsKKworaW5saW5lIGJvb2wgbWVyZ2VBcnJheU1vZGVzKEFycmF5TW9kZXMmIGxl
ZnQsIEFycmF5TW9kZXMgcmlnaHQpCit7CisgICAgQXJyYXlNb2RlcyBuZXdNb2RlcyA9IGxlZnQg
fCByaWdodDsKKyAgICBpZiAobmV3TW9kZXMgPT0gbGVmdCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGxlZnQgPSBuZXdNb2RlczsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQ2hlY2tz
IGlmIHByb3ZlbiBpcyBhIHN1YnNldCBvZiBleHBlY3RlZC4KK2lubGluZSBib29sIGFycmF5TW9k
ZXNBbHJlYWR5Q2hlY2tlZChBcnJheU1vZGVzIHByb3ZlbiwgQXJyYXlNb2RlcyBleHBlY3RlZCkK
K3sKKyAgICByZXR1cm4gKGV4cGVjdGVkIHwgcHJvdmVuKSA9PSBleHBlY3RlZDsKK30KKwogY2xh
c3MgQXJyYXlQcm9maWxlIHsKIHB1YmxpYzoKICAgICBBcnJheVByb2ZpbGUoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24g
MTMxMzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZVNldF9o
CiAjZGVmaW5lIFN0cnVjdHVyZVNldF9oCiAKKyNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKICNp
bmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1
ZGUgPHN0ZGlvLmg+CkBAIC0xMzcsNiArMTM4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgQXJyYXlNb2RlcyBhcnJheU1vZGVzRnJvbVN0cnVj
dHVyZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQXJyYXlNb2RlcyByZXN1bHQgPSAwOworICAg
ICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICBtZXJnZUFycmF5TW9kZXMocmVzdWx0LCBhc0FycmF5TW9kZXMo
bV9zdHJ1Y3R1cmVzW2ldLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cnVj
dHVyZVNldCYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9zdHJ1Y3R1cmVzLnNp
emUoKSAhPSBvdGhlci5tX3N0cnVjdHVyZXMuc2l6ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMzEzMjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDIwLDkgKzE0MjAsMTUgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlckFycmF5TW9kZXMoYXJyYXlNb2Rlc0Zvcihub2RlLmFycmF5TW9kZSgpKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5OiB7CisgICAgICAgIGlmIChtb2RlQWxy
ZWFkeUNoZWNrZWQoZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpIHsK
KyAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
TU9ERVM6CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CkBAIC0xNDMxLDkgKzE0
MzcsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKICAgICAgICAgICAgIGNsb2JiZXJT
dHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlckFycmF5TW9kZXMoYXJyYXlNb2Rlc0Zvcihub2RlLmFycmF5TW9kZSgpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDEzMTMyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkFycmF5UHJvZmls
ZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJK
U0NlbGwuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgpAQCAtNDAsMTIgKzQxLDE0IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsK
ICAgICBBYnN0cmFjdFZhbHVlKCkKICAgICAgICAgOiBtX3R5cGUoU3BlY05vbmUpCisgICAgICAg
ICwgbV9hcnJheU1vZGVzKDApCiAgICAgewogICAgIH0KICAgICAKICAgICB2b2lkIGNsZWFyKCkK
ICAgICB7CiAgICAgICAgIG1fdHlwZSA9IFNwZWNOb25lOworICAgICAgICBtX2FycmF5TW9kZXMg
PSAwOwogICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICBt
X2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fdmFsdWUgPSBKU1Zh
bHVlKCk7CkBAIC01NCw3ICs1Nyw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAKICAg
ICBib29sIGlzQ2xlYXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBtX3R5
cGUgPT0gU3BlY05vbmUgJiYgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpICYmIG1f
ZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNDbGVhcigpOworICAgICAgICBib29sIHJlc3VsdCA9
IG1fdHlwZSA9PSBTcGVjTm9uZSAmJiAhbV9hcnJheU1vZGVzICYmIG1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmlzQ2xlYXIoKSAmJiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzQ2xlYXIoKTsK
ICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZSk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CkBAIC02Myw2ICs2Niw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVl
IHsKICAgICB2b2lkIG1ha2VUb3AoKQogICAgIHsKICAgICAgICAgbV90eXBlID0gU3BlY1RvcDsK
KyAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOwogICAgICAgICBtX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwpAQCAtNzEsMTMg
Kzc1LDE2IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAKICAgICB2b2lkIGNsb2JiZXJT
dHJ1Y3R1cmVzKCkKICAgICB7Ci0gICAgICAgIGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkKKyAgICAg
ICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7CiAgICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5tYWtlVG9wKCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNsb2JiZXJBcnJh
eU1vZGVzKCk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9hcnJheU1v
ZGVzKTsKKyAgICAgICAgfQogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQotICAg
IAorICAgICAgICAKICAgICB2b2lkIGNsb2JiZXJWYWx1ZSgpCiAgICAgewogICAgICAgICBtX3Zh
bHVlID0gSlNWYWx1ZSgpOwpAQCAtMTA1LDI5ICsxMTIsMTcgQEAgc3RydWN0IEFic3RyYWN0VmFs
dWUgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldEZ1
dHVyZVBvc3NpYmxlU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkK
LSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpbHRlckZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKFN0
cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgIG1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUuZmlsdGVyKFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoc3RydWN0dXJlKSk7
Ci0gICAgfQotICAgIAogICAgIHZvaWQgc2V0TW9zdFNwZWNpZmljKEpTVmFsdWUgdmFsdWUpCiAg
ICAgewogICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewogICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7CiAg
ICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICAgICAg
ICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgICAgICAgICBt
X2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVh
cigpOwogICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOworICAg
ICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
bV90eXBlID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpOwpAQCAtMTQwLDEwICsxMzUsMTQg
QEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgaWYgKCEhdmFsdWUgJiYg
dmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLm1h
a2VUb3AoKTsKLSAgICAgICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKHZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIHNldEZ1dHVyZVBvc3Np
YmxlU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0Fy
cmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgICAgICBjbG9iYmVy
QXJyYXlNb2RlcygpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlKTsKQEAg
LTE1Niw2ICsxNTUsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICBt
X2N1cnJlbnRLbm93blN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICAgICAgc2V0RnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKKyAgICAgICAgbV9hcnJheU1vZGVzID0gYXNBcnJh
eU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICBtX3R5cGUgPSBzcGVj
dWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFs
dWUoKTsKICAgICAgICAgCkBAIC0xNjcsOSArMTY3LDExIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVl
IHsKICAgICAgICAgaWYgKHR5cGUgJiBTcGVjQ2VsbCkgewogICAgICAgICAgICAgbV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0
cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBBTExfQVJSQVlf
TU9ERVM7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5jbGVhcigpOwogICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVh
cigpOworICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKICAgICAgICAgfQogICAgICAgICBt
X3R5cGUgPSB0eXBlOwogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwpAQCAtMTc5LDYgKzE4
MSw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
QWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV90eXBl
ID09IG90aGVyLm1fdHlwZQorICAgICAgICAgICAgJiYgbV9hcnJheU1vZGVzID09IG90aGVyLm1f
YXJyYXlNb2RlcwogICAgICAgICAgICAgJiYgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgPT0gb3Ro
ZXIubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUKICAgICAgICAgICAgICYmIG1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUgPT0gb3RoZXIubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZQogICAgICAgICAg
ICAgJiYgbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOwpAQCAtMTk5LDYgKzIwMiw3IEBAIHN0cnVj
dCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgICAgIHJlc3VsdCA9ICFvdGhlci5pc0NsZWFyKCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgfD0gbWVyZ2VTcGVjdWxhdGlv
bihtX3R5cGUsIG90aGVyLm1fdHlwZSk7CisgICAgICAgICAgICByZXN1bHQgfD0gbWVyZ2VBcnJh
eU1vZGVzKG1fYXJyYXlNb2Rlcywgb3RoZXIubV9hcnJheU1vZGVzKTsKICAgICAgICAgICAgIHJl
c3VsdCB8PSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUpOwogICAgICAgICAgICAgcmVzdWx0IHw9IG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUuYWRkQWxsKG90aGVyLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUpOwogICAgICAgICAg
ICAgaWYgKG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZSkgewpAQCAtMjE4LDYgKzIyMiw3IEBAIHN0
cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgaWYgKHR5cGUgJiBTcGVjQ2VsbCkgewogICAg
ICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICAgICAg
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBtX2FycmF5
TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAgICAgIH0KICAgICAgICAgbV92YWx1ZSA9IEpT
VmFsdWUoKTsKIApAQCAtMjI3LDYgKzIzMiw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAg
ICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQogICAgIHsKICAgICAgICAg
bV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICAgICAgbV9h
cnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwogICAgICAgICBt
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5maWx0ZXIob3RoZXIpOwogICAgICAgICBpZiAobV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKQogICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS5jbGVhcigpOwpAQCAtMjQxLDExICsyNDcsMjQgQEAgc3RydWN0IEFic3RyYWN0
VmFsdWUgewogICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsK
ICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKICAgICAg
ICAgCisgICAgICAgIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKTsKICAgICAgICAgZmlsdGVyVmFs
dWVCeVR5cGUoKTsKICAgICAgICAgCiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9
CiAgICAgCisgICAgdm9pZCBmaWx0ZXJBcnJheU1vZGVzKEFycmF5TW9kZXMgYXJyYXlNb2RlcykK
KyAgICB7CisgICAgICAgIEFTU0VSVChhcnJheU1vZGVzKTsKKyAgICAgICAgCisgICAgICAgIG1f
dHlwZSAmPSBTcGVjQ2VsbDsKKyAgICAgICAgbV9hcnJheU1vZGVzICY9IGFycmF5TW9kZXM7Cisg
ICAgICAgIAorICAgICAgICAvLyBJIGNvdWxkIGRvIG1vcmUgZmFuY3kgZmlsdGVyaW5nIGhlcmUu
IEJ1dCBpdCBwcm9iYWJseSB3b24ndCBtYWtlIGFueSBkaWZmZXJlbmNlLgorICAgICAgICAKKyAg
ICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIH0KKyAgICAKICAgICB2b2lkIGZpbHRlcihT
cGVjdWxhdGVkVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgaWYgKHR5cGUgPT0gU3BlY1RvcCkK
QEAgLTI1OCwzMSArMjc3LDEzIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgLy8g
dGhlIG5ldyB0eXBlIChOb25lKSByYXRoZXIgdGhhbiB0aGUgb25lIHBhc3NlZCAoQXJyYXkpLgog
ICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKICAgICAgICAg
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKLQorICAgICAgICAKKyAg
ICAgICAgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwogICAgICAgICBmaWx0ZXJWYWx1ZUJ5VHlw
ZSgpOwogICAgICAgICAKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KICAgICAK
LSAgICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJlIHRoYXQgaWYgdGhlIGZ1dHVy
ZVBvc3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVzCi0gICAgLy8gdGhlIHZhbHVlLCB0aGVuIHdl
IGNvdWxkIGNsZWFyIGJvdGggb2YgdGhvc2UgdGhpbmdzLiBCdXQgdGhhdCdzIHVubGlrZWx5IHRv
IGhlbHAKLSAgICAvLyBpbiBhbnkgcmVhbGlzdGljIHNjZW5hcmlvLCBzbyB3ZSBkb24ndCBkbyBp
dC4gU2ltcGxlciBpcyBiZXR0ZXIuCi0gICAgdm9pZCBmaWx0ZXJWYWx1ZUJ5VHlwZSgpCi0gICAg
ewotICAgICAgICBpZiAoISFtX3R5cGUpIHsKLSAgICAgICAgICAgIC8vIFRoZSB0eXBlIGlzIHN0
aWxsIG5vbi1lbXB0eS4gVGhpcyBpbXBsaWVzIHRoYXQgcmVnYXJkbGVzcyBvZiB3aGF0IGZpbHRl
cmluZwotICAgICAgICAgICAgLy8gd2FzIGRvbmUsIHdlIGVpdGhlciBkaWRuJ3QgaGF2ZSBhIHZh
bHVlIHRvIGJlZ2luIHdpdGgsIG9yIHRoYXQgdmFsdWUgaXMgc3RpbGwKLSAgICAgICAgICAgIC8v
IHZhbGlkLgotICAgICAgICAgICAgQVNTRVJUKCFtX3ZhbHVlIHx8IHZhbGlkYXRlVHlwZShtX3Zh
bHVlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IC8vIFRoZSB0eXBlIGhhcyBiZWVuIHJlbmRlcmVkIGVtcHR5LiBUaGF0IG1lYW5zIHRoYXQgdGhl
IHZhbHVlIG11c3Qgbm93IGJlIGludmFsaWQsCi0gICAgICAgIC8vIGFzIHdlbGwuCi0gICAgICAg
IEFTU0VSVCghbV92YWx1ZSB8fCAhdmFsaWRhdGVUeXBlKG1fdmFsdWUpKTsKLSAgICAgICAgbV92
YWx1ZSA9IEpTVmFsdWUoKTsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCB2YWxpZGF0ZVR5cGUoSlNW
YWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc1RvcCgpKQpAQCAtMzE5LDcg
KzMyMCw4IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgICAgIEFTU0VSVChtX3R5
cGUgJiBTcGVjQ2VsbCk7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgJiYgbV9mdXR1
cmVQb3NzaWJsZVN0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAg
ICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0dXJlKQorICAgICAg
ICAgICAgICAgICYmIChtX2FycmF5TW9kZXMgJiBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTMzMCw2ICszMzIsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIGlmICgh
KG1fdHlwZSAmIFNwZWNDZWxsKSkgewogICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEtub3du
U3RydWN0dXJlLmlzQ2xlYXIoKSk7CiAgICAgICAgICAgICBBU1NFUlQobV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS5pc0NsZWFyKCkpOworICAgICAgICAgICAgQVNTRVJUKCFtX2FycmF5TW9kZXMp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaXNDbGVhcigpKQpAQCAtMzQ2LDcg
KzM0OSw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAKICAgICB2b2lkIGR1bXAoRklM
RSogb3V0KSBjb25zdAogICAgIHsKLSAgICAgICAgZnByaW50ZihvdXQsICIoJXMsICIsIHNwZWN1
bGF0aW9uVG9TdHJpbmcobV90eXBlKSk7CisgICAgICAgIGZwcmludGYob3V0LCAiKCVzLCAlcywg
Iiwgc3BlY3VsYXRpb25Ub1N0cmluZyhtX3R5cGUpLCBhcnJheU1vZGVzVG9TdHJpbmcobV9hcnJh
eU1vZGVzKSk7CiAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmR1bXAob3V0KTsKICAg
ICAgICAgZGF0YUxvZygiLCAiKTsKICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5k
dW1wKG91dCk7CkBAIC00MzcsNiArNDQwLDEzIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAg
ICAvLyB1bmlmaWVkIHdpdGggdGhlIHNldCBvZiBhbGwgb2JqZWN0cyB3aXRoIHN0cnVjdHVyZSAw
eDEyMzQ1LgogICAgIFNwZWN1bGF0ZWRUeXBlIG1fdHlwZTsKICAgICAKKyAgICAvLyBUaGlzIGlz
IGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHBvc3NpYmxlIGluZGV4aW5nIHR5cGVzIHRoYXQg
dGhpcyB2YWx1ZQorICAgIC8vIGNhbiBoYXZlIHJpZ2h0IG5vdy4gSXQgYWxzbyBpbXBsaWNpdGx5
IGNvbnN0cmFpbnRzIHRoZSBzZXQgb2Ygc3RydWN0dXJlcworICAgIC8vIHRoYXQgdGhlIHZhbHVl
IG1heSBoYXZlIHJpZ2h0IG5vdywgc2luY2UgYSBzdHJ1Y3R1cmUgaGFzIGFuIGltbXV0YWJsZQor
ICAgIC8vIGluZGV4aW5nIHR5cGUuIFRoaXMgaXMgc3ViamVjdCB0byBjaGFuZ2UgdXBvbiByZWFz
c2lnbm1lbnQsIG9yIGFueSBzaWRlCisgICAgLy8gZWZmZWN0IHRoYXQgbWFrZXMgbm9uLW9idmlv
dXMgY2hhbmdlcyB0byB0aGUgaGVhcC4KKyAgICBBcnJheU1vZGVzIG1fYXJyYXlNb2RlczsKKyAg
ICAKICAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHBvc3NpYmxlIHZh
bHVlcyB0aGF0IHRoaXMgdmFsdWUgY2FuCiAgICAgLy8gaGF2ZSBub3cgb3IgYW55IHRpbWUgaW4g
dGhlIGZ1dHVyZSwgdW5sZXNzIGl0IGlzIHJlYXNzaWduZWQuIE5vdGUgdGhhdCB0aGlzCiAgICAg
Ly8gaW1wbGllcyBub3RoaW5nIGFib3V0IHRoZSBzdHJ1Y3R1cmUuIE9kZGx5LCBKU1ZhbHVlKCkg
KGkuZS4gdGhlIGVtcHR5IHZhbHVlKQpAQCAtNDQ0LDYgKzQ1NCw3NSBAQCBzdHJ1Y3QgQWJzdHJh
Y3RWYWx1ZSB7CiAgICAgLy8gQk9UVE9NIHRoZW4gSlNWYWx1ZSgpIG1lYW5zIEJPVFRPTTsgaWYg
bV90eXBlIGlzIG5vdCBCT1RUT00gdGhlbiBKU1ZhbHVlKCkKICAgICAvLyBtZWFucyBUT1AuCiAg
ICAgSlNWYWx1ZSBtX3ZhbHVlOworCitwcml2YXRlOgorICAgIHZvaWQgY2xvYmJlckFycmF5TW9k
ZXMoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYXJyYXlNb2RlcyA9PSBBTExfQVJSQVlfTU9ERVMp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoTElLRUxZKG1fYXJy
YXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhOb25BcnJheSkpKQorICAgICAgICAgICAgbV9hcnJheU1v
ZGVzID0gQUxMX0FSUkFZX01PREVTOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjbG9iYmVy
QXJyYXlNb2Rlc1Nsb3coKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9iYmVyQXJyYXlNb2Rl
c1Nsb3coKQorICAgIHsKKyAgICAgICAgaWYgKG1fYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhB
cnJheUNsYXNzKSkKKyAgICAgICAgICAgIG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsK
KyAgICAgICAgZWxzZSBpZiAobV9hcnJheU1vZGVzICYgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0
aENvbnRpZ3VvdXMpKQorICAgICAgICAgICAgbV9hcnJheU1vZGVzIHw9IGFzQXJyYXlNb2RlcyhO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2UpOworICAgICAgICBlbHNlIGlmIChtX2FycmF5TW9kZXMgJiBhc0FycmF5
TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cykpCisgICAgICAgICAgICBtX2FycmF5TW9kZXMgfD0g
YXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlX
aXRoU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAgIGVsc2UgaWYgKG1fYXJyYXlNb2RlcyAm
IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpKQorICAgICAgICAgICAgbV9h
cnJheU1vZGVzIHw9IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
KTsKKyAgICAgICAgZWxzZSBpZiAobV9hcnJheU1vZGVzICYgYXNBcnJheU1vZGVzKEFycmF5V2l0
aEFycmF5U3RvcmFnZSkpCisgICAgICAgICAgICBtX2FycmF5TW9kZXMgfD0gYXNBcnJheU1vZGVz
KEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRGdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAg
ICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBmaWx0ZXJGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlLmZpbHRlcihTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKHN0cnVjdHVyZSkpOworICAgIH0K
KworICAgIC8vIFdlIGNvdWxkIGdvIGZ1cnRoZXIsIGFuZCBlbnN1cmUgdGhhdCBpZiB0aGUgZnV0
dXJlUG9zc2libGVTdHJ1Y3R1cmUgY29udHJhdmVuZXMKKyAgICAvLyB0aGUgdmFsdWUsIHRoZW4g
d2UgY291bGQgY2xlYXIgYm90aCBvZiB0aG9zZSB0aGluZ3MuIEJ1dCB0aGF0J3MgdW5saWtlbHkg
dG8gaGVscAorICAgIC8vIGluIGFueSByZWFsaXN0aWMgc2NlbmFyaW8sIHNvIHdlIGRvbid0IGRv
IGl0LiBTaW1wbGVyIGlzIGJldHRlci4KKyAgICB2b2lkIGZpbHRlclZhbHVlQnlUeXBlKCkKKyAg
ICB7CisgICAgICAgIGlmICghIW1fdHlwZSkgeworICAgICAgICAgICAgLy8gVGhlIHR5cGUgaXMg
c3RpbGwgbm9uLWVtcHR5LiBUaGlzIGltcGxpZXMgdGhhdCByZWdhcmRsZXNzIG9mIHdoYXQgZmls
dGVyaW5nCisgICAgICAgICAgICAvLyB3YXMgZG9uZSwgd2UgZWl0aGVyIGRpZG4ndCBoYXZlIGEg
dmFsdWUgdG8gYmVnaW4gd2l0aCwgb3IgdGhhdCB2YWx1ZSBpcyBzdGlsbAorICAgICAgICAgICAg
Ly8gdmFsaWQuCisgICAgICAgICAgICBBU1NFUlQoIW1fdmFsdWUgfHwgdmFsaWRhdGVUeXBlKG1f
dmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gVGhlIHR5cGUgaGFzIGJlZW4gcmVuZGVyZWQgZW1wdHkuIFRoYXQgbWVhbnMgdGhhdCB0
aGUgdmFsdWUgbXVzdCBub3cgYmUgaW52YWxpZCwKKyAgICAgICAgLy8gYXMgd2VsbC4KKyAgICAg
ICAgQVNTRVJUKCFtX3ZhbHVlIHx8ICF2YWxpZGF0ZVR5cGUobV92YWx1ZSkpOworICAgICAgICBt
X3ZhbHVlID0gSlNWYWx1ZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbHRlckFycmF5TW9k
ZXNCeVR5cGUoKQorICAgIHsKKyAgICAgICAgaWYgKCEobV90eXBlICYgU3BlY0NlbGwpKQorICAg
ICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKKyAgICAgICAgZWxzZSBpZiAoIShtX3R5cGUgJiB+
U3BlY0FycmF5KSkKKyAgICAgICAgICAgIG1fYXJyYXlNb2RlcyAmPSBBTExfQVJSQVlfQVJSQVlf
TU9ERVM7CisgICAgICAgIGVsc2UgaWYgKCEobV90eXBlICYgU3BlY0FycmF5KSkKKyAgICAgICAg
ICAgIG1fYXJyYXlNb2RlcyAmPSBBTExfTk9OX0FSUkFZX0FSUkFZX01PREVTOworICAgIH0KIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDEzMTMyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDEy
ICsxNjcsMTcgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYgdgogICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKICAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6CiAgICAgY2FzZSBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6CisgICAgY2FzZSBBcnJheTo6VG9D
b250aWd1b3VzOgorICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1f
YXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJh
eU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9u
KCkKICAgICAgICAgICAgICYmIGhhc0NvbnRpZ3VvdXModmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgCiAgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250
aWd1b3VzVG9UYWlsOgogICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJv
dW5kczoKKyAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5
TW9kZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
Lmhhc1NpbmdsZXRvbigpCiAgICAgICAgICAgICAmJiBoYXNDb250aWd1b3VzKHZhbHVlLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSkKICAgICAgICAg
ICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhp
bmdUeXBlKCkgJiBJc0FycmF5KTsKQEAgLTE4MywyOSArMTg4LDM4IEBAIGJvb2wgbW9kZUFscmVh
ZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHYKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5
V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5
U3RvcmFnZVRvSG9sZToKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3Rv
cmFnZU91dE9mQm91bmRzOgorICAgIGNhc2UgQXJyYXk6OlRvQXJyYXlTdG9yYWdlOgorICAgIGNh
c2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlUb0FycmF5U3RvcmFnZToKKyAgICAgICAgaWYgKGFycmF5
TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhOb25B
cnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFn
ZSkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQogICAgICAgICAgICAgJiYgaGFzRmFz
dEFycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+
aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlT
dG9yYWdlOgogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZToKKyAgICBjYXNlIEFycmF5OjpUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgIGlm
IChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJh
eVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2Up
IHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaGFzU2luZ2xldG9uKCkKICAgICAgICAgICAgICYmIGhhc0FycmF5U3RvcmFnZSh2YWx1
ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpOwog
ICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgogICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgIGNhc2UgQXJyYXk6OkFycmF5VG9B
cnJheVN0b3JhZ2U6CisgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUu
bV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAgICAgICAmJiBoYXNGYXN0QXJyYXlTdG9y
YWdlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5
cGUoKSkKICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5n
bGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKICAgICAgICAgCiAgICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgaWYgKGFycmF5TW9k
ZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdp
dGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3Jh
Z2UpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gdmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKICAgICAgICAgICAgICYmIGhhc0Fy
cmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5k
ZXhpbmdUeXBlKCkpCiAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CiAgICAgICAgIAotICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIHJldHVybiBpc0FyZ3VtZW50
c1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxMzEzMjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDks
NiArMzQ5LDUxIEBAIGlubGluZSBib29sIGlzRWZmZWN0ZnVsKEFycmF5OjpNb2RlIG1vZGUKICAg
ICB9CiB9CiAKKy8vIFRoaXMgcmV0dXJucyB0aGUgc2V0IG9mIGFycmF5IG1vZGVzIHRoYXQgd2ls
bCBwYXNzIGZpbHRlcmluZyBvZiBhIENoZWNrQXJyYXkgb3IKKy8vIEFycmF5aWZ5IHdpdGggdGhl
IGdpdmVuIG1vZGUuCitpbmxpbmUgQXJyYXlNb2RlcyBhcnJheU1vZGVzRm9yKEFycmF5OjpNb2Rl
IGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6CisgICAgICAgIHJldHVybiBBTExfQVJSQVlfTU9ERVM7CisgICAgY2FzZSBBcnJh
eTo6Q29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOgorICAgIGNh
c2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICBjYXNlIEFycmF5OjpUb0NvbnRp
Z3VvdXM6CisgICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91
cyk7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgorICAgIGNh
c2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKKyAgICBjYXNlIEFy
cmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgcmV0
dXJuIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhDb250aWd1b3VzKTsKKyAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RF
UzoKKyAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKTsKKyAg
ICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
VG9Ib2xlOgorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgIGNh
c2UgQXJyYXk6OlRvQXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAgY2FzZSBBcnJheTo6VG9TbG93UHV0QXJyYXlT
dG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgIHJl
dHVybiBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2Rl
cyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICBjYXNlIEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5
V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0
aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlU
b0FycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhB
cnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAg
Y2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAg
ICByZXR1cm4gYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5
TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlKTsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6CisgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgorICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgIGNhc2UgQXJyYXk6OkFycmF5VG9B
cnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlT
dG9yYWdlKTsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgor
ICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0Fy
cmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhOb25BcnJheSk7CisgICAgfQorfQorCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxMzEzMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsKKyAgICAgICAgICAg
IGNhc2UgQ2hlY2tBcnJheToKKyAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6IHsKICAgICAgICAg
ICAgICAgICBpZiAoIW1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3VudCgpID09IDEpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDEzMTMyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTksMTAgKzU1OSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjphcnJheWlmeShOb2RlJiBub2RlCiB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShO
b2RlJiBub2RlKQogewogICAgIEFTU0VSVChtb2RlSXNTcGVjaWZpYyhub2RlLmFycmF5TW9kZSgp
KSk7Ci0gICAgQVNTRVJUKCFtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSk7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAKKyAgICBpZiAobW9kZUFscmVh
ZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUo
KSkpIHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIG1faml0Lmxv
YWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKKyAgICAgICAgc3RvcmFn
ZVJlc3VsdCh0ZW1wLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCiAgICAgaWYgKCFub2RlLmNoaWxkMigpKSB7CiAgICAgICAgIGFycmF5aWZ5KG5v
ZGUsIGJhc2UuZ3ByKCksIEludmFsaWRHUFJSZWcpOwogICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168817</attachid>
            <date>2012-10-15 17:31:51 -0700</date>
            <delta_ts>2012-10-15 17:44:02 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>cfaarray_3.patch</filename>
            <type>text/plain</type>
            <size>28687</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMzU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDEyLTEwLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIHNvbWUgZmFjaWxpdHkgZm9yIHJlY29nbml6aW5nIHJlZHVuZGFudCBD
aGVja0FycmF5cyBhbmQgQXJyYXlpZmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTkyODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRzIHJlYXNvbmluZyBhYm91dCBpbmRleGluZyB0eXBlIHNldHMg
KGkuZS4gQXJyYXlNb2RlcykgdG8gQWJzdHJhY3RWYWx1ZSwgd2hpY2gKKyAgICAgICAgdGhlbiBl
bmFibGVzIHVzIHRvIGZvbGQgYXdheSBDaGVja0FycmF5J3MgYW5kIEFycmF5aWZ5J3MgdGhhdCBh
cmUgcmVkdW5kYW50LgorCisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6YXJyYXlNb2Rlc1RvU3RyaW5nKToKKyAgICAgICAgKEpTQyk6CisgICAgICAg
ICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjptZXJnZUFycmF5TW9kZXMpOgorICAgICAgICAoSlNDOjphcnJheU1vZGVzQWxyZWFkeUNoZWNr
ZWQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5oOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6OmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcyk6CisgICAgICAgIChTdHJ1Y3R1
cmVTZXQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OkFic3RyYWN0VmFs
dWUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc0NsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChBYnN0cmFjdFZhbHVlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6OnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWVy
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZpbHRlcik6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQXJyYXlNb2Rlcyk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0VmFsdWU6OmNoZWNrQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0VmFsdWU6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2Ji
ZXJBcnJheU1vZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjbG9iYmVy
QXJyYXlNb2Rlc1Nsb3cpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldEZ1
dHVyZVBvc3NpYmxlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpmaWx0ZXJGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSk6CisgICAgICAgICogZGZnL0RGR0FycmF5
TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToKKyAgICAg
ICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6YXJyYXlNb2Rlc0Zv
cik6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25z
dGFudHMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKwogMjAxMi0xMC0xNSAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgQ29waWVk
U3BhY2UgYW5kIE1hcmtlZFNwYWNlIHJlZ2lvbnMgaW5kZXBlbmRlbnQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCShyZXZpc2lvbiAx
MzEzMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNDQgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKIAorI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMu
aD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NvbnN0IGNoYXIqIGFycmF5TW9kZXNUb1N0cmluZyhB
cnJheU1vZGVzIGFycmF5TW9kZXMpCit7CisgICAgaWYgKCFhcnJheU1vZGVzKQorICAgICAgICBy
ZXR1cm4gIjA6PGVtcHR5PiI7CisgICAgCisgICAgaWYgKGFycmF5TW9kZXMgPT0gQUxMX0FSUkFZ
X01PREVTKQorICAgICAgICByZXR1cm4gIlRPUCI7CisKKyAgICBib29sIGlzTm9uQXJyYXkgPSAh
IShhcnJheU1vZGVzICYgTm9uQXJyYXkpOworICAgIGJvb2wgaXNOb25BcnJheVdpdGhDb250aWd1
b3VzID0gISEoYXJyYXlNb2RlcyAmIE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgIGJvb2wg
aXNOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgPSAhIShhcnJheU1vZGVzICYgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlKTsKKyAgICBib29sIGlzTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZSA9ICEhKGFycmF5TW9kZXMgJiBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAg
ICBib29sIGlzQXJyYXkgPSAhIShhcnJheU1vZGVzICYgQXJyYXlDbGFzcyk7CisgICAgYm9vbCBp
c0FycmF5V2l0aENvbnRpZ3VvdXMgPSAhIShhcnJheU1vZGVzICYgQXJyYXlXaXRoQ29udGlndW91
cyk7CisgICAgYm9vbCBpc0FycmF5V2l0aEFycmF5U3RvcmFnZSA9ICEhKGFycmF5TW9kZXMgJiBB
cnJheVdpdGhBcnJheVN0b3JhZ2UpOworICAgIGJvb2wgaXNBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlID0gISEoYXJyYXlNb2RlcyAmIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOwor
ICAgIAorICAgIHN0YXRpYyBjaGFyIHJlc3VsdFsyNTZdOworICAgIHNucHJpbnRmKAorICAgICAg
ICByZXN1bHQsIHNpemVvZihyZXN1bHQpLAorICAgICAgICAiJXU6JXMlcyVzJXMlcyVzJXMlcyIs
CisgICAgICAgIGFycmF5TW9kZXMsCisgICAgICAgIGlzTm9uQXJyYXkgPyAiTm9uQXJyYXkiIDog
IiIsCisgICAgICAgIGlzTm9uQXJyYXlXaXRoQ29udGlndW91cyA/ICJOb25BcnJheVdpdGhDb250
aWd1b3VzIiA6ICIiLAorICAgICAgICBpc05vbkFycmF5V2l0aEFycmF5U3RvcmFnZSA/ICIgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlIiA6ICIiLAorICAgICAgICBpc05vbkFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2UgPyAiTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSIgOiAiIiwK
KyAgICAgICAgaXNBcnJheSA/ICJBcnJheUNsYXNzIiA6ICIiLAorICAgICAgICBpc0FycmF5V2l0
aENvbnRpZ3VvdXMgPyAiQXJyYXlXaXRoQ29udGlndW91cyIgOiAiIiwKKyAgICAgICAgaXNBcnJh
eVdpdGhBcnJheVN0b3JhZ2UgPyAiIEFycmF5V2l0aEFycmF5U3RvcmFnZSIgOiAiIiwKKyAgICAg
ICAgaXNBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlID8gIkFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2UiIDogIiIpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQXJy
YXlQcm9maWxlOjpjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oT3BlcmF0aW9uSW5Qcm9ncmVzcyBv
cGVyYXRpb24pCiB7CiAgICAgaWYgKG1fbGFzdFNlZW5TdHJ1Y3R1cmUpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHJldmlzaW9uIDEz
MTMyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDQ0IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIHR5cGVkZWYgdW5zaWduZWQgQXJyYXlNb2RlczsKIAogI2RlZmluZSBhc0FycmF5TW9k
ZXModHlwZSkgXAotICAgICgxIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSkKKyAgICAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEpIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSkK
KworI2RlZmluZSBBTExfTk9OX0FSUkFZX0FSUkFZX01PREVTICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgKGFzQXJyYXlNb2RlcyhOb25BcnJheSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgICAgICAg
ICAgICAgXAorICAgICB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpICAg
ICAgICAgICBcCisgICAgIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0
b3JhZ2UpKQorCisjZGVmaW5lIEFMTF9BUlJBWV9BUlJBWV9NT0RFUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAoYXNBcnJheU1vZGVzKEFycmF5Q2xhc3MpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSAg
ICAgICAgICAgICAgICBcCisgICAgIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFn
ZSkgICAgICAgICAgICAgIFwKKyAgICAgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZSkpCisKKyNkZWZpbmUgQUxMX0FSUkFZX01PREVTIChBTExfTk9OX0FSUkFZX0FS
UkFZX01PREVTIHwgQUxMX0FSUkFZX0FSUkFZX01PREVTKQogCiBpbmxpbmUgQXJyYXlNb2RlcyBh
cnJheU1vZGVGcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVy
biBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiB9CiAKK2NvbnN0IGNo
YXIqIGFycmF5TW9kZXNUb1N0cmluZyhBcnJheU1vZGVzKTsKKworaW5saW5lIGJvb2wgbWVyZ2VB
cnJheU1vZGVzKEFycmF5TW9kZXMmIGxlZnQsIEFycmF5TW9kZXMgcmlnaHQpCit7CisgICAgQXJy
YXlNb2RlcyBuZXdNb2RlcyA9IGxlZnQgfCByaWdodDsKKyAgICBpZiAobmV3TW9kZXMgPT0gbGVm
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGxlZnQgPSBuZXdNb2RlczsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworLy8gQ2hlY2tzIGlmIHByb3ZlbiBpcyBhIHN1YnNldCBvZiBleHBlY3Rl
ZC4KK2lubGluZSBib29sIGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZChBcnJheU1vZGVzIHByb3Zl
biwgQXJyYXlNb2RlcyBleHBlY3RlZCkKK3sKKyAgICByZXR1cm4gKGV4cGVjdGVkIHwgcHJvdmVu
KSA9PSBleHBlY3RlZDsKK30KKwogY2xhc3MgQXJyYXlQcm9maWxlIHsKIHB1YmxpYzoKICAgICBB
cnJheVByb2ZpbGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gMTMxMzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaWZuZGVmIFN0cnVjdHVyZVNldF9oCiAjZGVmaW5lIFN0cnVjdHVyZVNldF9oCiAKKyNpbmNs
dWRlICJBcnJheVByb2ZpbGUuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0xMzcsNiArMTM4LDE2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgQXJyYXlN
b2RlcyBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQXJy
YXlNb2RlcyByZXN1bHQgPSAwOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtZXJnZUFycmF5TW9k
ZXMocmVzdWx0LCBhc0FycmF5TW9kZXMobV9zdHJ1Y3R1cmVzW2ldLT5pbmRleGluZ1R5cGUoKSkp
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCiAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CiAgICAgewogICAg
ICAgICBpZiAobV9zdHJ1Y3R1cmVzLnNpemUoKSAhPSBvdGhlci5tX3N0cnVjdHVyZXMuc2l6ZSgp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCShyZXZpc2lvbiAxMzEzMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIwLDkgKzE0MjAsMTUgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMoYXJyYXlNb2Rlc0Zvcihub2Rl
LmFycmF5TW9kZSgpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5
OiB7CisgICAgICAgIGlmIChtb2RlQWxyZWFkeUNoZWNrZWQoZm9yTm9kZShub2RlLmNoaWxkMSgp
KSwgbm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAg
ICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CiAgICAgICAgICAgICBub2RlLnNldENhbkV4
aXQodHJ1ZSk7CkBAIC0xNDMxLDkgKzE0MzcsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIo
KTsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMoYXJyYXlNb2Rlc0Zv
cihub2RlLmFycmF5TW9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgQ1JBU0go
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9u
IDEzMTMyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAorI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlw
ZS5oIgpAQCAtNDAsMTIgKzQxLDE0IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICBBYnN0cmFjdFZhbHVlKCkKICAgICAgICAgOiBt
X3R5cGUoU3BlY05vbmUpCisgICAgICAgICwgbV9hcnJheU1vZGVzKDApCiAgICAgewogICAgIH0K
ICAgICAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7CiAgICAgICAgIG1fdHlwZSA9IFNwZWNOb25l
OworICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwogICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5jbGVhcigpOwogICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7
CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CkBAIC01NCw3ICs1Nyw3IEBAIHN0cnVjdCBB
YnN0cmFjdFZhbHVlIHsKICAgICAKICAgICBib29sIGlzQ2xlYXIoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgYm9vbCByZXN1bHQgPSBtX3R5cGUgPT0gU3BlY05vbmUgJiYgbV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuaXNDbGVhcigpICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNDbGVhcigp
OworICAgICAgICBib29sIHJlc3VsdCA9IG1fdHlwZSA9PSBTcGVjTm9uZSAmJiAhbV9hcnJheU1v
ZGVzICYmIG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSAmJiBtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlLmlzQ2xlYXIoKTsKICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAg
IEFTU0VSVCghbV92YWx1ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC02Myw2ICs2Niw3
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB2b2lkIG1ha2VUb3AoKQogICAgIHsKICAg
ICAgICAgbV90eXBlID0gU3BlY1RvcDsKKyAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZ
X01PREVTOwogICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAg
ICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICBtX3ZhbHVl
ID0gSlNWYWx1ZSgpOwpAQCAtNzEsMTMgKzc1LDE2IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsK
ICAgICAKICAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCkKICAgICB7Ci0gICAgICAgIGlmICht
X3R5cGUgJiBTcGVjQ2VsbCkKKyAgICAgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7CiAgICAg
ICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7Ci0gICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGNsb2JiZXJBcnJheU1vZGVzKCk7CisgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBBU1NFUlQobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghbV9hcnJheU1vZGVzKTsKKyAgICAgICAgfQogICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CiAgICAgfQotICAgIAorICAgICAgICAKICAgICB2b2lkIGNsb2JiZXJWYWx1
ZSgpCiAgICAgewogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwpAQCAtMTA1LDI5ICsxMTIs
MTcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAKLSAgICB2b2lkIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKFN0cnVjdHVyZSog
c3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpbHRlckZ1
dHVyZVBvc3NpYmxlU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkK
LSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuZmlsdGVyKFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUoc3RydWN0dXJlKSk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgc2V0TW9zdFNw
ZWNpZmljKEpTVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1
ZS5pc0NlbGwoKSkgewogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlKCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVy
ZSA9IHN0cnVjdHVyZTsKICAgICAgICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKHN0
cnVjdHVyZSk7CisgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgbV90eXBlID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFs
dWUpOwpAQCAtMTQwLDEwICsxMzUsMTQgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsK
ICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgIG1f
Y3VycmVudEtub3duU3RydWN0dXJlLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIHNldEZ1dHVyZVBv
c3NpYmxlU3RydWN0dXJlKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKKyAg
ICAgICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgICAg
ICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSk7CisgICAgICAgICAgICBjbG9iYmVyQXJyYXlNb2RlcygpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgICAg
IG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fYXJyYXlN
b2RlcyA9IDA7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fdHlwZSA9IHNwZWN1bGF0
aW9uRnJvbVZhbHVlKHZhbHVlKTsKQEAgLTE1Niw2ICsxNTUsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RW
YWx1ZSB7CiAgICAgewogICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSA9IHN0cnVjdHVy
ZTsKICAgICAgICAgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKKyAgICAg
ICAgbV9hcnJheU1vZGVzID0gYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
OwogICAgICAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsK
ICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgCkBAIC0xNjcsOSArMTY3LDEx
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgaWYgKHR5cGUgJiBTcGVjQ2VsbCkg
ewogICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAg
ICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBt
X2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICAgICAgbV9mdXR1
cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgbV9hcnJheU1vZGVzID0g
MDsKICAgICAgICAgfQogICAgICAgICBtX3R5cGUgPSB0eXBlOwogICAgICAgICBtX3ZhbHVlID0g
SlNWYWx1ZSgpOwpAQCAtMTc5LDYgKzE4MSw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gbV90eXBlID09IG90aGVyLm1fdHlwZQorICAgICAgICAgICAgJiYg
bV9hcnJheU1vZGVzID09IG90aGVyLm1fYXJyYXlNb2RlcwogICAgICAgICAgICAgJiYgbV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUgPT0gb3RoZXIubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUKICAgICAg
ICAgICAgICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgPT0gb3RoZXIubV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZQogICAgICAgICAgICAgJiYgbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOwpA
QCAtMTk5LDYgKzIwMiw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgICAgIHJl
c3VsdCA9ICFvdGhlci5pc0NsZWFyKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBy
ZXN1bHQgfD0gbWVyZ2VTcGVjdWxhdGlvbihtX3R5cGUsIG90aGVyLm1fdHlwZSk7CisgICAgICAg
ICAgICByZXN1bHQgfD0gbWVyZ2VBcnJheU1vZGVzKG1fYXJyYXlNb2Rlcywgb3RoZXIubV9hcnJh
eU1vZGVzKTsKICAgICAgICAgICAgIHJlc3VsdCB8PSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5h
ZGRBbGwob3RoZXIubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUpOwogICAgICAgICAgICAgcmVzdWx0
IHw9IG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuYWRkQWxsKG90aGVyLm1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaWYgKG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZSkg
ewpAQCAtMjE4LDYgKzIyMiw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgaWYg
KHR5cGUgJiBTcGVjQ2VsbCkgewogICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
bWFrZVRvcCgpOwogICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9w
KCk7CisgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAgICAg
IH0KICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKIApAQCAtMjI3LDYgKzIzMiw3IEBAIHN0
cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
IG90aGVyKQogICAgIHsKICAgICAgICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0
cnVjdHVyZXMoKTsKKyAgICAgICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9t
U3RydWN0dXJlcygpOwogICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5maWx0ZXIob3Ro
ZXIpOwogICAgICAgICBpZiAobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKQogICAg
ICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOwpAQCAtMjQxLDExICsy
NDcsMjQgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICBtX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZS5maWx0ZXIobV90eXBlKTsKICAgICAgICAgCisgICAgICAgIGZpbHRlckFycmF5TW9kZXNCeVR5
cGUoKTsKICAgICAgICAgZmlsdGVyVmFsdWVCeVR5cGUoKTsKICAgICAgICAgCiAgICAgICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBmaWx0ZXJBcnJheU1vZGVz
KEFycmF5TW9kZXMgYXJyYXlNb2RlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChhcnJheU1vZGVz
KTsKKyAgICAgICAgCisgICAgICAgIG1fdHlwZSAmPSBTcGVjQ2VsbDsKKyAgICAgICAgbV9hcnJh
eU1vZGVzICY9IGFycmF5TW9kZXM7CisgICAgICAgIAorICAgICAgICAvLyBJIGNvdWxkIGRvIG1v
cmUgZmFuY3kgZmlsdGVyaW5nIGhlcmUuIEJ1dCBpdCBwcm9iYWJseSB3b24ndCBtYWtlIGFueSBk
aWZmZXJlbmNlLgorICAgICAgICAKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIH0K
KyAgICAKICAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSB0eXBlKQogICAgIHsKICAgICAg
ICAgaWYgKHR5cGUgPT0gU3BlY1RvcCkKQEAgLTI1OCwzMSArMjc3LDEzIEBAIHN0cnVjdCBBYnN0
cmFjdFZhbHVlIHsKICAgICAgICAgLy8gdGhlIG5ldyB0eXBlIChOb25lKSByYXRoZXIgdGhhbiB0
aGUgb25lIHBhc3NlZCAoQXJyYXkpLgogICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5m
aWx0ZXIobV90eXBlKTsKICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5maWx0ZXIo
bV90eXBlKTsKLQorICAgICAgICAKKyAgICAgICAgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwog
ICAgICAgICBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwogICAgICAgICAKICAgICAgICAgY2hlY2tDb25z
aXN0ZW5jeSgpOwogICAgIH0KICAgICAKLSAgICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQg
ZW5zdXJlIHRoYXQgaWYgdGhlIGZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVzCi0g
ICAgLy8gdGhlIHZhbHVlLCB0aGVuIHdlIGNvdWxkIGNsZWFyIGJvdGggb2YgdGhvc2UgdGhpbmdz
LiBCdXQgdGhhdCdzIHVubGlrZWx5IHRvIGhlbHAKLSAgICAvLyBpbiBhbnkgcmVhbGlzdGljIHNj
ZW5hcmlvLCBzbyB3ZSBkb24ndCBkbyBpdC4gU2ltcGxlciBpcyBiZXR0ZXIuCi0gICAgdm9pZCBm
aWx0ZXJWYWx1ZUJ5VHlwZSgpCi0gICAgewotICAgICAgICBpZiAoISFtX3R5cGUpIHsKLSAgICAg
ICAgICAgIC8vIFRoZSB0eXBlIGlzIHN0aWxsIG5vbi1lbXB0eS4gVGhpcyBpbXBsaWVzIHRoYXQg
cmVnYXJkbGVzcyBvZiB3aGF0IGZpbHRlcmluZwotICAgICAgICAgICAgLy8gd2FzIGRvbmUsIHdl
IGVpdGhlciBkaWRuJ3QgaGF2ZSBhIHZhbHVlIHRvIGJlZ2luIHdpdGgsIG9yIHRoYXQgdmFsdWUg
aXMgc3RpbGwKLSAgICAgICAgICAgIC8vIHZhbGlkLgotICAgICAgICAgICAgQVNTRVJUKCFtX3Zh
bHVlIHx8IHZhbGlkYXRlVHlwZShtX3ZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSB0eXBlIGhhcyBiZWVuIHJlbmRlcmVkIGVt
cHR5LiBUaGF0IG1lYW5zIHRoYXQgdGhlIHZhbHVlIG11c3Qgbm93IGJlIGludmFsaWQsCi0gICAg
ICAgIC8vIGFzIHdlbGwuCi0gICAgICAgIEFTU0VSVCghbV92YWx1ZSB8fCAhdmFsaWRhdGVUeXBl
KG1fdmFsdWUpKTsKLSAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKLSAgICB9Ci0gICAgCiAg
ICAgYm9vbCB2YWxpZGF0ZVR5cGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAg
IGlmIChpc1RvcCgpKQpAQCAtMzE5LDcgKzMyMCw4IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsK
ICAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgJiBTcGVjQ2VsbCk7CiAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCi0g
ICAgICAgICAgICAgICAgJiYgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jb250YWlucyhzdHJ1
Y3R1cmUpOworICAgICAgICAgICAgICAgICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY29u
dGFpbnMoc3RydWN0dXJlKQorICAgICAgICAgICAgICAgICYmIChtX2FycmF5TW9kZXMgJiBhc0Fy
cmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMzMCw2ICszMzIsNyBAQCBzdHJ1Y3QgQWJzdHJh
Y3RWYWx1ZSB7CiAgICAgICAgIGlmICghKG1fdHlwZSAmIFNwZWNDZWxsKSkgewogICAgICAgICAg
ICAgQVNTRVJUKG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSk7CiAgICAgICAgICAg
ICBBU1NFUlQobV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc0NsZWFyKCkpOworICAgICAgICAg
ICAgQVNTRVJUKCFtX2FycmF5TW9kZXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAoaXNDbGVhcigpKQpAQCAtMzQ2LDcgKzM0OSw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsK
ICAgICAKICAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdAogICAgIHsKLSAgICAgICAgZnBy
aW50ZihvdXQsICIoJXMsICIsIHNwZWN1bGF0aW9uVG9TdHJpbmcobV90eXBlKSk7CisgICAgICAg
IGZwcmludGYob3V0LCAiKCVzLCAlcywgIiwgc3BlY3VsYXRpb25Ub1N0cmluZyhtX3R5cGUpLCBh
cnJheU1vZGVzVG9TdHJpbmcobV9hcnJheU1vZGVzKSk7CiAgICAgICAgIG1fY3VycmVudEtub3du
U3RydWN0dXJlLmR1bXAob3V0KTsKICAgICAgICAgZGF0YUxvZygiLCAiKTsKICAgICAgICAgbV9m
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5kdW1wKG91dCk7CkBAIC00MzcsNiArNDQwLDEzIEBAIHN0
cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAvLyB1bmlmaWVkIHdpdGggdGhlIHNldCBvZiBhbGwg
b2JqZWN0cyB3aXRoIHN0cnVjdHVyZSAweDEyMzQ1LgogICAgIFNwZWN1bGF0ZWRUeXBlIG1fdHlw
ZTsKICAgICAKKyAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHBvc3Np
YmxlIGluZGV4aW5nIHR5cGVzIHRoYXQgdGhpcyB2YWx1ZQorICAgIC8vIGNhbiBoYXZlIHJpZ2h0
IG5vdy4gSXQgYWxzbyBpbXBsaWNpdGx5IGNvbnN0cmFpbnRzIHRoZSBzZXQgb2Ygc3RydWN0dXJl
cworICAgIC8vIHRoYXQgdGhlIHZhbHVlIG1heSBoYXZlIHJpZ2h0IG5vdywgc2luY2UgYSBzdHJ1
Y3R1cmUgaGFzIGFuIGltbXV0YWJsZQorICAgIC8vIGluZGV4aW5nIHR5cGUuIFRoaXMgaXMgc3Vi
amVjdCB0byBjaGFuZ2UgdXBvbiByZWFzc2lnbm1lbnQsIG9yIGFueSBzaWRlCisgICAgLy8gZWZm
ZWN0IHRoYXQgbWFrZXMgbm9uLW9idmlvdXMgY2hhbmdlcyB0byB0aGUgaGVhcC4KKyAgICBBcnJh
eU1vZGVzIG1fYXJyYXlNb2RlczsKKyAgICAKICAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0
cmFpbnQgb24gdGhlIHBvc3NpYmxlIHZhbHVlcyB0aGF0IHRoaXMgdmFsdWUgY2FuCiAgICAgLy8g
aGF2ZSBub3cgb3IgYW55IHRpbWUgaW4gdGhlIGZ1dHVyZSwgdW5sZXNzIGl0IGlzIHJlYXNzaWdu
ZWQuIE5vdGUgdGhhdCB0aGlzCiAgICAgLy8gaW1wbGllcyBub3RoaW5nIGFib3V0IHRoZSBzdHJ1
Y3R1cmUuIE9kZGx5LCBKU1ZhbHVlKCkgKGkuZS4gdGhlIGVtcHR5IHZhbHVlKQpAQCAtNDQ0LDYg
KzQ1NCw3NSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgLy8gQk9UVE9NIHRoZW4gSlNW
YWx1ZSgpIG1lYW5zIEJPVFRPTTsgaWYgbV90eXBlIGlzIG5vdCBCT1RUT00gdGhlbiBKU1ZhbHVl
KCkKICAgICAvLyBtZWFucyBUT1AuCiAgICAgSlNWYWx1ZSBtX3ZhbHVlOworCitwcml2YXRlOgor
ICAgIHZvaWQgY2xvYmJlckFycmF5TW9kZXMoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYXJyYXlN
b2RlcyA9PSBBTExfQVJSQVlfTU9ERVMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBpZiAoTElLRUxZKG1fYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhOb25BcnJheSkp
KQorICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBjbG9iYmVyQXJyYXlNb2Rlc1Nsb3coKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjbG9iYmVyQXJyYXlNb2Rlc1Nsb3coKQorICAgIHsKKyAgICAgICAgaWYgKG1fYXJy
YXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhBcnJheUNsYXNzKSkKKyAgICAgICAgICAgIG1fYXJyYXlN
b2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsKKyAgICAgICAgZWxzZSBpZiAobV9hcnJheU1vZGVzICYg
YXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpKQorICAgICAgICAgICAgbV9hcnJh
eU1vZGVzIHw9IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJh
eU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOworICAgICAgICBlbHNlIGlm
IChtX2FycmF5TW9kZXMgJiBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cykpCisgICAg
ICAgICAgICBtX2FycmF5TW9kZXMgfD0gYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFn
ZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAg
IGVsc2UgaWYgKG1fYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2UpKQorICAgICAgICAgICAgbV9hcnJheU1vZGVzIHw9IGFzQXJyYXlNb2RlcyhOb25BcnJh
eVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgZWxzZSBpZiAobV9hcnJheU1vZGVz
ICYgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpCisgICAgICAgICAgICBtX2Fy
cmF5TW9kZXMgfD0gYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAgfQor
CisgICAgdm9pZCBzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlID0g
c3RydWN0dXJlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlLm1ha2VUb3AoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaWx0ZXJGdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAg
ICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmZpbHRlcihTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlKHN0cnVjdHVyZSkpOworICAgIH0KKworICAgIC8vIFdlIGNvdWxkIGdvIGZ1cnRoZXIsIGFu
ZCBlbnN1cmUgdGhhdCBpZiB0aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgY29udHJhdmVuZXMK
KyAgICAvLyB0aGUgdmFsdWUsIHRoZW4gd2UgY291bGQgY2xlYXIgYm90aCBvZiB0aG9zZSB0aGlu
Z3MuIEJ1dCB0aGF0J3MgdW5saWtlbHkgdG8gaGVscAorICAgIC8vIGluIGFueSByZWFsaXN0aWMg
c2NlbmFyaW8sIHNvIHdlIGRvbid0IGRvIGl0LiBTaW1wbGVyIGlzIGJldHRlci4KKyAgICB2b2lk
IGZpbHRlclZhbHVlQnlUeXBlKCkKKyAgICB7CisgICAgICAgIGlmICghIW1fdHlwZSkgeworICAg
ICAgICAgICAgLy8gVGhlIHR5cGUgaXMgc3RpbGwgbm9uLWVtcHR5LiBUaGlzIGltcGxpZXMgdGhh
dCByZWdhcmRsZXNzIG9mIHdoYXQgZmlsdGVyaW5nCisgICAgICAgICAgICAvLyB3YXMgZG9uZSwg
d2UgZWl0aGVyIGRpZG4ndCBoYXZlIGEgdmFsdWUgdG8gYmVnaW4gd2l0aCwgb3IgdGhhdCB2YWx1
ZSBpcyBzdGlsbAorICAgICAgICAgICAgLy8gdmFsaWQuCisgICAgICAgICAgICBBU1NFUlQoIW1f
dmFsdWUgfHwgdmFsaWRhdGVUeXBlKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIHR5cGUgaGFzIGJlZW4gcmVuZGVyZWQg
ZW1wdHkuIFRoYXQgbWVhbnMgdGhhdCB0aGUgdmFsdWUgbXVzdCBub3cgYmUgaW52YWxpZCwKKyAg
ICAgICAgLy8gYXMgd2VsbC4KKyAgICAgICAgQVNTRVJUKCFtX3ZhbHVlIHx8ICF2YWxpZGF0ZVR5
cGUobV92YWx1ZSkpOworICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKQorICAgIHsKKyAgICAgICAgaWYgKCEo
bV90eXBlICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKKyAgICAg
ICAgZWxzZSBpZiAoIShtX3R5cGUgJiB+U3BlY0FycmF5KSkKKyAgICAgICAgICAgIG1fYXJyYXlN
b2RlcyAmPSBBTExfQVJSQVlfQVJSQVlfTU9ERVM7CisgICAgICAgIGVsc2UgaWYgKCEobV90eXBl
ICYgU3BlY0FycmF5KSkKKyAgICAgICAgICAgIG1fYXJyYXlNb2RlcyAmPSBBTExfTk9OX0FSUkFZ
X0FSUkFZX01PREVTOworICAgIH0KIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9u
IDEzMTMyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY3LDEyICsxNjcsMTcgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNr
ZWQoQWJzdHJhY3RWYWx1ZSYgdgogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91czoKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1Rh
aWw6CiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHM6CisgICAgY2FzZSBBcnJheTo6VG9Db250aWd1b3VzOgorICAgICAgICBpZiAoYXJyYXlNb2Rl
c0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKICAgICAgICAgICAgICYmIGhhc0NvbnRpZ3VvdXMo
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgp
KTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKICAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgogICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJl
YWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250
aWd1b3VzKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAgICAgICAmJiBo
YXNDb250aWd1b3VzKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5p
bmRleGluZ1R5cGUoKSkKICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKQEAgLTE4MywyOSAr
MTg4LDM4IEBAIGJvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHYKICAgICBj
YXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKICAgICBjYXNlIEFycmF5OjpQ
b3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgIGNhc2UgQXJyYXk6
OlRvQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlUb0FycmF5U3Rv
cmFnZToKKyAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5
TW9kZXMsIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1v
ZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24o
KQogICAgICAgICAgICAgJiYgaGFzRmFzdEFycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAKICAgICBj
YXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpUb1Nsb3dQdXRB
cnJheVN0b3JhZ2U6CisgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUu
bV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFz
QXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4g
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKICAgICAgICAgICAg
ICYmIGhhc0FycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0
b24oKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9I
b2xlOgogICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgor
ICAgIGNhc2UgQXJyYXk6OkFycmF5VG9BcnJheVN0b3JhZ2U6CisgICAgICAgIGlmIChhcnJheU1v
ZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoQXJyYXlX
aXRoQXJyYXlTdG9yYWdlKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0
dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAg
ICAgICAmJiBoYXNGYXN0QXJyYXlTdG9yYWdlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
LnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSkKICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5
KTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZToKKyAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9k
ZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9u
KCkKICAgICAgICAgICAgICYmIGhhc0FycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpCiAgICAgICAgICAgICAmJiAodmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYg
SXNBcnJheSk7CiAgICAgICAgIAotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAg
ICAgICAgIHJldHVybiBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CiAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZp
c2lvbiAxMzEzMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDksNiArMzQ5LDUxIEBAIGlubGluZSBib29sIGlzRWZmZWN0
ZnVsKEFycmF5OjpNb2RlIG1vZGUKICAgICB9CiB9CiAKKy8vIFRoaXMgcmV0dXJucyB0aGUgc2V0
IG9mIGFycmF5IG1vZGVzIHRoYXQgd2lsbCBwYXNzIGZpbHRlcmluZyBvZiBhIENoZWNrQXJyYXkg
b3IKKy8vIEFycmF5aWZ5IHdpdGggdGhlIGdpdmVuIG1vZGUuCitpbmxpbmUgQXJyYXlNb2RlcyBh
cnJheU1vZGVzRm9yKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5
TW9kZSkgeworICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgIHJldHVybiBBTExfQVJS
QVlfTU9ERVM7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzVG9UYWlsOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczoK
KyAgICBjYXNlIEFycmF5OjpUb0NvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGln
dW91c1RvVGFpbDoKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250
aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICBjYXNlIEFS
UkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhDb250aWd1b3VzKTsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOgorICAgIGNhc2UgQXJyYXk6OkFycmF5U3Rv
cmFnZU91dE9mQm91bmRzOgorICAgIGNhc2UgQXJyYXk6OlRvQXJyYXlTdG9yYWdlOgorICAgICAg
ICByZXR1cm4gYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAgY2Fz
ZSBBcnJheTo6VG9TbG93UHV0QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRB
cnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
KTsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBj
YXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKKyAgICBjYXNl
IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgIGNh
c2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlUb0FycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5
V2l0aEFycmF5U3RvcmFnZSk7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhTbG93
UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2Rl
cyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9I
b2xlOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgor
ICAgIGNhc2UgQXJyYXk6OkFycmF5VG9BcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBhc0Fy
cmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKEFycmF5
V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhOb25BcnJh
eSk7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxMzEzMjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIENo
ZWNrQXJyYXk6IHsKKyAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXlpZnk6IHsKICAgICAgICAgICAgICAgICBpZiAoIW1vZGVBbHJlYWR5Q2hlY2tlZCht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3Vu
dCgpID09IDEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEzMTMyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTksMTAgKzU1
OSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlKQogewogICAgIEFTU0VSVChtb2RlSXNT
cGVjaWZpYyhub2RlLmFycmF5TW9kZSgpKSk7Ci0gICAgQVNTRVJUKCFtb2RlQWxyZWFkeUNoZWNr
ZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSk7CiAg
ICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICAKKyAgICBpZiAobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1w
LmdwcigpKTsKKyAgICAgICAgc3RvcmFnZVJlc3VsdCh0ZW1wLmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgaWYgKCFub2RlLmNoaWxkMigp
KSB7CiAgICAgICAgIGFycmF5aWZ5KG5vZGUsIGJhc2UuZ3ByKCksIEludmFsaWRHUFJSZWcpOwog
ICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168821</attachid>
            <date>2012-10-15 17:44:02 -0700</date>
            <delta_ts>2012-10-16 03:40:15 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>cfaarray_4.patch</filename>
            <type>text/plain</type>
            <size>28687</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxMzg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDEyLTEwLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIHNvbWUgZmFjaWxpdHkgZm9yIHJlY29nbml6aW5nIHJlZHVuZGFudCBD
aGVja0FycmF5cyBhbmQgQXJyYXlpZmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTkyODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRzIHJlYXNvbmluZyBhYm91dCBpbmRleGluZyB0eXBlIHNldHMg
KGkuZS4gQXJyYXlNb2RlcykgdG8gQWJzdHJhY3RWYWx1ZSwgd2hpY2gKKyAgICAgICAgdGhlbiBl
bmFibGVzIHVzIHRvIGZvbGQgYXdheSBDaGVja0FycmF5J3MgYW5kIEFycmF5aWZ5J3MgdGhhdCBh
cmUgcmVkdW5kYW50LgorCisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6YXJyYXlNb2Rlc1RvU3RyaW5nKToKKyAgICAgICAgKEpTQyk6CisgICAgICAg
ICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjptZXJnZUFycmF5TW9kZXMpOgorICAgICAgICAoSlNDOjphcnJheU1vZGVzQWxyZWFkeUNoZWNr
ZWQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5oOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6OmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcyk6CisgICAgICAgIChTdHJ1Y3R1
cmVTZXQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJh
Y3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OkFic3RyYWN0VmFs
dWUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc0NsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChBYnN0cmFjdFZhbHVlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6OnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWVy
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZpbHRlcik6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQXJyYXlNb2Rlcyk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0VmFsdWU6OmNoZWNrQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0VmFsdWU6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2Ji
ZXJBcnJheU1vZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjbG9iYmVy
QXJyYXlNb2Rlc1Nsb3cpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldEZ1
dHVyZVBvc3NpYmxlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpmaWx0ZXJGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSk6CisgICAgICAgICogZGZnL0RGR0FycmF5
TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6bW9kZUFscmVhZHlDaGVja2VkKToKKyAgICAg
ICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6YXJyYXlNb2Rlc0Zv
cik6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25z
dGFudHMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKwogMjAxMi0xMC0xNSAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgQ29waWVk
U3BhY2UgYW5kIE1hcmtlZFNwYWNlIHJlZ2lvbnMgaW5kZXBlbmRlbnQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCShyZXZpc2lvbiAx
MzEzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNDQgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJBcnJheVByb2ZpbGUuaCIKIAorI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMu
aD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NvbnN0IGNoYXIqIGFycmF5TW9kZXNUb1N0cmluZyhB
cnJheU1vZGVzIGFycmF5TW9kZXMpCit7CisgICAgaWYgKCFhcnJheU1vZGVzKQorICAgICAgICBy
ZXR1cm4gIjA6PGVtcHR5PiI7CisgICAgCisgICAgaWYgKGFycmF5TW9kZXMgPT0gQUxMX0FSUkFZ
X01PREVTKQorICAgICAgICByZXR1cm4gIlRPUCI7CisKKyAgICBib29sIGlzTm9uQXJyYXkgPSAh
IShhcnJheU1vZGVzICYgTm9uQXJyYXkpOworICAgIGJvb2wgaXNOb25BcnJheVdpdGhDb250aWd1
b3VzID0gISEoYXJyYXlNb2RlcyAmIE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgIGJvb2wg
aXNOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UgPSAhIShhcnJheU1vZGVzICYgTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlKTsKKyAgICBib29sIGlzTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZSA9ICEhKGFycmF5TW9kZXMgJiBOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAg
ICBib29sIGlzQXJyYXkgPSAhIShhcnJheU1vZGVzICYgQXJyYXlDbGFzcyk7CisgICAgYm9vbCBp
c0FycmF5V2l0aENvbnRpZ3VvdXMgPSAhIShhcnJheU1vZGVzICYgQXJyYXlXaXRoQ29udGlndW91
cyk7CisgICAgYm9vbCBpc0FycmF5V2l0aEFycmF5U3RvcmFnZSA9ICEhKGFycmF5TW9kZXMgJiBB
cnJheVdpdGhBcnJheVN0b3JhZ2UpOworICAgIGJvb2wgaXNBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlID0gISEoYXJyYXlNb2RlcyAmIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOwor
ICAgIAorICAgIHN0YXRpYyBjaGFyIHJlc3VsdFsyNTZdOworICAgIHNucHJpbnRmKAorICAgICAg
ICByZXN1bHQsIHNpemVvZihyZXN1bHQpLAorICAgICAgICAiJXU6JXMlcyVzJXMlcyVzJXMlcyIs
CisgICAgICAgIGFycmF5TW9kZXMsCisgICAgICAgIGlzTm9uQXJyYXkgPyAiTm9uQXJyYXkiIDog
IiIsCisgICAgICAgIGlzTm9uQXJyYXlXaXRoQ29udGlndW91cyA/ICJOb25BcnJheVdpdGhDb250
aWd1b3VzIiA6ICIiLAorICAgICAgICBpc05vbkFycmF5V2l0aEFycmF5U3RvcmFnZSA/ICIgTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlIiA6ICIiLAorICAgICAgICBpc05vbkFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2UgPyAiTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSIgOiAiIiwK
KyAgICAgICAgaXNBcnJheSA/ICJBcnJheUNsYXNzIiA6ICIiLAorICAgICAgICBpc0FycmF5V2l0
aENvbnRpZ3VvdXMgPyAiQXJyYXlXaXRoQ29udGlndW91cyIgOiAiIiwKKyAgICAgICAgaXNBcnJh
eVdpdGhBcnJheVN0b3JhZ2UgPyAiIEFycmF5V2l0aEFycmF5U3RvcmFnZSIgOiAiIiwKKyAgICAg
ICAgaXNBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlID8gIkFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2UiIDogIiIpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQXJy
YXlQcm9maWxlOjpjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oT3BlcmF0aW9uSW5Qcm9ncmVzcyBv
cGVyYXRpb24pCiB7CiAgICAgaWYgKG1fbGFzdFNlZW5TdHJ1Y3R1cmUpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHJldmlzaW9uIDEz
MTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDQ0IEBAIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIHR5cGVkZWYgdW5zaWduZWQgQXJyYXlNb2RlczsKIAogI2RlZmluZSBhc0FycmF5TW9k
ZXModHlwZSkgXAotICAgICgxIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSkKKyAgICAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEpIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSkK
KworI2RlZmluZSBBTExfTk9OX0FSUkFZX0FSUkFZX01PREVTICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgKGFzQXJyYXlNb2RlcyhOb25BcnJheSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgICAgICAg
ICAgICAgXAorICAgICB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpICAg
ICAgICAgICBcCisgICAgIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0
b3JhZ2UpKQorCisjZGVmaW5lIEFMTF9BUlJBWV9BUlJBWV9NT0RFUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAoYXNBcnJheU1vZGVzKEFycmF5Q2xhc3MpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSAg
ICAgICAgICAgICAgICBcCisgICAgIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFn
ZSkgICAgICAgICAgICAgIFwKKyAgICAgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZSkpCisKKyNkZWZpbmUgQUxMX0FSUkFZX01PREVTIChBTExfTk9OX0FSUkFZX0FS
UkFZX01PREVTIHwgQUxMX0FSUkFZX0FSUkFZX01PREVTKQogCiBpbmxpbmUgQXJyYXlNb2RlcyBh
cnJheU1vZGVGcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIHJldHVy
biBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiB9CiAKK2NvbnN0IGNo
YXIqIGFycmF5TW9kZXNUb1N0cmluZyhBcnJheU1vZGVzKTsKKworaW5saW5lIGJvb2wgbWVyZ2VB
cnJheU1vZGVzKEFycmF5TW9kZXMmIGxlZnQsIEFycmF5TW9kZXMgcmlnaHQpCit7CisgICAgQXJy
YXlNb2RlcyBuZXdNb2RlcyA9IGxlZnQgfCByaWdodDsKKyAgICBpZiAobmV3TW9kZXMgPT0gbGVm
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGxlZnQgPSBuZXdNb2RlczsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworLy8gQ2hlY2tzIGlmIHByb3ZlbiBpcyBhIHN1YnNldCBvZiBleHBlY3Rl
ZC4KK2lubGluZSBib29sIGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZChBcnJheU1vZGVzIHByb3Zl
biwgQXJyYXlNb2RlcyBleHBlY3RlZCkKK3sKKyAgICByZXR1cm4gKGV4cGVjdGVkIHwgcHJvdmVu
KSA9PSBleHBlY3RlZDsKK30KKwogY2xhc3MgQXJyYXlQcm9maWxlIHsKIHB1YmxpYzoKICAgICBB
cnJheVByb2ZpbGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gMTMxMzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaWZuZGVmIFN0cnVjdHVyZVNldF9oCiAjZGVmaW5lIFN0cnVjdHVyZVNldF9oCiAKKyNpbmNs
dWRlICJBcnJheVByb2ZpbGUuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0xMzcsNiArMTM4LDE2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgQXJyYXlN
b2RlcyBhcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQXJy
YXlNb2RlcyByZXN1bHQgPSAwOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtZXJnZUFycmF5TW9k
ZXMocmVzdWx0LCBhc0FycmF5TW9kZXMobV9zdHJ1Y3R1cmVzW2ldLT5pbmRleGluZ1R5cGUoKSkp
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCiAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CiAgICAgewogICAg
ICAgICBpZiAobV9zdHJ1Y3R1cmVzLnNpemUoKSAhPSBvdGhlci5tX3N0cnVjdHVyZXMuc2l6ZSgp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCShyZXZpc2lvbiAxMzEzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIwLDkgKzE0MjAsMTUgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMoYXJyYXlNb2Rlc0Zvcihub2Rl
LmFycmF5TW9kZSgpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5
OiB7CisgICAgICAgIGlmIChtb2RlQWxyZWFkeUNoZWNrZWQoZm9yTm9kZShub2RlLmNoaWxkMSgp
KSwgbm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewogICAg
ICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CiAgICAgICAgICAgICBub2RlLnNldENhbkV4
aXQodHJ1ZSk7CkBAIC0xNDMxLDkgKzE0MzcsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIo
KTsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMoYXJyYXlNb2Rlc0Zv
cihub2RlLmFycmF5TW9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgQ1JBU0go
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9u
IDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAorI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlw
ZS5oIgpAQCAtNDAsMTIgKzQxLDE0IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICBBYnN0cmFjdFZhbHVlKCkKICAgICAgICAgOiBt
X3R5cGUoU3BlY05vbmUpCisgICAgICAgICwgbV9hcnJheU1vZGVzKDApCiAgICAgewogICAgIH0K
ICAgICAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7CiAgICAgICAgIG1fdHlwZSA9IFNwZWNOb25l
OworICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwogICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5jbGVhcigpOwogICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7
CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CkBAIC01NCw3ICs1Nyw3IEBAIHN0cnVjdCBB
YnN0cmFjdFZhbHVlIHsKICAgICAKICAgICBib29sIGlzQ2xlYXIoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgYm9vbCByZXN1bHQgPSBtX3R5cGUgPT0gU3BlY05vbmUgJiYgbV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuaXNDbGVhcigpICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNDbGVhcigp
OworICAgICAgICBib29sIHJlc3VsdCA9IG1fdHlwZSA9PSBTcGVjTm9uZSAmJiAhbV9hcnJheU1v
ZGVzICYmIG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSAmJiBtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlLmlzQ2xlYXIoKTsKICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAg
IEFTU0VSVCghbV92YWx1ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC02Myw2ICs2Niw3
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB2b2lkIG1ha2VUb3AoKQogICAgIHsKICAg
ICAgICAgbV90eXBlID0gU3BlY1RvcDsKKyAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZ
X01PREVTOwogICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAg
ICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICBtX3ZhbHVl
ID0gSlNWYWx1ZSgpOwpAQCAtNzEsMTMgKzc1LDE2IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsK
ICAgICAKICAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCkKICAgICB7Ci0gICAgICAgIGlmICht
X3R5cGUgJiBTcGVjQ2VsbCkKKyAgICAgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7CiAgICAg
ICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7Ci0gICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGNsb2JiZXJBcnJheU1vZGVzKCk7CisgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBBU1NFUlQobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghbV9hcnJheU1vZGVzKTsKKyAgICAgICAgfQogICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CiAgICAgfQotICAgIAorICAgICAgICAKICAgICB2b2lkIGNsb2JiZXJWYWx1
ZSgpCiAgICAgewogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwpAQCAtMTA1LDI5ICsxMTIs
MTcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAKLSAgICB2b2lkIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKFN0cnVjdHVyZSog
c3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpbHRlckZ1
dHVyZVBvc3NpYmxlU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkK
LSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuZmlsdGVyKFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUoc3RydWN0dXJlKSk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgc2V0TW9zdFNw
ZWNpZmljKEpTVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1
ZS5pc0NlbGwoKSkgewogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlKCk7CiAgICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVy
ZSA9IHN0cnVjdHVyZTsKICAgICAgICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKHN0
cnVjdHVyZSk7CisgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgbV90eXBlID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFs
dWUpOwpAQCAtMTQwLDEwICsxMzUsMTQgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsK
ICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgIG1f
Y3VycmVudEtub3duU3RydWN0dXJlLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIHNldEZ1dHVyZVBv
c3NpYmxlU3RydWN0dXJlKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKKyAg
ICAgICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgICAg
ICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSk7CisgICAgICAgICAgICBjbG9iYmVyQXJyYXlNb2RlcygpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgICAg
IG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fYXJyYXlN
b2RlcyA9IDA7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fdHlwZSA9IHNwZWN1bGF0
aW9uRnJvbVZhbHVlKHZhbHVlKTsKQEAgLTE1Niw2ICsxNTUsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RW
YWx1ZSB7CiAgICAgewogICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSA9IHN0cnVjdHVy
ZTsKICAgICAgICAgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKKyAgICAg
ICAgbV9hcnJheU1vZGVzID0gYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
OwogICAgICAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsK
ICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgCkBAIC0xNjcsOSArMTY3LDEx
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgaWYgKHR5cGUgJiBTcGVjQ2VsbCkg
ewogICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAg
ICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBt
X2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICAgICAgbV9mdXR1
cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgbV9hcnJheU1vZGVzID0g
MDsKICAgICAgICAgfQogICAgICAgICBtX3R5cGUgPSB0eXBlOwogICAgICAgICBtX3ZhbHVlID0g
SlNWYWx1ZSgpOwpAQCAtMTc5LDYgKzE4MSw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gbV90eXBlID09IG90aGVyLm1fdHlwZQorICAgICAgICAgICAgJiYg
bV9hcnJheU1vZGVzID09IG90aGVyLm1fYXJyYXlNb2RlcwogICAgICAgICAgICAgJiYgbV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUgPT0gb3RoZXIubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUKICAgICAg
ICAgICAgICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgPT0gb3RoZXIubV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZQogICAgICAgICAgICAgJiYgbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOwpA
QCAtMTk5LDYgKzIwMiw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgICAgIHJl
c3VsdCA9ICFvdGhlci5pc0NsZWFyKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBy
ZXN1bHQgfD0gbWVyZ2VTcGVjdWxhdGlvbihtX3R5cGUsIG90aGVyLm1fdHlwZSk7CisgICAgICAg
ICAgICByZXN1bHQgfD0gbWVyZ2VBcnJheU1vZGVzKG1fYXJyYXlNb2Rlcywgb3RoZXIubV9hcnJh
eU1vZGVzKTsKICAgICAgICAgICAgIHJlc3VsdCB8PSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5h
ZGRBbGwob3RoZXIubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUpOwogICAgICAgICAgICAgcmVzdWx0
IHw9IG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuYWRkQWxsKG90aGVyLm1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaWYgKG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZSkg
ewpAQCAtMjE4LDYgKzIyMiw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgaWYg
KHR5cGUgJiBTcGVjQ2VsbCkgewogICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
bWFrZVRvcCgpOwogICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9w
KCk7CisgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAgICAg
IH0KICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKIApAQCAtMjI3LDYgKzIzMiw3IEBAIHN0
cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
IG90aGVyKQogICAgIHsKICAgICAgICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0
cnVjdHVyZXMoKTsKKyAgICAgICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9t
U3RydWN0dXJlcygpOwogICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5maWx0ZXIob3Ro
ZXIpOwogICAgICAgICBpZiAobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKQogICAg
ICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOwpAQCAtMjQxLDExICsy
NDcsMjQgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICBtX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZS5maWx0ZXIobV90eXBlKTsKICAgICAgICAgCisgICAgICAgIGZpbHRlckFycmF5TW9kZXNCeVR5
cGUoKTsKICAgICAgICAgZmlsdGVyVmFsdWVCeVR5cGUoKTsKICAgICAgICAgCiAgICAgICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBmaWx0ZXJBcnJheU1vZGVz
KEFycmF5TW9kZXMgYXJyYXlNb2RlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChhcnJheU1vZGVz
KTsKKyAgICAgICAgCisgICAgICAgIG1fdHlwZSAmPSBTcGVjQ2VsbDsKKyAgICAgICAgbV9hcnJh
eU1vZGVzICY9IGFycmF5TW9kZXM7CisgICAgICAgIAorICAgICAgICAvLyBJIGNvdWxkIGRvIG1v
cmUgZmFuY3kgZmlsdGVyaW5nIGhlcmUuIEJ1dCBpdCBwcm9iYWJseSB3b24ndCBtYWtlIGFueSBk
aWZmZXJlbmNlLgorICAgICAgICAKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIH0K
KyAgICAKICAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSB0eXBlKQogICAgIHsKICAgICAg
ICAgaWYgKHR5cGUgPT0gU3BlY1RvcCkKQEAgLTI1OCwzMSArMjc3LDEzIEBAIHN0cnVjdCBBYnN0
cmFjdFZhbHVlIHsKICAgICAgICAgLy8gdGhlIG5ldyB0eXBlIChOb25lKSByYXRoZXIgdGhhbiB0
aGUgb25lIHBhc3NlZCAoQXJyYXkpLgogICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5m
aWx0ZXIobV90eXBlKTsKICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5maWx0ZXIo
bV90eXBlKTsKLQorICAgICAgICAKKyAgICAgICAgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwog
ICAgICAgICBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwogICAgICAgICAKICAgICAgICAgY2hlY2tDb25z
aXN0ZW5jeSgpOwogICAgIH0KICAgICAKLSAgICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQg
ZW5zdXJlIHRoYXQgaWYgdGhlIGZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVzCi0g
ICAgLy8gdGhlIHZhbHVlLCB0aGVuIHdlIGNvdWxkIGNsZWFyIGJvdGggb2YgdGhvc2UgdGhpbmdz
LiBCdXQgdGhhdCdzIHVubGlrZWx5IHRvIGhlbHAKLSAgICAvLyBpbiBhbnkgcmVhbGlzdGljIHNj
ZW5hcmlvLCBzbyB3ZSBkb24ndCBkbyBpdC4gU2ltcGxlciBpcyBiZXR0ZXIuCi0gICAgdm9pZCBm
aWx0ZXJWYWx1ZUJ5VHlwZSgpCi0gICAgewotICAgICAgICBpZiAoISFtX3R5cGUpIHsKLSAgICAg
ICAgICAgIC8vIFRoZSB0eXBlIGlzIHN0aWxsIG5vbi1lbXB0eS4gVGhpcyBpbXBsaWVzIHRoYXQg
cmVnYXJkbGVzcyBvZiB3aGF0IGZpbHRlcmluZwotICAgICAgICAgICAgLy8gd2FzIGRvbmUsIHdl
IGVpdGhlciBkaWRuJ3QgaGF2ZSBhIHZhbHVlIHRvIGJlZ2luIHdpdGgsIG9yIHRoYXQgdmFsdWUg
aXMgc3RpbGwKLSAgICAgICAgICAgIC8vIHZhbGlkLgotICAgICAgICAgICAgQVNTRVJUKCFtX3Zh
bHVlIHx8IHZhbGlkYXRlVHlwZShtX3ZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSB0eXBlIGhhcyBiZWVuIHJlbmRlcmVkIGVt
cHR5LiBUaGF0IG1lYW5zIHRoYXQgdGhlIHZhbHVlIG11c3Qgbm93IGJlIGludmFsaWQsCi0gICAg
ICAgIC8vIGFzIHdlbGwuCi0gICAgICAgIEFTU0VSVCghbV92YWx1ZSB8fCAhdmFsaWRhdGVUeXBl
KG1fdmFsdWUpKTsKLSAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKLSAgICB9Ci0gICAgCiAg
ICAgYm9vbCB2YWxpZGF0ZVR5cGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAg
IGlmIChpc1RvcCgpKQpAQCAtMzE5LDcgKzMyMCw4IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsK
ICAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgJiBTcGVjQ2VsbCk7CiAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCi0g
ICAgICAgICAgICAgICAgJiYgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jb250YWlucyhzdHJ1
Y3R1cmUpOworICAgICAgICAgICAgICAgICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY29u
dGFpbnMoc3RydWN0dXJlKQorICAgICAgICAgICAgICAgICYmIChtX2FycmF5TW9kZXMgJiBhc0Fy
cmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMzMCw2ICszMzIsNyBAQCBzdHJ1Y3QgQWJzdHJh
Y3RWYWx1ZSB7CiAgICAgICAgIGlmICghKG1fdHlwZSAmIFNwZWNDZWxsKSkgewogICAgICAgICAg
ICAgQVNTRVJUKG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSk7CiAgICAgICAgICAg
ICBBU1NFUlQobV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc0NsZWFyKCkpOworICAgICAgICAg
ICAgQVNTRVJUKCFtX2FycmF5TW9kZXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAoaXNDbGVhcigpKQpAQCAtMzQ2LDcgKzM0OSw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsK
ICAgICAKICAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdAogICAgIHsKLSAgICAgICAgZnBy
aW50ZihvdXQsICIoJXMsICIsIHNwZWN1bGF0aW9uVG9TdHJpbmcobV90eXBlKSk7CisgICAgICAg
IGZwcmludGYob3V0LCAiKCVzLCAlcywgIiwgc3BlY3VsYXRpb25Ub1N0cmluZyhtX3R5cGUpLCBh
cnJheU1vZGVzVG9TdHJpbmcobV9hcnJheU1vZGVzKSk7CiAgICAgICAgIG1fY3VycmVudEtub3du
U3RydWN0dXJlLmR1bXAob3V0KTsKICAgICAgICAgZGF0YUxvZygiLCAiKTsKICAgICAgICAgbV9m
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5kdW1wKG91dCk7CkBAIC00MzcsNiArNDQwLDEzIEBAIHN0
cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAvLyB1bmlmaWVkIHdpdGggdGhlIHNldCBvZiBhbGwg
b2JqZWN0cyB3aXRoIHN0cnVjdHVyZSAweDEyMzQ1LgogICAgIFNwZWN1bGF0ZWRUeXBlIG1fdHlw
ZTsKICAgICAKKyAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHBvc3Np
YmxlIGluZGV4aW5nIHR5cGVzIHRoYXQgdGhpcyB2YWx1ZQorICAgIC8vIGNhbiBoYXZlIHJpZ2h0
IG5vdy4gSXQgYWxzbyBpbXBsaWNpdGx5IGNvbnN0cmFpbnRzIHRoZSBzZXQgb2Ygc3RydWN0dXJl
cworICAgIC8vIHRoYXQgdGhlIHZhbHVlIG1heSBoYXZlIHJpZ2h0IG5vdywgc2luY2UgYSBzdHJ1
Y3R1cmUgaGFzIGFuIGltbXV0YWJsZQorICAgIC8vIGluZGV4aW5nIHR5cGUuIFRoaXMgaXMgc3Vi
amVjdCB0byBjaGFuZ2UgdXBvbiByZWFzc2lnbm1lbnQsIG9yIGFueSBzaWRlCisgICAgLy8gZWZm
ZWN0IHRoYXQgbWFrZXMgbm9uLW9idmlvdXMgY2hhbmdlcyB0byB0aGUgaGVhcC4KKyAgICBBcnJh
eU1vZGVzIG1fYXJyYXlNb2RlczsKKyAgICAKICAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0
cmFpbnQgb24gdGhlIHBvc3NpYmxlIHZhbHVlcyB0aGF0IHRoaXMgdmFsdWUgY2FuCiAgICAgLy8g
aGF2ZSBub3cgb3IgYW55IHRpbWUgaW4gdGhlIGZ1dHVyZSwgdW5sZXNzIGl0IGlzIHJlYXNzaWdu
ZWQuIE5vdGUgdGhhdCB0aGlzCiAgICAgLy8gaW1wbGllcyBub3RoaW5nIGFib3V0IHRoZSBzdHJ1
Y3R1cmUuIE9kZGx5LCBKU1ZhbHVlKCkgKGkuZS4gdGhlIGVtcHR5IHZhbHVlKQpAQCAtNDQ0LDYg
KzQ1NCw3NSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgLy8gQk9UVE9NIHRoZW4gSlNW
YWx1ZSgpIG1lYW5zIEJPVFRPTTsgaWYgbV90eXBlIGlzIG5vdCBCT1RUT00gdGhlbiBKU1ZhbHVl
KCkKICAgICAvLyBtZWFucyBUT1AuCiAgICAgSlNWYWx1ZSBtX3ZhbHVlOworCitwcml2YXRlOgor
ICAgIHZvaWQgY2xvYmJlckFycmF5TW9kZXMoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYXJyYXlN
b2RlcyA9PSBBTExfQVJSQVlfTU9ERVMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBpZiAoTElLRUxZKG1fYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhOb25BcnJheSkp
KQorICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBjbG9iYmVyQXJyYXlNb2Rlc1Nsb3coKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjbG9iYmVyQXJyYXlNb2Rlc1Nsb3coKQorICAgIHsKKyAgICAgICAgaWYgKG1fYXJy
YXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhBcnJheUNsYXNzKSkKKyAgICAgICAgICAgIG1fYXJyYXlN
b2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsKKyAgICAgICAgZWxzZSBpZiAobV9hcnJheU1vZGVzICYg
YXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpKQorICAgICAgICAgICAgbV9hcnJh
eU1vZGVzIHw9IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJh
eU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOworICAgICAgICBlbHNlIGlm
IChtX2FycmF5TW9kZXMgJiBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cykpCisgICAg
ICAgICAgICBtX2FycmF5TW9kZXMgfD0gYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFn
ZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAg
IGVsc2UgaWYgKG1fYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2UpKQorICAgICAgICAgICAgbV9hcnJheU1vZGVzIHw9IGFzQXJyYXlNb2RlcyhOb25BcnJh
eVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgZWxzZSBpZiAobV9hcnJheU1vZGVz
ICYgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpCisgICAgICAgICAgICBtX2Fy
cmF5TW9kZXMgfD0gYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAgfQor
CisgICAgdm9pZCBzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlID0g
c3RydWN0dXJlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlLm1ha2VUb3AoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaWx0ZXJGdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAg
ICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmZpbHRlcihTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlKHN0cnVjdHVyZSkpOworICAgIH0KKworICAgIC8vIFdlIGNvdWxkIGdvIGZ1cnRoZXIsIGFu
ZCBlbnN1cmUgdGhhdCBpZiB0aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgY29udHJhdmVuZXMK
KyAgICAvLyB0aGUgdmFsdWUsIHRoZW4gd2UgY291bGQgY2xlYXIgYm90aCBvZiB0aG9zZSB0aGlu
Z3MuIEJ1dCB0aGF0J3MgdW5saWtlbHkgdG8gaGVscAorICAgIC8vIGluIGFueSByZWFsaXN0aWMg
c2NlbmFyaW8sIHNvIHdlIGRvbid0IGRvIGl0LiBTaW1wbGVyIGlzIGJldHRlci4KKyAgICB2b2lk
IGZpbHRlclZhbHVlQnlUeXBlKCkKKyAgICB7CisgICAgICAgIGlmICghIW1fdHlwZSkgeworICAg
ICAgICAgICAgLy8gVGhlIHR5cGUgaXMgc3RpbGwgbm9uLWVtcHR5LiBUaGlzIGltcGxpZXMgdGhh
dCByZWdhcmRsZXNzIG9mIHdoYXQgZmlsdGVyaW5nCisgICAgICAgICAgICAvLyB3YXMgZG9uZSwg
d2UgZWl0aGVyIGRpZG4ndCBoYXZlIGEgdmFsdWUgdG8gYmVnaW4gd2l0aCwgb3IgdGhhdCB2YWx1
ZSBpcyBzdGlsbAorICAgICAgICAgICAgLy8gdmFsaWQuCisgICAgICAgICAgICBBU1NFUlQoIW1f
dmFsdWUgfHwgdmFsaWRhdGVUeXBlKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIHR5cGUgaGFzIGJlZW4gcmVuZGVyZWQg
ZW1wdHkuIFRoYXQgbWVhbnMgdGhhdCB0aGUgdmFsdWUgbXVzdCBub3cgYmUgaW52YWxpZCwKKyAg
ICAgICAgLy8gYXMgd2VsbC4KKyAgICAgICAgQVNTRVJUKCFtX3ZhbHVlIHx8ICF2YWxpZGF0ZVR5
cGUobV92YWx1ZSkpOworICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKQorICAgIHsKKyAgICAgICAgaWYgKCEo
bV90eXBlICYgU3BlY0NlbGwpKQorICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKKyAgICAg
ICAgZWxzZSBpZiAoIShtX3R5cGUgJiB+U3BlY0FycmF5KSkKKyAgICAgICAgICAgIG1fYXJyYXlN
b2RlcyAmPSBBTExfQVJSQVlfQVJSQVlfTU9ERVM7CisgICAgICAgIGVsc2UgaWYgKCEobV90eXBl
ICYgU3BlY0FycmF5KSkKKyAgICAgICAgICAgIG1fYXJyYXlNb2RlcyAmPSBBTExfTk9OX0FSUkFZ
X0FSUkFZX01PREVTOworICAgIH0KIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9u
IDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY3LDEyICsxNjcsMTcgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNr
ZWQoQWJzdHJhY3RWYWx1ZSYgdgogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91czoKICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1Rh
aWw6CiAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHM6CisgICAgY2FzZSBBcnJheTo6VG9Db250aWd1b3VzOgorICAgICAgICBpZiAoYXJyYXlNb2Rl
c0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKICAgICAgICAgICAgICYmIGhhc0NvbnRpZ3VvdXMo
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgp
KTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKICAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgogICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKKyAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJl
YWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250
aWd1b3VzKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAgICAgICAmJiBo
YXNDb250aWd1b3VzKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5p
bmRleGluZ1R5cGUoKSkKICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKQEAgLTE4MywyOSAr
MTg4LDM4IEBAIGJvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHYKICAgICBj
YXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKICAgICBjYXNlIEFycmF5OjpQ
b3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgIGNhc2UgQXJyYXk6
OlRvQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlUb0FycmF5U3Rv
cmFnZToKKyAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5
TW9kZXMsIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1v
ZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24o
KQogICAgICAgICAgICAgJiYgaGFzRmFzdEFycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAKICAgICBj
YXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpUb1Nsb3dQdXRB
cnJheVN0b3JhZ2U6CisgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUu
bV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFz
QXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4g
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKICAgICAgICAgICAg
ICYmIGhhc0FycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0
b24oKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9I
b2xlOgogICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgor
ICAgIGNhc2UgQXJyYXk6OkFycmF5VG9BcnJheVN0b3JhZ2U6CisgICAgICAgIGlmIChhcnJheU1v
ZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoQXJyYXlX
aXRoQXJyYXlTdG9yYWdlKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0
dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAg
ICAgICAmJiBoYXNGYXN0QXJyYXlTdG9yYWdlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
LnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSkKICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5
KTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZToKKyAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9k
ZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9u
KCkKICAgICAgICAgICAgICYmIGhhc0FycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpCiAgICAgICAgICAgICAmJiAodmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYg
SXNBcnJheSk7CiAgICAgICAgIAotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAg
ICAgICAgIHJldHVybiBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CiAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZp
c2lvbiAxMzEzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDksNiArMzQ5LDUxIEBAIGlubGluZSBib29sIGlzRWZmZWN0
ZnVsKEFycmF5OjpNb2RlIG1vZGUKICAgICB9CiB9CiAKKy8vIFRoaXMgcmV0dXJucyB0aGUgc2V0
IG9mIGFycmF5IG1vZGVzIHRoYXQgd2lsbCBwYXNzIGZpbHRlcmluZyBvZiBhIENoZWNrQXJyYXkg
b3IKKy8vIEFycmF5aWZ5IHdpdGggdGhlIGdpdmVuIG1vZGUuCitpbmxpbmUgQXJyYXlNb2RlcyBh
cnJheU1vZGVzRm9yKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5
TW9kZSkgeworICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgIHJldHVybiBBTExfQVJS
QVlfTU9ERVM7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzVG9UYWlsOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczoK
KyAgICBjYXNlIEFycmF5OjpUb0NvbnRpZ3VvdXM6CisgICAgICAgIHJldHVybiBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzOgorICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGln
dW91c1RvVGFpbDoKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kczoKKyAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250
aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICBjYXNlIEFS
UkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUzoKKyAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhDb250aWd1b3VzKTsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOgorICAgIGNhc2UgQXJyYXk6OkFycmF5U3Rv
cmFnZU91dE9mQm91bmRzOgorICAgIGNhc2UgQXJyYXk6OlRvQXJyYXlTdG9yYWdlOgorICAgICAg
ICByZXR1cm4gYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAgY2Fz
ZSBBcnJheTo6VG9TbG93UHV0QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRB
cnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
KTsKKyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZToKKyAgICBj
YXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKKyAgICBjYXNl
IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgorICAgIGNh
c2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlUb0FycmF5U3RvcmFnZToKKyAgICAgICAgcmV0dXJuIGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5
V2l0aEFycmF5U3RvcmFnZSk7CisgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhTbG93
UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2Rl
cyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9I
b2xlOgorICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgor
ICAgIGNhc2UgQXJyYXk6OkFycmF5VG9BcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBhc0Fy
cmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKKyAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKEFycmF5
V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhOb25BcnJh
eSk7CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxMzEzODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIENo
ZWNrQXJyYXk6IHsKKyAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKKyAgICAgICAgICAgIGNh
c2UgQXJyYXlpZnk6IHsKICAgICAgICAgICAgICAgICBpZiAoIW1vZGVBbHJlYWR5Q2hlY2tlZCht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5yZWZDb3Vu
dCgpID09IDEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEzMTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTksMTAgKzU1
OSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlKQogewogICAgIEFTU0VSVChtb2RlSXNT
cGVjaWZpYyhub2RlLmFycmF5TW9kZSgpKSk7Ci0gICAgQVNTRVJUKCFtb2RlQWxyZWFkeUNoZWNr
ZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSk7CiAg
ICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICAKKyAgICBpZiAobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1w
LmdwcigpKTsKKyAgICAgICAgc3RvcmFnZVJlc3VsdCh0ZW1wLmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgaWYgKCFub2RlLmNoaWxkMigp
KSB7CiAgICAgICAgIGFycmF5aWZ5KG5vZGUsIGJhc2UuZ3ByKCksIEludmFsaWRHUFJSZWcpOwog
ICAgICAgICByZXR1cm47Cg==
</data>
<flag name="review"
          id="181909"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
    <flag name="commit-queue"
          id="182024"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>