<?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>66909</bug_id>
          
          <creation_ts>2011-08-24 17:43:25 -0700</creation_ts>
          <short_desc>XMLHttpRequest method/header validation is not available for other untrusted HTTP requests.</short_desc>
          <delta_ts>2011-08-30 17:43:54 -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>Platform</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>66963</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Bill Budge">bbudge</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>levin</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>456554</commentid>
    <comment_count>0</comment_count>
      <attachid>105104</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-08-24 17:43:25 -0700</bug_when>
    <thetext>Created attachment 105104
Preliminary patch, to get guidance from domain experts

It would be convenient if we could reuse the HTTP method / header restriction checks in XMLHttpRequest for other uses. Currently this logic is private. The obvious way to do this is to expose the validation checks as static methods on the class.

A problem with this is that a static HashSet is used to speed header field checks, and this is initialized in a complex way in the constructor. The attachment uses a static sorted array of c-strings instead, and uses binary search to determine if the field is forbidden. This requires a conversion of the UTF16 String to a UTF-8 c-string before checking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456617</commentid>
    <comment_count>1</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-08-24 19:41:37 -0700</bug_when>
    <thetext>I need to modify this to do a case-insensitive compare.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456628</commentid>
    <comment_count>2</comment_count>
      <attachid>105104</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-08-24 20:30:34 -0700</bug_when>
    <thetext>Comment on attachment 105104
Preliminary patch, to get guidance from domain experts

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

I like the overall approach. I have a few misc comments that I happened to see.

I do wonder if these should be in XMLHttpRequest since the calls are for other untrusted HTTP requests.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:5
&gt;   *  Copyright (C) 2008 David Levin &lt;levin@chromium.org&gt;

You can remove this line. I put it there before I understood that we were to use &quot;Google Inc.&quot; so the next line is better.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:361
&gt; +// This array must remain in lexicographical order for the binary search to work.

It would be good to write some debug code somewhere to verify that it is in order.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:388
&gt; +    return strcmp((const char*) a, *(const char**) b);

Use C++ style casts.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:393
&gt; +    void* forbidden = bsearch(name.utf8().data(), forbiddenHeaders, ARRAYSIZE_UNSAFE(forbiddenHeaders), sizeof(const char*), compareHeader);

It would feel better to me to express the sizeof in terms of forbiddenHeaders.

&gt; Source/WebCore/xml/XMLHttpRequest.h:4
&gt; + *  Copyright (C) 2008, 2011 Google Inc. All rights reserved.

I don&apos;t know where the &quot;2008., &quot; comes from for this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456638</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-24 22:01:11 -0700</bug_when>
    <thetext>Can you tell what the other expected uses of this list are? I don&apos;t think that it appears anywhere besides the XMLHttpRequest spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456643</commentid>
    <comment_count>4</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-08-24 22:22:25 -0700</bug_when>
    <thetext>The reason for this is to implement untrusted HTTP requests in Chromium&apos;s Pepper API (PPAPI). We&apos;re trying to provide the same restricted URL requests to untrusted code as in Javascript. These methods will be used in an upcoming patch to Source/Webkit/chromium/src/AssociatedURLLoader. We&apos;re adding a new &apos;untrustedHttp&apos; field to WebURLLoaderOptions, which will cause AssociatedURLLoader to check the method and headers in exactly the same way as XMLHttpRequest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456650</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-24 22:46:00 -0700</bug_when>
    <thetext>OK, thanks! I&apos;m a little surprised that this level of functionality is going to be in WebCore, not in plug-ins. Isn&apos;t it plug-ins responsibility to provide network loading mechanisms with custom amount of trust?

Speaking about implementation, I don&apos;t understand why it was changed from Strings to char arrays. What makes the HashSet implementation unsuitable for being called from a plug-in? You could put initializeXMLHttpRequestStaticData() in any other function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456694</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-25 00:44:38 -0700</bug_when>
    <thetext>&gt; OK, thanks! I&apos;m a little surprised that this level of functionality is going to be in WebCore, not in plug-ins. Isn&apos;t it plug-ins responsibility to provide network loading mechanisms with custom amount of trust?

PPAPI supports both trusted and untrusted plugins.  For untrusted plugs, we need to provide the security.  We could duplicate this logic outside of WebCore, but that seems inferior to using the same code for XMLHttpRequest and URL requests from untrusted plugins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456792</commentid>
    <comment_count>7</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-08-25 05:46:12 -0700</bug_when>
    <thetext>I would prefer to use the HashSet implementation - it&apos;s much slicker than using char arrays. If you don&apos;t feel that calling initializeXMLHttpRequestStaticData (with it&apos;s lock/unlock) for every header field check is a performance concern, I will do that. The cost could be reduced by adding a public static method to perform this initialization, but I felt that design was more error prone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456999</commentid>
    <comment_count>8</comment_count>
      <attachid>105223</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-08-25 11:02:39 -0700</bug_when>
    <thetext>Created attachment 105223
Proposed Patch

Reworked the patch to use HashSet as before. My understanding is that uncontested mutex lock/unlock is negligible in terms of cost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457009</commentid>
    <comment_count>9</comment_count>
      <attachid>105223</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-25 11:26:34 -0700</bug_when>
    <thetext>Comment on attachment 105223
Proposed Patch

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

Seems fine in general. However, since this patch only exposes existing functionality, the bar should be pretty high on how well it&apos;s exposed, particularly in regards to naming.

&gt; Source/WebCore/xml/XMLHttpRequest.h:115
&gt; +    static bool isValidToken(const String&amp;);

This method has nothing to do with XHR, it&apos;s pure HTTP. If it needs to be exposed, it should go into a new header in platform/network.

&gt; Source/WebCore/xml/XMLHttpRequest.h:116
&gt; +    static bool isSafeMethod(const String&amp;);

This needs a better name. Safe in what sense? There is nothing safe on the Internet.

&gt; Source/WebCore/xml/XMLHttpRequest.h:117
&gt; +    static String canonicalizeMethod(const String&amp;);

This really needs a better name - &quot;canonicalize&quot; does not tell the reader anything about what&apos;s going to happen when it&apos;s not defined in relevant specs. It could as well be &quot;transmogrify&quot;!

&gt; Source/WebCore/xml/XMLHttpRequest.h:118
&gt; +    static bool isSafeRequestHeader(const String&amp;);

Same comment about &quot;safe&quot;.

&gt; Source/WebCore/xml/XMLHttpRequest.h:119
&gt; +    static bool isValidHeaderValue(const String&amp;);

This method also has nothing to do with XHR, and shouldn&apos;t be exposed from here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457058</commentid>
    <comment_count>10</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-08-25 12:24:14 -0700</bug_when>
    <thetext>Looking at platform/network/HTTPParsers.h, this seems like it might be a good place to move these static methods. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457064</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-25 12:36:19 -0700</bug_when>
    <thetext>Since this is not about parsing, I would have added a new header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457146</commentid>
    <comment_count>12</comment_count>
      <attachid>105247</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-08-25 14:39:45 -0700</bug_when>
    <thetext>Created attachment 105247
Proposed Patch

Broke out HTTP validation into platform/network/HTTPValidation.h / .cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457149</commentid>
    <comment_count>13</comment_count>
      <attachid>105247</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-08-25 14:40:41 -0700</bug_when>
    <thetext>Comment on attachment 105247
Proposed Patch

Bad patch. Fixing it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457151</commentid>
    <comment_count>14</comment_count>
      <attachid>105250</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-08-25 14:44:42 -0700</bug_when>
    <thetext>Created attachment 105250
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457155</commentid>
    <comment_count>15</comment_count>
      <attachid>105251</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-08-25 14:46:35 -0700</bug_when>
    <thetext>Created attachment 105251
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457210</commentid>
    <comment_count>16</comment_count>
      <attachid>105269</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-08-25 16:04:33 -0700</bug_when>
    <thetext>Created attachment 105269
Proposed Patch

Added HTTPValidation to build files. Please let me know if I missed any.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457289</commentid>
    <comment_count>17</comment_count>
      <attachid>105283</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-08-25 17:32:20 -0700</bug_when>
    <thetext>Created attachment 105283
Proposed Patch

Missed a Windows build file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459057</commentid>
    <comment_count>18</comment_count>
      <attachid>105283</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-08-30 11:53:27 -0700</bug_when>
    <thetext>Comment on attachment 105283
Proposed Patch

This looks good to me. I&apos;ll wait a bit to see if ap has any other comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459104</commentid>
    <comment_count>19</comment_count>
      <attachid>105283</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-08-30 12:51:50 -0700</bug_when>
    <thetext>Comment on attachment 105283
Proposed Patch

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

Looks good to me. I&apos;m not fond of &quot;HTTPValidation&quot; file name, but I don&apos;t have a better suggestion.

&gt; Source/WebCore/platform/network/HTTPValidation.cpp:36
&gt; +using namespace WTF;

There should never be a reason to do &quot;using namespace WTF&quot; - all public WTF symbols should be exported into global namespace by their headers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459170</commentid>
    <comment_count>20</comment_count>
      <attachid>105688</attachid>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-08-30 13:55:00 -0700</bug_when>
    <thetext>Created attachment 105688
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459333</commentid>
    <comment_count>21</comment_count>
      <attachid>105688</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-30 16:54:58 -0700</bug_when>
    <thetext>Comment on attachment 105688
Proposed Patch

Clearing flags on attachment: 105688

Committed r94128: &lt;http://trac.webkit.org/changeset/94128&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459334</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-30 16:55:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459342</commentid>
    <comment_count>23</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-08-30 17:12:03 -0700</bug_when>
    <thetext>This patch appears to have broken Leopard build:

http://build.webkit.org/builders/Leopard%20Intel%20Debug%20%28Build%29/builds/38818/steps/compile-webkit/logs/stdio
Undefined symbols:
  &quot;__ZN7WebCore22isValidHTTPHeaderValueERKN3WTF6StringE&quot;, referenced from:
      __ZN7WebCore14XMLHttpRequest16setRequestHeaderERKN3WTF12AtomicStringERKNS1_6StringERi in XMLHttpRequest.o
  &quot;__ZN7WebCore16isValidHTTPTokenERKN3WTF6StringE&quot;, referenced from:
      __ZN7WebCore14XMLHttpRequest16setRequestHeaderERKN3WTF12AtomicStringERKNS1_6StringERi in XMLHttpRequest.o
      __ZN7WebCore14XMLHttpRequest4openERKN3WTF6StringERKNS_4KURLEbRi in XMLHttpRequest.o
ld: symbol(s) not found</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459346</commentid>
    <comment_count>24</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-08-30 17:14:36 -0700</bug_when>
    <thetext>So you apparently forgot to add your file to xcodeproj :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459351</commentid>
    <comment_count>25</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-08-30 17:26:10 -0700</bug_when>
    <thetext>Fixed in http://trac.webkit.org/changeset/94136.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459356</commentid>
    <comment_count>26</comment_count>
    <who name="Bill Budge">bbudge</who>
    <bug_when>2011-08-30 17:31:03 -0700</bug_when>
    <thetext>You fixed it? Thanks!

This is the first time I&apos;ve had to add a file and I couldn&apos;t find any docs about what needed changing. I asked around a bit but obviously missed this. By the way, is the best way to fix the .xcodeproj file to load it into XCode?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459364</commentid>
    <comment_count>27</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-08-30 17:39:19 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; You fixed it? Thanks!
&gt; 
&gt; This is the first time I&apos;ve had to add a file and I couldn&apos;t find any docs about what needed changing. I asked around a bit but obviously missed this. By the way, is the best way to fix the .xcodeproj file to load it into XCode?

No docs. You just need to find another change which added some files 

I should have caught this and told you this before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459365</commentid>
    <comment_count>28</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-08-30 17:40:03 -0700</bug_when>
    <thetext>btw, consider hanging out in irc. Also, I&apos;m going to nominate you to be a committer so that you can get mac EWS results :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459367</commentid>
    <comment_count>29</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-08-30 17:43:54 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; This is the first time I&apos;ve had to add a file and I couldn&apos;t find any docs about what needed changing. I asked around a bit but obviously missed this. By the way, is the best way to fix the .xcodeproj file to load it into XCode?

Unfortunately, there&apos;s no tool or documentation on how to do this other than to say open it up in XCode and add them using GUI :(

Also, if you&apos;re using WebCore files you&apos;re adding in WebKit layer, then you&apos;d have to right click on those files and set the role to private.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105104</attachid>
            <date>2011-08-24 17:43:25 -0700</date>
            <delta_ts>2011-08-25 11:02:39 -0700</delta_ts>
            <desc>Preliminary patch, to get guidance from domain experts</desc>
            <filename>diff.txt</filename>
            <type>text/plain</type>
            <size>10344</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTM0ODMp
CisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zLDYgKzMsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IEFsZXhleSBQcm9z
a3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEp1
bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMp
IDIwMDggRGF2aWQgTGV2aW4gPGxldmluQGNocm9taXVtLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKQEAgLTY4LDcxICs2OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBX
VEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciB4bWxIdHRwUmVxdWVzdENvdW50ZXIoIlhNTEh0dHBS
ZXF1ZXN0Iik7CiAjZW5kaWYKIAotc3RydWN0IFhNTEh0dHBSZXF1ZXN0U3RhdGljRGF0YSB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRh
KCk7Ci0gICAgU3RyaW5nIG1fcHJveHlIZWFkZXJQcmVmaXg7Ci0gICAgU3RyaW5nIG1fc2VjSGVh
ZGVyUHJlZml4OwotICAgIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IG1fZm9yYmlk
ZGVuUmVxdWVzdEhlYWRlcnM7Ci19OwotCi1YTUxIdHRwUmVxdWVzdFN0YXRpY0RhdGE6OlhNTEh0
dHBSZXF1ZXN0U3RhdGljRGF0YSgpCi0gICAgOiBtX3Byb3h5SGVhZGVyUHJlZml4KCJwcm94eS0i
KQotICAgICwgbV9zZWNIZWFkZXJQcmVmaXgoInNlYy0iKQotewotICAgIG1fZm9yYmlkZGVuUmVx
dWVzdEhlYWRlcnMuYWRkKCJhY2NlcHQtY2hhcnNldCIpOwotICAgIG1fZm9yYmlkZGVuUmVxdWVz
dEhlYWRlcnMuYWRkKCJhY2NlcHQtZW5jb2RpbmciKTsKLSAgICBtX2ZvcmJpZGRlblJlcXVlc3RI
ZWFkZXJzLmFkZCgiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1oZWFkZXJzIik7Ci0gICAgbV9mb3Ji
aWRkZW5SZXF1ZXN0SGVhZGVycy5hZGQoImFjY2Vzcy1jb250cm9sLXJlcXVlc3QtbWV0aG9kIik7
Ci0gICAgbV9mb3JiaWRkZW5SZXF1ZXN0SGVhZGVycy5hZGQoImNvbm5lY3Rpb24iKTsKLSAgICBt
X2ZvcmJpZGRlblJlcXVlc3RIZWFkZXJzLmFkZCgiY29udGVudC1sZW5ndGgiKTsKLSAgICBtX2Zv
cmJpZGRlblJlcXVlc3RIZWFkZXJzLmFkZCgiY29udGVudC10cmFuc2Zlci1lbmNvZGluZyIpOwot
ICAgIG1fZm9yYmlkZGVuUmVxdWVzdEhlYWRlcnMuYWRkKCJjb29raWUiKTsKLSAgICBtX2ZvcmJp
ZGRlblJlcXVlc3RIZWFkZXJzLmFkZCgiY29va2llMiIpOwotICAgIG1fZm9yYmlkZGVuUmVxdWVz
dEhlYWRlcnMuYWRkKCJkYXRlIik7Ci0gICAgbV9mb3JiaWRkZW5SZXF1ZXN0SGVhZGVycy5hZGQo
ImV4cGVjdCIpOwotICAgIG1fZm9yYmlkZGVuUmVxdWVzdEhlYWRlcnMuYWRkKCJob3N0Iik7Ci0g
ICAgbV9mb3JiaWRkZW5SZXF1ZXN0SGVhZGVycy5hZGQoImtlZXAtYWxpdmUiKTsKLSAgICBtX2Zv
cmJpZGRlblJlcXVlc3RIZWFkZXJzLmFkZCgib3JpZ2luIik7Ci0gICAgbV9mb3JiaWRkZW5SZXF1
ZXN0SGVhZGVycy5hZGQoInJlZmVyZXIiKTsKLSAgICBtX2ZvcmJpZGRlblJlcXVlc3RIZWFkZXJz
LmFkZCgidGUiKTsKLSAgICBtX2ZvcmJpZGRlblJlcXVlc3RIZWFkZXJzLmFkZCgidHJhaWxlciIp
OwotICAgIG1fZm9yYmlkZGVuUmVxdWVzdEhlYWRlcnMuYWRkKCJ0cmFuc2Zlci1lbmNvZGluZyIp
OwotICAgIG1fZm9yYmlkZGVuUmVxdWVzdEhlYWRlcnMuYWRkKCJ1cGdyYWRlIik7Ci0gICAgbV9m
b3JiaWRkZW5SZXF1ZXN0SGVhZGVycy5hZGQoInVzZXItYWdlbnQiKTsKLSAgICBtX2ZvcmJpZGRl
blJlcXVlc3RIZWFkZXJzLmFkZCgidmlhIik7Ci19Ci0KLS8vIERldGVybWluZXMgaWYgYSBzdHJp
bmcgaXMgYSB2YWxpZCB0b2tlbiwgYXMgZGVmaW5lZCBieQotLy8gInRva2VuIiBpbiBzZWN0aW9u
IDIuMiBvZiBSRkMgMjYxNi4KLXN0YXRpYyBib29sIGlzVmFsaWRUb2tlbihjb25zdCBTdHJpbmcm
IG5hbWUpCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgVUNoYXIgYyA9IG5h
bWVbaV07Ci0KLSAgICAgICAgaWYgKGMgPj0gMTI3IHx8IGMgPD0gMzIpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGMgPT0gJygnIHx8IGMgPT0gJyknIHx8IGMgPT0g
JzwnIHx8IGMgPT0gJz4nIHx8IGMgPT0gJ0AnIHx8Ci0gICAgICAgICAgICBjID09ICcsJyB8fCBj
ID09ICc7JyB8fCBjID09ICc6JyB8fCBjID09ICdcXCcgfHwgYyA9PSAnXCInIHx8Ci0gICAgICAg
ICAgICBjID09ICcvJyB8fCBjID09ICdbJyB8fCBjID09ICddJyB8fCBjID09ICc/JyB8fCBjID09
ICc9JyB8fAotICAgICAgICAgICAgYyA9PSAneycgfHwgYyA9PSAnfScpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxlbmd0aCA+IDA7Ci19Ci0KLXN0YXRp
YyBib29sIGlzVmFsaWRIZWFkZXJWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBtYXRjaCBuYW1lIGFnYWluc3QKLSAgICAvLyBmaWVs
ZC12YWx1ZSBpbiBzZWN0aW9uIDQuMiBvZiBSRkMgMjYxNi4KLQotICAgIHJldHVybiAhbmFtZS5j
b250YWlucygnXHInKSAmJiAhbmFtZS5jb250YWlucygnXG4nKTsKLX0KLQogc3RhdGljIGJvb2wg
aXNTZXRDb29raWVIZWFkZXIoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewogICAgIHJldHVy
biBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAic2V0LWNvb2tpZSIpIHx8IGVxdWFsSWdub3JpbmdD
YXNlKG5hbWUsICJzZXQtY29va2llMiIpOwpAQCAtMTU3LDIxICs5Myw2IEBAIHN0YXRpYyB2b2lk
IHJlcGxhY2VDaGFyc2V0SW5NZWRpYVR5cGUoU3QKICAgICB9CiB9CiAKLXN0YXRpYyBjb25zdCBY
TUxIdHRwUmVxdWVzdFN0YXRpY0RhdGEqIHN0YXRpY0RhdGEgPSAwOwotCi1zdGF0aWMgY29uc3Qg
WE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhKiBjcmVhdGVYTUxIdHRwUmVxdWVzdFN0YXRpY0RhdGEo
KQotewotICAgIHN0YXRpY0RhdGEgPSBuZXcgWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhOwotICAg
IHJldHVybiBzdGF0aWNEYXRhOwotfQotCi1zdGF0aWMgY29uc3QgWE1MSHR0cFJlcXVlc3RTdGF0
aWNEYXRhKiBpbml0aWFsaXplWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhKCkKLXsKLSAgICAvLyBV
c2VzIGR1bW15IHRvIGF2b2lkIHdhcm5pbmdzIGFib3V0IGFuIHVudXNlZCB2YXJpYWJsZS4KLSAg
ICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoY29uc3QgWE1MSHR0cFJlcXVlc3RTdGF0aWNE
YXRhKiwgZHVtbXkgPSBjcmVhdGVYTUxIdHRwUmVxdWVzdFN0YXRpY0RhdGEoKSk7Ci0gICAgcmV0
dXJuIGR1bW15OwotfQotCiBQYXNzUmVmUHRyPFhNTEh0dHBSZXF1ZXN0PiBYTUxIdHRwUmVxdWVz
dDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcg
WE1MSHR0cFJlcXVlc3QoY29udGV4dCwgc2VjdXJpdHlPcmlnaW4pKTsKQEAgLTE5NCw3ICsxMTUs
NiBAQCBYTUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlCiAgICAgLCBtX3Jl
c3BvbnNlVHlwZUNvZGUoUmVzcG9uc2VUeXBlRGVmYXVsdCkKICAgICAsIG1fc2VjdXJpdHlPcmln
aW4oc2VjdXJpdHlPcmlnaW4pCiB7Ci0gICAgaW5pdGlhbGl6ZVhNTEh0dHBSZXF1ZXN0U3RhdGlj
RGF0YSgpOwogI2lmbmRlZiBOREVCVUcKICAgICB4bWxIdHRwUmVxdWVzdENvdW50ZXIuaW5jcmVt
ZW50KCk7CiAjZW5kaWYKQEAgLTM5OCw2ICszMTgsOTIgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
c2V0QXNCbG9iKGJvb2wgdmFsdQogfQogI2VuZGlmCiAKK2Jvb2wgWE1MSHR0cFJlcXVlc3Q6Omlz
U2FmZU1ldGhvZChjb25zdCBTdHJpbmcmIG1ldGhvZCkKK3sKKyAgICByZXR1cm4gIWVxdWFsSWdu
b3JpbmdDYXNlKG1ldGhvZCwgIlRSQUNFIikKKyAgICAgICAgJiYgIWVxdWFsSWdub3JpbmdDYXNl
KG1ldGhvZCwgIlRSQUNLIikKKyAgICAgICAgJiYgIWVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwg
IkNPTk5FQ1QiKTsKK30KKworU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpjYW5vbmljYWxpemVNZXRo
b2QoY29uc3QgU3RyaW5nJiBtZXRob2QpCit7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1l
dGhvZCwgIkNPUFkiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJERUxFVEUiKSB8fCBl
cXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJHRVQiKQorICAgICAgICB8fCBlcXVhbElnbm9yaW5n
Q2FzZShtZXRob2QsICJIRUFEIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiSU5ERVgi
KSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJMT0NLIikKKyAgICAgICAgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UobWV0aG9kLCAiTS1QT1NUIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9k
LCAiTUtDT0wiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJNT1ZFIikKKyAgICAgICAg
fHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiT1BUSU9OUyIpIHx8IGVxdWFsSWdub3JpbmdD
YXNlKG1ldGhvZCwgIlBPU1QiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJQUk9QRklO
RCIpCisgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIlBST1BQQVRDSCIpIHx8
IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIlBVVCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1l
dGhvZCwgIlVOTE9DSyIpKSB7CisgICAgICAgIHJldHVybiBtZXRob2QudXBwZXIoKTsKKyAgICB9
CisgICAgcmV0dXJuIG1ldGhvZDsKK30KKworLy8gRGV0ZXJtaW5lcyBpZiBhIHN0cmluZyBpcyBh
IHZhbGlkIHRva2VuLCBhcyBkZWZpbmVkIGJ5CisvLyAidG9rZW4iIGluIHNlY3Rpb24gMi4yIG9m
IFJGQyAyNjE2LgorYm9vbCBYTUxIdHRwUmVxdWVzdDo6aXNWYWxpZFRva2VuKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBVQ2hhciBjID0g
bmFtZVtpXTsKKworICAgICAgICBpZiAoYyA+PSAxMjcgfHwgYyA8PSAzMikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoYyA9PSAnKCcgfHwgYyA9PSAnKScgfHwgYyA9
PSAnPCcgfHwgYyA9PSAnPicgfHwgYyA9PSAnQCcKKyAgICAgICAgICAgIHx8IGMgPT0gJywnIHx8
IGMgPT0gJzsnIHx8IGMgPT0gJzonIHx8IGMgPT0gJ1xcJyB8fCBjID09ICdcIicKKyAgICAgICAg
ICAgIHx8IGMgPT0gJy8nIHx8IGMgPT0gJ1snIHx8IGMgPT0gJ10nIHx8IGMgPT0gJz8nIHx8IGMg
PT0gJz0nCisgICAgICAgICAgICB8fCBjID09ICd7JyB8fCBjID09ICd9JykKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gbGVuZ3RoID4gMDsKK30KKworLy8g
VGhpcyBhcnJheSBtdXN0IHJlbWFpbiBpbiBsZXhpY29ncmFwaGljYWwgb3JkZXIgZm9yIHRoZSBi
aW5hcnkgc2VhcmNoIHRvIHdvcmsuCitzdGF0aWMgY29uc3QgY2hhciogZm9yYmlkZGVuSGVhZGVy
c1tdID0geworICAgICJhY2NlcHQtY2hhcnNldCIsCisgICAgImFjY2VwdC1lbmNvZGluZyIsCisg
ICAgImFjY2Vzcy1jb250cm9sLXJlcXVlc3QtaGVhZGVycyIsCisgICAgImFjY2Vzcy1jb250cm9s
LXJlcXVlc3QtbWV0aG9kIiwKKyAgICAiY29ubmVjdGlvbiIsCisgICAgImNvbnRlbnQtbGVuZ3Ro
IiwKKyAgICAiY29udGVudC10cmFuc2Zlci1lbmNvZGluZyIsCisgICAgImNvb2tpZSIsCisgICAg
ImNvb2tpZTIiLAorICAgICJkYXRlIiwKKyAgICAiZXhwZWN0IiwKKyAgICAiaG9zdCIsCisgICAg
ImtlZXAtYWxpdmUiLAorICAgICJvcmlnaW4iLAorICAgICJyZWZlcmVyIiwKKyAgICAidGUiLAor
ICAgICJ0cmFpbGVyIiwKKyAgICAidHJhbnNmZXItZW5jb2RpbmciLAorICAgICJ1cGdyYWRlIiwK
KyAgICAidXNlci1hZ2VudCIsCisgICAgInZpYSIKK307CisKK3N0YXRpYyBpbnQgY29tcGFyZUhl
YWRlcihjb25zdCB2b2lkICogYSwgY29uc3Qgdm9pZCAqIGIpCit7CisgICAgcmV0dXJuIHN0cmNt
cCgoY29uc3QgY2hhciopIGEsICooY29uc3QgY2hhcioqKSBiKTsKK30KKworYm9vbCBYTUxIdHRw
UmVxdWVzdDo6aXNTYWZlUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
dm9pZCogZm9yYmlkZGVuID0gYnNlYXJjaChuYW1lLnV0ZjgoKS5kYXRhKCksIGZvcmJpZGRlbkhl
YWRlcnMsIEFSUkFZU0laRV9VTlNBRkUoZm9yYmlkZGVuSGVhZGVycyksIHNpemVvZihjb25zdCBj
aGFyKiksIGNvbXBhcmVIZWFkZXIpOworICAgIHJldHVybiAhZm9yYmlkZGVuCisgICAgICAgICYm
ICFuYW1lLnN0YXJ0c1dpdGgoInByb3h5LSIsIGZhbHNlKQorICAgICAgICAmJiAhbmFtZS5zdGFy
dHNXaXRoKCJzZWMtIiwgZmFsc2UpOworfQorCitib29sIFhNTEh0dHBSZXF1ZXN0Ojppc1ZhbGlk
SGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCByZWFsbHkgbWF0Y2ggbmFtZSBhZ2FpbnN0CisgICAgLy8gZmllbGQtdmFsdWUgaW4gc2Vj
dGlvbiA0LjIgb2YgUkZDIDI2MTYuCisKKyAgICByZXR1cm4gIW5hbWUuY29udGFpbnMoJ1xyJykg
JiYgIW5hbWUuY29udGFpbnMoJ1xuJyk7Cit9CisKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4o
Y29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmIHVybCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgb3BlbihtZXRob2QsIHVybCwgdHJ1ZSwgZWMpOwpAQCAtNDIzLDIzICs0MjksMTQg
QEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIAogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgLy8gTWV0aG9kIG5hbWVzIGFyZSBjYXNlIHNlbnNpdGl2ZS4gQnV0
IHNpbmNlIEZpcmVmb3ggdXBwZXJjYXNlcyBtZXRob2QgbmFtZXMgaXQga25vd3MsIHdlJ2xsIGRv
IHRoZSBzYW1lLgotICAgIFN0cmluZyBtZXRob2RVcHBlcihtZXRob2QudXBwZXIoKSk7Ci0KLSAg
ICBpZiAobWV0aG9kVXBwZXIgPT0gIlRSQUNFIiB8fCBtZXRob2RVcHBlciA9PSAiVFJBQ0siIHx8
IG1ldGhvZFVwcGVyID09ICJDT05ORUNUIikgeworICAgIGlmICghaXNTYWZlTWV0aG9kKG1ldGhv
ZCkpIHsKICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBtX3VybCA9IHVybDsKKyAgICBtX21ldGhvZCA9IGNhbm9uaWNhbGl6ZU1ldGhvZCht
ZXRob2QpOwogCi0gICAgaWYgKG1ldGhvZFVwcGVyID09ICJDT1BZIiB8fCBtZXRob2RVcHBlciA9
PSAiREVMRVRFIiB8fCBtZXRob2RVcHBlciA9PSAiR0VUIiB8fCBtZXRob2RVcHBlciA9PSAiSEVB
RCIKLSAgICAgICAgfHwgbWV0aG9kVXBwZXIgPT0gIklOREVYIiB8fCBtZXRob2RVcHBlciA9PSAi
TE9DSyIgfHwgbWV0aG9kVXBwZXIgPT0gIk0tUE9TVCIgfHwgbWV0aG9kVXBwZXIgPT0gIk1LQ09M
IiB8fCBtZXRob2RVcHBlciA9PSAiTU9WRSIKLSAgICAgICAgfHwgbWV0aG9kVXBwZXIgPT0gIk9Q
VElPTlMiIHx8IG1ldGhvZFVwcGVyID09ICJQT1NUIiB8fCBtZXRob2RVcHBlciA9PSAiUFJPUEZJ
TkQiIHx8IG1ldGhvZFVwcGVyID09ICJQUk9QUEFUQ0giIHx8IG1ldGhvZFVwcGVyID09ICJQVVQi
Ci0gICAgICAgIHx8IG1ldGhvZFVwcGVyID09ICJVTkxPQ0siKQotICAgICAgICBtX21ldGhvZCA9
IG1ldGhvZFVwcGVyOwotICAgIGVsc2UKLSAgICAgICAgbV9tZXRob2QgPSBtZXRob2Q7CisgICAg
bV91cmwgPSB1cmw7CiAKICAgICBtX2FzeW5jID0gYXN5bmM7CiAKQEAgLTg1NiwxMiArODUzLDYg
QEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlckludAogICAgICAgICByZXN1
bHQuZmlyc3QtPnNlY29uZCArPSAiLCAiICsgdmFsdWU7CiB9CiAKLWJvb2wgWE1MSHR0cFJlcXVl
c3Q6OmlzU2FmZVJlcXVlc3RIZWFkZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAotewotICAg
IHJldHVybiAhc3RhdGljRGF0YS0+bV9mb3JiaWRkZW5SZXF1ZXN0SGVhZGVycy5jb250YWlucyhu
YW1lKSAmJiAhbmFtZS5zdGFydHNXaXRoKHN0YXRpY0RhdGEtPm1fcHJveHlIZWFkZXJQcmVmaXgs
IGZhbHNlKQotICAgICAgICAmJiAhbmFtZS5zdGFydHNXaXRoKHN0YXRpY0RhdGEtPm1fc2VjSGVh
ZGVyUHJlZml4LCBmYWxzZSk7Ci19Ci0KIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVxdWVz
dEhlYWRlcihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
cmVxdWVzdEhlYWRlcnMuZ2V0KG5hbWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmgJKHJldmlzaW9uIDkzNDgzKQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNv
bT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTExMCw2ICsxMTEsMTMgQEAgcHVibGlj
OgogICAgIEJsb2IqIG9wdGlvbmFsUmVzcG9uc2VCbG9iKCkgY29uc3QgeyByZXR1cm4gbV9yZXNw
b25zZUJsb2IuZ2V0KCk7IH0KICNlbmRpZgogCisgICAgLy8gRXhwb3NlIHZhbGlkYXRpb24gbWV0
aG9kcyBmb3Igb3RoZXIgdW50cnVzdGVkIEhUVFAgcmVxdWVzdHMuCisgICAgc3RhdGljIGJvb2wg
aXNWYWxpZFRva2VuKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGlzU2FmZU1ldGhv
ZChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNhbm9uaWNhbGl6ZU1ldGhvZChj
b25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBpc1NhZmVSZXF1ZXN0SGVhZGVyKGNvbnN0
IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGlzVmFsaWRIZWFkZXJWYWx1ZShjb25zdCBTdHJp
bmcmKTsKKwogICAgIHZvaWQgc2V0UmVzcG9uc2VUeXBlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICBTdHJpbmcgcmVzcG9uc2VUeXBlKCk7CiAgICAgUmVzcG9uc2VUeXBlQ29k
ZSByZXNwb25zZVR5cGVDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZVR5cGVDb2RlOyB9
CkBAIC0xNjMsNyArMTcxLDYgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBnZXRSZXF1ZXN0SGVh
ZGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXF1ZXN0
SGVhZGVySW50ZXJuYWwoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLSAgICBib29sIGlzU2FmZVJlcXVlc3RIZWFkZXIoY29uc3QgU3RyaW5nJikgY29uc3Q7
CiAKICAgICB2b2lkIGNoYW5nZVN0YXRlKFN0YXRlIG5ld1N0YXRlKTsKICAgICB2b2lkIGNhbGxS
ZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105223</attachid>
            <date>2011-08-25 11:02:39 -0700</date>
            <delta_ts>2011-08-25 14:39:45 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>diff.txt</filename>
            <type>text/plain</type>
            <size>8324</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzNzk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDgtMjUgIEJpbGwgQnVk
Z2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgdGhl
IFhNTEh0dHBSZXF1ZXN0IG1ldGhvZC9oZWFkZXIgdmFsaWRhdGlvbiBsb2dpYyBhdmFpbGFibGUg
YXMKKyAgICAgICAgc3RhdGljIG1ldGhvZHMgc28gVVJMIGxvYWRlcnMgY2FuIHBlcmZvcm0gdGhl
IHNhbWUgY2hlY2tzIGZvciB1bnRydXN0ZWQgSFRUUCByZXF1ZXN0cworICAgICAgICBjb21pbmcg
ZnJvbSBwbHVnaW5zLiAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY2OTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiBFeHBvc2VzIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAg
ICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0Ojppc1NhZmVNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6
OmNhbm9uaWNhbGl6ZU1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6
aXNWYWxpZFRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojppc1NhZmVS
ZXF1ZXN0SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojppc1ZhbGlk
SGVhZGVyVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6Om9wZW4pOgor
ICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDExLTA4LTI0ICBBZHJpZW5uZSBX
YWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBVcGRhdGUgVmlk
ZW9MYXllckNocm9taXVtIHRvIG5vdCBhY2Nlc3MgR0MzRCBvbiB0aGUgbWFpbiB0aHJlYWQKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTM0ODMpCisr
KyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDcgKzIsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgQWxl
eGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDggSnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgotICogIENvcHly
aWdodCAoQykgMjAwOCBEYXZpZCBMZXZpbiA8bGV2aW5AY2hyb21pdW0ub3JnPgorICogIENvcHly
aWdodCAoQykgMjAwOCwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtMTA0LDM1ICsxMDQsNiBAQCBYTUxIdHRwUmVxdWVzdFN0YXRp
Y0RhdGE6OlhNTEh0dHBSZXF1ZXN0CiAgICAgbV9mb3JiaWRkZW5SZXF1ZXN0SGVhZGVycy5hZGQo
InZpYSIpOwogfQogCi0vLyBEZXRlcm1pbmVzIGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgdG9rZW4s
IGFzIGRlZmluZWQgYnkKLS8vICJ0b2tlbiIgaW4gc2VjdGlvbiAyLjIgb2YgUkZDIDI2MTYuCi1z
dGF0aWMgYm9vbCBpc1ZhbGlkVG9rZW4oY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHVuc2ln
bmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBuYW1lW2ldOwotCi0gICAgICAgIGlm
IChjID49IDEyNyB8fCBjIDw9IDMyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIGlmIChjID09ICcoJyB8fCBjID09ICcpJyB8fCBjID09ICc8JyB8fCBjID09ICc+JyB8fCBj
ID09ICdAJyB8fAotICAgICAgICAgICAgYyA9PSAnLCcgfHwgYyA9PSAnOycgfHwgYyA9PSAnOicg
fHwgYyA9PSAnXFwnIHx8IGMgPT0gJ1wiJyB8fAotICAgICAgICAgICAgYyA9PSAnLycgfHwgYyA9
PSAnWycgfHwgYyA9PSAnXScgfHwgYyA9PSAnPycgfHwgYyA9PSAnPScgfHwKLSAgICAgICAgICAg
IGMgPT0gJ3snIHx8IGMgPT0gJ30nKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiBsZW5ndGggPiAwOwotfQotCi1zdGF0aWMgYm9vbCBpc1ZhbGlkSGVhZGVy
VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBy
ZWFsbHkgbWF0Y2ggbmFtZSBhZ2FpbnN0Ci0gICAgLy8gZmllbGQtdmFsdWUgaW4gc2VjdGlvbiA0
LjIgb2YgUkZDIDI2MTYuCi0KLSAgICByZXR1cm4gIW5hbWUuY29udGFpbnMoJ1xyJykgJiYgIW5h
bWUuY29udGFpbnMoJ1xuJyk7Ci19Ci0KIHN0YXRpYyBib29sIGlzU2V0Q29va2llSGVhZGVyKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgInNldC1jb29raWUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAic2V0LWNvb2tp
ZTIiKTsKQEAgLTM5OCw2ICszNjksNjEgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0QXNCbG9i
KGJvb2wgdmFsdQogfQogI2VuZGlmCiAKK2Jvb2wgWE1MSHR0cFJlcXVlc3Q6OmlzU2FmZU1ldGhv
ZChjb25zdCBTdHJpbmcmIG1ldGhvZCkKK3sKKyAgICByZXR1cm4gIWVxdWFsSWdub3JpbmdDYXNl
KG1ldGhvZCwgIlRSQUNFIikKKyAgICAgICAgJiYgIWVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwg
IlRSQUNLIikKKyAgICAgICAgJiYgIWVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIkNPTk5FQ1Qi
KTsKK30KKworU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpjYW5vbmljYWxpemVNZXRob2QoY29uc3Qg
U3RyaW5nJiBtZXRob2QpCit7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIkNP
UFkiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJERUxFVEUiKSB8fCBlcXVhbElnbm9y
aW5nQ2FzZShtZXRob2QsICJHRVQiKQorICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRo
b2QsICJIRUFEIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiSU5ERVgiKSB8fCBlcXVh
bElnbm9yaW5nQ2FzZShtZXRob2QsICJMT0NLIikKKyAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UobWV0aG9kLCAiTS1QT1NUIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiTUtDT0wi
KSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJNT1ZFIikKKyAgICAgICAgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UobWV0aG9kLCAiT1BUSU9OUyIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhv
ZCwgIlBPU1QiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJQUk9QRklORCIpCisgICAg
ICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIlBST1BQQVRDSCIpIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKG1ldGhvZCwgIlBVVCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIlVO
TE9DSyIpKSB7CisgICAgICAgIHJldHVybiBtZXRob2QudXBwZXIoKTsKKyAgICB9CisgICAgcmV0
dXJuIG1ldGhvZDsKK30KKworLy8gRGV0ZXJtaW5lcyBpZiBhIHN0cmluZyBpcyBhIHZhbGlkIHRv
a2VuLCBhcyBkZWZpbmVkIGJ5CisvLyAidG9rZW4iIGluIHNlY3Rpb24gMi4yIG9mIFJGQyAyNjE2
LgorYm9vbCBYTUxIdHRwUmVxdWVzdDo6aXNWYWxpZFRva2VuKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBVQ2hhciBjID0gbmFtZVtpXTsK
KworICAgICAgICBpZiAoYyA+PSAxMjcgfHwgYyA8PSAzMikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBpZiAoYyA9PSAnKCcgfHwgYyA9PSAnKScgfHwgYyA9PSAnPCcgfHwg
YyA9PSAnPicgfHwgYyA9PSAnQCcKKyAgICAgICAgICAgIHx8IGMgPT0gJywnIHx8IGMgPT0gJzsn
IHx8IGMgPT0gJzonIHx8IGMgPT0gJ1xcJyB8fCBjID09ICdcIicKKyAgICAgICAgICAgIHx8IGMg
PT0gJy8nIHx8IGMgPT0gJ1snIHx8IGMgPT0gJ10nIHx8IGMgPT0gJz8nIHx8IGMgPT0gJz0nCisg
ICAgICAgICAgICB8fCBjID09ICd7JyB8fCBjID09ICd9JykKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gbGVuZ3RoID4gMDsKK30KKworYm9vbCBYTUxIdHRw
UmVxdWVzdDo6aXNTYWZlUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
aW5pdGlhbGl6ZVhNTEh0dHBSZXF1ZXN0U3RhdGljRGF0YSgpOworICAgIHJldHVybiAhc3RhdGlj
RGF0YS0+bV9mb3JiaWRkZW5SZXF1ZXN0SGVhZGVycy5jb250YWlucyhuYW1lKSAmJiAhbmFtZS5z
dGFydHNXaXRoKHN0YXRpY0RhdGEtPm1fcHJveHlIZWFkZXJQcmVmaXgsIGZhbHNlKQorICAgICAg
ICAmJiAhbmFtZS5zdGFydHNXaXRoKHN0YXRpY0RhdGEtPm1fc2VjSGVhZGVyUHJlZml4LCBmYWxz
ZSk7Cit9CisKK2Jvb2wgWE1MSHR0cFJlcXVlc3Q6OmlzVmFsaWRIZWFkZXJWYWx1ZShjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBtYXRjaCBu
YW1lIGFnYWluc3QKKyAgICAvLyBmaWVsZC12YWx1ZSBpbiBzZWN0aW9uIDQuMiBvZiBSRkMgMjYx
Ni4KKworICAgIHJldHVybiAhbmFtZS5jb250YWlucygnXHInKSAmJiAhbmFtZS5jb250YWlucygn
XG4nKTsKK30KKwogdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgY29uc3QgS1VSTCYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBvcGVuKG1ldGhv
ZCwgdXJsLCB0cnVlLCBlYyk7CkBAIC00MjMsMjMgKzQ0OSwxNCBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAv
LyBNZXRob2QgbmFtZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlLiBCdXQgc2luY2UgRmlyZWZveCB1cHBl
cmNhc2VzIG1ldGhvZCBuYW1lcyBpdCBrbm93cywgd2UnbGwgZG8gdGhlIHNhbWUuCi0gICAgU3Ry
aW5nIG1ldGhvZFVwcGVyKG1ldGhvZC51cHBlcigpKTsKLQotICAgIGlmIChtZXRob2RVcHBlciA9
PSAiVFJBQ0UiIHx8IG1ldGhvZFVwcGVyID09ICJUUkFDSyIgfHwgbWV0aG9kVXBwZXIgPT0gIkNP
Tk5FQ1QiKSB7CisgICAgaWYgKCFpc1NhZmVNZXRob2QobWV0aG9kKSkgewogICAgICAgICBlYyA9
IFNFQ1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fdXJsID0gdXJs
OworICAgIG1fbWV0aG9kID0gY2Fub25pY2FsaXplTWV0aG9kKG1ldGhvZCk7CiAKLSAgICBpZiAo
bWV0aG9kVXBwZXIgPT0gIkNPUFkiIHx8IG1ldGhvZFVwcGVyID09ICJERUxFVEUiIHx8IG1ldGhv
ZFVwcGVyID09ICJHRVQiIHx8IG1ldGhvZFVwcGVyID09ICJIRUFEIgotICAgICAgICB8fCBtZXRo
b2RVcHBlciA9PSAiSU5ERVgiIHx8IG1ldGhvZFVwcGVyID09ICJMT0NLIiB8fCBtZXRob2RVcHBl
ciA9PSAiTS1QT1NUIiB8fCBtZXRob2RVcHBlciA9PSAiTUtDT0wiIHx8IG1ldGhvZFVwcGVyID09
ICJNT1ZFIgotICAgICAgICB8fCBtZXRob2RVcHBlciA9PSAiT1BUSU9OUyIgfHwgbWV0aG9kVXBw
ZXIgPT0gIlBPU1QiIHx8IG1ldGhvZFVwcGVyID09ICJQUk9QRklORCIgfHwgbWV0aG9kVXBwZXIg
PT0gIlBST1BQQVRDSCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBVVCIKLSAgICAgICAgfHwgbWV0aG9k
VXBwZXIgPT0gIlVOTE9DSyIpCi0gICAgICAgIG1fbWV0aG9kID0gbWV0aG9kVXBwZXI7Ci0gICAg
ZWxzZQotICAgICAgICBtX21ldGhvZCA9IG1ldGhvZDsKKyAgICBtX3VybCA9IHVybDsKIAogICAg
IG1fYXN5bmMgPSBhc3luYzsKIApAQCAtODU2LDEyICs4NzMsNiBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpzZXRSZXF1ZXN0SGVhZGVySW50CiAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kICs9
ICIsICIgKyB2YWx1ZTsKIH0KIAotYm9vbCBYTUxIdHRwUmVxdWVzdDo6aXNTYWZlUmVxdWVzdEhl
YWRlcihjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFzdGF0aWNEYXRh
LT5tX2ZvcmJpZGRlblJlcXVlc3RIZWFkZXJzLmNvbnRhaW5zKG5hbWUpICYmICFuYW1lLnN0YXJ0
c1dpdGgoc3RhdGljRGF0YS0+bV9wcm94eUhlYWRlclByZWZpeCwgZmFsc2UpCi0gICAgICAgICYm
ICFuYW1lLnN0YXJ0c1dpdGgoc3RhdGljRGF0YS0+bV9zZWNIZWFkZXJQcmVmaXgsIGZhbHNlKTsK
LX0KLQogU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZXF1ZXN0SGVhZGVycy5nZXQo
bmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24gOTM0
ODMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtMTEwLDYgKzExMSwxMyBAQCBwdWJsaWM6CiAgICAgQmxvYiogb3B0aW9uYWxSZXNw
b25zZUJsb2IoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlQmxvYi5nZXQoKTsgfQogI2VuZGlm
CiAKKyAgICAvLyBFeHBvc2UgdmFsaWRhdGlvbiBtZXRob2RzIGZvciBvdGhlciB1bnRydXN0ZWQg
SFRUUCByZXF1ZXN0cy4KKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVG9rZW4oY29uc3QgU3RyaW5n
Jik7CisgICAgc3RhdGljIGJvb2wgaXNTYWZlTWV0aG9kKGNvbnN0IFN0cmluZyYpOworICAgIHN0
YXRpYyBTdHJpbmcgY2Fub25pY2FsaXplTWV0aG9kKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRp
YyBib29sIGlzU2FmZVJlcXVlc3RIZWFkZXIoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIGJv
b2wgaXNWYWxpZEhlYWRlclZhbHVlKGNvbnN0IFN0cmluZyYpOworCiAgICAgdm9pZCBzZXRSZXNw
b25zZVR5cGUoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0cmluZyByZXNw
b25zZVR5cGUoKTsKICAgICBSZXNwb25zZVR5cGVDb2RlIHJlc3BvbnNlVHlwZUNvZGUoKSBjb25z
dCB7IHJldHVybiBtX3Jlc3BvbnNlVHlwZUNvZGU7IH0KQEAgLTE2Myw3ICsxNzEsNiBAQCBwcml2
YXRlOgogCiAgICAgU3RyaW5nIGdldFJlcXVlc3RIZWFkZXIoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lKSBjb25zdDsKICAgICB2b2lkIHNldFJlcXVlc3RIZWFkZXJJbnRlcm5hbChjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIGJvb2wgaXNTYWZlUmVx
dWVzdEhlYWRlcihjb25zdCBTdHJpbmcmKSBjb25zdDsKIAogICAgIHZvaWQgY2hhbmdlU3RhdGUo
U3RhdGUgbmV3U3RhdGUpOwogICAgIHZvaWQgY2FsbFJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcigp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105247</attachid>
            <date>2011-08-25 14:39:45 -0700</date>
            <delta_ts>2011-08-25 14:44:42 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>diff.txt</filename>
            <type>text/plain</type>
            <size>14219</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzODI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDgtMjUgIEJpbGwgQnVk
Z2UgIDxiYnVkZ2VAY2hyb21pdW0ub3I+CisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUg
WE1MSHR0cFJlcXVlc3QgbWV0aG9kL2hlYWRlciB2YWxpZGF0aW9uIGxvZ2ljIGF2YWlsYWJsZSBh
cworICAgICAgICBzdGF0aWMgbWV0aG9kcyBzbyBVUkwgbG9hZGVycyBjYW4gcGVyZm9ybSB0aGUg
c2FtZSBjaGVja3MgZm9yIHVudHJ1c3RlZCBIVFRQIHJlcXVlc3RzCisgICAgICAgIGNvbWluZyBm
cm9tIHBsdWdpbnMuIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjY5MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRUUFZhbGlkYXRpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojppc1ZhbGlkVG9rZW4pOgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmlzVmFsaWRIZWFkZXJWYWx1ZSk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9IVFRQVmFsaWRhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiB4bWwv
WE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6Omlz
QWxsb3dlZEhUVFBNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnVw
cGVyY2FzZUtub3duSFRUUE1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVz
dDo6aXNBbGxvd2VkSFRUUEhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVz
dDo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhl
YWRlcik6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0Lmg6CisKIDIwMTEtMDgtMjUgIEln
b3IgT2xpdmVpcmEgIDxpZ29yLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUm9s
bG91dCByOTM3OTk6IENhdXNlZCBiYWQgY2xpcHBpbmcgb24gdGhlIGJvdHRvbSBvZiB0YWxsIGds
eXBocyBpbnNpZGUgYSBidXR0b24gbGFiZWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiA5MzQ4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xMTMzLDYgKzExMzMsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJN
YXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAKKyAgICBwbGF0Zm9y
bS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9uLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvTUlNRUhl
YWRlci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNlLmNwcApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQVmFsaWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQVmFsaWRhdGlvbi5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9u
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkhUVFBWYWxpZGF0aW9uLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBEZXRlcm1pbmVzIGlmIGEgc3RyaW5n
IGlzIGEgdmFsaWQgdG9rZW4sIGFzIGRlZmluZWQgYnkKKy8vICJ0b2tlbiIgaW4gc2VjdGlvbiAy
LjIgb2YgUkZDIDI2MTYuCitib29sIFhNTEh0dHBSZXF1ZXN0Ojppc1ZhbGlkVG9rZW4oY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIFVDaGFy
IGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChjID49IDEyNyB8fCBjIDw9IDMyKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChjID09ICcoJyB8fCBjID09ICcpJyB8
fCBjID09ICc8JyB8fCBjID09ICc+JyB8fCBjID09ICdAJworICAgICAgICAgICAgfHwgYyA9PSAn
LCcgfHwgYyA9PSAnOycgfHwgYyA9PSAnOicgfHwgYyA9PSAnXFwnIHx8IGMgPT0gJ1wiJworICAg
ICAgICAgICAgfHwgYyA9PSAnLycgfHwgYyA9PSAnWycgfHwgYyA9PSAnXScgfHwgYyA9PSAnPycg
fHwgYyA9PSAnPScKKyAgICAgICAgICAgIHx8IGMgPT0gJ3snIHx8IGMgPT0gJ30nKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBsZW5ndGggPiAwOworfQor
Citib29sIFhNTEh0dHBSZXF1ZXN0Ojppc1ZhbGlkSGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgbWF0Y2ggbmFtZSBhZ2Fp
bnN0CisgICAgLy8gZmllbGQtdmFsdWUgaW4gc2VjdGlvbiA0LjIgb2YgUkZDIDI2MTYuCisKKyAg
ICByZXR1cm4gIW5hbWUuY29udGFpbnMoJ1xyJykgJiYgIW5hbWUuY29udGFpbnMoJ1xuJyk7Cit9
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFZhbGlkYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBW
YWxpZGF0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0hUVFBWYWxpZGF0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgSFRUUFZhbGlkYXRpb25faAorI2RlZmluZSBIVFRQVmFsaWRhdGlvbl9oCisKKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgaXNW
YWxpZFRva2VuKGNvbnN0IFN0cmluZyYpOworYm9vbCBpc1ZhbGlkSGVhZGVyVmFsdWUoY29uc3Qg
U3RyaW5nJik7CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAJKHJldmlzaW9uIDkzNDgzKQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
IENvcHlyaWdodCAoQykgMjAwNS0yMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5v
cmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEp1bGllbiBDaGFmZnJhaXggPGpjaGFm
ZnJhaXhAd2Via2l0Lm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggRGF2aWQgTGV2aW4gPGxl
dmluQGNocm9taXVtLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTM2LDYgKzM2
LDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRmlsZS5oIgogI2lu
Y2x1ZGUgIkhUVFBQYXJzZXJzLmgiCisjaW5jbHVkZSAiSFRUUFZhbGlkYXRpb24uaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9y
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC0xMDQsMzUgKzEwNSw2IEBAIFhN
TEh0dHBSZXF1ZXN0U3RhdGljRGF0YTo6WE1MSHR0cFJlcXVlc3QKICAgICBtX2ZvcmJpZGRlblJl
cXVlc3RIZWFkZXJzLmFkZCgidmlhIik7CiB9CiAKLS8vIERldGVybWluZXMgaWYgYSBzdHJpbmcg
aXMgYSB2YWxpZCB0b2tlbiwgYXMgZGVmaW5lZCBieQotLy8gInRva2VuIiBpbiBzZWN0aW9uIDIu
MiBvZiBSRkMgMjYxNi4KLXN0YXRpYyBib29sIGlzVmFsaWRUb2tlbihjb25zdCBTdHJpbmcmIG5h
bWUpCi17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgVUNoYXIgYyA9IG5hbWVb
aV07Ci0KLSAgICAgICAgaWYgKGMgPj0gMTI3IHx8IGMgPD0gMzIpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGMgPT0gJygnIHx8IGMgPT0gJyknIHx8IGMgPT0gJzwn
IHx8IGMgPT0gJz4nIHx8IGMgPT0gJ0AnIHx8Ci0gICAgICAgICAgICBjID09ICcsJyB8fCBjID09
ICc7JyB8fCBjID09ICc6JyB8fCBjID09ICdcXCcgfHwgYyA9PSAnXCInIHx8Ci0gICAgICAgICAg
ICBjID09ICcvJyB8fCBjID09ICdbJyB8fCBjID09ICddJyB8fCBjID09ICc/JyB8fCBjID09ICc9
JyB8fAotICAgICAgICAgICAgYyA9PSAneycgfHwgYyA9PSAnfScpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxlbmd0aCA+IDA7Ci19Ci0KLXN0YXRpYyBi
b29sIGlzVmFsaWRIZWFkZXJWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHJlYWxseSBtYXRjaCBuYW1lIGFnYWluc3QKLSAgICAvLyBmaWVsZC12
YWx1ZSBpbiBzZWN0aW9uIDQuMiBvZiBSRkMgMjYxNi4KLQotICAgIHJldHVybiAhbmFtZS5jb250
YWlucygnXHInKSAmJiAhbmFtZS5jb250YWlucygnXG4nKTsKLX0KLQogc3RhdGljIGJvb2wgaXNT
ZXRDb29raWVIZWFkZXIoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewogICAgIHJldHVybiBl
cXVhbElnbm9yaW5nQ2FzZShuYW1lLCAic2V0LWNvb2tpZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJzZXQtY29va2llMiIpOwpAQCAtMzk4LDYgKzM3MCwzMiBAQCB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpzZXRBc0Jsb2IoYm9vbCB2YWx1CiB9CiAjZW5kaWYKIAorYm9vbCBYTUxIdHRwUmVx
dWVzdDo6aXNBbGxvd2VkSFRUUE1ldGhvZChjb25zdCBTdHJpbmcmIG1ldGhvZCkKK3sKKyAgICBy
ZXR1cm4gIWVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIlRSQUNFIikKKyAgICAgICAgJiYgIWVx
dWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIlRSQUNLIikKKyAgICAgICAgJiYgIWVxdWFsSWdub3Jp
bmdDYXNlKG1ldGhvZCwgIkNPTk5FQ1QiKTsKK30KKworU3RyaW5nIFhNTEh0dHBSZXF1ZXN0Ojp1
cHBlcmNhc2VLbm93bkhUVFBNZXRob2QoY29uc3QgU3RyaW5nJiBtZXRob2QpCit7CisgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIkNPUFkiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSht
ZXRob2QsICJERUxFVEUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJHRVQiKQorICAg
ICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJIRUFEIikgfHwgZXF1YWxJZ25vcmlu
Z0Nhc2UobWV0aG9kLCAiSU5ERVgiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJMT0NL
IikKKyAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiTS1QT1NUIikgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiTUtDT0wiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRo
b2QsICJNT1ZFIikKKyAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiT1BUSU9O
UyIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIlBPU1QiKSB8fCBlcXVhbElnbm9yaW5n
Q2FzZShtZXRob2QsICJQUk9QRklORCIpCisgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1l
dGhvZCwgIlBST1BQQVRDSCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIlBVVCIpIHx8
IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIlVOTE9DSyIpKSB7CisgICAgICAgIHJldHVybiBt
ZXRob2QudXBwZXIoKTsKKyAgICB9CisgICAgcmV0dXJuIG1ldGhvZDsKK30KKworYm9vbCBYTUxI
dHRwUmVxdWVzdDo6aXNBbGxvd2VkSFRUUEhlYWRlcihjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgaW5pdGlhbGl6ZVhNTEh0dHBSZXF1ZXN0U3RhdGljRGF0YSgpOworICAgIHJldHVybiAhc3Rh
dGljRGF0YS0+bV9mb3JiaWRkZW5SZXF1ZXN0SGVhZGVycy5jb250YWlucyhuYW1lKSAmJiAhbmFt
ZS5zdGFydHNXaXRoKHN0YXRpY0RhdGEtPm1fcHJveHlIZWFkZXJQcmVmaXgsIGZhbHNlKQorICAg
ICAgICAmJiAhbmFtZS5zdGFydHNXaXRoKHN0YXRpY0RhdGEtPm1fc2VjSGVhZGVyUHJlZml4LCBm
YWxzZSk7Cit9CisKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4oY29uc3QgU3RyaW5nJiBtZXRo
b2QsIGNvbnN0IEtVUkwmIHVybCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgb3BlbihtZXRo
b2QsIHVybCwgdHJ1ZSwgZWMpOwpAQCAtNDE4LDI4ICs0MTYsMTkgQEAgdm9pZCBYTUxIdHRwUmVx
dWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIAogCiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gVU5TRU5U
KTsKIAotICAgIGlmICghaXNWYWxpZFRva2VuKG1ldGhvZCkpIHsKKyAgICBpZiAoIWlzVmFsaWRI
VFRQVG9rZW4obWV0aG9kKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICAvLyBNZXRob2QgbmFtZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlLiBC
dXQgc2luY2UgRmlyZWZveCB1cHBlcmNhc2VzIG1ldGhvZCBuYW1lcyBpdCBrbm93cywgd2UnbGwg
ZG8gdGhlIHNhbWUuCi0gICAgU3RyaW5nIG1ldGhvZFVwcGVyKG1ldGhvZC51cHBlcigpKTsKLQot
ICAgIGlmIChtZXRob2RVcHBlciA9PSAiVFJBQ0UiIHx8IG1ldGhvZFVwcGVyID09ICJUUkFDSyIg
fHwgbWV0aG9kVXBwZXIgPT0gIkNPTk5FQ1QiKSB7CisgICAgaWYgKCFpc0FsbG93ZWRIVFRQTWV0
aG9kKG1ldGhvZCkpIHsKICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBtX3VybCA9IHVybDsKKyAgICBtX21ldGhvZCA9IHVwcGVyY2FzZUtu
b3duSFRUUE1ldGhvZChtZXRob2QpOwogCi0gICAgaWYgKG1ldGhvZFVwcGVyID09ICJDT1BZIiB8
fCBtZXRob2RVcHBlciA9PSAiREVMRVRFIiB8fCBtZXRob2RVcHBlciA9PSAiR0VUIiB8fCBtZXRo
b2RVcHBlciA9PSAiSEVBRCIKLSAgICAgICAgfHwgbWV0aG9kVXBwZXIgPT0gIklOREVYIiB8fCBt
ZXRob2RVcHBlciA9PSAiTE9DSyIgfHwgbWV0aG9kVXBwZXIgPT0gIk0tUE9TVCIgfHwgbWV0aG9k
VXBwZXIgPT0gIk1LQ09MIiB8fCBtZXRob2RVcHBlciA9PSAiTU9WRSIKLSAgICAgICAgfHwgbWV0
aG9kVXBwZXIgPT0gIk9QVElPTlMiIHx8IG1ldGhvZFVwcGVyID09ICJQT1NUIiB8fCBtZXRob2RV
cHBlciA9PSAiUFJPUEZJTkQiIHx8IG1ldGhvZFVwcGVyID09ICJQUk9QUEFUQ0giIHx8IG1ldGhv
ZFVwcGVyID09ICJQVVQiCi0gICAgICAgIHx8IG1ldGhvZFVwcGVyID09ICJVTkxPQ0siKQotICAg
ICAgICBtX21ldGhvZCA9IG1ldGhvZFVwcGVyOwotICAgIGVsc2UKLSAgICAgICAgbV9tZXRob2Qg
PSBtZXRob2Q7CisgICAgbV91cmwgPSB1cmw7CiAKICAgICBtX2FzeW5jID0gYXN5bmM7CiAKQEAg
LTgzNSwxMyArODI0LDEzIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIo
Y28KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghaXNWYWxpZFRva2VuKG5hbWUp
IHx8ICFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7CisgICAgaWYgKCFpc1ZhbGlkSFRUUFRv
a2VuKG5hbWUpIHx8ICFpc1ZhbGlkSFRUUEhlYWRlclZhbHVlKHZhbHVlKSkgewogICAgICAgICBl
YyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBBIHByaXZp
bGVnZWQgc2NyaXB0IChlLmcuIGEgRGFzaGJvYXJkIHdpZGdldCkgY2FuIHNldCBhbnkgaGVhZGVy
cy4KLSAgICBpZiAoIXNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJlc291cmNlcygpICYm
ICFpc1NhZmVSZXF1ZXN0SGVhZGVyKG5hbWUpKSB7CisgICAgaWYgKCFzZWN1cml0eU9yaWdpbigp
LT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSAmJiAhaXNBbGxvd2VkSFRUUEhlYWRlcihuYW1lKSkg
ewogICAgICAgICByZXBvcnRVbnNhZmVVc2FnZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICJS
ZWZ1c2VkIHRvIHNldCB1bnNhZmUgaGVhZGVyIFwiIiArIG5hbWUgKyAiXCIiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTg1NiwxMiArODQ1LDYgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
c2V0UmVxdWVzdEhlYWRlckludAogICAgICAgICByZXN1bHQuZmlyc3QtPnNlY29uZCArPSAiLCAi
ICsgdmFsdWU7CiB9CiAKLWJvb2wgWE1MSHR0cFJlcXVlc3Q6OmlzU2FmZVJlcXVlc3RIZWFkZXIo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAotewotICAgIHJldHVybiAhc3RhdGljRGF0YS0+bV9m
b3JiaWRkZW5SZXF1ZXN0SGVhZGVycy5jb250YWlucyhuYW1lKSAmJiAhbmFtZS5zdGFydHNXaXRo
KHN0YXRpY0RhdGEtPm1fcHJveHlIZWFkZXJQcmVmaXgsIGZhbHNlKQotICAgICAgICAmJiAhbmFt
ZS5zdGFydHNXaXRoKHN0YXRpY0RhdGEtPm1fc2VjSGVhZGVyUHJlZml4LCBmYWxzZSk7Ci19Ci0K
IFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVxdWVzdEhlYWRlcihjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVxdWVzdEhlYWRlcnMuZ2V0KG5hbWUp
OwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHJldmlzaW9uIDkzNDgzKQor
KysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTExMCw2ICsxMTEsMTEgQEAgcHVibGljOgogICAgIEJsb2IqIG9wdGlvbmFsUmVzcG9uc2VC
bG9iKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZUJsb2IuZ2V0KCk7IH0KICNlbmRpZgogCisg
ICAgLy8gRXhwb3NlIEhUVFAgdmFsaWRhdGlvbiBtZXRob2RzIGZvciBvdGhlciB1bnRydXN0ZWQg
cmVxdWVzdHMuCisgICAgc3RhdGljIGJvb2wgaXNBbGxvd2VkSFRUUE1ldGhvZChjb25zdCBTdHJp
bmcmKTsKKyAgICBzdGF0aWMgU3RyaW5nIHVwcGVyY2FzZUtub3duSFRUUE1ldGhvZChjb25zdCBT
dHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBpc0FsbG93ZWRIVFRQSGVhZGVyKGNvbnN0IFN0cmlu
ZyYpOworCiAgICAgdm9pZCBzZXRSZXNwb25zZVR5cGUoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIFN0cmluZyByZXNwb25zZVR5cGUoKTsKICAgICBSZXNwb25zZVR5cGVDb2Rl
IHJlc3BvbnNlVHlwZUNvZGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlVHlwZUNvZGU7IH0K
QEAgLTE2Myw3ICsxNjksNiBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nIGdldFJlcXVlc3RIZWFk
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICB2b2lkIHNldFJlcXVlc3RI
ZWFkZXJJbnRlcm5hbChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpOwotICAgIGJvb2wgaXNTYWZlUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcmKSBjb25zdDsK
IAogICAgIHZvaWQgY2hhbmdlU3RhdGUoU3RhdGUgbmV3U3RhdGUpOwogICAgIHZvaWQgY2FsbFJl
YWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105250</attachid>
            <date>2011-08-25 14:44:42 -0700</date>
            <delta_ts>2011-08-25 14:46:35 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>diff.txt</filename>
            <type>text/plain</type>
            <size>15154</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzODI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDgtMjUgIEJpbGwgQnVk
Z2UgIDxiYnVkZ2VAY2hyb21pdW0ub3I+CisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUg
WE1MSHR0cFJlcXVlc3QgbWV0aG9kL2hlYWRlciB2YWxpZGF0aW9uIGxvZ2ljIGF2YWlsYWJsZSBh
cworICAgICAgICBzdGF0aWMgbWV0aG9kcyBzbyBVUkwgbG9hZGVycyBjYW4gcGVyZm9ybSB0aGUg
c2FtZSBjaGVja3MgZm9yIHVudHJ1c3RlZCBIVFRQIHJlcXVlc3RzCisgICAgICAgIGNvbWluZyBm
cm9tIHBsdWdpbnMuIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjY5MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRUUFZhbGlkYXRpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmlzVmFsaWRIVFRQVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6aXNW
YWxpZEhUVFBIZWFkZXJWYWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQVmFs
aWRhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmlzQWxsb3dlZEhUVFBNZXRob2QpOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnVwcGVyY2FzZUtub3duSFRUUE1ldGhvZCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6aXNBbGxvd2VkSFRUUEhlYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6b3Blbik6CisgICAgICAgIChXZWJD
b3JlOjpYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcik6CisgICAgICAgICogeG1sL1hN
TEh0dHBSZXF1ZXN0Lmg6CisKKzIwMTEtMDgtMjUgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VAY2hyb21p
dW0ub3I+CisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUgWE1MSHR0cFJlcXVlc3QgbWV0
aG9kL2hlYWRlciB2YWxpZGF0aW9uIGxvZ2ljIGF2YWlsYWJsZSBhcworICAgICAgICBzdGF0aWMg
bWV0aG9kcyBzbyBVUkwgbG9hZGVycyBjYW4gcGVyZm9ybSB0aGUgc2FtZSBjaGVja3MgZm9yIHVu
dHJ1c3RlZCBIVFRQIHJlcXVlc3RzCisgICAgICAgIGNvbWluZyBmcm9tIHBsdWdpbnMuIAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY5MDkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMu
IChPT1BTISkKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvSFRUUFZhbGlkYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhN
TEh0dHBSZXF1ZXN0Ojppc1ZhbGlkVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJl
cXVlc3Q6OmlzVmFsaWRIZWFkZXJWYWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9I
VFRQVmFsaWRhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmlzQWxsb3dlZEhUVFBNZXRob2Qp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnVwcGVyY2FzZUtub3duSFRUUE1l
dGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6aXNBbGxvd2VkSFRUUEhl
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6b3Blbik6CisgICAgICAg
IChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcik6CisgICAgICAgICog
eG1sL1hNTEh0dHBSZXF1ZXN0Lmg6CisKIDIwMTEtMDgtMjUgIElnb3IgT2xpdmVpcmEgIDxpZ29y
Lm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUm9sbG91dCByOTM3OTk6IENhdXNl
ZCBiYWQgY2xpcHBpbmcgb24gdGhlIGJvdHRvbSBvZiB0YWxsIGdseXBocyBpbnNpZGUgYSBidXR0
b24gbGFiZWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5MzQ4MykKKysrIFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMTMzLDYgKzEx
MzMsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0
YS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCiAgICAgcGxhdGZv
cm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxp
ZGF0aW9uLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmNwcAogICAgIHBsYXRmb3JtL25ldHdv
cmsvUHJvdGVjdGlvblNwYWNlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9IVFRQVmFsaWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9IVFRQVmFsaWRhdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBbGV4ZXkgUHJvc2t1
cnlha292IChhcEB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhU
VFBWYWxpZGF0aW9uLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBEZXRlcm1pbmVzIGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgdG9rZW4s
IGFzIGRlZmluZWQgYnkKKy8vICJ0b2tlbiIgaW4gc2VjdGlvbiAyLjIgb2YgUkZDIDI2MTYuCiti
b29sIGlzVmFsaWRIVFRQVG9rZW4oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICAgIFVDaGFyIGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChj
ID49IDEyNyB8fCBjIDw9IDMyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGlmIChjID09ICcoJyB8fCBjID09ICcpJyB8fCBjID09ICc8JyB8fCBjID09ICc+JyB8fCBjID09
ICdAJworICAgICAgICAgICAgfHwgYyA9PSAnLCcgfHwgYyA9PSAnOycgfHwgYyA9PSAnOicgfHwg
YyA9PSAnXFwnIHx8IGMgPT0gJ1wiJworICAgICAgICAgICAgfHwgYyA9PSAnLycgfHwgYyA9PSAn
WycgfHwgYyA9PSAnXScgfHwgYyA9PSAnPycgfHwgYyA9PSAnPScKKyAgICAgICAgICAgIHx8IGMg
PT0gJ3snIHx8IGMgPT0gJ30nKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiBsZW5ndGggPiAwOworfQorCitib29sIGlzVmFsaWRIVFRQSGVhZGVyVmFsdWUo
Y29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkg
bWF0Y2ggbmFtZSBhZ2FpbnN0CisgICAgLy8gZmllbGQtdmFsdWUgaW4gc2VjdGlvbiA0LjIgb2Yg
UkZDIDI2MTYuCisKKyAgICByZXR1cm4gIW5hbWUuY29udGFpbnMoJ1xyJykgJiYgIW5hbWUuY29u
dGFpbnMoJ1xuJyk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvSFRUUFZhbGlkYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQWxleGV5IFByb3NrdXJ5YWtvdiAo
YXBAd2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgSFRUUFZhbGlkYXRpb25faAorI2RlZmluZSBIVFRQVmFs
aWRhdGlvbl9oCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Jvb2wgaXNWYWxpZEhUVFBUb2tlbihjb25zdCBTdHJpbmcmKTsKK2Jvb2wgaXNWYWxp
ZEhUVFBIZWFkZXJWYWx1ZShjb25zdCBTdHJpbmcmKTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTM0ODMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcg
KzIsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgQWxleGV5IFBy
b3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgg
SnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgotICogIENvcHlyaWdodCAo
QykgMjAwOCBEYXZpZCBMZXZpbiA8bGV2aW5AY2hyb21pdW0ub3JnPgorICogIENvcHlyaWdodCAo
QykgMjAwOCwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
ICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKKyNpbmNsdWRlICJI
VFRQVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgog
I2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
QEAgLTEwNCwzNSArMTA1LDYgQEAgWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhOjpYTUxIdHRwUmVx
dWVzdAogICAgIG1fZm9yYmlkZGVuUmVxdWVzdEhlYWRlcnMuYWRkKCJ2aWEiKTsKIH0KIAotLy8g
RGV0ZXJtaW5lcyBpZiBhIHN0cmluZyBpcyBhIHZhbGlkIHRva2VuLCBhcyBkZWZpbmVkIGJ5Ci0v
LyAidG9rZW4iIGluIHNlY3Rpb24gMi4yIG9mIFJGQyAyNjE2Lgotc3RhdGljIGJvb2wgaXNWYWxp
ZFRva2VuKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1l
Lmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICBVQ2hhciBjID0gbmFtZVtpXTsKLQotICAgICAgICBpZiAoYyA+PSAxMjcgfHwgYyA8
PSAzMikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoYyA9PSAnKCcg
fHwgYyA9PSAnKScgfHwgYyA9PSAnPCcgfHwgYyA9PSAnPicgfHwgYyA9PSAnQCcgfHwKLSAgICAg
ICAgICAgIGMgPT0gJywnIHx8IGMgPT0gJzsnIHx8IGMgPT0gJzonIHx8IGMgPT0gJ1xcJyB8fCBj
ID09ICdcIicgfHwKLSAgICAgICAgICAgIGMgPT0gJy8nIHx8IGMgPT0gJ1snIHx8IGMgPT0gJ10n
IHx8IGMgPT0gJz8nIHx8IGMgPT0gJz0nIHx8Ci0gICAgICAgICAgICBjID09ICd7JyB8fCBjID09
ICd9JykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGVu
Z3RoID4gMDsKLX0KLQotc3RhdGljIGJvb2wgaXNWYWxpZEhlYWRlclZhbHVlKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IG1hdGNoIG5hbWUg
YWdhaW5zdAotICAgIC8vIGZpZWxkLXZhbHVlIGluIHNlY3Rpb24gNC4yIG9mIFJGQyAyNjE2Lgot
Ci0gICAgcmV0dXJuICFuYW1lLmNvbnRhaW5zKCdccicpICYmICFuYW1lLmNvbnRhaW5zKCdcbicp
OwotfQotCiBzdGF0aWMgYm9vbCBpc1NldENvb2tpZUhlYWRlcihjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUpCiB7CiAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzZXQtY29va2ll
IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNldC1jb29raWUyIik7CkBAIC0zOTgsNiAr
MzcwLDMyIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldEFzQmxvYihib29sIHZhbHUKIH0KICNl
bmRpZgogCitib29sIFhNTEh0dHBSZXF1ZXN0Ojppc0FsbG93ZWRIVFRQTWV0aG9kKGNvbnN0IFN0
cmluZyYgbWV0aG9kKQoreworICAgIHJldHVybiAhZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAi
VFJBQ0UiKQorICAgICAgICAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiVFJBQ0siKQor
ICAgICAgICAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiQ09OTkVDVCIpOworfQorCitT
dHJpbmcgWE1MSHR0cFJlcXVlc3Q6OnVwcGVyY2FzZUtub3duSFRUUE1ldGhvZChjb25zdCBTdHJp
bmcmIG1ldGhvZCkKK3sKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiQ09QWSIp
IHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIkRFTEVURSIpIHx8IGVxdWFsSWdub3JpbmdD
YXNlKG1ldGhvZCwgIkdFVCIpCisgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwg
IkhFQUQiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJJTkRFWCIpIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKG1ldGhvZCwgIkxPQ0siKQorICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZSht
ZXRob2QsICJNLVBPU1QiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJNS0NPTCIpIHx8
IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIk1PVkUiKQorICAgICAgICB8fCBlcXVhbElnbm9y
aW5nQ2FzZShtZXRob2QsICJPUFRJT05TIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAi
UE9TVCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIlBST1BGSU5EIikKKyAgICAgICAg
fHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiUFJPUFBBVENIIikgfHwgZXF1YWxJZ25vcmlu
Z0Nhc2UobWV0aG9kLCAiUFVUIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiVU5MT0NL
IikpIHsKKyAgICAgICAgcmV0dXJuIG1ldGhvZC51cHBlcigpOworICAgIH0KKyAgICByZXR1cm4g
bWV0aG9kOworfQorCitib29sIFhNTEh0dHBSZXF1ZXN0Ojppc0FsbG93ZWRIVFRQSGVhZGVyKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpbml0aWFsaXplWE1MSHR0cFJlcXVlc3RTdGF0aWNE
YXRhKCk7CisgICAgcmV0dXJuICFzdGF0aWNEYXRhLT5tX2ZvcmJpZGRlblJlcXVlc3RIZWFkZXJz
LmNvbnRhaW5zKG5hbWUpICYmICFuYW1lLnN0YXJ0c1dpdGgoc3RhdGljRGF0YS0+bV9wcm94eUhl
YWRlclByZWZpeCwgZmFsc2UpCisgICAgICAgICYmICFuYW1lLnN0YXJ0c1dpdGgoc3RhdGljRGF0
YS0+bV9zZWNIZWFkZXJQcmVmaXgsIGZhbHNlKTsKK30KKwogdm9pZCBYTUxIdHRwUmVxdWVzdDo6
b3Blbihjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgS1VSTCYgdXJsLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBvcGVuKG1ldGhvZCwgdXJsLCB0cnVlLCBlYyk7CkBAIC00MTgsMjggKzQx
NiwxOSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgCiAKICAgICBB
U1NFUlQobV9zdGF0ZSA9PSBVTlNFTlQpOwogCi0gICAgaWYgKCFpc1ZhbGlkVG9rZW4obWV0aG9k
KSkgeworICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKSB7CiAgICAgICAgIGVjID0g
U1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIE1ldGhvZCBuYW1l
cyBhcmUgY2FzZSBzZW5zaXRpdmUuIEJ1dCBzaW5jZSBGaXJlZm94IHVwcGVyY2FzZXMgbWV0aG9k
IG5hbWVzIGl0IGtub3dzLCB3ZSdsbCBkbyB0aGUgc2FtZS4KLSAgICBTdHJpbmcgbWV0aG9kVXBw
ZXIobWV0aG9kLnVwcGVyKCkpOwotCi0gICAgaWYgKG1ldGhvZFVwcGVyID09ICJUUkFDRSIgfHwg
bWV0aG9kVXBwZXIgPT0gIlRSQUNLIiB8fCBtZXRob2RVcHBlciA9PSAiQ09OTkVDVCIpIHsKKyAg
ICBpZiAoIWlzQWxsb3dlZEhUVFBNZXRob2QobWV0aG9kKSkgewogICAgICAgICBlYyA9IFNFQ1VS
SVRZX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fdXJsID0gdXJsOworICAg
IG1fbWV0aG9kID0gdXBwZXJjYXNlS25vd25IVFRQTWV0aG9kKG1ldGhvZCk7CiAKLSAgICBpZiAo
bWV0aG9kVXBwZXIgPT0gIkNPUFkiIHx8IG1ldGhvZFVwcGVyID09ICJERUxFVEUiIHx8IG1ldGhv
ZFVwcGVyID09ICJHRVQiIHx8IG1ldGhvZFVwcGVyID09ICJIRUFEIgotICAgICAgICB8fCBtZXRo
b2RVcHBlciA9PSAiSU5ERVgiIHx8IG1ldGhvZFVwcGVyID09ICJMT0NLIiB8fCBtZXRob2RVcHBl
ciA9PSAiTS1QT1NUIiB8fCBtZXRob2RVcHBlciA9PSAiTUtDT0wiIHx8IG1ldGhvZFVwcGVyID09
ICJNT1ZFIgotICAgICAgICB8fCBtZXRob2RVcHBlciA9PSAiT1BUSU9OUyIgfHwgbWV0aG9kVXBw
ZXIgPT0gIlBPU1QiIHx8IG1ldGhvZFVwcGVyID09ICJQUk9QRklORCIgfHwgbWV0aG9kVXBwZXIg
PT0gIlBST1BQQVRDSCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBVVCIKLSAgICAgICAgfHwgbWV0aG9k
VXBwZXIgPT0gIlVOTE9DSyIpCi0gICAgICAgIG1fbWV0aG9kID0gbWV0aG9kVXBwZXI7Ci0gICAg
ZWxzZQotICAgICAgICBtX21ldGhvZCA9IG1ldGhvZDsKKyAgICBtX3VybCA9IHVybDsKIAogICAg
IG1fYXN5bmMgPSBhc3luYzsKIApAQCAtODM1LDEzICs4MjQsMTMgQEAgdm9pZCBYTUxIdHRwUmVx
dWVzdDo6c2V0UmVxdWVzdEhlYWRlcihjbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKCFpc1ZhbGlkVG9rZW4obmFtZSkgfHwgIWlzVmFsaWRIZWFkZXJWYWx1ZSh2YWx1ZSkpIHsK
KyAgICBpZiAoIWlzVmFsaWRIVFRQVG9rZW4obmFtZSkgfHwgIWlzVmFsaWRIVFRQSGVhZGVyVmFs
dWUodmFsdWUpKSB7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIC8vIEEgcHJpdmlsZWdlZCBzY3JpcHQgKGUuZy4gYSBEYXNoYm9hcmQgd2lk
Z2V0KSBjYW4gc2V0IGFueSBoZWFkZXJzLgotICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2Fu
TG9hZExvY2FsUmVzb3VyY2VzKCkgJiYgIWlzU2FmZVJlcXVlc3RIZWFkZXIobmFtZSkpIHsKKyAg
ICBpZiAoIXNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJlc291cmNlcygpICYmICFpc0Fs
bG93ZWRIVFRQSGVhZGVyKG5hbWUpKSB7CiAgICAgICAgIHJlcG9ydFVuc2FmZVVzYWdlKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgIlJlZnVzZWQgdG8gc2V0IHVuc2FmZSBoZWFkZXIgXCIiICsg
bmFtZSArICJcIiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODU2LDEyICs4NDUsNiBA
QCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVySW50CiAgICAgICAgIHJlc3Vs
dC5maXJzdC0+c2Vjb25kICs9ICIsICIgKyB2YWx1ZTsKIH0KIAotYm9vbCBYTUxIdHRwUmVxdWVz
dDo6aXNTYWZlUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICFzdGF0aWNEYXRhLT5tX2ZvcmJpZGRlblJlcXVlc3RIZWFkZXJzLmNvbnRhaW5zKG5h
bWUpICYmICFuYW1lLnN0YXJ0c1dpdGgoc3RhdGljRGF0YS0+bV9wcm94eUhlYWRlclByZWZpeCwg
ZmFsc2UpCi0gICAgICAgICYmICFuYW1lLnN0YXJ0c1dpdGgoc3RhdGljRGF0YS0+bV9zZWNIZWFk
ZXJQcmVmaXgsIGZhbHNlKTsKLX0KLQogU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXF1ZXN0
SGVhZGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9y
ZXF1ZXN0SGVhZGVycy5nZXQobmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuaAkocmV2aXNpb24gOTM0ODMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29t
PgorICogIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTEwLDYgKzExMSwxMSBAQCBwdWJsaWM6CiAgICAg
QmxvYiogb3B0aW9uYWxSZXNwb25zZUJsb2IoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlQmxv
Yi5nZXQoKTsgfQogI2VuZGlmCiAKKyAgICAvLyBFeHBvc2UgSFRUUCB2YWxpZGF0aW9uIG1ldGhv
ZHMgZm9yIG90aGVyIHVudHJ1c3RlZCByZXF1ZXN0cy4KKyAgICBzdGF0aWMgYm9vbCBpc0FsbG93
ZWRIVFRQTWV0aG9kKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBTdHJpbmcgdXBwZXJjYXNl
S25vd25IVFRQTWV0aG9kKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGlzQWxsb3dl
ZEhUVFBIZWFkZXIoY29uc3QgU3RyaW5nJik7CisKICAgICB2b2lkIHNldFJlc3BvbnNlVHlwZShj
b25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIHJlc3BvbnNlVHlwZSgp
OwogICAgIFJlc3BvbnNlVHlwZUNvZGUgcmVzcG9uc2VUeXBlQ29kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVzcG9uc2VUeXBlQ29kZTsgfQpAQCAtMTYzLDcgKzE2OSw2IEBAIHByaXZhdGU6CiAKICAg
ICBTdHJpbmcgZ2V0UmVxdWVzdEhlYWRlcihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0
OwogICAgIHZvaWQgc2V0UmVxdWVzdEhlYWRlckludGVybmFsKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgYm9vbCBpc1NhZmVSZXF1ZXN0SGVhZGVy
KGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiAgICAgdm9pZCBjaGFuZ2VTdGF0ZShTdGF0ZSBuZXdT
dGF0ZSk7CiAgICAgdm9pZCBjYWxsUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105251</attachid>
            <date>2011-08-25 14:46:35 -0700</date>
            <delta_ts>2011-08-25 16:04:33 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>diff.txt</filename>
            <type>text/plain</type>
            <size>14179</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzODI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDgtMjUgIEJpbGwgQnVk
Z2UgIDxiYnVkZ2VAY2hyb21pdW0ub3I+CisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUg
WE1MSHR0cFJlcXVlc3QgbWV0aG9kL2hlYWRlciB2YWxpZGF0aW9uIGxvZ2ljIGF2YWlsYWJsZSBh
cworICAgICAgICBzdGF0aWMgbWV0aG9kcyBzbyBVUkwgbG9hZGVycyBjYW4gcGVyZm9ybSB0aGUg
c2FtZSBjaGVja3MgZm9yIHVudHJ1c3RlZCBIVFRQIHJlcXVlc3RzCisgICAgICAgIGNvbWluZyBm
cm9tIHBsdWdpbnMuIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjY5MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRUUFZhbGlkYXRpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmlzVmFsaWRIVFRQVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6aXNW
YWxpZEhUVFBIZWFkZXJWYWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQVmFs
aWRhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmlzQWxsb3dlZEhUVFBNZXRob2QpOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnVwcGVyY2FzZUtub3duSFRUUE1ldGhvZCk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6aXNBbGxvd2VkSFRUUEhlYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6b3Blbik6CisgICAgICAgIChXZWJD
b3JlOjpYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcik6CisgICAgICAgICogeG1sL1hN
TEh0dHBSZXF1ZXN0Lmg6CisKIDIwMTEtMDgtMjUgIElnb3IgT2xpdmVpcmEgIDxpZ29yLm9saXZl
aXJhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUm9sbG91dCByOTM3OTk6IENhdXNlZCBiYWQg
Y2xpcHBpbmcgb24gdGhlIGJvdHRvbSBvZiB0YWxsIGdseXBocyBpbnNpZGUgYSBidXR0b24gbGFi
ZWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5MzQ4MykKKysrIFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMTMzLDYgKzExMzMsNyBA
QCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9IVFRQUGFyc2Vycy5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9u
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvUHJv
dGVjdGlvblNwYWNlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9I
VFRQVmFsaWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9IVFRQVmFsaWRhdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBbGV4ZXkgUHJvc2t1cnlha292
IChhcEB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhUVFBWYWxp
ZGF0aW9uLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBEZXRlcm1pbmVzIGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgdG9rZW4sIGFzIGRl
ZmluZWQgYnkKKy8vICJ0b2tlbiIgaW4gc2VjdGlvbiAyLjIgb2YgUkZDIDI2MTYuCitib29sIGlz
VmFsaWRIVFRQVG9rZW4oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IG5hbWUubGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgIFVDaGFyIGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChjID49IDEy
NyB8fCBjIDw9IDMyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChj
ID09ICcoJyB8fCBjID09ICcpJyB8fCBjID09ICc8JyB8fCBjID09ICc+JyB8fCBjID09ICdAJwor
ICAgICAgICAgICAgfHwgYyA9PSAnLCcgfHwgYyA9PSAnOycgfHwgYyA9PSAnOicgfHwgYyA9PSAn
XFwnIHx8IGMgPT0gJ1wiJworICAgICAgICAgICAgfHwgYyA9PSAnLycgfHwgYyA9PSAnWycgfHwg
YyA9PSAnXScgfHwgYyA9PSAnPycgfHwgYyA9PSAnPScKKyAgICAgICAgICAgIHx8IGMgPT0gJ3sn
IHx8IGMgPT0gJ30nKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiBsZW5ndGggPiAwOworfQorCitib29sIGlzVmFsaWRIVFRQSGVhZGVyVmFsdWUoY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgbWF0Y2gg
bmFtZSBhZ2FpbnN0CisgICAgLy8gZmllbGQtdmFsdWUgaW4gc2VjdGlvbiA0LjIgb2YgUkZDIDI2
MTYuCisKKyAgICByZXR1cm4gIW5hbWUuY29udGFpbnMoJ1xyJykgJiYgIW5hbWUuY29udGFpbnMo
J1xuJyk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRU
UFZhbGlkYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0hUVFBWYWxpZGF0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Vi
a2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSFRUUFZhbGlkYXRpb25faAorI2RlZmluZSBIVFRQVmFsaWRhdGlv
bl9oCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgaXNWYWxpZEhUVFBUb2tlbihjb25zdCBTdHJpbmcmKTsKK2Jvb2wgaXNWYWxpZEhUVFBI
ZWFkZXJWYWx1ZShjb25zdCBTdHJpbmcmKTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gOTM0ODMpCisrKyBTb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBA
QAogICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgQWxleGV5IFByb3NrdXJ5
YWtvdiA8YXBAd2Via2l0Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggSnVsaWVu
IENoYWZmcmFpeCA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgotICogIENvcHlyaWdodCAoQykgMjAw
OCBEYXZpZCBMZXZpbiA8bGV2aW5AY2hyb21pdW0ub3JnPgorICogIENvcHlyaWdodCAoQykgMjAw
OCwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNs
dWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKKyNpbmNsdWRlICJIVFRQVmFs
aWRhdGlvbi5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1
ZGUgIlJlc291cmNlRXJyb3IuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKQEAgLTEw
NCwzNSArMTA1LDYgQEAgWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhOjpYTUxIdHRwUmVxdWVzdAog
ICAgIG1fZm9yYmlkZGVuUmVxdWVzdEhlYWRlcnMuYWRkKCJ2aWEiKTsKIH0KIAotLy8gRGV0ZXJt
aW5lcyBpZiBhIHN0cmluZyBpcyBhIHZhbGlkIHRva2VuLCBhcyBkZWZpbmVkIGJ5Ci0vLyAidG9r
ZW4iIGluIHNlY3Rpb24gMi4yIG9mIFJGQyAyNjE2Lgotc3RhdGljIGJvb2wgaXNWYWxpZFRva2Vu
KGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0
aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAg
ICBVQ2hhciBjID0gbmFtZVtpXTsKLQotICAgICAgICBpZiAoYyA+PSAxMjcgfHwgYyA8PSAzMikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoYyA9PSAnKCcgfHwgYyA9
PSAnKScgfHwgYyA9PSAnPCcgfHwgYyA9PSAnPicgfHwgYyA9PSAnQCcgfHwKLSAgICAgICAgICAg
IGMgPT0gJywnIHx8IGMgPT0gJzsnIHx8IGMgPT0gJzonIHx8IGMgPT0gJ1xcJyB8fCBjID09ICdc
IicgfHwKLSAgICAgICAgICAgIGMgPT0gJy8nIHx8IGMgPT0gJ1snIHx8IGMgPT0gJ10nIHx8IGMg
PT0gJz8nIHx8IGMgPT0gJz0nIHx8Ci0gICAgICAgICAgICBjID09ICd7JyB8fCBjID09ICd9JykK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGVuZ3RoID4g
MDsKLX0KLQotc3RhdGljIGJvb2wgaXNWYWxpZEhlYWRlclZhbHVlKGNvbnN0IFN0cmluZyYgbmFt
ZSkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IG1hdGNoIG5hbWUgYWdhaW5z
dAotICAgIC8vIGZpZWxkLXZhbHVlIGluIHNlY3Rpb24gNC4yIG9mIFJGQyAyNjE2LgotCi0gICAg
cmV0dXJuICFuYW1lLmNvbnRhaW5zKCdccicpICYmICFuYW1lLmNvbnRhaW5zKCdcbicpOwotfQot
CiBzdGF0aWMgYm9vbCBpc1NldENvb2tpZUhlYWRlcihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUp
CiB7CiAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzZXQtY29va2llIikgfHwg
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNldC1jb29raWUyIik7CkBAIC0zOTgsNiArMzcwLDMy
IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldEFzQmxvYihib29sIHZhbHUKIH0KICNlbmRpZgog
Citib29sIFhNTEh0dHBSZXF1ZXN0Ojppc0FsbG93ZWRIVFRQTWV0aG9kKGNvbnN0IFN0cmluZyYg
bWV0aG9kKQoreworICAgIHJldHVybiAhZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiVFJBQ0Ui
KQorICAgICAgICAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiVFJBQ0siKQorICAgICAg
ICAmJiAhZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiQ09OTkVDVCIpOworfQorCitTdHJpbmcg
WE1MSHR0cFJlcXVlc3Q6OnVwcGVyY2FzZUtub3duSFRUUE1ldGhvZChjb25zdCBTdHJpbmcmIG1l
dGhvZCkKK3sKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiQ09QWSIpIHx8IGVx
dWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIkRFTEVURSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1l
dGhvZCwgIkdFVCIpCisgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIkhFQUQi
KSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJJTkRFWCIpIHx8IGVxdWFsSWdub3JpbmdD
YXNlKG1ldGhvZCwgIkxPQ0siKQorICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2Qs
ICJNLVBPU1QiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJNS0NPTCIpIHx8IGVxdWFs
SWdub3JpbmdDYXNlKG1ldGhvZCwgIk1PVkUiKQorICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2Fz
ZShtZXRob2QsICJPUFRJT05TIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiUE9TVCIp
IHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIlBST1BGSU5EIikKKyAgICAgICAgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiUFJPUFBBVENIIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2Uo
bWV0aG9kLCAiUFVUIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiVU5MT0NLIikpIHsK
KyAgICAgICAgcmV0dXJuIG1ldGhvZC51cHBlcigpOworICAgIH0KKyAgICByZXR1cm4gbWV0aG9k
OworfQorCitib29sIFhNTEh0dHBSZXF1ZXN0Ojppc0FsbG93ZWRIVFRQSGVhZGVyKGNvbnN0IFN0
cmluZyYgbmFtZSkKK3sKKyAgICBpbml0aWFsaXplWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhKCk7
CisgICAgcmV0dXJuICFzdGF0aWNEYXRhLT5tX2ZvcmJpZGRlblJlcXVlc3RIZWFkZXJzLmNvbnRh
aW5zKG5hbWUpICYmICFuYW1lLnN0YXJ0c1dpdGgoc3RhdGljRGF0YS0+bV9wcm94eUhlYWRlclBy
ZWZpeCwgZmFsc2UpCisgICAgICAgICYmICFuYW1lLnN0YXJ0c1dpdGgoc3RhdGljRGF0YS0+bV9z
ZWNIZWFkZXJQcmVmaXgsIGZhbHNlKTsKK30KKwogdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihj
b25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgS1VSTCYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBvcGVuKG1ldGhvZCwgdXJsLCB0cnVlLCBlYyk7CkBAIC00MTgsMjggKzQxNiwxOSBA
QCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgCiAKICAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBVTlNFTlQpOwogCi0gICAgaWYgKCFpc1ZhbGlkVG9rZW4obWV0aG9kKSkgewor
ICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKSB7CiAgICAgICAgIGVjID0gU1lOVEFY
X0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIE1ldGhvZCBuYW1lcyBhcmUg
Y2FzZSBzZW5zaXRpdmUuIEJ1dCBzaW5jZSBGaXJlZm94IHVwcGVyY2FzZXMgbWV0aG9kIG5hbWVz
IGl0IGtub3dzLCB3ZSdsbCBkbyB0aGUgc2FtZS4KLSAgICBTdHJpbmcgbWV0aG9kVXBwZXIobWV0
aG9kLnVwcGVyKCkpOwotCi0gICAgaWYgKG1ldGhvZFVwcGVyID09ICJUUkFDRSIgfHwgbWV0aG9k
VXBwZXIgPT0gIlRSQUNLIiB8fCBtZXRob2RVcHBlciA9PSAiQ09OTkVDVCIpIHsKKyAgICBpZiAo
IWlzQWxsb3dlZEhUVFBNZXRob2QobWV0aG9kKSkgewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VS
UjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fdXJsID0gdXJsOworICAgIG1fbWV0
aG9kID0gdXBwZXJjYXNlS25vd25IVFRQTWV0aG9kKG1ldGhvZCk7CiAKLSAgICBpZiAobWV0aG9k
VXBwZXIgPT0gIkNPUFkiIHx8IG1ldGhvZFVwcGVyID09ICJERUxFVEUiIHx8IG1ldGhvZFVwcGVy
ID09ICJHRVQiIHx8IG1ldGhvZFVwcGVyID09ICJIRUFEIgotICAgICAgICB8fCBtZXRob2RVcHBl
ciA9PSAiSU5ERVgiIHx8IG1ldGhvZFVwcGVyID09ICJMT0NLIiB8fCBtZXRob2RVcHBlciA9PSAi
TS1QT1NUIiB8fCBtZXRob2RVcHBlciA9PSAiTUtDT0wiIHx8IG1ldGhvZFVwcGVyID09ICJNT1ZF
IgotICAgICAgICB8fCBtZXRob2RVcHBlciA9PSAiT1BUSU9OUyIgfHwgbWV0aG9kVXBwZXIgPT0g
IlBPU1QiIHx8IG1ldGhvZFVwcGVyID09ICJQUk9QRklORCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBS
T1BQQVRDSCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBVVCIKLSAgICAgICAgfHwgbWV0aG9kVXBwZXIg
PT0gIlVOTE9DSyIpCi0gICAgICAgIG1fbWV0aG9kID0gbWV0aG9kVXBwZXI7Ci0gICAgZWxzZQot
ICAgICAgICBtX21ldGhvZCA9IG1ldGhvZDsKKyAgICBtX3VybCA9IHVybDsKIAogICAgIG1fYXN5
bmMgPSBhc3luYzsKIApAQCAtODM1LDEzICs4MjQsMTMgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
c2V0UmVxdWVzdEhlYWRlcihjbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFp
c1ZhbGlkVG9rZW4obmFtZSkgfHwgIWlzVmFsaWRIZWFkZXJWYWx1ZSh2YWx1ZSkpIHsKKyAgICBp
ZiAoIWlzVmFsaWRIVFRQVG9rZW4obmFtZSkgfHwgIWlzVmFsaWRIVFRQSGVhZGVyVmFsdWUodmFs
dWUpKSB7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIC8vIEEgcHJpdmlsZWdlZCBzY3JpcHQgKGUuZy4gYSBEYXNoYm9hcmQgd2lkZ2V0KSBj
YW4gc2V0IGFueSBoZWFkZXJzLgotICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExv
Y2FsUmVzb3VyY2VzKCkgJiYgIWlzU2FmZVJlcXVlc3RIZWFkZXIobmFtZSkpIHsKKyAgICBpZiAo
IXNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJlc291cmNlcygpICYmICFpc0FsbG93ZWRI
VFRQSGVhZGVyKG5hbWUpKSB7CiAgICAgICAgIHJlcG9ydFVuc2FmZVVzYWdlKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgIlJlZnVzZWQgdG8gc2V0IHVuc2FmZSBoZWFkZXIgXCIiICsgbmFtZSAr
ICJcIiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODU2LDEyICs4NDUsNiBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVySW50CiAgICAgICAgIHJlc3VsdC5maXJz
dC0+c2Vjb25kICs9ICIsICIgKyB2YWx1ZTsKIH0KIAotYm9vbCBYTUxIdHRwUmVxdWVzdDo6aXNT
YWZlUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
ICFzdGF0aWNEYXRhLT5tX2ZvcmJpZGRlblJlcXVlc3RIZWFkZXJzLmNvbnRhaW5zKG5hbWUpICYm
ICFuYW1lLnN0YXJ0c1dpdGgoc3RhdGljRGF0YS0+bV9wcm94eUhlYWRlclByZWZpeCwgZmFsc2Up
Ci0gICAgICAgICYmICFuYW1lLnN0YXJ0c1dpdGgoc3RhdGljRGF0YS0+bV9zZWNIZWFkZXJQcmVm
aXgsIGZhbHNlKTsKLX0KLQogU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXF1ZXN0SGVhZGVy
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZXF1ZXN0
SGVhZGVycy5nZXQobmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAko
cmV2aXNpb24gOTM0ODMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmln
aHQgKEMpIDIwMDUsIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICog
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtMTEwLDYgKzExMSwxMSBAQCBwdWJsaWM6CiAgICAgQmxvYiog
b3B0aW9uYWxSZXNwb25zZUJsb2IoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlQmxvYi5nZXQo
KTsgfQogI2VuZGlmCiAKKyAgICAvLyBFeHBvc2UgSFRUUCB2YWxpZGF0aW9uIG1ldGhvZHMgZm9y
IG90aGVyIHVudHJ1c3RlZCByZXF1ZXN0cy4KKyAgICBzdGF0aWMgYm9vbCBpc0FsbG93ZWRIVFRQ
TWV0aG9kKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBTdHJpbmcgdXBwZXJjYXNlS25vd25I
VFRQTWV0aG9kKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGlzQWxsb3dlZEhUVFBI
ZWFkZXIoY29uc3QgU3RyaW5nJik7CisKICAgICB2b2lkIHNldFJlc3BvbnNlVHlwZShjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIHJlc3BvbnNlVHlwZSgpOwogICAg
IFJlc3BvbnNlVHlwZUNvZGUgcmVzcG9uc2VUeXBlQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
cG9uc2VUeXBlQ29kZTsgfQpAQCAtMTYzLDcgKzE2OSw2IEBAIHByaXZhdGU6CiAKICAgICBTdHJp
bmcgZ2V0UmVxdWVzdEhlYWRlcihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAg
IHZvaWQgc2V0UmVxdWVzdEhlYWRlckludGVybmFsKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgYm9vbCBpc1NhZmVSZXF1ZXN0SGVhZGVyKGNvbnN0
IFN0cmluZyYpIGNvbnN0OwogCiAgICAgdm9pZCBjaGFuZ2VTdGF0ZShTdGF0ZSBuZXdTdGF0ZSk7
CiAgICAgdm9pZCBjYWxsUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105269</attachid>
            <date>2011-08-25 16:04:33 -0700</date>
            <delta_ts>2011-08-25 17:32:20 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>diff.txt</filename>
            <type>text/plain</type>
            <size>16441</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzODI5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDgtMjUgIEJpbGwgQnVk
Z2UgIDxiYnVkZ2VAY2hyb21pdW0ub3I+CisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUg
WE1MSHR0cFJlcXVlc3QgbWV0aG9kL2hlYWRlciB2YWxpZGF0aW9uIGxvZ2ljIGF2YWlsYWJsZSBh
cworICAgICAgICBzdGF0aWMgbWV0aG9kcyBzbyBVUkwgbG9hZGVycyBjYW4gcGVyZm9ybSB0aGUg
c2FtZSBjaGVja3MgZm9yIHVudHJ1c3RlZCBIVFRQIHJlcXVlc3RzCisgICAgICAgIGNvbWluZyBm
cm9tIHBsdWdpbnMuIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjY5MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuIEV4cG9zZXMgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjppc1ZhbGlkSFRUUFRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRIVFRQSGVh
ZGVyVmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRUUFZhbGlkYXRpb24uaDog
QWRkZWQuCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhNTEh0dHBSZXF1ZXN0Ojppc0FsbG93ZWRIVFRQTWV0aG9kKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTEh0dHBSZXF1ZXN0Ojp1cHBlcmNhc2VLbm93bkhUVFBNZXRob2QpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmlzQWxsb3dlZEhUVFBIZWFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVz
dC5oOgorCiAyMDExLTA4LTI1ICBJZ29yIE9saXZlaXJhICA8aWdvci5vbGl2ZWlyYUBvcGVuYm9z
c2Eub3JnPgogCiAgICAgICAgIFJvbGxvdXQgcjkzNzk5OiBDYXVzZWQgYmFkIGNsaXBwaW5nIG9u
IHRoZSBib3R0b20gb2YgdGFsbCBnbHlwaHMgaW5zaWRlIGEgYnV0dG9uIGxhYmVsCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gOTM0ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTEzMyw2ICsxMTMzLDcgQEAgU0VUKFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCiAgICAgcGxhdGZv
cm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvSFRUUFBh
cnNlcnMuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9IVFRQVmFsaWRhdGlvbi5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3
b3JrU3RhdGVOb3RpZmllci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Byb3RlY3Rpb25TcGFj
ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTM0ODMp
CisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjk4LDYgKzI2OTgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9IVFRQUGFyc2Vycy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0hUVFBWYWxpZGF0aW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9I
VFRQVmFsaWRhdGlvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVI
ZWFkZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JraW5nQ29udGV4dC5o
IFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDkzNDgzKQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00MTY2LDYgKzQxNjYsOCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdv
cmsvSFRUUFZhbGlkYXRpb24uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL0hU
VFBWYWxpZGF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRl
ci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZp
ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlm
aWVyLmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDkzNDgzKQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEwNDgsNiArMTA0OCw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcCBcCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0
d29yay9IVFRQUGFyc2Vycy5jcHAgXAorICAgIHBsYXRmb3JtL25ldHdvcmsvSFRUUFZhbGlkYXRp
b24uY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwIFwKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0
d29yay9Qcm90ZWN0aW9uU3BhY2UuY3BwIFwKQEAgLTIwNTcsNiArMjA1OCw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaCBcCiAgICAgcGxhdGZvcm0vbmV0
d29yay9IVFRQSGVhZGVyTWFwLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMu
aCBcCisgICAgcGxhdGZvcm0vbmV0d29yay9IVFRQVmFsaWRhdGlvbi5oIFwKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL0hUVFBTdGF0dXNDb2Rlcy5oIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL01JTUVT
bmlmZmluZy5oIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtpbmdDb250ZXh0LmggXApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQVmFsaWRhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQVmFsaWRh
dGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0hUVFBWYWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhUVFBWYWxpZGF0aW9uLmgiCisKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBEZXRlcm1p
bmVzIGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgdG9rZW4sIGFzIGRlZmluZWQgYnkKKy8vICJ0b2tl
biIgaW4gc2VjdGlvbiAyLjIgb2YgUkZDIDI2MTYuCitib29sIGlzVmFsaWRIVFRQVG9rZW4oY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIFVD
aGFyIGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChjID49IDEyNyB8fCBjIDw9IDMyKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChjID09ICcoJyB8fCBjID09ICcp
JyB8fCBjID09ICc8JyB8fCBjID09ICc+JyB8fCBjID09ICdAJworICAgICAgICAgICAgfHwgYyA9
PSAnLCcgfHwgYyA9PSAnOycgfHwgYyA9PSAnOicgfHwgYyA9PSAnXFwnIHx8IGMgPT0gJ1wiJwor
ICAgICAgICAgICAgfHwgYyA9PSAnLycgfHwgYyA9PSAnWycgfHwgYyA9PSAnXScgfHwgYyA9PSAn
PycgfHwgYyA9PSAnPScKKyAgICAgICAgICAgIHx8IGMgPT0gJ3snIHx8IGMgPT0gJ30nKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBsZW5ndGggPiAwOwor
fQorCitib29sIGlzVmFsaWRIVFRQSGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgbWF0Y2ggbmFtZSBhZ2FpbnN0CisgICAg
Ly8gZmllbGQtdmFsdWUgaW4gc2VjdGlvbiA0LjIgb2YgUkZDIDI2MTYuCisKKyAgICByZXR1cm4g
IW5hbWUuY29udGFpbnMoJ1xyJykgJiYgIW5hbWUuY29udGFpbnMoJ1xuJyk7Cit9CisKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFZhbGlkYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9u
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBW
YWxpZGF0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
SFRUUFZhbGlkYXRpb25faAorI2RlZmluZSBIVFRQVmFsaWRhdGlvbl9oCisKKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgaXNWYWxpZEhUVFBU
b2tlbihjb25zdCBTdHJpbmcmKTsKK2Jvb2wgaXNWYWxpZEhUVFBIZWFkZXJWYWx1ZShjb25zdCBT
dHJpbmcmKTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcAkocmV2aXNpb24gOTM0ODMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA1LTIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9y
Zz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggSnVsaWVuIENoYWZmcmFpeCA8amNoYWZm
cmFpeEB3ZWJraXQub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwOCBEYXZpZCBMZXZpbiA8bGV2
aW5AY2hyb21pdW0ub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzYsNiArMzYs
NyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5j
bHVkZSAiSFRUUFBhcnNlcnMuaCIKKyNpbmNsdWRlICJIVFRQVmFsaWRhdGlvbi5oIgogI2luY2x1
ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3Iu
aCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKQEAgLTEwNCwzNSArMTA1LDYgQEAgWE1M
SHR0cFJlcXVlc3RTdGF0aWNEYXRhOjpYTUxIdHRwUmVxdWVzdAogICAgIG1fZm9yYmlkZGVuUmVx
dWVzdEhlYWRlcnMuYWRkKCJ2aWEiKTsKIH0KIAotLy8gRGV0ZXJtaW5lcyBpZiBhIHN0cmluZyBp
cyBhIHZhbGlkIHRva2VuLCBhcyBkZWZpbmVkIGJ5Ci0vLyAidG9rZW4iIGluIHNlY3Rpb24gMi4y
IG9mIFJGQyAyNjE2Lgotc3RhdGljIGJvb2wgaXNWYWxpZFRva2VuKGNvbnN0IFN0cmluZyYgbmFt
ZSkKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBVQ2hhciBjID0gbmFtZVtp
XTsKLQotICAgICAgICBpZiAoYyA+PSAxMjcgfHwgYyA8PSAzMikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICBpZiAoYyA9PSAnKCcgfHwgYyA9PSAnKScgfHwgYyA9PSAnPCcg
fHwgYyA9PSAnPicgfHwgYyA9PSAnQCcgfHwKLSAgICAgICAgICAgIGMgPT0gJywnIHx8IGMgPT0g
JzsnIHx8IGMgPT0gJzonIHx8IGMgPT0gJ1xcJyB8fCBjID09ICdcIicgfHwKLSAgICAgICAgICAg
IGMgPT0gJy8nIHx8IGMgPT0gJ1snIHx8IGMgPT0gJ10nIHx8IGMgPT0gJz8nIHx8IGMgPT0gJz0n
IHx8Ci0gICAgICAgICAgICBjID09ICd7JyB8fCBjID09ICd9JykKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGVuZ3RoID4gMDsKLX0KLQotc3RhdGljIGJv
b2wgaXNWYWxpZEhlYWRlclZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgcmVhbGx5IG1hdGNoIG5hbWUgYWdhaW5zdAotICAgIC8vIGZpZWxkLXZh
bHVlIGluIHNlY3Rpb24gNC4yIG9mIFJGQyAyNjE2LgotCi0gICAgcmV0dXJuICFuYW1lLmNvbnRh
aW5zKCdccicpICYmICFuYW1lLmNvbnRhaW5zKCdcbicpOwotfQotCiBzdGF0aWMgYm9vbCBpc1Nl
dENvb2tpZUhlYWRlcihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7CiAgICAgcmV0dXJuIGVx
dWFsSWdub3JpbmdDYXNlKG5hbWUsICJzZXQtY29va2llIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgInNldC1jb29raWUyIik7CkBAIC0zOTgsNiArMzcwLDMyIEBAIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OnNldEFzQmxvYihib29sIHZhbHUKIH0KICNlbmRpZgogCitib29sIFhNTEh0dHBSZXF1
ZXN0Ojppc0FsbG93ZWRIVFRQTWV0aG9kKGNvbnN0IFN0cmluZyYgbWV0aG9kKQoreworICAgIHJl
dHVybiAhZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiVFJBQ0UiKQorICAgICAgICAmJiAhZXF1
YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiVFJBQ0siKQorICAgICAgICAmJiAhZXF1YWxJZ25vcmlu
Z0Nhc2UobWV0aG9kLCAiQ09OTkVDVCIpOworfQorCitTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OnVw
cGVyY2FzZUtub3duSFRUUE1ldGhvZChjb25zdCBTdHJpbmcmIG1ldGhvZCkKK3sKKyAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiQ09QWSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1l
dGhvZCwgIkRFTEVURSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIkdFVCIpCisgICAg
ICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIkhFQUQiKSB8fCBlcXVhbElnbm9yaW5n
Q2FzZShtZXRob2QsICJJTkRFWCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIkxPQ0si
KQorICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJNLVBPU1QiKSB8fCBlcXVh
bElnbm9yaW5nQ2FzZShtZXRob2QsICJNS0NPTCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhv
ZCwgIk1PVkUiKQorICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJPUFRJT05T
IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiUE9TVCIpIHx8IGVxdWFsSWdub3JpbmdD
YXNlKG1ldGhvZCwgIlBST1BGSU5EIikKKyAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0
aG9kLCAiUFJPUFBBVENIIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiUFVUIikgfHwg
ZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiVU5MT0NLIikpIHsKKyAgICAgICAgcmV0dXJuIG1l
dGhvZC51cHBlcigpOworICAgIH0KKyAgICByZXR1cm4gbWV0aG9kOworfQorCitib29sIFhNTEh0
dHBSZXF1ZXN0Ojppc0FsbG93ZWRIVFRQSGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAg
ICBpbml0aWFsaXplWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhKCk7CisgICAgcmV0dXJuICFzdGF0
aWNEYXRhLT5tX2ZvcmJpZGRlblJlcXVlc3RIZWFkZXJzLmNvbnRhaW5zKG5hbWUpICYmICFuYW1l
LnN0YXJ0c1dpdGgoc3RhdGljRGF0YS0+bV9wcm94eUhlYWRlclByZWZpeCwgZmFsc2UpCisgICAg
ICAgICYmICFuYW1lLnN0YXJ0c1dpdGgoc3RhdGljRGF0YS0+bV9zZWNIZWFkZXJQcmVmaXgsIGZh
bHNlKTsKK30KKwogdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgY29uc3QgS1VSTCYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBvcGVuKG1ldGhv
ZCwgdXJsLCB0cnVlLCBlYyk7CkBAIC00MTgsMjggKzQxNiwxOSBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgCiAKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBVTlNFTlQp
OwogCi0gICAgaWYgKCFpc1ZhbGlkVG9rZW4obWV0aG9kKSkgeworICAgIGlmICghaXNWYWxpZEhU
VFBUb2tlbihtZXRob2QpKSB7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIC8vIE1ldGhvZCBuYW1lcyBhcmUgY2FzZSBzZW5zaXRpdmUuIEJ1
dCBzaW5jZSBGaXJlZm94IHVwcGVyY2FzZXMgbWV0aG9kIG5hbWVzIGl0IGtub3dzLCB3ZSdsbCBk
byB0aGUgc2FtZS4KLSAgICBTdHJpbmcgbWV0aG9kVXBwZXIobWV0aG9kLnVwcGVyKCkpOwotCi0g
ICAgaWYgKG1ldGhvZFVwcGVyID09ICJUUkFDRSIgfHwgbWV0aG9kVXBwZXIgPT0gIlRSQUNLIiB8
fCBtZXRob2RVcHBlciA9PSAiQ09OTkVDVCIpIHsKKyAgICBpZiAoIWlzQWxsb3dlZEhUVFBNZXRo
b2QobWV0aG9kKSkgewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIG1fdXJsID0gdXJsOworICAgIG1fbWV0aG9kID0gdXBwZXJjYXNlS25v
d25IVFRQTWV0aG9kKG1ldGhvZCk7CiAKLSAgICBpZiAobWV0aG9kVXBwZXIgPT0gIkNPUFkiIHx8
IG1ldGhvZFVwcGVyID09ICJERUxFVEUiIHx8IG1ldGhvZFVwcGVyID09ICJHRVQiIHx8IG1ldGhv
ZFVwcGVyID09ICJIRUFEIgotICAgICAgICB8fCBtZXRob2RVcHBlciA9PSAiSU5ERVgiIHx8IG1l
dGhvZFVwcGVyID09ICJMT0NLIiB8fCBtZXRob2RVcHBlciA9PSAiTS1QT1NUIiB8fCBtZXRob2RV
cHBlciA9PSAiTUtDT0wiIHx8IG1ldGhvZFVwcGVyID09ICJNT1ZFIgotICAgICAgICB8fCBtZXRo
b2RVcHBlciA9PSAiT1BUSU9OUyIgfHwgbWV0aG9kVXBwZXIgPT0gIlBPU1QiIHx8IG1ldGhvZFVw
cGVyID09ICJQUk9QRklORCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBST1BQQVRDSCIgfHwgbWV0aG9k
VXBwZXIgPT0gIlBVVCIKLSAgICAgICAgfHwgbWV0aG9kVXBwZXIgPT0gIlVOTE9DSyIpCi0gICAg
ICAgIG1fbWV0aG9kID0gbWV0aG9kVXBwZXI7Ci0gICAgZWxzZQotICAgICAgICBtX21ldGhvZCA9
IG1ldGhvZDsKKyAgICBtX3VybCA9IHVybDsKIAogICAgIG1fYXN5bmMgPSBhc3luYzsKIApAQCAt
ODM1LDEzICs4MjQsMTMgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcihj
bwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFpc1ZhbGlkVG9rZW4obmFtZSkg
fHwgIWlzVmFsaWRIZWFkZXJWYWx1ZSh2YWx1ZSkpIHsKKyAgICBpZiAoIWlzVmFsaWRIVFRQVG9r
ZW4obmFtZSkgfHwgIWlzVmFsaWRIVFRQSGVhZGVyVmFsdWUodmFsdWUpKSB7CiAgICAgICAgIGVj
ID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIEEgcHJpdmls
ZWdlZCBzY3JpcHQgKGUuZy4gYSBEYXNoYm9hcmQgd2lkZ2V0KSBjYW4gc2V0IGFueSBoZWFkZXJz
LgotICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkgJiYg
IWlzU2FmZVJlcXVlc3RIZWFkZXIobmFtZSkpIHsKKyAgICBpZiAoIXNlY3VyaXR5T3JpZ2luKCkt
PmNhbkxvYWRMb2NhbFJlc291cmNlcygpICYmICFpc0FsbG93ZWRIVFRQSGVhZGVyKG5hbWUpKSB7
CiAgICAgICAgIHJlcG9ydFVuc2FmZVVzYWdlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgIlJl
ZnVzZWQgdG8gc2V0IHVuc2FmZSBoZWFkZXIgXCIiICsgbmFtZSArICJcIiIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtODU2LDEyICs4NDUsNiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpz
ZXRSZXF1ZXN0SGVhZGVySW50CiAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kICs9ICIsICIg
KyB2YWx1ZTsKIH0KIAotYm9vbCBYTUxIdHRwUmVxdWVzdDo6aXNTYWZlUmVxdWVzdEhlYWRlcihj
b25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFzdGF0aWNEYXRhLT5tX2Zv
cmJpZGRlblJlcXVlc3RIZWFkZXJzLmNvbnRhaW5zKG5hbWUpICYmICFuYW1lLnN0YXJ0c1dpdGgo
c3RhdGljRGF0YS0+bV9wcm94eUhlYWRlclByZWZpeCwgZmFsc2UpCi0gICAgICAgICYmICFuYW1l
LnN0YXJ0c1dpdGgoc3RhdGljRGF0YS0+bV9zZWNIZWFkZXJQcmVmaXgsIGZhbHNlKTsKLX0KLQog
U3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZXF1ZXN0SGVhZGVycy5nZXQobmFtZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24gOTM0ODMpCisr
KyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYg
QWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtMTEwLDYgKzExMSwxMSBAQCBwdWJsaWM6CiAgICAgQmxvYiogb3B0aW9uYWxSZXNwb25zZUJs
b2IoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlQmxvYi5nZXQoKTsgfQogI2VuZGlmCiAKKyAg
ICAvLyBFeHBvc2UgSFRUUCB2YWxpZGF0aW9uIG1ldGhvZHMgZm9yIG90aGVyIHVudHJ1c3RlZCBy
ZXF1ZXN0cy4KKyAgICBzdGF0aWMgYm9vbCBpc0FsbG93ZWRIVFRQTWV0aG9kKGNvbnN0IFN0cmlu
ZyYpOworICAgIHN0YXRpYyBTdHJpbmcgdXBwZXJjYXNlS25vd25IVFRQTWV0aG9kKGNvbnN0IFN0
cmluZyYpOworICAgIHN0YXRpYyBib29sIGlzQWxsb3dlZEhUVFBIZWFkZXIoY29uc3QgU3RyaW5n
Jik7CisKICAgICB2b2lkIHNldFJlc3BvbnNlVHlwZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25D
b2RlJik7CiAgICAgU3RyaW5nIHJlc3BvbnNlVHlwZSgpOwogICAgIFJlc3BvbnNlVHlwZUNvZGUg
cmVzcG9uc2VUeXBlQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2VUeXBlQ29kZTsgfQpA
QCAtMTYzLDcgKzE2OSw2IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgZ2V0UmVxdWVzdEhlYWRl
cihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIHZvaWQgc2V0UmVxdWVzdEhl
YWRlckludGVybmFsKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSk7Ci0gICAgYm9vbCBpc1NhZmVSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYpIGNvbnN0Owog
CiAgICAgdm9pZCBjaGFuZ2VTdGF0ZShTdGF0ZSBuZXdTdGF0ZSk7CiAgICAgdm9pZCBjYWxsUmVh
ZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105283</attachid>
            <date>2011-08-25 17:32:20 -0700</date>
            <delta_ts>2011-08-30 13:55:00 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>diff.txt</filename>
            <type>text/plain</type>
            <size>17007</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzODI5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDgtMjUgIEJpbGwgQnVk
Z2UgIDxiYnVkZ2VAY2hyb21pdW0ub3I+CisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyB0aGUg
WE1MSHR0cFJlcXVlc3QgbWV0aG9kL2hlYWRlciB2YWxpZGF0aW9uIGxvZ2ljIGF2YWlsYWJsZSBh
cworICAgICAgICBzdGF0aWMgbWV0aG9kcyBzbyBVUkwgbG9hZGVycyBjYW4gcGVyZm9ybSB0aGUg
c2FtZSBjaGVja3MgZm9yIHVudHJ1c3RlZCBIVFRQIHJlcXVlc3RzCisgICAgICAgIGNvbWluZyBm
cm9tIHBsdWdpbnMuIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjY5MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuIEV4cG9zZXMgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjppc1ZhbGlkSFRUUFRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRIVFRQSGVh
ZGVyVmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRUUFZhbGlkYXRpb24uaDog
QWRkZWQuCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhNTEh0dHBSZXF1ZXN0Ojppc0FsbG93ZWRIVFRQTWV0aG9kKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTEh0dHBSZXF1ZXN0Ojp1cHBlcmNhc2VLbm93bkhUVFBNZXRob2QpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmlzQWxsb3dlZEhUVFBIZWFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVz
dC5oOgorCiAyMDExLTA4LTI1ICBJZ29yIE9saXZlaXJhICA8aWdvci5vbGl2ZWlyYUBvcGVuYm9z
c2Eub3JnPgogCiAgICAgICAgIFJvbGxvdXQgcjkzNzk5OiBDYXVzZWQgYmFkIGNsaXBwaW5nIG9u
IHRoZSBib3R0b20gb2YgdGFsbCBnbHlwaHMgaW5zaWRlIGEgYnV0dG9uIGxhYmVsCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gOTM0ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTEzMyw2ICsxMTMzLDcgQEAgU0VUKFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCiAgICAgcGxhdGZv
cm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvSFRUUFBh
cnNlcnMuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9IVFRQVmFsaWRhdGlvbi5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3
b3JrU3RhdGVOb3RpZmllci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Byb3RlY3Rpb25TcGFj
ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTM0ODMp
CisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjk4LDYgKzI2OTgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9IVFRQUGFyc2Vycy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0hUVFBWYWxpZGF0aW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9I
VFRQVmFsaWRhdGlvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVI
ZWFkZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JraW5nQ29udGV4dC5o
IFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDkzNDgzKQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00MTY2LDYgKzQxNjYsOCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdv
cmsvSFRUUFZhbGlkYXRpb24uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL0hU
VFBWYWxpZGF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRl
ci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZp
ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlm
aWVyLmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDkzNDgzKQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEwNDgsNiArMTA0OCw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcCBcCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0
d29yay9IVFRQUGFyc2Vycy5jcHAgXAorICAgIHBsYXRmb3JtL25ldHdvcmsvSFRUUFZhbGlkYXRp
b24uY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwIFwKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0
d29yay9Qcm90ZWN0aW9uU3BhY2UuY3BwIFwKQEAgLTIwNTcsNiArMjA1OCw3IEBAIEhFQURFUlMg
Kz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaCBcCiAgICAgcGxhdGZvcm0vbmV0
d29yay9IVFRQSGVhZGVyTWFwLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMu
aCBcCisgICAgcGxhdGZvcm0vbmV0d29yay9IVFRQVmFsaWRhdGlvbi5oIFwKICAgICBwbGF0Zm9y
bS9uZXR3b3JrL0hUVFBTdGF0dXNDb2Rlcy5oIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL01JTUVT
bmlmZmluZy5oIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtpbmdDb250ZXh0LmggXApJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJl
dmlzaW9uIDkzNDgzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTMwNDMzLDYgKzMwNDMzLDE0IEBACiAJCQkJCT4KIAkJ
CQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxuZXR3
b3JrXEhUVFBWYWxpZGF0aW9uLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcSFRUUFZhbGlkYXRpb24uaCIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXG5ldHdvcmtcTUlNRUhlYWRlci5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9u
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRU
UFZhbGlkYXRpb24uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSFRUUFZhbGlkYXRpb24uaCIKKworI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIERldGVybWluZXMg
aWYgYSBzdHJpbmcgaXMgYSB2YWxpZCB0b2tlbiwgYXMgZGVmaW5lZCBieQorLy8gInRva2VuIiBp
biBzZWN0aW9uIDIuMiBvZiBSRkMgMjYxNi4KK2Jvb2wgaXNWYWxpZEhUVFBUb2tlbihjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgVUNoYXIg
YyA9IG5hbWVbaV07CisKKyAgICAgICAgaWYgKGMgPj0gMTI3IHx8IGMgPD0gMzIpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGMgPT0gJygnIHx8IGMgPT0gJyknIHx8
IGMgPT0gJzwnIHx8IGMgPT0gJz4nIHx8IGMgPT0gJ0AnCisgICAgICAgICAgICB8fCBjID09ICcs
JyB8fCBjID09ICc7JyB8fCBjID09ICc6JyB8fCBjID09ICdcXCcgfHwgYyA9PSAnXCInCisgICAg
ICAgICAgICB8fCBjID09ICcvJyB8fCBjID09ICdbJyB8fCBjID09ICddJyB8fCBjID09ICc/JyB8
fCBjID09ICc9JworICAgICAgICAgICAgfHwgYyA9PSAneycgfHwgYyA9PSAnfScpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGxlbmd0aCA+IDA7Cit9CisK
K2Jvb2wgaXNWYWxpZEhUVFBIZWFkZXJWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBtYXRjaCBuYW1lIGFnYWluc3QKKyAgICAvLyBm
aWVsZC12YWx1ZSBpbiBzZWN0aW9uIDQuMiBvZiBSRkMgMjYxNi4KKworICAgIHJldHVybiAhbmFt
ZS5jb250YWlucygnXHInKSAmJiAhbmFtZS5jb250YWlucygnXG4nKTsKK30KKworfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQVmFsaWRhdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFZhbGlkYXRpb24uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFZhbGlk
YXRpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBIVFRQ
VmFsaWRhdGlvbl9oCisjZGVmaW5lIEhUVFBWYWxpZGF0aW9uX2gKKworI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBpc1ZhbGlkSFRUUFRva2Vu
KGNvbnN0IFN0cmluZyYpOworYm9vbCBpc1ZhbGlkSFRUUEhlYWRlclZhbHVlKGNvbnN0IFN0cmlu
ZyYpOworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCShyZXZpc2lvbiA5MzQ4MykKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5
cmlnaHQgKEMpIDIwMDUtMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgog
ICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBKdWxpZW4gQ2hhZmZyYWl4IDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIExldmluIDxsZXZpbkBj
aHJvbWl1bS5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zNiw2ICszNiw3IEBA
CiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNsdWRl
ICJIVFRQUGFyc2Vycy5oIgorI2luY2x1ZGUgIkhUVFBWYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgog
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtMTA0LDM1ICsxMDUsNiBAQCBYTUxIdHRw
UmVxdWVzdFN0YXRpY0RhdGE6OlhNTEh0dHBSZXF1ZXN0CiAgICAgbV9mb3JiaWRkZW5SZXF1ZXN0
SGVhZGVycy5hZGQoInZpYSIpOwogfQogCi0vLyBEZXRlcm1pbmVzIGlmIGEgc3RyaW5nIGlzIGEg
dmFsaWQgdG9rZW4sIGFzIGRlZmluZWQgYnkKLS8vICJ0b2tlbiIgaW4gc2VjdGlvbiAyLjIgb2Yg
UkZDIDI2MTYuCi1zdGF0aWMgYm9vbCBpc1ZhbGlkVG9rZW4oY29uc3QgU3RyaW5nJiBuYW1lKQot
ewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBuYW1lW2ldOwot
Ci0gICAgICAgIGlmIChjID49IDEyNyB8fCBjIDw9IDMyKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIGlmIChjID09ICcoJyB8fCBjID09ICcpJyB8fCBjID09ICc8JyB8fCBj
ID09ICc+JyB8fCBjID09ICdAJyB8fAotICAgICAgICAgICAgYyA9PSAnLCcgfHwgYyA9PSAnOycg
fHwgYyA9PSAnOicgfHwgYyA9PSAnXFwnIHx8IGMgPT0gJ1wiJyB8fAotICAgICAgICAgICAgYyA9
PSAnLycgfHwgYyA9PSAnWycgfHwgYyA9PSAnXScgfHwgYyA9PSAnPycgfHwgYyA9PSAnPScgfHwK
LSAgICAgICAgICAgIGMgPT0gJ3snIHx8IGMgPT0gJ30nKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJldHVybiBsZW5ndGggPiAwOwotfQotCi1zdGF0aWMgYm9vbCBp
c1ZhbGlkSGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCByZWFsbHkgbWF0Y2ggbmFtZSBhZ2FpbnN0Ci0gICAgLy8gZmllbGQtdmFsdWUg
aW4gc2VjdGlvbiA0LjIgb2YgUkZDIDI2MTYuCi0KLSAgICByZXR1cm4gIW5hbWUuY29udGFpbnMo
J1xyJykgJiYgIW5hbWUuY29udGFpbnMoJ1xuJyk7Ci19Ci0KIHN0YXRpYyBib29sIGlzU2V0Q29v
a2llSGVhZGVyKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICByZXR1cm4gZXF1YWxJ
Z25vcmluZ0Nhc2UobmFtZSwgInNldC1jb29raWUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1l
LCAic2V0LWNvb2tpZTIiKTsKQEAgLTM5OCw2ICszNzAsMzIgQEAgdm9pZCBYTUxIdHRwUmVxdWVz
dDo6c2V0QXNCbG9iKGJvb2wgdmFsdQogfQogI2VuZGlmCiAKK2Jvb2wgWE1MSHR0cFJlcXVlc3Q6
OmlzQWxsb3dlZEhUVFBNZXRob2QoY29uc3QgU3RyaW5nJiBtZXRob2QpCit7CisgICAgcmV0dXJu
ICFlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJUUkFDRSIpCisgICAgICAgICYmICFlcXVhbEln
bm9yaW5nQ2FzZShtZXRob2QsICJUUkFDSyIpCisgICAgICAgICYmICFlcXVhbElnbm9yaW5nQ2Fz
ZShtZXRob2QsICJDT05ORUNUIik7Cit9CisKK1N0cmluZyBYTUxIdHRwUmVxdWVzdDo6dXBwZXJj
YXNlS25vd25IVFRQTWV0aG9kKGNvbnN0IFN0cmluZyYgbWV0aG9kKQoreworICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShtZXRob2QsICJDT1BZIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9k
LCAiREVMRVRFIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiR0VUIikKKyAgICAgICAg
fHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiSEVBRCIpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KG1ldGhvZCwgIklOREVYIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiTE9DSyIpCisg
ICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIk0tUE9TVCIpIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKG1ldGhvZCwgIk1LQ09MIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAi
TU9WRSIpCisgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIk9QVElPTlMiKSB8
fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJQT1NUIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2Uo
bWV0aG9kLCAiUFJPUEZJTkQiKQorICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2Qs
ICJQUk9QUEFUQ0giKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJQVVQiKSB8fCBlcXVh
bElnbm9yaW5nQ2FzZShtZXRob2QsICJVTkxPQ0siKSkgeworICAgICAgICByZXR1cm4gbWV0aG9k
LnVwcGVyKCk7CisgICAgfQorICAgIHJldHVybiBtZXRob2Q7Cit9CisKK2Jvb2wgWE1MSHR0cFJl
cXVlc3Q6OmlzQWxsb3dlZEhUVFBIZWFkZXIoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlu
aXRpYWxpemVYTUxIdHRwUmVxdWVzdFN0YXRpY0RhdGEoKTsKKyAgICByZXR1cm4gIXN0YXRpY0Rh
dGEtPm1fZm9yYmlkZGVuUmVxdWVzdEhlYWRlcnMuY29udGFpbnMobmFtZSkgJiYgIW5hbWUuc3Rh
cnRzV2l0aChzdGF0aWNEYXRhLT5tX3Byb3h5SGVhZGVyUHJlZml4LCBmYWxzZSkKKyAgICAgICAg
JiYgIW5hbWUuc3RhcnRzV2l0aChzdGF0aWNEYXRhLT5tX3NlY0hlYWRlclByZWZpeCwgZmFsc2Up
OworfQorCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgbWV0aG9kLCBj
b25zdCBLVVJMJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIG9wZW4obWV0aG9kLCB1
cmwsIHRydWUsIGVjKTsKQEAgLTQxOCwyOCArNDE2LDE5IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6
Om9wZW4oY29uc3QgU3RyaW5nJiAKIAogICAgIEFTU0VSVChtX3N0YXRlID09IFVOU0VOVCk7CiAK
LSAgICBpZiAoIWlzVmFsaWRUb2tlbihtZXRob2QpKSB7CisgICAgaWYgKCFpc1ZhbGlkSFRUUFRv
a2VuKG1ldGhvZCkpIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgLy8gTWV0aG9kIG5hbWVzIGFyZSBjYXNlIHNlbnNpdGl2ZS4gQnV0IHNp
bmNlIEZpcmVmb3ggdXBwZXJjYXNlcyBtZXRob2QgbmFtZXMgaXQga25vd3MsIHdlJ2xsIGRvIHRo
ZSBzYW1lLgotICAgIFN0cmluZyBtZXRob2RVcHBlcihtZXRob2QudXBwZXIoKSk7Ci0KLSAgICBp
ZiAobWV0aG9kVXBwZXIgPT0gIlRSQUNFIiB8fCBtZXRob2RVcHBlciA9PSAiVFJBQ0siIHx8IG1l
dGhvZFVwcGVyID09ICJDT05ORUNUIikgeworICAgIGlmICghaXNBbGxvd2VkSFRUUE1ldGhvZCht
ZXRob2QpKSB7CiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgbV91cmwgPSB1cmw7CisgICAgbV9tZXRob2QgPSB1cHBlcmNhc2VLbm93bkhU
VFBNZXRob2QobWV0aG9kKTsKIAotICAgIGlmIChtZXRob2RVcHBlciA9PSAiQ09QWSIgfHwgbWV0
aG9kVXBwZXIgPT0gIkRFTEVURSIgfHwgbWV0aG9kVXBwZXIgPT0gIkdFVCIgfHwgbWV0aG9kVXBw
ZXIgPT0gIkhFQUQiCi0gICAgICAgIHx8IG1ldGhvZFVwcGVyID09ICJJTkRFWCIgfHwgbWV0aG9k
VXBwZXIgPT0gIkxPQ0siIHx8IG1ldGhvZFVwcGVyID09ICJNLVBPU1QiIHx8IG1ldGhvZFVwcGVy
ID09ICJNS0NPTCIgfHwgbWV0aG9kVXBwZXIgPT0gIk1PVkUiCi0gICAgICAgIHx8IG1ldGhvZFVw
cGVyID09ICJPUFRJT05TIiB8fCBtZXRob2RVcHBlciA9PSAiUE9TVCIgfHwgbWV0aG9kVXBwZXIg
PT0gIlBST1BGSU5EIiB8fCBtZXRob2RVcHBlciA9PSAiUFJPUFBBVENIIiB8fCBtZXRob2RVcHBl
ciA9PSAiUFVUIgotICAgICAgICB8fCBtZXRob2RVcHBlciA9PSAiVU5MT0NLIikKLSAgICAgICAg
bV9tZXRob2QgPSBtZXRob2RVcHBlcjsKLSAgICBlbHNlCi0gICAgICAgIG1fbWV0aG9kID0gbWV0
aG9kOworICAgIG1fdXJsID0gdXJsOwogCiAgICAgbV9hc3luYyA9IGFzeW5jOwogCkBAIC04MzUs
MTMgKzgyNCwxMyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKGNvCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWlzVmFsaWRUb2tlbihuYW1lKSB8fCAh
aXNWYWxpZEhlYWRlclZhbHVlKHZhbHVlKSkgeworICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihu
YW1lKSB8fCAhaXNWYWxpZEhUVFBIZWFkZXJWYWx1ZSh2YWx1ZSkpIHsKICAgICAgICAgZWMgPSBT
WU5UQVhfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQSBwcml2aWxlZ2Vk
IHNjcmlwdCAoZS5nLiBhIERhc2hib2FyZCB3aWRnZXQpIGNhbiBzZXQgYW55IGhlYWRlcnMuCi0g
ICAgaWYgKCFzZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSAmJiAhaXNT
YWZlUmVxdWVzdEhlYWRlcihuYW1lKSkgeworICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2Fu
TG9hZExvY2FsUmVzb3VyY2VzKCkgJiYgIWlzQWxsb3dlZEhUVFBIZWFkZXIobmFtZSkpIHsKICAg
ICAgICAgcmVwb3J0VW5zYWZlVXNhZ2Uoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAiUmVmdXNl
ZCB0byBzZXQgdW5zYWZlIGhlYWRlciBcIiIgKyBuYW1lICsgIlwiIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC04NTYsMTIgKzg0NSw2IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldFJl
cXVlc3RIZWFkZXJJbnQKICAgICAgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgKz0gIiwgIiArIHZh
bHVlOwogfQogCi1ib29sIFhNTEh0dHBSZXF1ZXN0Ojppc1NhZmVSZXF1ZXN0SGVhZGVyKGNvbnN0
IFN0cmluZyYgbmFtZSkgY29uc3QKLXsKLSAgICByZXR1cm4gIXN0YXRpY0RhdGEtPm1fZm9yYmlk
ZGVuUmVxdWVzdEhlYWRlcnMuY29udGFpbnMobmFtZSkgJiYgIW5hbWUuc3RhcnRzV2l0aChzdGF0
aWNEYXRhLT5tX3Byb3h5SGVhZGVyUHJlZml4LCBmYWxzZSkKLSAgICAgICAgJiYgIW5hbWUuc3Rh
cnRzV2l0aChzdGF0aWNEYXRhLT5tX3NlY0hlYWRlclByZWZpeCwgZmFsc2UpOwotfQotCiBTdHJp
bmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlcXVlc3RIZWFkZXIoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lKSBjb25zdAogewogICAgIHJldHVybiBtX3JlcXVlc3RIZWFkZXJzLmdldChuYW1lKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCShyZXZpc2lvbiA5MzQ4MykKKysrIFNv
dXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBbGV4
ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0x
MTAsNiArMTExLDExIEBAIHB1YmxpYzoKICAgICBCbG9iKiBvcHRpb25hbFJlc3BvbnNlQmxvYigp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2VCbG9iLmdldCgpOyB9CiAjZW5kaWYKIAorICAgIC8v
IEV4cG9zZSBIVFRQIHZhbGlkYXRpb24gbWV0aG9kcyBmb3Igb3RoZXIgdW50cnVzdGVkIHJlcXVl
c3RzLgorICAgIHN0YXRpYyBib29sIGlzQWxsb3dlZEhUVFBNZXRob2QoY29uc3QgU3RyaW5nJik7
CisgICAgc3RhdGljIFN0cmluZyB1cHBlcmNhc2VLbm93bkhUVFBNZXRob2QoY29uc3QgU3RyaW5n
Jik7CisgICAgc3RhdGljIGJvb2wgaXNBbGxvd2VkSFRUUEhlYWRlcihjb25zdCBTdHJpbmcmKTsK
KwogICAgIHZvaWQgc2V0UmVzcG9uc2VUeXBlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICBTdHJpbmcgcmVzcG9uc2VUeXBlKCk7CiAgICAgUmVzcG9uc2VUeXBlQ29kZSByZXNw
b25zZVR5cGVDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZVR5cGVDb2RlOyB9CkBAIC0x
NjMsNyArMTY5LDYgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBnZXRSZXF1ZXN0SGVhZGVyKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXF1ZXN0SGVhZGVy
SW50ZXJuYWwoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsK
LSAgICBib29sIGlzU2FmZVJlcXVlc3RIZWFkZXIoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKICAg
ICB2b2lkIGNoYW5nZVN0YXRlKFN0YXRlIG5ld1N0YXRlKTsKICAgICB2b2lkIGNhbGxSZWFkeVN0
YXRlQ2hhbmdlTGlzdGVuZXIoKTsK
</data>
<flag name="review"
          id="101380"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="101687"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105688</attachid>
            <date>2011-08-30 13:55:00 -0700</date>
            <delta_ts>2011-08-30 16:54:58 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>xml2.diff</filename>
            <type>text/plain</type>
            <size>17008</size>
            <attacher name="Bill Budge">bbudge</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MTAxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMDgtMzAgIEJpbGwgQnVk
Z2UgIDxiYnVkZ2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgdGhl
IFhNTEh0dHBSZXF1ZXN0IG1ldGhvZC9oZWFkZXIgdmFsaWRhdGlvbiBsb2dpYyBhdmFpbGFibGUg
YXMKKyAgICAgICAgc3RhdGljIG1ldGhvZHMgc28gVVJMIGxvYWRlcnMgY2FuIHBlcmZvcm0gdGhl
IHNhbWUgY2hlY2tzIGZvciB1bnRydXN0ZWQgSFRUUCByZXF1ZXN0cworICAgICAgICBjb21pbmcg
ZnJvbSBwbHVnaW5zLiAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY2OTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiBFeHBvc2VzIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9IVFRQVmFsaWRhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZEhU
VFBUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjppc1ZhbGlkSFRUUEhlYWRlclZhbHVlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9uLmg6IEFkZGVkLgorICAgICAg
ICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdDo6aXNBbGxvd2VkSFRUUE1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdDo6dXBwZXJjYXNlS25vd25IVFRQTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0
dHBSZXF1ZXN0Ojppc0FsbG93ZWRIVFRQSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0
dHBSZXF1ZXN0OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZXRS
ZXF1ZXN0SGVhZGVyKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuaDoKKwogMjAxMS0w
OC0zMCAgRGF3aXQgQWxlbWF5ZWh1ICA8YWRhd2l0QGtkZS5vcmc+CiAKICAgICAgICAgW1F0XSBS
ZXBsYWNlIFFMaWJyYXJ5KCJsaWJndGsteDExLTIuMC5zby4wIikgd2l0aCBRTGlicmFyeSgibGli
Z3RrLXgxMS0yLjAiLCAwKQpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk0MDY0
KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEx
MzMsNiArMTEzMyw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5jcHAKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsv
SFRUUFZhbGlkYXRpb24uY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwCiAgICAgcGxhdGZv
cm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2UuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHJldmlzaW9uIDk0MDY0KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjcwNCw2ICsyNzA0LDggQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQVmFsaWRhdGlvbi5jcHAgXAorCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFZhbGlkYXRpb24uaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biA5NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpA
QCAtNDEzOCw2ICs0MTM4LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL0hUVFBI
ZWFkZXJNYXAuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJz
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9uLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vbmV0d29yay9IVFRQVmFsaWRhdGlvbi5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9u
ZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
bmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5oJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCShyZXZp
c2lvbiA5NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDQ5LDYgKzEwNDksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhQnVpbGRlci5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1h
cC5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwIFwKKyAgICBwbGF0
Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9uLmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9N
SU1FSGVhZGVyLmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmll
ci5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNlLmNwcCBcCkBAIC0y
MDU5LDYgKzIwNjAsNyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5oIFwKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmggXAorICAgIHBsYXRmb3JtL25ldHdvcmsvSFRUUFZh
bGlkYXRpb24uaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9IVFRQU3RhdHVzQ29kZXMuaCBcCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9NSU1FU25pZmZpbmcuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9OZXR3b3JraW5nQ29udGV4dC5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA5NDA2NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQ0NSw2
ICszMDQ0NSwxNCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xIVFRQVmFsaWRhdGlvbi5jcHAiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxu
ZXR3b3JrXEhUVFBWYWxpZGF0aW9uLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXE1JTUVIZWFkZXIuY3BwIgog
CQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9IVFRQVmFsaWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9IVFRQVmFsaWRhdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhUVFBW
YWxpZGF0aW9uLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBEZXRlcm1pbmVz
IGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgdG9rZW4sIGFzIGRlZmluZWQgYnkKKy8vICJ0b2tlbiIg
aW4gc2VjdGlvbiAyLjIgb2YgUkZDIDI2MTYuCitib29sIGlzVmFsaWRIVFRQVG9rZW4oY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIFVDaGFy
IGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChjID49IDEyNyB8fCBjIDw9IDMyKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChjID09ICcoJyB8fCBjID09ICcpJyB8
fCBjID09ICc8JyB8fCBjID09ICc+JyB8fCBjID09ICdAJworICAgICAgICAgICAgfHwgYyA9PSAn
LCcgfHwgYyA9PSAnOycgfHwgYyA9PSAnOicgfHwgYyA9PSAnXFwnIHx8IGMgPT0gJ1wiJworICAg
ICAgICAgICAgfHwgYyA9PSAnLycgfHwgYyA9PSAnWycgfHwgYyA9PSAnXScgfHwgYyA9PSAnPycg
fHwgYyA9PSAnPScKKyAgICAgICAgICAgIHx8IGMgPT0gJ3snIHx8IGMgPT0gJ30nKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBsZW5ndGggPiAwOworfQor
Citib29sIGlzVmFsaWRIVFRQSGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgbWF0Y2ggbmFtZSBhZ2FpbnN0CisgICAgLy8g
ZmllbGQtdmFsdWUgaW4gc2VjdGlvbiA0LjIgb2YgUkZDIDI2MTYuCisKKyAgICByZXR1cm4gIW5h
bWUuY29udGFpbnMoJ1xyJykgJiYgIW5hbWUuY29udGFpbnMoJ1xuJyk7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFZhbGlkYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxpZGF0aW9uLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBWYWxp
ZGF0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSFRU
UFZhbGlkYXRpb25faAorI2RlZmluZSBIVFRQVmFsaWRhdGlvbl9oCisKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgaXNWYWxpZEhUVFBUb2tl
bihjb25zdCBTdHJpbmcmKTsKK2Jvb2wgaXNWYWxpZEhUVFBIZWFkZXJWYWx1ZShjb25zdCBTdHJp
bmcmKTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcAkocmV2aXNpb24gOTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA1LTIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4K
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggSnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFp
eEB3ZWJraXQub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwOCBEYXZpZCBMZXZpbiA8bGV2aW5A
Y2hyb21pdW0ub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzYsNiArMzYsNyBA
QAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVk
ZSAiSFRUUFBhcnNlcnMuaCIKKyNpbmNsdWRlICJIVFRQVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUg
Ikluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKQEAgLTEwNCwzNSArMTA1LDYgQEAgWE1MSHR0
cFJlcXVlc3RTdGF0aWNEYXRhOjpYTUxIdHRwUmVxdWVzdAogICAgIG1fZm9yYmlkZGVuUmVxdWVz
dEhlYWRlcnMuYWRkKCJ2aWEiKTsKIH0KIAotLy8gRGV0ZXJtaW5lcyBpZiBhIHN0cmluZyBpcyBh
IHZhbGlkIHRva2VuLCBhcyBkZWZpbmVkIGJ5Ci0vLyAidG9rZW4iIGluIHNlY3Rpb24gMi4yIG9m
IFJGQyAyNjE2Lgotc3RhdGljIGJvb2wgaXNWYWxpZFRva2VuKGNvbnN0IFN0cmluZyYgbmFtZSkK
LXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBVQ2hhciBjID0gbmFtZVtpXTsK
LQotICAgICAgICBpZiAoYyA+PSAxMjcgfHwgYyA8PSAzMikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBpZiAoYyA9PSAnKCcgfHwgYyA9PSAnKScgfHwgYyA9PSAnPCcgfHwg
YyA9PSAnPicgfHwgYyA9PSAnQCcgfHwKLSAgICAgICAgICAgIGMgPT0gJywnIHx8IGMgPT0gJzsn
IHx8IGMgPT0gJzonIHx8IGMgPT0gJ1xcJyB8fCBjID09ICdcIicgfHwKLSAgICAgICAgICAgIGMg
PT0gJy8nIHx8IGMgPT0gJ1snIHx8IGMgPT0gJ10nIHx8IGMgPT0gJz8nIHx8IGMgPT0gJz0nIHx8
Ci0gICAgICAgICAgICBjID09ICd7JyB8fCBjID09ICd9JykKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGVuZ3RoID4gMDsKLX0KLQotc3RhdGljIGJvb2wg
aXNWYWxpZEhlYWRlclZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgcmVhbGx5IG1hdGNoIG5hbWUgYWdhaW5zdAotICAgIC8vIGZpZWxkLXZhbHVl
IGluIHNlY3Rpb24gNC4yIG9mIFJGQyAyNjE2LgotCi0gICAgcmV0dXJuICFuYW1lLmNvbnRhaW5z
KCdccicpICYmICFuYW1lLmNvbnRhaW5zKCdcbicpOwotfQotCiBzdGF0aWMgYm9vbCBpc1NldENv
b2tpZUhlYWRlcihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7CiAgICAgcmV0dXJuIGVxdWFs
SWdub3JpbmdDYXNlKG5hbWUsICJzZXQtY29va2llIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgInNldC1jb29raWUyIik7CkBAIC0zOTgsNiArMzcwLDMyIEBAIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OnNldEFzQmxvYihib29sIHZhbHUKIH0KICNlbmRpZgogCitib29sIFhNTEh0dHBSZXF1ZXN0
Ojppc0FsbG93ZWRIVFRQTWV0aG9kKGNvbnN0IFN0cmluZyYgbWV0aG9kKQoreworICAgIHJldHVy
biAhZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiVFJBQ0UiKQorICAgICAgICAmJiAhZXF1YWxJ
Z25vcmluZ0Nhc2UobWV0aG9kLCAiVFJBQ0siKQorICAgICAgICAmJiAhZXF1YWxJZ25vcmluZ0Nh
c2UobWV0aG9kLCAiQ09OTkVDVCIpOworfQorCitTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OnVwcGVy
Y2FzZUtub3duSFRUUE1ldGhvZChjb25zdCBTdHJpbmcmIG1ldGhvZCkKK3sKKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiQ09QWSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhv
ZCwgIkRFTEVURSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIkdFVCIpCisgICAgICAg
IHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIkhFQUQiKSB8fCBlcXVhbElnbm9yaW5nQ2Fz
ZShtZXRob2QsICJJTkRFWCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwgIkxPQ0siKQor
ICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJNLVBPU1QiKSB8fCBlcXVhbEln
bm9yaW5nQ2FzZShtZXRob2QsICJNS0NPTCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1ldGhvZCwg
Ik1PVkUiKQorICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShtZXRob2QsICJPUFRJT05TIikg
fHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiUE9TVCIpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KG1ldGhvZCwgIlBST1BGSU5EIikKKyAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9k
LCAiUFJPUFBBVENIIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiUFVUIikgfHwgZXF1
YWxJZ25vcmluZ0Nhc2UobWV0aG9kLCAiVU5MT0NLIikpIHsKKyAgICAgICAgcmV0dXJuIG1ldGhv
ZC51cHBlcigpOworICAgIH0KKyAgICByZXR1cm4gbWV0aG9kOworfQorCitib29sIFhNTEh0dHBS
ZXF1ZXN0Ojppc0FsbG93ZWRIVFRQSGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBp
bml0aWFsaXplWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhKCk7CisgICAgcmV0dXJuICFzdGF0aWNE
YXRhLT5tX2ZvcmJpZGRlblJlcXVlc3RIZWFkZXJzLmNvbnRhaW5zKG5hbWUpICYmICFuYW1lLnN0
YXJ0c1dpdGgoc3RhdGljRGF0YS0+bV9wcm94eUhlYWRlclByZWZpeCwgZmFsc2UpCisgICAgICAg
ICYmICFuYW1lLnN0YXJ0c1dpdGgoc3RhdGljRGF0YS0+bV9zZWNIZWFkZXJQcmVmaXgsIGZhbHNl
KTsKK30KKwogdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIG1ldGhvZCwg
Y29uc3QgS1VSTCYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBvcGVuKG1ldGhvZCwg
dXJsLCB0cnVlLCBlYyk7CkBAIC00MTgsMjggKzQxNiwxOSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0
OjpvcGVuKGNvbnN0IFN0cmluZyYgCiAKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBVTlNFTlQpOwog
Ci0gICAgaWYgKCFpc1ZhbGlkVG9rZW4obWV0aG9kKSkgeworICAgIGlmICghaXNWYWxpZEhUVFBU
b2tlbihtZXRob2QpKSB7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIC8vIE1ldGhvZCBuYW1lcyBhcmUgY2FzZSBzZW5zaXRpdmUuIEJ1dCBz
aW5jZSBGaXJlZm94IHVwcGVyY2FzZXMgbWV0aG9kIG5hbWVzIGl0IGtub3dzLCB3ZSdsbCBkbyB0
aGUgc2FtZS4KLSAgICBTdHJpbmcgbWV0aG9kVXBwZXIobWV0aG9kLnVwcGVyKCkpOwotCi0gICAg
aWYgKG1ldGhvZFVwcGVyID09ICJUUkFDRSIgfHwgbWV0aG9kVXBwZXIgPT0gIlRSQUNLIiB8fCBt
ZXRob2RVcHBlciA9PSAiQ09OTkVDVCIpIHsKKyAgICBpZiAoIWlzQWxsb3dlZEhUVFBNZXRob2Qo
bWV0aG9kKSkgewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIG1fdXJsID0gdXJsOworICAgIG1fbWV0aG9kID0gdXBwZXJjYXNlS25vd25I
VFRQTWV0aG9kKG1ldGhvZCk7CiAKLSAgICBpZiAobWV0aG9kVXBwZXIgPT0gIkNPUFkiIHx8IG1l
dGhvZFVwcGVyID09ICJERUxFVEUiIHx8IG1ldGhvZFVwcGVyID09ICJHRVQiIHx8IG1ldGhvZFVw
cGVyID09ICJIRUFEIgotICAgICAgICB8fCBtZXRob2RVcHBlciA9PSAiSU5ERVgiIHx8IG1ldGhv
ZFVwcGVyID09ICJMT0NLIiB8fCBtZXRob2RVcHBlciA9PSAiTS1QT1NUIiB8fCBtZXRob2RVcHBl
ciA9PSAiTUtDT0wiIHx8IG1ldGhvZFVwcGVyID09ICJNT1ZFIgotICAgICAgICB8fCBtZXRob2RV
cHBlciA9PSAiT1BUSU9OUyIgfHwgbWV0aG9kVXBwZXIgPT0gIlBPU1QiIHx8IG1ldGhvZFVwcGVy
ID09ICJQUk9QRklORCIgfHwgbWV0aG9kVXBwZXIgPT0gIlBST1BQQVRDSCIgfHwgbWV0aG9kVXBw
ZXIgPT0gIlBVVCIKLSAgICAgICAgfHwgbWV0aG9kVXBwZXIgPT0gIlVOTE9DSyIpCi0gICAgICAg
IG1fbWV0aG9kID0gbWV0aG9kVXBwZXI7Ci0gICAgZWxzZQotICAgICAgICBtX21ldGhvZCA9IG1l
dGhvZDsKKyAgICBtX3VybCA9IHVybDsKIAogICAgIG1fYXN5bmMgPSBhc3luYzsKIApAQCAtODM1
LDEzICs4MjQsMTMgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcihjbwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFpc1ZhbGlkVG9rZW4obmFtZSkgfHwg
IWlzVmFsaWRIZWFkZXJWYWx1ZSh2YWx1ZSkpIHsKKyAgICBpZiAoIWlzVmFsaWRIVFRQVG9rZW4o
bmFtZSkgfHwgIWlzVmFsaWRIVFRQSGVhZGVyVmFsdWUodmFsdWUpKSB7CiAgICAgICAgIGVjID0g
U1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIEEgcHJpdmlsZWdl
ZCBzY3JpcHQgKGUuZy4gYSBEYXNoYm9hcmQgd2lkZ2V0KSBjYW4gc2V0IGFueSBoZWFkZXJzLgot
ICAgIGlmICghc2VjdXJpdHlPcmlnaW4oKS0+Y2FuTG9hZExvY2FsUmVzb3VyY2VzKCkgJiYgIWlz
U2FmZVJlcXVlc3RIZWFkZXIobmFtZSkpIHsKKyAgICBpZiAoIXNlY3VyaXR5T3JpZ2luKCktPmNh
bkxvYWRMb2NhbFJlc291cmNlcygpICYmICFpc0FsbG93ZWRIVFRQSGVhZGVyKG5hbWUpKSB7CiAg
ICAgICAgIHJlcG9ydFVuc2FmZVVzYWdlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgIlJlZnVz
ZWQgdG8gc2V0IHVuc2FmZSBoZWFkZXIgXCIiICsgbmFtZSArICJcIiIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtODU2LDEyICs4NDUsNiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRS
ZXF1ZXN0SGVhZGVySW50CiAgICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kICs9ICIsICIgKyB2
YWx1ZTsKIH0KIAotYm9vbCBYTUxIdHRwUmVxdWVzdDo6aXNTYWZlUmVxdWVzdEhlYWRlcihjb25z
dCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFzdGF0aWNEYXRhLT5tX2ZvcmJp
ZGRlblJlcXVlc3RIZWFkZXJzLmNvbnRhaW5zKG5hbWUpICYmICFuYW1lLnN0YXJ0c1dpdGgoc3Rh
dGljRGF0YS0+bV9wcm94eUhlYWRlclByZWZpeCwgZmFsc2UpCi0gICAgICAgICYmICFuYW1lLnN0
YXJ0c1dpdGgoc3RhdGljRGF0YS0+bV9zZWNIZWFkZXJQcmVmaXgsIGZhbHNlKTsKLX0KLQogU3Ry
aW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZXF1ZXN0SGVhZGVycy5nZXQobmFtZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24gOTQwNjQpCisrKyBT
b3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQWxl
eGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAt
MTEwLDYgKzExMSwxMSBAQCBwdWJsaWM6CiAgICAgQmxvYiogb3B0aW9uYWxSZXNwb25zZUJsb2Io
KSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlQmxvYi5nZXQoKTsgfQogI2VuZGlmCiAKKyAgICAv
LyBFeHBvc2UgSFRUUCB2YWxpZGF0aW9uIG1ldGhvZHMgZm9yIG90aGVyIHVudHJ1c3RlZCByZXF1
ZXN0cy4KKyAgICBzdGF0aWMgYm9vbCBpc0FsbG93ZWRIVFRQTWV0aG9kKGNvbnN0IFN0cmluZyYp
OworICAgIHN0YXRpYyBTdHJpbmcgdXBwZXJjYXNlS25vd25IVFRQTWV0aG9kKGNvbnN0IFN0cmlu
ZyYpOworICAgIHN0YXRpYyBib29sIGlzQWxsb3dlZEhUVFBIZWFkZXIoY29uc3QgU3RyaW5nJik7
CisKICAgICB2b2lkIHNldFJlc3BvbnNlVHlwZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgU3RyaW5nIHJlc3BvbnNlVHlwZSgpOwogICAgIFJlc3BvbnNlVHlwZUNvZGUgcmVz
cG9uc2VUeXBlQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2VUeXBlQ29kZTsgfQpAQCAt
MTYzLDcgKzE2OSw2IEBAIHByaXZhdGU6CiAKICAgICBTdHJpbmcgZ2V0UmVxdWVzdEhlYWRlcihj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIHZvaWQgc2V0UmVxdWVzdEhlYWRl
ckludGVybmFsKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7
Ci0gICAgYm9vbCBpc1NhZmVSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiAg
ICAgdm9pZCBjaGFuZ2VTdGF0ZShTdGF0ZSBuZXdTdGF0ZSk7CiAgICAgdm9pZCBjYWxsUmVhZHlT
dGF0ZUNoYW5nZUxpc3RlbmVyKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>