<?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>38900</bug_id>
          
          <creation_ts>2010-05-11 05:51:07 -0700</creation_ts>
          <short_desc>Refactoring HTMLLinkElement::tokenizeRelAttribute so its signature doesn&apos;t change so much</short_desc>
          <delta_ts>2010-05-14 18:58:10 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>3652</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Leon Clarke">leonclarke</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>android-webkit-unforking</cc>
    
    <cc>commit-queue</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>223879</commentid>
    <comment_count>0</comment_count>
    <who name="Leon Clarke">leonclarke</who>
    <bug_when>2010-05-11 05:51:07 -0700</bug_when>
    <thetext>This is a bit of refactoring as part of providing support for link prefetching
The prefetching bug is here https://bugs.webkit.org/show_bug.cgi?id=3652

tokienizeRelAttribute takes a long list of bools indicating if each of the possible values of rel are present. This means that if support for some attributes is implemented as optional features, the function will have a different signature for every combination of features. In addition, the call to it in the preloader needs to change whenever an extra rel type is supported. In android, we have 1 un-upstreamed rel type, and I was adding prefetch as another.

A more elegant approach is to have a simple structure containing all the possible things the rel attribute could be, and pass this in. The corresponding set of variables in the object also become an instance of the new struct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223881</commentid>
    <comment_count>1</comment_count>
      <attachid>55692</attachid>
    <who name="Leon Clarke">leonclarke</who>
    <bug_when>2010-05-11 06:01:42 -0700</bug_when>
    <thetext>Created attachment 55692
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224484</commentid>
    <comment_count>2</comment_count>
      <attachid>55692</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-05-12 02:30:27 -0700</bug_when>
    <thetext>Comment on attachment 55692
Proposed patch

You should mark this bug as blocking Bug 3652.


WebCore/html/HTMLLinkElement.h:45
 +              { };
This can all be on a single line, no semi-colon required. Or, if you&apos;ll soon be adding additional members behind ENABLE guards, use one initializer per line.

WebCore/html/HTMLLinkElement.h:93
 +  
Rogue whitespace

WebCore/html/HTMLLinkElement.h:97
 +      bool isAlternate() const { return m_disabledState &amp;&amp; m_rel.m_isAlternate; }
Did you mean to invert the logic here?

Either way, we should probably use an enum. Testing what&apos;s effectively an enum with operator! is pretty confusing. Is it much extra effort to use an enum?


WebCore/html/HTMLLinkElement.h:107
 +      static void tokenizeRelAttribute(const AtomicString&amp; value, RelAttribute&amp; attribute);
No need to name the argument when it&apos;s obvious from the type.

WebCore/html/HTMLLinkElement.h:120
 +      RelAttribute m_rel;
Would m_relAttribute be more clear?

WebCore/html/HTMLLinkElement.cpp:138
 +  void HTMLLinkElement::tokenizeRelAttribute(const AtomicString&amp; rel, RelAttribute&amp; attribute)
Use relAttribute to match the name of the member?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224518</commentid>
    <comment_count>3</comment_count>
      <attachid>55832</attachid>
    <who name="Leon Clarke">leonclarke</who>
    <bug_when>2010-05-12 04:29:14 -0700</bug_when>
    <thetext>Created attachment 55832
Following Steve&apos;s review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224535</commentid>
    <comment_count>4</comment_count>
      <attachid>55832</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-05-12 05:12:57 -0700</bug_when>
    <thetext>Comment on attachment 55832
Following Steve&apos;s review comments


WebCore/html/HTMLLinkElement.h:51
 +      };
This can be private and since we don&apos;t need the numeric values anywhere, there&apos;s no need to set them.

WebCore/html/HTMLLinkElement.cpp:130
 +          setAttributeEventListener(eventNames().loadEvent, createAttributeEventListener(this, attr));
Did you mean to add this?

WebCore/ChangeLog:5
 +          Refactor signature of tokenizeRelAttribute and the variables it refers to so that new features don&apos;t keep changing the signature.
Mention that you&apos;re adding the enum too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224659</commentid>
    <comment_count>5</comment_count>
      <attachid>55854</attachid>
    <who name="Leon Clarke">leonclarke</who>
    <bug_when>2010-05-12 09:00:45 -0700</bug_when>
    <thetext>Created attachment 55854
Following review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224662</commentid>
    <comment_count>6</comment_count>
      <attachid>55854</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-05-12 09:09:31 -0700</bug_when>
    <thetext>Comment on attachment 55854
Following review comments

WebCore/html/HTMLLinkElement.cpp:70
 +      int oldDisabledState = m_disabledState;
Just noticed this - it should use the new enum too. Particularly as we no longer explicitly assign values to the enum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224668</commentid>
    <comment_count>7</comment_count>
      <attachid>55855</attachid>
    <who name="Leon Clarke">leonclarke</who>
    <bug_when>2010-05-12 09:20:22 -0700</bug_when>
    <thetext>Created attachment 55855
Don&apos;t cast m_disabledState to int</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226093</commentid>
    <comment_count>8</comment_count>
      <attachid>55855</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-14 18:58:05 -0700</bug_when>
    <thetext>Comment on attachment 55855
Don&apos;t cast m_disabledState to int

Clearing flags on attachment: 55855

Committed r59511: &lt;http://trac.webkit.org/changeset/59511&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226094</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-14 18:58:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55692</attachid>
            <date>2010-05-11 06:01:42 -0700</date>
            <delta_ts>2010-05-12 04:29:14 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>refactor.patch</filename>
            <type>text/plain</type>
            <size>11403</size>
            <attacher name="Leon Clarke">leonclarke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTE0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDUtMTEgIExlb24gQ2xhcmtlICA8bGVvbmNsYXJrZUBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZmFjdG9yIHNpZ25hdHVyZSBvZiB0b2tlbml6ZVJlbEF0dHJpYnV0ZSBhbmQgdGhlIHZhcmlh
YmxlcyBpdCByZWZlcnMgdG8gc28gdGhhdCBuZXcgZmVhdHVyZXMgZG9uJ3Qga2VlcCBjaGFuZ2lu
ZyB0aGUgc2lnbmF0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzg5MDAKKworICAgICAgICBObyBuZXcgdGVzdHMuIFJlZmFjdG9yaW5nIG9ubHku
CisKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTGlua0VsZW1lbnQ6OnNldERpc2FibGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TExpbmtFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxMaW5rRWxlbWVudDo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0Vs
ZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9IVE1M
TGlua0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6UmVsQXR0
cmlidXRlOjpSZWxBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50
Ojppc0FsdGVybmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OmlzSWNv
bik6CisgICAgICAgICogaHRtbC9QcmVsb2FkU2Nhbm5lci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc0F0dHJpYnV0ZSk6CisKIDIwMTAtMDUtMTEgIE5pa29s
YXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGlyayBTY2h1bHplLgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHJldmlzaW9u
IDU5MTQ4KQorKysgV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDEwICs1MSw2IEBAIEhUTUxMaW5rRWxlbWVudDo6SFRNTExpbmtFbGVtZW50KGNv
bnN0IFEKICAgICAsIG1fY2FjaGVkU2hlZXQoMCkKICAgICAsIG1fZGlzYWJsZWRTdGF0ZSgwKQog
ICAgICwgbV9sb2FkaW5nKGZhbHNlKQotICAgICwgbV9hbHRlcm5hdGUoZmFsc2UpCi0gICAgLCBt
X2lzU3R5bGVTaGVldChmYWxzZSkKLSAgICAsIG1faXNJY29uKGZhbHNlKQotICAgICwgbV9pc0RO
U1ByZWZldGNoKGZhbHNlKQogICAgICwgbV9jcmVhdGVkQnlQYXJzZXIoY3JlYXRlZEJ5UGFyc2Vy
KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGxpbmtUYWcpKTsKQEAgLTgwLDExICs3NiwxMSBA
QCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0RGlzYWJsZWRTdGF0ZShiCiAgICAgICAgICAgICAv
LyBDaGVjayAjMTogSWYgdGhlIHNoZWV0IGJlY29tZXMgZGlzYWJsZWQgd2hpbGUgaXQgd2FzIGxv
YWRpbmcsIGFuZCBpZiBpdCB3YXMgZWl0aGVyCiAgICAgICAgICAgICAvLyBhIG1haW4gc2hlZXQg
b3IgYSBzaGVldCB0aGF0IHdhcyBwcmV2aW91c2x5IGVuYWJsZWQgdmlhIHNjcmlwdCwgdGhlbiB3
ZSBuZWVkCiAgICAgICAgICAgICAvLyB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBwZW5k
aW5nIHNoZWV0cy4KLSAgICAgICAgICAgIGlmIChtX2Rpc2FibGVkU3RhdGUgPT0gMiAmJiAoIW1f
YWx0ZXJuYXRlIHx8IG9sZERpc2FibGVkU3RhdGUgPT0gMSkpCisgICAgICAgICAgICBpZiAobV9k
aXNhYmxlZFN0YXRlID09IDIgJiYgKCFtX3JlbC5tX2lzQWx0ZXJuYXRlIHx8IG9sZERpc2FibGVk
U3RhdGUgPT0gMSkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlUGVuZGluZ1No
ZWV0KCk7CiAKICAgICAgICAgICAgIC8vIENoZWNrICMyOiBBbiBhbHRlcm5hdGUgc2hlZXQgYmVj
b21lcyBlbmFibGVkIHdoaWxlIGl0IGlzIHN0aWxsIGxvYWRpbmcuCi0gICAgICAgICAgICBpZiAo
bV9hbHRlcm5hdGUgJiYgbV9kaXNhYmxlZFN0YXRlID09IDEpCisgICAgICAgICAgICBpZiAobV9y
ZWwubV9pc0FsdGVybmF0ZSAmJiBtX2Rpc2FibGVkU3RhdGUgPT0gMSkKICAgICAgICAgICAgICAg
ICBkb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsKIAogICAgICAgICAgICAgLy8gQ2hlY2sg
IzM6IEEgbWFpbiBzaGVldCBiZWNvbWVzIGVuYWJsZWQgd2hpbGUgaXQgd2FzIHN0aWxsIGxvYWRp
bmcgYW5kCkBAIC05Miw3ICs4OCw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXREaXNhYmxl
ZFN0YXRlKGIKICAgICAgICAgICAgIC8vIGhhcHBlbiAoYSBkb3VibGUgdG9nZ2xlIGZvciBubyBy
ZWFzb24gZXNzZW50aWFsbHkpLiAgVGhpcyBoYXBwZW5zIG9uCiAgICAgICAgICAgICAvLyB2aXJ0
dWFscGxhc3RpYy5uZXQsIHdoaWNoIG1hbmFnZXMgdG8gZG8gYWJvdXQgMTIgZW5hYmxlL2Rpc2Fi
bGVzIG9uIG9ubHkgMwogICAgICAgICAgICAgLy8gc2hlZXRzLiA6KQotICAgICAgICAgICAgaWYg
KCFtX2FsdGVybmF0ZSAmJiBtX2Rpc2FibGVkU3RhdGUgPT0gMSAmJiBvbGREaXNhYmxlZFN0YXRl
ID09IDIpCisgICAgICAgICAgICBpZiAoIW1fcmVsLm1faXNBbHRlcm5hdGUgJiYgbV9kaXNhYmxl
ZFN0YXRlID09IDEgJiYgb2xkRGlzYWJsZWRTdGF0ZSA9PSAyKQogICAgICAgICAgICAgICAgIGRv
Y3VtZW50KCktPmFkZFBlbmRpbmdTaGVldCgpOwogCiAgICAgICAgICAgICAvLyBJZiB0aGUgc2hl
ZXQgaXMgYWxyZWFkeSBsb2FkaW5nIGp1c3QgYmFpbC4KQEAgLTExNSw3ICsxMTEsNyBAQCBTdHls
ZVNoZWV0KiBIVE1MTGlua0VsZW1lbnQ6OnNoZWV0KCkgY29uCiB2b2lkIEhUTUxMaW5rRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gcmVsQXR0cikgewotICAgICAgICB0b2tlbml6ZVJlbEF0dHJpYnV0
ZShhdHRyLT52YWx1ZSgpLCBtX2lzU3R5bGVTaGVldCwgbV9hbHRlcm5hdGUsIG1faXNJY29uLCBt
X2lzRE5TUHJlZmV0Y2gpOworICAgICAgICB0b2tlbml6ZVJlbEF0dHJpYnV0ZShhdHRyLT52YWx1
ZSgpLCBtX3JlbCk7CiAgICAgICAgIHByb2Nlc3MoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBocmVmQXR0cikgewogICAgICAgICBtX3VybCA9IGRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKGRlcHJlY2F0ZWRQYXJzZVVSTChhdHRyLT52YWx1ZSgpKSk7CkBAIC0xMjYsMTAgKzEyMiwx
MiBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiAgICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gbWVkaWFBdHRyKSB7CiAgICAgICAgIG1fbWVkaWEgPSBhdHRy
LT52YWx1ZSgpLnN0cmluZygpLmxvd2VyKCk7CiAgICAgICAgIHByb2Nlc3MoKTsKLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBkaXNhYmxlZEF0dHIpIHsKKyAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBkaXNhYmxlZEF0dHIpCiAgICAgICAgIHNldERpc2FibGVkU3RhdGUoIWF0
dHItPmlzTnVsbCgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmJlZm9yZWxv
YWRBdHRyKQorICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmJlZm9yZWxvYWRBdHRyKQog
ICAgICAgICBzZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmVsb2Fk
RXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOworICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKQorICAgICAgICBzZXRBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGNyZWF0ZUF0dHJpYnV0ZUV2ZW50
TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAgIGVsc2UgewogICAgICAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IHRpdGxlQXR0ciAmJiBtX3NoZWV0KQogICAgICAgICAgICAgbV9zaGVldC0+c2V0VGl0
bGUoYXR0ci0+dmFsdWUoKSk7CkBAIC0xMzcsMjEgKzEzNSwyMSBAQCB2b2lkIEhUTUxMaW5rRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiAgICAgfQogfQogCi12b2lkIEhUTUxMaW5rRWxlbWVu
dDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiByZWwsIGJvb2wmIHN0
eWxlU2hlZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9vbCYgaWNvbiwgYm9vbCYgZG5zUHJlZmV0Y2gp
Cit2b2lkIEhUTUxMaW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWlj
U3RyaW5nJiByZWwsIFJlbEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogewotICAgIHN0eWxlU2hlZXQg
PSBmYWxzZTsKLSAgICBpY29uID0gZmFsc2U7IAotICAgIGFsdGVybmF0ZSA9IGZhbHNlOwotICAg
IGRuc1ByZWZldGNoID0gZmFsc2U7CisgICAgYXR0cmlidXRlLm1faXNTdHlsZVNoZWV0ID0gZmFs
c2U7CisgICAgYXR0cmlidXRlLm1faXNJY29uID0gZmFsc2U7CisgICAgYXR0cmlidXRlLm1faXNB
bHRlcm5hdGUgPSBmYWxzZTsKKyAgICBhdHRyaWJ1dGUubV9pc0ROU1ByZWZldGNoID0gZmFsc2U7
CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJlbCwgInN0eWxlc2hlZXQiKSkKLSAgICAgICAg
c3R5bGVTaGVldCA9IHRydWU7CisgICAgICAgIGF0dHJpYnV0ZS5tX2lzU3R5bGVTaGVldCA9IHRy
dWU7CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocmVsLCAiaWNvbiIpIHx8IGVxdWFs
SWdub3JpbmdDYXNlKHJlbCwgInNob3J0Y3V0IGljb24iKSkKLSAgICAgICAgaWNvbiA9IHRydWU7
CisgICAgICAgIGF0dHJpYnV0ZS5tX2lzSWNvbiA9IHRydWU7CiAgICAgZWxzZSBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UocmVsLCAiZG5zLXByZWZldGNoIikpCi0gICAgICAgIGRuc1ByZWZldGNoID0g
dHJ1ZTsKKyAgICAgICAgYXR0cmlidXRlLm1faXNETlNQcmVmZXRjaCA9IHRydWU7CiAgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocmVsLCAiYWx0ZXJuYXRlIHN0eWxlc2hlZXQiKSB8fCBl
cXVhbElnbm9yaW5nQ2FzZShyZWwsICJzdHlsZXNoZWV0IGFsdGVybmF0ZSIpKSB7Ci0gICAgICAg
IHN0eWxlU2hlZXQgPSB0cnVlOwotICAgICAgICBhbHRlcm5hdGUgPSB0cnVlOworICAgICAgICBh
dHRyaWJ1dGUubV9pc1N0eWxlU2hlZXQgPSB0cnVlOworICAgICAgICBhdHRyaWJ1dGUubV9pc0Fs
dGVybmF0ZSA9IHRydWU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gVG9rZW5pemUgdGhlIHJl
bCBhdHRyaWJ1dGUgYW5kIHNldCBiaXRzIGJhc2VkIG9uIHNwZWNpZmljIGtleXdvcmRzIHRoYXQg
d2UgZmluZC4KICAgICAgICAgU3RyaW5nIHJlbFN0cmluZyA9IHJlbC5zdHJpbmcoKTsKQEAgLTE2
MSwxMSArMTU5LDExIEBAIHZvaWQgSFRNTExpbmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJpYnUK
ICAgICAgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxpc3QuZW5kKCk7
CiAgICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGlzdC5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZSgqaXQsICJzdHlsZXNoZWV0IikpCi0gICAgICAgICAgICAgICAgc3R5bGVTaGVldCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgYXR0cmlidXRlLm1faXNTdHlsZVNoZWV0ID0gdHJ1ZTsKICAg
ICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCppdCwgImFsdGVybmF0ZSIpKQot
ICAgICAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYXR0cmli
dXRlLm1faXNBbHRlcm5hdGUgPSB0cnVlOwogICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoKml0LCAiaWNvbiIpKQotICAgICAgICAgICAgICAgIGljb24gPSB0cnVlOworICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZS5tX2lzSWNvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC0xNzksMTcgKzE3NywxNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cHJvY2Vzcygp
CiAKICAgICAvLyBJRSBleHRlbnNpb246IGxvY2F0aW9uIG9mIHNtYWxsIGljb24gZm9yIGxvY2F0
aW9uYmFyIC8gYm9va21hcmtzCiAgICAgLy8gV2UnbGwgcmVjb3JkIHRoaXMgVVJMIHBlciBkb2N1
bWVudCwgZXZlbiBpZiB3ZSBsYXRlciBvbmx5IHVzZSBpdCBpbiB0b3AgbGV2ZWwgZnJhbWVzCi0g
ICAgaWYgKG1faXNJY29uICYmIG1fdXJsLmlzVmFsaWQoKSAmJiAhbV91cmwuaXNFbXB0eSgpKQor
ICAgIGlmIChtX3JlbC5tX2lzSWNvbiAmJiBtX3VybC5pc1ZhbGlkKCkgJiYgIW1fdXJsLmlzRW1w
dHkoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+c2V0SWNvblVSTChtX3VybC5zdHJpbmcoKSwgdHlw
ZSk7CiAKLSAgICBpZiAobV9pc0ROU1ByZWZldGNoICYmIG1fdXJsLmlzVmFsaWQoKSAmJiAhbV91
cmwuaXNFbXB0eSgpKQorICAgIGlmIChtX3JlbC5tX2lzRE5TUHJlZmV0Y2ggJiYgbV91cmwuaXNW
YWxpZCgpICYmICFtX3VybC5pc0VtcHR5KCkpCiAgICAgICAgIFJlc291cmNlSGFuZGxlOjpwcmVw
YXJlRm9yVVJMKG1fdXJsKTsKIAogICAgIGJvb2wgYWNjZXB0SWZUeXBlQ29udGFpbnNUZXh0Q1NT
ID0gZG9jdW1lbnQoKS0+cGFnZSgpICYmIGRvY3VtZW50KCktPnBhZ2UoKS0+c2V0dGluZ3MoKSAm
JiBkb2N1bWVudCgpLT5wYWdlKCktPnNldHRpbmdzKCktPnRyZWF0c0FueVRleHRDU1NMaW5rQXNT
dHlsZXNoZWV0KCk7CiAKICAgICAvLyBTdHlsZXNoZWV0CiAgICAgLy8gVGhpcyB3YXMgYnVnZ3kg
YW5kIHdvdWxkIGluY29ycmVjdGx5IG1hdGNoIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIj4sIHdoaWNo
IGhhcyBhIGRpZmZlcmVudCBzcGVjaWZpZWQgbWVhbmluZy4gLWR3aAotICAgIGlmIChtX2Rpc2Fi
bGVkU3RhdGUgIT0gMiAmJiAobV9pc1N0eWxlU2hlZXQgfHwgKGFjY2VwdElmVHlwZUNvbnRhaW5z
VGV4dENTUyAmJiB0eXBlLmNvbnRhaW5zKCJ0ZXh0L2NzcyIpKSkgJiYgZG9jdW1lbnQoKS0+ZnJh
bWUoKSAmJiBtX3VybC5pc1ZhbGlkKCkpIHsKKyAgICBpZiAobV9kaXNhYmxlZFN0YXRlICE9IDIg
JiYgKG1fcmVsLm1faXNTdHlsZVNoZWV0IHx8IChhY2NlcHRJZlR5cGVDb250YWluc1RleHRDU1Mg
JiYgdHlwZS5jb250YWlucygidGV4dC9jc3MiKSkpICYmIGRvY3VtZW50KCktPmZyYW1lKCkgJiYg
bV91cmwuaXNWYWxpZCgpKSB7CiAgICAgICAgIC8vIGFsc28sIGRvbid0IGxvYWQgc3R5bGUgc2hl
ZXRzIGZvciBzdGFuZGFsb25lIGRvY3VtZW50cwogICAgICAgICAKICAgICAgICAgU3RyaW5nIGNo
YXJzZXQgPSBnZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpOwpAQCAtNDMyLDEwICs0MzAsMTAgQEAg
dm9pZCBIVE1MTGlua0VsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cgogICAgIEhUTUxFbGVtZW50
OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiAKICAgICAvLyBGYXZpY29ucyBh
cmUgaGFuZGxlZCBieSBhIHNwZWNpYWwgY2FzZSBpbiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUo
KQotICAgIGlmIChtX2lzSWNvbikKKyAgICBpZiAobV9yZWwubV9pc0ljb24pCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmICghbV9pc1N0eWxlU2hlZXQpCisgICAgaWYgKCFtX3JlbC5tX2lzU3R5
bGVTaGVldCkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIEFwcGVuZCB0aGUgVVJMIG9m
IHRoaXMgbGluayBlbGVtZW50LgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAkocmV2aXNpb24g
NTkxNDgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDYgKzM1LDE2IEBAIGNsYXNzIEtVUkw7CiAKIGNsYXNzIEhUTUxMaW5rRWxlbWVudCA6
IHB1YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKIHB1Ymxp
YzoKKyAgICBzdHJ1Y3QgUmVsQXR0cmlidXRlIHsKKyAgICAgICAgYm9vbCBtX2lzU3R5bGVTaGVl
dDsKKyAgICAgICAgYm9vbCBtX2lzSWNvbjsKKyAgICAgICAgYm9vbCBtX2lzQWx0ZXJuYXRlOwor
ICAgICAgICBib29sIG1faXNETlNQcmVmZXRjaDsKKworICAgICAgICBSZWxBdHRyaWJ1dGUoKSA6
IG1faXNTdHlsZVNoZWV0KGZhbHNlKSwgbV9pc0ljb24oZmFsc2UpLCBtX2lzQWx0ZXJuYXRlKGZh
bHNlKSwgbV9pc0ROU1ByZWZldGNoKGZhbHNlKQorICAgICAgICAgICAgeyB9OworICAgIH07CisK
ICAgICBIVE1MTGlua0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9v
bCBjcmVhdGVkQnlQYXJzZXIpOwogICAgIH5IVE1MTGlua0VsZW1lbnQoKTsKIApAQCAtODAsMjAg
KzkwLDIxIEBAIHB1YmxpYzoKIAogICAgIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VDbGllbnQKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0
IEtVUkwmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgY29uc3QgQ2FjaGVkQ1NTU3R5
bGVTaGVldCogc2hlZXQpOworCiAgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgc2hlZXRMb2FkZWQoKTsKIAotICAgIGJvb2wgaXNBbHRlcm5hdGUoKSBjb25zdCB7
IHJldHVybiBtX2Rpc2FibGVkU3RhdGUgPT0gMCAmJiBtX2FsdGVybmF0ZTsgfQorICAgIGJvb2wg
aXNBbHRlcm5hdGUoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkU3RhdGUgJiYgbV9yZWwubV9p
c0FsdGVybmF0ZTsgfQogICAgIGJvb2wgaXNEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlz
YWJsZWRTdGF0ZSA9PSAyOyB9CiAgICAgYm9vbCBpc0VuYWJsZWRWaWFTY3JpcHQoKSBjb25zdCB7
IHJldHVybiBtX2Rpc2FibGVkU3RhdGUgPT0gMTsgfQotICAgIGJvb2wgaXNJY29uKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0ljb247IH0KKyAgICBib29sIGlzSWNvbigpIGNvbnN0IHsgcmV0dXJuIG1f
cmVsLm1faXNJY29uOyB9CiAgICAgCiAgICAgaW50IGRpc2FibGVkU3RhdGUoKSB7IHJldHVybiBt
X2Rpc2FibGVkU3RhdGU7IH0KICAgICB2b2lkIHNldERpc2FibGVkU3RhdGUoYm9vbCBfZGlzYWJs
ZWQpOwogCiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0
OwogICAgIAotICAgIHN0YXRpYyB2b2lkIHRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUsIGJvb2wmIHN0eWxlc2hlZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9vbCYg
aWNvbiwgYm9vbCYgZG5zUHJlZmV0Y2gpOworICAgIHN0YXRpYyB2b2lkIHRva2VuaXplUmVsQXR0
cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIFJlbEF0dHJpYnV0ZSYgYXR0cmlidXRl
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhh
c2hTZXQ8S1VSTD4mKSBjb25zdDsKIApAQCAtMTA2LDExICsxMTcsOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgU3RyaW5nIG1fdHlwZTsKICAgICBTdHJpbmcgbV9tZWRpYTsKICAgICBpbnQgbV9kaXNhYmxl
ZFN0YXRlOyAvLyAwPXVuc2V0KGRlZmF1bHQpLCAxPWVuYWJsZWQgdmlhIHNjcmlwdCwgMj1kaXNh
YmxlZAorICAgIFJlbEF0dHJpYnV0ZSBtX3JlbDsKICAgICBib29sIG1fbG9hZGluZzsKLSAgICBi
b29sIG1fYWx0ZXJuYXRlOwotICAgIGJvb2wgbV9pc1N0eWxlU2hlZXQ7Ci0gICAgYm9vbCBtX2lz
SWNvbjsKLSAgICBib29sIG1faXNETlNQcmVmZXRjaDsKICAgICBib29sIG1fY3JlYXRlZEJ5UGFy
c2VyOwogfTsKIApJbmRleDogV2ViQ29yZS9odG1sL1ByZWxvYWRTY2FubmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvUHJlbG9hZFNjYW5uZXIuY3BwCShyZXZpc2lvbiA1OTE0OCkK
KysrIFdlYkNvcmUvaHRtbC9QcmVsb2FkU2Nhbm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcw
MywxMiArNzAzLDkgQEAgdm9pZCBQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc0F0dHJpYnV0ZSgpCiAg
ICAgICAgIGlmIChhdHRyaWJ1dGUgPT0gaHJlZkF0dHIgJiYgbV91cmxUb0xvYWQuaXNFbXB0eSgp
KQogICAgICAgICAgICAgbV91cmxUb0xvYWQgPSBkZXByZWNhdGVkUGFyc2VVUkwodmFsdWUpOwog
ICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGUgPT0gcmVsQXR0cikgewotICAgICAgICAgICAgYm9v
bCBzdHlsZVNoZWV0ID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGFsdGVybmF0ZSA9IGZhbHNl
OwotICAgICAgICAgICAgYm9vbCBpY29uID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGRuc1By
ZWZldGNoID0gZmFsc2U7Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVs
QXR0cmlidXRlKHZhbHVlLCBzdHlsZVNoZWV0LCBhbHRlcm5hdGUsIGljb24sIGRuc1ByZWZldGNo
KTsKLSAgICAgICAgICAgIG1fbGlua0lzU3R5bGVTaGVldCA9IHN0eWxlU2hlZXQgJiYgIWFsdGVy
bmF0ZSAmJiAhaWNvbiAmJiAhZG5zUHJlZmV0Y2g7CisgICAgICAgICAgICBIVE1MTGlua0VsZW1l
bnQ6OlJlbEF0dHJpYnV0ZSByZWw7CisgICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQ6OnRva2Vu
aXplUmVsQXR0cmlidXRlKHZhbHVlLCByZWwpOworICAgICAgICAgICAgbV9saW5rSXNTdHlsZVNo
ZWV0ID0gcmVsLm1faXNTdHlsZVNoZWV0ICYmICFyZWwubV9pc0FsdGVybmF0ZSAmJiAhcmVsLm1f
aXNJY29uICYmICFyZWwubV9pc0ROU1ByZWZldGNoOwogICAgICAgICB9IGVsc2UgaWYgKGF0dHJp
YnV0ZSA9PSBjaGFyc2V0QXR0cikKICAgICAgICAgICAgIG1fY2hhcnNldCA9IHZhbHVlOwogICAg
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55832</attachid>
            <date>2010-05-12 04:29:14 -0700</date>
            <delta_ts>2010-05-12 09:00:45 -0700</delta_ts>
            <desc>Following Steve&apos;s review comments</desc>
            <filename>refactor1.patch</filename>
            <type>text/plain</type>
            <size>12674</size>
            <attacher name="Leon Clarke">leonclarke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTIyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDUtMTIgIExlb24gQ2xhcmtlICA8bGVvbmNsYXJrZUBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZmFjdG9yIHNpZ25hdHVyZSBvZiB0b2tlbml6ZVJlbEF0dHJpYnV0ZSBhbmQgdGhlIHZhcmlh
YmxlcyBpdCByZWZlcnMgdG8gc28gdGhhdCBuZXcgZmVhdHVyZXMgZG9uJ3Qga2VlcCBjaGFuZ2lu
ZyB0aGUgc2lnbmF0dXJlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzg5MDAKKworICAgICAgICBObyBuZXcgdGVzdHMuIFJlZmFjdG9yaW5nIG9ubHku
CisKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTGlua0VsZW1lbnQ6OnNldERpc2FibGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TExpbmtFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxMaW5rRWxlbWVudDo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0Vs
ZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9IVE1M
TGlua0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6UmVsQXR0
cmlidXRlOjpSZWxBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50
Ojppc0FsdGVybmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OmlzSWNv
bik6CisgICAgICAgICogaHRtbC9QcmVsb2FkU2Nhbm5lci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc0F0dHJpYnV0ZSk6CisKIDIwMTAtMDUtMTIgIFpvbHRh
biBIZXJjemVnICA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBO
aWtvbGFzIFppbW1lcm1hbm4uCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNp
b24gNTkyMjEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksMTIgKzQ5LDggQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIEhUTUxM
aW5rRWxlbWVudDo6SFRNTExpbmtFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lLCBE
b2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKICAgICA6IEhUTUxFbGVtZW50KHFO
YW1lLCBkb2MpCiAgICAgLCBtX2NhY2hlZFNoZWV0KDApCi0gICAgLCBtX2Rpc2FibGVkU3RhdGUo
MCkKKyAgICAsIG1fZGlzYWJsZWRTdGF0ZShVbnNldCkKICAgICAsIG1fbG9hZGluZyhmYWxzZSkK
LSAgICAsIG1fYWx0ZXJuYXRlKGZhbHNlKQotICAgICwgbV9pc1N0eWxlU2hlZXQoZmFsc2UpCi0g
ICAgLCBtX2lzSWNvbihmYWxzZSkKLSAgICAsIG1faXNETlNQcmVmZXRjaChmYWxzZSkKICAgICAs
IG1fY3JlYXRlZEJ5UGFyc2VyKGNyZWF0ZWRCeVBhcnNlcikKIHsKICAgICBBU1NFUlQoaGFzVGFn
TmFtZShsaW5rVGFnKSk7CkBAIC03Miw3ICs2OCw3IEBAIEhUTUxMaW5rRWxlbWVudDo6fkhUTUxM
aW5rRWxlbWVudCgpCiB2b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0RGlzYWJsZWRTdGF0ZShib29s
IF9kaXNhYmxlZCkKIHsKICAgICBpbnQgb2xkRGlzYWJsZWRTdGF0ZSA9IG1fZGlzYWJsZWRTdGF0
ZTsKLSAgICBtX2Rpc2FibGVkU3RhdGUgPSBfZGlzYWJsZWQgPyAyIDogMTsKKyAgICBtX2Rpc2Fi
bGVkU3RhdGUgPSBfZGlzYWJsZWQgPyBEaXNhYmxlZCA6IEVuYWJsZWRWaWFTY3JpcHQ7CiAgICAg
aWYgKG9sZERpc2FibGVkU3RhdGUgIT0gbV9kaXNhYmxlZFN0YXRlKSB7CiAgICAgICAgIC8vIElm
IHdlIGNoYW5nZSB0aGUgZGlzYWJsZWQgc3RhdGUgd2hpbGUgdGhlIHNoZWV0IGlzIHN0aWxsIGxv
YWRpbmcsIHRoZW4gd2UgaGF2ZSB0bwogICAgICAgICAvLyBwZXJmb3JtIHRocmVlIGNoZWNrczoK
QEAgLTgwLDExICs3NiwxMSBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0RGlzYWJsZWRTdGF0
ZShiCiAgICAgICAgICAgICAvLyBDaGVjayAjMTogSWYgdGhlIHNoZWV0IGJlY29tZXMgZGlzYWJs
ZWQgd2hpbGUgaXQgd2FzIGxvYWRpbmcsIGFuZCBpZiBpdCB3YXMgZWl0aGVyCiAgICAgICAgICAg
ICAvLyBhIG1haW4gc2hlZXQgb3IgYSBzaGVldCB0aGF0IHdhcyBwcmV2aW91c2x5IGVuYWJsZWQg
dmlhIHNjcmlwdCwgdGhlbiB3ZSBuZWVkCiAgICAgICAgICAgICAvLyB0byByZW1vdmUgaXQgZnJv
bSB0aGUgbGlzdCBvZiBwZW5kaW5nIHNoZWV0cy4KLSAgICAgICAgICAgIGlmIChtX2Rpc2FibGVk
U3RhdGUgPT0gMiAmJiAoIW1fYWx0ZXJuYXRlIHx8IG9sZERpc2FibGVkU3RhdGUgPT0gMSkpCisg
ICAgICAgICAgICBpZiAobV9kaXNhYmxlZFN0YXRlID09IERpc2FibGVkICYmICghbV9yZWxBdHRy
aWJ1dGUubV9pc0FsdGVybmF0ZSB8fCBvbGREaXNhYmxlZFN0YXRlID09IDEpKQogICAgICAgICAg
ICAgICAgIGRvY3VtZW50KCktPnJlbW92ZVBlbmRpbmdTaGVldCgpOwogCiAgICAgICAgICAgICAv
LyBDaGVjayAjMjogQW4gYWx0ZXJuYXRlIHNoZWV0IGJlY29tZXMgZW5hYmxlZCB3aGlsZSBpdCBp
cyBzdGlsbCBsb2FkaW5nLgotICAgICAgICAgICAgaWYgKG1fYWx0ZXJuYXRlICYmIG1fZGlzYWJs
ZWRTdGF0ZSA9PSAxKQorICAgICAgICAgICAgaWYgKG1fcmVsQXR0cmlidXRlLm1faXNBbHRlcm5h
dGUgJiYgbV9kaXNhYmxlZFN0YXRlID09IEVuYWJsZWRWaWFTY3JpcHQpCiAgICAgICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+YWRkUGVuZGluZ1NoZWV0KCk7CiAKICAgICAgICAgICAgIC8vIENoZWNr
ICMzOiBBIG1haW4gc2hlZXQgYmVjb21lcyBlbmFibGVkIHdoaWxlIGl0IHdhcyBzdGlsbCBsb2Fk
aW5nIGFuZApAQCAtOTIsNyArODgsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0RGlzYWJs
ZWRTdGF0ZShiCiAgICAgICAgICAgICAvLyBoYXBwZW4gKGEgZG91YmxlIHRvZ2dsZSBmb3Igbm8g
cmVhc29uIGVzc2VudGlhbGx5KS4gIFRoaXMgaGFwcGVucyBvbgogICAgICAgICAgICAgLy8gdmly
dHVhbHBsYXN0aWMubmV0LCB3aGljaCBtYW5hZ2VzIHRvIGRvIGFib3V0IDEyIGVuYWJsZS9kaXNh
YmxlcyBvbiBvbmx5IDMKICAgICAgICAgICAgIC8vIHNoZWV0cy4gOikKLSAgICAgICAgICAgIGlm
ICghbV9hbHRlcm5hdGUgJiYgbV9kaXNhYmxlZFN0YXRlID09IDEgJiYgb2xkRGlzYWJsZWRTdGF0
ZSA9PSAyKQorICAgICAgICAgICAgaWYgKCFtX3JlbEF0dHJpYnV0ZS5tX2lzQWx0ZXJuYXRlICYm
IG1fZGlzYWJsZWRTdGF0ZSA9PSBFbmFibGVkVmlhU2NyaXB0ICYmIG9sZERpc2FibGVkU3RhdGUg
PT0gMikKICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsKIAog
ICAgICAgICAgICAgLy8gSWYgdGhlIHNoZWV0IGlzIGFscmVhZHkgbG9hZGluZyBqdXN0IGJhaWwu
CkBAIC0xMDAsNyArOTYsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0RGlzYWJsZWRTdGF0
ZShiCiAgICAgICAgIH0KIAogICAgICAgICAvLyBMb2FkIHRoZSBzaGVldCwgc2luY2UgaXQncyBu
ZXZlciBiZWVuIGxvYWRlZCBiZWZvcmUuCi0gICAgICAgIGlmICghbV9zaGVldCAmJiBtX2Rpc2Fi
bGVkU3RhdGUgPT0gMSkKKyAgICAgICAgaWYgKCFtX3NoZWV0ICYmIG1fZGlzYWJsZWRTdGF0ZSA9
PSBFbmFibGVkVmlhU2NyaXB0KQogICAgICAgICAgICAgcHJvY2VzcygpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7IC8vIFVwZGF0
ZSB0aGUgc3R5bGUgc2VsZWN0b3IuCkBAIC0xMTUsNyArMTExLDcgQEAgU3R5bGVTaGVldCogSFRN
TExpbmtFbGVtZW50OjpzaGVldCgpIGNvbgogdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IHJlbEF0dHIpIHsKLSAgICAgICAgdG9rZW5pemVSZWxBdHRyaWJ1dGUoYXR0ci0+dmFs
dWUoKSwgbV9pc1N0eWxlU2hlZXQsIG1fYWx0ZXJuYXRlLCBtX2lzSWNvbiwgbV9pc0ROU1ByZWZl
dGNoKTsKKyAgICAgICAgdG9rZW5pemVSZWxBdHRyaWJ1dGUoYXR0ci0+dmFsdWUoKSwgbV9yZWxB
dHRyaWJ1dGUpOwogICAgICAgICBwcm9jZXNzKCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gaHJlZkF0dHIpIHsKICAgICAgICAgbV91cmwgPSBkb2N1bWVudCgpLT5jb21wbGV0ZVVS
TChkZXByZWNhdGVkUGFyc2VVUkwoYXR0ci0+dmFsdWUoKSkpOwpAQCAtMTI2LDEwICsxMjIsMTIg
QEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IG1lZGlhQXR0cikgewogICAgICAgICBtX21lZGlhID0gYXR0ci0+
dmFsdWUoKS5zdHJpbmcoKS5sb3dlcigpOwogICAgICAgICBwcm9jZXNzKCk7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gZGlzYWJsZWRBdHRyKSB7CisgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gZGlzYWJsZWRBdHRyKQogICAgICAgICBzZXREaXNhYmxlZFN0YXRlKCFhdHRy
LT5pc051bGwoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25iZWZvcmVsb2Fk
QXR0cikKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25iZWZvcmVsb2FkQXR0cikKICAg
ICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYmVmb3JlbG9hZEV2
ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKKyAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gb25sb2FkQXR0cikKKyAgICAgICAgc2V0QXR0cmlidXRlRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkubG9hZEV2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSB0aXRsZUF0dHIgJiYgbV9zaGVldCkKICAgICAgICAgICAgIG1fc2hlZXQtPnNldFRpdGxl
KGF0dHItPnZhbHVlKCkpOwpAQCAtMTM3LDIxICsxMzUsMjEgQEAgdm9pZCBIVE1MTGlua0VsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgIH0KIH0KIAotdm9pZCBIVE1MTGlua0VsZW1lbnQ6
OnRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgcmVsLCBib29sJiBzdHls
ZVNoZWV0LCBib29sJiBhbHRlcm5hdGUsIGJvb2wmIGljb24sIGJvb2wmIGRuc1ByZWZldGNoKQor
dm9pZCBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0
cmluZyYgcmVsLCBSZWxBdHRyaWJ1dGUmIHJlbEF0dHJpYnV0ZSkKIHsKLSAgICBzdHlsZVNoZWV0
ID0gZmFsc2U7Ci0gICAgaWNvbiA9IGZhbHNlOyAKLSAgICBhbHRlcm5hdGUgPSBmYWxzZTsKLSAg
ICBkbnNQcmVmZXRjaCA9IGZhbHNlOworICAgIHJlbEF0dHJpYnV0ZS5tX2lzU3R5bGVTaGVldCA9
IGZhbHNlOworICAgIHJlbEF0dHJpYnV0ZS5tX2lzSWNvbiA9IGZhbHNlOworICAgIHJlbEF0dHJp
YnV0ZS5tX2lzQWx0ZXJuYXRlID0gZmFsc2U7CisgICAgcmVsQXR0cmlidXRlLm1faXNETlNQcmVm
ZXRjaCA9IGZhbHNlOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShyZWwsICJzdHlsZXNoZWV0
IikpCi0gICAgICAgIHN0eWxlU2hlZXQgPSB0cnVlOworICAgICAgICByZWxBdHRyaWJ1dGUubV9p
c1N0eWxlU2hlZXQgPSB0cnVlOwogICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJlbCwg
Imljb24iKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShyZWwsICJzaG9ydGN1dCBpY29uIikpCi0gICAg
ICAgIGljb24gPSB0cnVlOworICAgICAgICByZWxBdHRyaWJ1dGUubV9pc0ljb24gPSB0cnVlOwog
ICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJlbCwgImRucy1wcmVmZXRjaCIpKQotICAg
ICAgICBkbnNQcmVmZXRjaCA9IHRydWU7CisgICAgICAgIHJlbEF0dHJpYnV0ZS5tX2lzRE5TUHJl
ZmV0Y2ggPSB0cnVlOwogICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJlbCwgImFsdGVy
bmF0ZSBzdHlsZXNoZWV0IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UocmVsLCAic3R5bGVzaGVldCBh
bHRlcm5hdGUiKSkgewotICAgICAgICBzdHlsZVNoZWV0ID0gdHJ1ZTsKLSAgICAgICAgYWx0ZXJu
YXRlID0gdHJ1ZTsKKyAgICAgICAgcmVsQXR0cmlidXRlLm1faXNTdHlsZVNoZWV0ID0gdHJ1ZTsK
KyAgICAgICAgcmVsQXR0cmlidXRlLm1faXNBbHRlcm5hdGUgPSB0cnVlOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIC8vIFRva2VuaXplIHRoZSByZWwgYXR0cmlidXRlIGFuZCBzZXQgYml0cyBiYXNl
ZCBvbiBzcGVjaWZpYyBrZXl3b3JkcyB0aGF0IHdlIGZpbmQuCiAgICAgICAgIFN0cmluZyByZWxT
dHJpbmcgPSByZWwuc3RyaW5nKCk7CkBAIC0xNjEsMTEgKzE1OSwxMSBAQCB2b2lkIEhUTUxMaW5r
RWxlbWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBsaXN0LmVuZCgpOwogICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxpc3QuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoKml0LCAic3R5bGVzaGVldCIpKQotICAg
ICAgICAgICAgICAgIHN0eWxlU2hlZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlbEF0dHJp
YnV0ZS5tX2lzU3R5bGVTaGVldCA9IHRydWU7CiAgICAgICAgICAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZSgqaXQsICJhbHRlcm5hdGUiKSkKLSAgICAgICAgICAgICAgICBhbHRlcm5hdGUg
PSB0cnVlOworICAgICAgICAgICAgICAgIHJlbEF0dHJpYnV0ZS5tX2lzQWx0ZXJuYXRlID0gdHJ1
ZTsKICAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCppdCwgImljb24iKSkK
LSAgICAgICAgICAgICAgICBpY29uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZWxBdHRyaWJ1
dGUubV9pc0ljb24gPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTc5LDE3ICsxNzcs
MTcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MoKQogCiAgICAgLy8gSUUgZXh0ZW5z
aW9uOiBsb2NhdGlvbiBvZiBzbWFsbCBpY29uIGZvciBsb2NhdGlvbmJhciAvIGJvb2ttYXJrcwog
ICAgIC8vIFdlJ2xsIHJlY29yZCB0aGlzIFVSTCBwZXIgZG9jdW1lbnQsIGV2ZW4gaWYgd2UgbGF0
ZXIgb25seSB1c2UgaXQgaW4gdG9wIGxldmVsIGZyYW1lcwotICAgIGlmIChtX2lzSWNvbiAmJiBt
X3VybC5pc1ZhbGlkKCkgJiYgIW1fdXJsLmlzRW1wdHkoKSkKKyAgICBpZiAobV9yZWxBdHRyaWJ1
dGUubV9pc0ljb24gJiYgbV91cmwuaXNWYWxpZCgpICYmICFtX3VybC5pc0VtcHR5KCkpCiAgICAg
ICAgIGRvY3VtZW50KCktPnNldEljb25VUkwobV91cmwuc3RyaW5nKCksIHR5cGUpOwogCi0gICAg
aWYgKG1faXNETlNQcmVmZXRjaCAmJiBtX3VybC5pc1ZhbGlkKCkgJiYgIW1fdXJsLmlzRW1wdHko
KSkKKyAgICBpZiAobV9yZWxBdHRyaWJ1dGUubV9pc0ROU1ByZWZldGNoICYmIG1fdXJsLmlzVmFs
aWQoKSAmJiAhbV91cmwuaXNFbXB0eSgpKQogICAgICAgICBSZXNvdXJjZUhhbmRsZTo6cHJlcGFy
ZUZvclVSTChtX3VybCk7CiAKICAgICBib29sIGFjY2VwdElmVHlwZUNvbnRhaW5zVGV4dENTUyA9
IGRvY3VtZW50KCktPnBhZ2UoKSAmJiBkb2N1bWVudCgpLT5wYWdlKCktPnNldHRpbmdzKCkgJiYg
ZG9jdW1lbnQoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT50cmVhdHNBbnlUZXh0Q1NTTGlua0FzU3R5
bGVzaGVldCgpOwogCiAgICAgLy8gU3R5bGVzaGVldAogICAgIC8vIFRoaXMgd2FzIGJ1Z2d5IGFu
ZCB3b3VsZCBpbmNvcnJlY3RseSBtYXRjaCA8bGluayByZWw9ImFsdGVybmF0ZSI+LCB3aGljaCBo
YXMgYSBkaWZmZXJlbnQgc3BlY2lmaWVkIG1lYW5pbmcuIC1kd2gKLSAgICBpZiAobV9kaXNhYmxl
ZFN0YXRlICE9IDIgJiYgKG1faXNTdHlsZVNoZWV0IHx8IChhY2NlcHRJZlR5cGVDb250YWluc1Rl
eHRDU1MgJiYgdHlwZS5jb250YWlucygidGV4dC9jc3MiKSkpICYmIGRvY3VtZW50KCktPmZyYW1l
KCkgJiYgbV91cmwuaXNWYWxpZCgpKSB7CisgICAgaWYgKG1fZGlzYWJsZWRTdGF0ZSAhPSBEaXNh
YmxlZCAmJiAobV9yZWxBdHRyaWJ1dGUubV9pc1N0eWxlU2hlZXQgfHwgKGFjY2VwdElmVHlwZUNv
bnRhaW5zVGV4dENTUyAmJiB0eXBlLmNvbnRhaW5zKCJ0ZXh0L2NzcyIpKSkgJiYgZG9jdW1lbnQo
KS0+ZnJhbWUoKSAmJiBtX3VybC5pc1ZhbGlkKCkpIHsKICAgICAgICAgLy8gYWxzbywgZG9uJ3Qg
bG9hZCBzdHlsZSBzaGVldHMgZm9yIHN0YW5kYWxvbmUgZG9jdW1lbnRzCiAgICAgICAgIAogICAg
ICAgICBTdHJpbmcgY2hhcnNldCA9IGdldEF0dHJpYnV0ZShjaGFyc2V0QXR0cik7CkBAIC00MzIs
MTAgKzQzMCwxMCBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyCiAg
ICAgSFRNTEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyh1cmxzKTsKIAogICAg
IC8vIEZhdmljb25zIGFyZSBoYW5kbGVkIGJ5IGEgc3BlY2lhbCBjYXNlIGluIExlZ2FjeVdlYkFy
Y2hpdmU6OmNyZWF0ZSgpCi0gICAgaWYgKG1faXNJY29uKQorICAgIGlmIChtX3JlbEF0dHJpYnV0
ZS5tX2lzSWNvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2lzU3R5bGVTaGVldCkK
KyAgICBpZiAoIW1fcmVsQXR0cmlidXRlLm1faXNTdHlsZVNoZWV0KQogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgLy8gQXBwZW5kIHRoZSBVUkwgb2YgdGhpcyBsaW5rIGVsZW1lbnQuCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxMaW5rRWxlbWVudC5oCShyZXZpc2lvbiA1OTIyMSkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MTGlua0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsMjEgQEAgY2xhc3Mg
S1VSTDsKIAogY2xhc3MgSFRNTExpbmtFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJs
aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogcHVibGljOgorICAgIHN0cnVjdCBSZWxBdHRyaWJ1
dGUgeworICAgICAgICBib29sIG1faXNTdHlsZVNoZWV0OworICAgICAgICBib29sIG1faXNJY29u
OworICAgICAgICBib29sIG1faXNBbHRlcm5hdGU7CisgICAgICAgIGJvb2wgbV9pc0ROU1ByZWZl
dGNoOworCisgICAgICAgIFJlbEF0dHJpYnV0ZSgpIDogbV9pc1N0eWxlU2hlZXQoZmFsc2UpLCBt
X2lzSWNvbihmYWxzZSksIG1faXNBbHRlcm5hdGUoZmFsc2UpLCBtX2lzRE5TUHJlZmV0Y2goZmFs
c2UpIHsgfQorICAgIH07CisKKyAgICBlbnVtIERpc2FibGVkU3RhdGUgeworICAgICAgICBVbnNl
dCA9IDAsCisgICAgICAgIEVuYWJsZWRWaWFTY3JpcHQgPSAxLAorICAgICAgICBEaXNhYmxlZCA9
IDIKKyAgICB9OworCiAgICAgSFRNTExpbmtFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKICAgICB+SFRNTExpbmtFbGVtZW50KCk7
CiAKQEAgLTgzLDE3ICs5OCwxNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgc2hlZXRMb2FkZWQoKTsKIAotICAgIGJvb2wgaXNBbHRlcm5h
dGUoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkU3RhdGUgPT0gMCAmJiBtX2FsdGVybmF0ZTsg
fQotICAgIGJvb2wgaXNEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWRTdGF0ZSA9
PSAyOyB9Ci0gICAgYm9vbCBpc0VuYWJsZWRWaWFTY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX2Rp
c2FibGVkU3RhdGUgPT0gMTsgfQotICAgIGJvb2wgaXNJY29uKCkgY29uc3QgeyByZXR1cm4gbV9p
c0ljb247IH0KKyAgICBib29sIGlzQWx0ZXJuYXRlKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxl
ZFN0YXRlID09IFVuc2V0ICYmIG1fcmVsQXR0cmlidXRlLm1faXNBbHRlcm5hdGU7IH0KKyAgICBi
b29sIGlzRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkU3RhdGUgPT0gRGlzYWJs
ZWQ7IH0KKyAgICBib29sIGlzRW5hYmxlZFZpYVNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlz
YWJsZWRTdGF0ZSA9PSBFbmFibGVkVmlhU2NyaXB0OyB9CisgICAgYm9vbCBpc0ljb24oKSBjb25z
dCB7IHJldHVybiBtX3JlbEF0dHJpYnV0ZS5tX2lzSWNvbjsgfQogICAgIAotICAgIGludCBkaXNh
YmxlZFN0YXRlKCkgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlOyB9CiAgICAgdm9pZCBzZXREaXNh
YmxlZFN0YXRlKGJvb2wgX2Rpc2FibGVkKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJp
YnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKICAgICAKLSAgICBzdGF0aWMgdm9pZCB0b2tlbml6ZVJl
bEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBib29sJiBzdHlsZXNoZWV0LCBi
b29sJiBhbHRlcm5hdGUsIGJvb2wmIGljb24sIGJvb2wmIGRuc1ByZWZldGNoKTsKKyAgICBzdGF0
aWMgdm9pZCB0b2tlbml6ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBS
ZWxBdHRyaWJ1dGUmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0
ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsKIApAQCAtMTA1LDEyICsxMTksOSBAQCBw
cm90ZWN0ZWQ6CiAgICAgS1VSTCBtX3VybDsKICAgICBTdHJpbmcgbV90eXBlOwogICAgIFN0cmlu
ZyBtX21lZGlhOwotICAgIGludCBtX2Rpc2FibGVkU3RhdGU7IC8vIDA9dW5zZXQoZGVmYXVsdCks
IDE9ZW5hYmxlZCB2aWEgc2NyaXB0LCAyPWRpc2FibGVkCisgICAgRGlzYWJsZWRTdGF0ZSBtX2Rp
c2FibGVkU3RhdGU7CisgICAgUmVsQXR0cmlidXRlIG1fcmVsQXR0cmlidXRlOwogICAgIGJvb2wg
bV9sb2FkaW5nOwotICAgIGJvb2wgbV9hbHRlcm5hdGU7Ci0gICAgYm9vbCBtX2lzU3R5bGVTaGVl
dDsKLSAgICBib29sIG1faXNJY29uOwotICAgIGJvb2wgbV9pc0ROU1ByZWZldGNoOwogICAgIGJv
b2wgbV9jcmVhdGVkQnlQYXJzZXI7CiB9OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvUHJlbG9hZFNj
YW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9QcmVsb2FkU2Nhbm5lci5jcHAJ
KHJldmlzaW9uIDU5MjIxKQorKysgV2ViQ29yZS9odG1sL1ByZWxvYWRTY2FubmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzAzLDEyICs3MDMsOSBAQCB2b2lkIFByZWxvYWRTY2FubmVyOjpwcm9j
ZXNzQXR0cmlidXRlKCkKICAgICAgICAgaWYgKGF0dHJpYnV0ZSA9PSBocmVmQXR0ciAmJiBtX3Vy
bFRvTG9hZC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX3VybFRvTG9hZCA9IGRlcHJlY2F0ZWRQ
YXJzZVVSTCh2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZSA9PSByZWxBdHRyKSB7
Ci0gICAgICAgICAgICBib29sIHN0eWxlU2hlZXQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wg
YWx0ZXJuYXRlID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGljb24gPSBmYWxzZTsKLSAgICAg
ICAgICAgIGJvb2wgZG5zUHJlZmV0Y2ggPSBmYWxzZTsKLSAgICAgICAgICAgIEhUTUxMaW5rRWxl
bWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUodmFsdWUsIHN0eWxlU2hlZXQsIGFsdGVybmF0ZSwg
aWNvbiwgZG5zUHJlZmV0Y2gpOwotICAgICAgICAgICAgbV9saW5rSXNTdHlsZVNoZWV0ID0gc3R5
bGVTaGVldCAmJiAhYWx0ZXJuYXRlICYmICFpY29uICYmICFkbnNQcmVmZXRjaDsKKyAgICAgICAg
ICAgIEhUTUxMaW5rRWxlbWVudDo6UmVsQXR0cmlidXRlIHJlbDsKKyAgICAgICAgICAgIEhUTUxM
aW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUodmFsdWUsIHJlbCk7CisgICAgICAgICAg
ICBtX2xpbmtJc1N0eWxlU2hlZXQgPSByZWwubV9pc1N0eWxlU2hlZXQgJiYgIXJlbC5tX2lzQWx0
ZXJuYXRlICYmICFyZWwubV9pc0ljb24gJiYgIXJlbC5tX2lzRE5TUHJlZmV0Y2g7CiAgICAgICAg
IH0gZWxzZSBpZiAoYXR0cmlidXRlID09IGNoYXJzZXRBdHRyKQogICAgICAgICAgICAgbV9jaGFy
c2V0ID0gdmFsdWU7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55854</attachid>
            <date>2010-05-12 09:00:45 -0700</date>
            <delta_ts>2010-05-12 09:20:22 -0700</delta_ts>
            <desc>Following review comments</desc>
            <filename>refactor2.patch</filename>
            <type>text/plain</type>
            <size>12822</size>
            <attacher name="Leon Clarke">leonclarke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTIzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDUtMTIgIExlb24gQ2xhcmtlICA8bGVvbmNsYXJrZUBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZmFjdG9yIHNpZ25hdHVyZSBvZiB0b2tlbml6ZVJlbEF0dHJpYnV0ZSBhbmQgdGhlIHZhcmlh
YmxlcyBpdCByZWZlcnMgdG8gc28gdGhhdCBuZXcgZmVhdHVyZXMgZG9uJ3Qga2VlcCBjaGFuZ2lu
ZyB0aGUgc2lnbmF0dXJlLCBhbmQgbWFrZSBtX2Rpc2FibGVkU3RhdGUgaW50byBhbiBlbnVtLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg5MDAKKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIFJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBodG1s
L0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6
OkhUTUxMaW5rRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnNl
dERpc2FibGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnRv
a2VuaXplUmVsQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6
cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OmFkZFN1YnJlc291
cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6UmVsQXR0cmlidXRlOjpSZWxBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojppc0FsdGVybmF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OmlzRGlzYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojppc0VuYWJsZWRWaWFTY3JpcHQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojppc0ljb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TExpbmtFbGVtZW50OjopOgorICAgICAgICAqIGh0bWwvUHJlbG9hZFNjYW5uZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NBdHRyaWJ1dGUpOgorCiAyMDEw
LTA1LTEwICBSb2RyaWdvIEJlbGVtICA8cm9kcmlnby5iZWxlbUBvcGVuYm9zc2Eub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggQ2hyaXN0aWFuc2VuICwgU2ltb24gSGF1c21hbm4g
YW5kIEd1c3Rhdm8gTm9yb25oYS4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShyZXZp
c2lvbiA1OTIyMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSwxMiArNDksOCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogSFRN
TExpbmtFbGVtZW50OjpIVE1MTGlua0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUs
IERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQogICAgIDogSFRNTEVsZW1lbnQo
cU5hbWUsIGRvYykKICAgICAsIG1fY2FjaGVkU2hlZXQoMCkKLSAgICAsIG1fZGlzYWJsZWRTdGF0
ZSgwKQorICAgICwgbV9kaXNhYmxlZFN0YXRlKFVuc2V0KQogICAgICwgbV9sb2FkaW5nKGZhbHNl
KQotICAgICwgbV9hbHRlcm5hdGUoZmFsc2UpCi0gICAgLCBtX2lzU3R5bGVTaGVldChmYWxzZSkK
LSAgICAsIG1faXNJY29uKGZhbHNlKQotICAgICwgbV9pc0ROU1ByZWZldGNoKGZhbHNlKQogICAg
ICwgbV9jcmVhdGVkQnlQYXJzZXIoY3JlYXRlZEJ5UGFyc2VyKQogewogICAgIEFTU0VSVChoYXNU
YWdOYW1lKGxpbmtUYWcpKTsKQEAgLTcyLDcgKzY4LDcgQEAgSFRNTExpbmtFbGVtZW50Ojp+SFRN
TExpbmtFbGVtZW50KCkKIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXREaXNhYmxlZFN0YXRlKGJv
b2wgX2Rpc2FibGVkKQogewogICAgIGludCBvbGREaXNhYmxlZFN0YXRlID0gbV9kaXNhYmxlZFN0
YXRlOwotICAgIG1fZGlzYWJsZWRTdGF0ZSA9IF9kaXNhYmxlZCA/IDIgOiAxOworICAgIG1fZGlz
YWJsZWRTdGF0ZSA9IF9kaXNhYmxlZCA/IERpc2FibGVkIDogRW5hYmxlZFZpYVNjcmlwdDsKICAg
ICBpZiAob2xkRGlzYWJsZWRTdGF0ZSAhPSBtX2Rpc2FibGVkU3RhdGUpIHsKICAgICAgICAgLy8g
SWYgd2UgY2hhbmdlIHRoZSBkaXNhYmxlZCBzdGF0ZSB3aGlsZSB0aGUgc2hlZXQgaXMgc3RpbGwg
bG9hZGluZywgdGhlbiB3ZSBoYXZlIHRvCiAgICAgICAgIC8vIHBlcmZvcm0gdGhyZWUgY2hlY2tz
OgpAQCAtODAsMTEgKzc2LDExIEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXREaXNhYmxlZFN0
YXRlKGIKICAgICAgICAgICAgIC8vIENoZWNrICMxOiBJZiB0aGUgc2hlZXQgYmVjb21lcyBkaXNh
YmxlZCB3aGlsZSBpdCB3YXMgbG9hZGluZywgYW5kIGlmIGl0IHdhcyBlaXRoZXIKICAgICAgICAg
ICAgIC8vIGEgbWFpbiBzaGVldCBvciBhIHNoZWV0IHRoYXQgd2FzIHByZXZpb3VzbHkgZW5hYmxl
ZCB2aWEgc2NyaXB0LCB0aGVuIHdlIG5lZWQKICAgICAgICAgICAgIC8vIHRvIHJlbW92ZSBpdCBm
cm9tIHRoZSBsaXN0IG9mIHBlbmRpbmcgc2hlZXRzLgotICAgICAgICAgICAgaWYgKG1fZGlzYWJs
ZWRTdGF0ZSA9PSAyICYmICghbV9hbHRlcm5hdGUgfHwgb2xkRGlzYWJsZWRTdGF0ZSA9PSAxKSkK
KyAgICAgICAgICAgIGlmIChtX2Rpc2FibGVkU3RhdGUgPT0gRGlzYWJsZWQgJiYgKCFtX3JlbEF0
dHJpYnV0ZS5tX2lzQWx0ZXJuYXRlIHx8IG9sZERpc2FibGVkU3RhdGUgPT0gMSkpCiAgICAgICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlUGVuZGluZ1NoZWV0KCk7CiAKICAgICAgICAgICAg
IC8vIENoZWNrICMyOiBBbiBhbHRlcm5hdGUgc2hlZXQgYmVjb21lcyBlbmFibGVkIHdoaWxlIGl0
IGlzIHN0aWxsIGxvYWRpbmcuCi0gICAgICAgICAgICBpZiAobV9hbHRlcm5hdGUgJiYgbV9kaXNh
YmxlZFN0YXRlID09IDEpCisgICAgICAgICAgICBpZiAobV9yZWxBdHRyaWJ1dGUubV9pc0FsdGVy
bmF0ZSAmJiBtX2Rpc2FibGVkU3RhdGUgPT0gRW5hYmxlZFZpYVNjcmlwdCkKICAgICAgICAgICAg
ICAgICBkb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsKIAogICAgICAgICAgICAgLy8gQ2hl
Y2sgIzM6IEEgbWFpbiBzaGVldCBiZWNvbWVzIGVuYWJsZWQgd2hpbGUgaXQgd2FzIHN0aWxsIGxv
YWRpbmcgYW5kCkBAIC05Miw3ICs4OCw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXREaXNh
YmxlZFN0YXRlKGIKICAgICAgICAgICAgIC8vIGhhcHBlbiAoYSBkb3VibGUgdG9nZ2xlIGZvciBu
byByZWFzb24gZXNzZW50aWFsbHkpLiAgVGhpcyBoYXBwZW5zIG9uCiAgICAgICAgICAgICAvLyB2
aXJ0dWFscGxhc3RpYy5uZXQsIHdoaWNoIG1hbmFnZXMgdG8gZG8gYWJvdXQgMTIgZW5hYmxlL2Rp
c2FibGVzIG9uIG9ubHkgMwogICAgICAgICAgICAgLy8gc2hlZXRzLiA6KQotICAgICAgICAgICAg
aWYgKCFtX2FsdGVybmF0ZSAmJiBtX2Rpc2FibGVkU3RhdGUgPT0gMSAmJiBvbGREaXNhYmxlZFN0
YXRlID09IDIpCisgICAgICAgICAgICBpZiAoIW1fcmVsQXR0cmlidXRlLm1faXNBbHRlcm5hdGUg
JiYgbV9kaXNhYmxlZFN0YXRlID09IEVuYWJsZWRWaWFTY3JpcHQgJiYgb2xkRGlzYWJsZWRTdGF0
ZSA9PSAyKQogICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmFkZFBlbmRpbmdTaGVldCgpOwog
CiAgICAgICAgICAgICAvLyBJZiB0aGUgc2hlZXQgaXMgYWxyZWFkeSBsb2FkaW5nIGp1c3QgYmFp
bC4KQEAgLTEwMCw3ICs5Niw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXREaXNhYmxlZFN0
YXRlKGIKICAgICAgICAgfQogCiAgICAgICAgIC8vIExvYWQgdGhlIHNoZWV0LCBzaW5jZSBpdCdz
IG5ldmVyIGJlZW4gbG9hZGVkIGJlZm9yZS4KLSAgICAgICAgaWYgKCFtX3NoZWV0ICYmIG1fZGlz
YWJsZWRTdGF0ZSA9PSAxKQorICAgICAgICBpZiAoIW1fc2hlZXQgJiYgbV9kaXNhYmxlZFN0YXRl
ID09IEVuYWJsZWRWaWFTY3JpcHQpCiAgICAgICAgICAgICBwcm9jZXNzKCk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsgLy8gVXBk
YXRlIHRoZSBzdHlsZSBzZWxlY3Rvci4KQEAgLTExNSw3ICsxMTEsNyBAQCBTdHlsZVNoZWV0KiBI
VE1MTGlua0VsZW1lbnQ6OnNoZWV0KCkgY29uCiB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gcmVsQXR0cikgewotICAgICAgICB0b2tlbml6ZVJlbEF0dHJpYnV0ZShhdHRyLT52
YWx1ZSgpLCBtX2lzU3R5bGVTaGVldCwgbV9hbHRlcm5hdGUsIG1faXNJY29uLCBtX2lzRE5TUHJl
ZmV0Y2gpOworICAgICAgICB0b2tlbml6ZVJlbEF0dHJpYnV0ZShhdHRyLT52YWx1ZSgpLCBtX3Jl
bEF0dHJpYnV0ZSk7CiAgICAgICAgIHByb2Nlc3MoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBocmVmQXR0cikgewogICAgICAgICBtX3VybCA9IGRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKGRlcHJlY2F0ZWRQYXJzZVVSTChhdHRyLT52YWx1ZSgpKSk7CkBAIC0xMjYsOSArMTIyLDkg
QEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IG1lZGlhQXR0cikgewogICAgICAgICBtX21lZGlhID0gYXR0ci0+
dmFsdWUoKS5zdHJpbmcoKS5sb3dlcigpOwogICAgICAgICBwcm9jZXNzKCk7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gZGlzYWJsZWRBdHRyKSB7CisgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gZGlzYWJsZWRBdHRyKQogICAgICAgICBzZXREaXNhYmxlZFN0YXRlKCFhdHRy
LT5pc051bGwoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25iZWZvcmVsb2Fk
QXR0cikKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25iZWZvcmVsb2FkQXR0cikKICAg
ICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYmVmb3JlbG9hZEV2
ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICBlbHNl
IHsKICAgICAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0aXRsZUF0dHIgJiYgbV9zaGVldCkKQEAg
LTEzNywyMSArMTMzLDIxIEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnUKICAgICB9CiB9CiAKLXZvaWQgSFRNTExpbmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJpYnV0
ZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbCwgYm9vbCYgc3R5bGVTaGVldCwgYm9vbCYgYWx0ZXJu
YXRlLCBib29sJiBpY29uLCBib29sJiBkbnNQcmVmZXRjaCkKK3ZvaWQgSFRNTExpbmtFbGVtZW50
Ojp0b2tlbml6ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbCwgUmVsQXR0cmli
dXRlJiByZWxBdHRyaWJ1dGUpCiB7Ci0gICAgc3R5bGVTaGVldCA9IGZhbHNlOwotICAgIGljb24g
PSBmYWxzZTsgCi0gICAgYWx0ZXJuYXRlID0gZmFsc2U7Ci0gICAgZG5zUHJlZmV0Y2ggPSBmYWxz
ZTsKKyAgICByZWxBdHRyaWJ1dGUubV9pc1N0eWxlU2hlZXQgPSBmYWxzZTsKKyAgICByZWxBdHRy
aWJ1dGUubV9pc0ljb24gPSBmYWxzZTsKKyAgICByZWxBdHRyaWJ1dGUubV9pc0FsdGVybmF0ZSA9
IGZhbHNlOworICAgIHJlbEF0dHJpYnV0ZS5tX2lzRE5TUHJlZmV0Y2ggPSBmYWxzZTsKICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UocmVsLCAic3R5bGVzaGVldCIpKQotICAgICAgICBzdHlsZVNo
ZWV0ID0gdHJ1ZTsKKyAgICAgICAgcmVsQXR0cmlidXRlLm1faXNTdHlsZVNoZWV0ID0gdHJ1ZTsK
ICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShyZWwsICJpY29uIikgfHwgZXF1YWxJZ25v
cmluZ0Nhc2UocmVsLCAic2hvcnRjdXQgaWNvbiIpKQotICAgICAgICBpY29uID0gdHJ1ZTsKKyAg
ICAgICAgcmVsQXR0cmlidXRlLm1faXNJY29uID0gdHJ1ZTsKICAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShyZWwsICJkbnMtcHJlZmV0Y2giKSkKLSAgICAgICAgZG5zUHJlZmV0Y2ggPSB0
cnVlOworICAgICAgICByZWxBdHRyaWJ1dGUubV9pc0ROU1ByZWZldGNoID0gdHJ1ZTsKICAgICBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShyZWwsICJhbHRlcm5hdGUgc3R5bGVzaGVldCIpIHx8
IGVxdWFsSWdub3JpbmdDYXNlKHJlbCwgInN0eWxlc2hlZXQgYWx0ZXJuYXRlIikpIHsKLSAgICAg
ICAgc3R5bGVTaGVldCA9IHRydWU7Ci0gICAgICAgIGFsdGVybmF0ZSA9IHRydWU7CisgICAgICAg
IHJlbEF0dHJpYnV0ZS5tX2lzU3R5bGVTaGVldCA9IHRydWU7CisgICAgICAgIHJlbEF0dHJpYnV0
ZS5tX2lzQWx0ZXJuYXRlID0gdHJ1ZTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUb2tlbml6
ZSB0aGUgcmVsIGF0dHJpYnV0ZSBhbmQgc2V0IGJpdHMgYmFzZWQgb24gc3BlY2lmaWMga2V5d29y
ZHMgdGhhdCB3ZSBmaW5kLgogICAgICAgICBTdHJpbmcgcmVsU3RyaW5nID0gcmVsLnN0cmluZygp
OwpAQCAtMTYxLDExICsxNTcsMTEgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVs
QXR0cmlidQogICAgICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGlz
dC5lbmQoKTsKICAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBsaXN0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKCppdCwgInN0eWxlc2hlZXQiKSkKLSAgICAgICAgICAgICAgICBzdHlsZVNo
ZWV0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZWxBdHRyaWJ1dGUubV9pc1N0eWxlU2hlZXQg
PSB0cnVlOwogICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoKml0LCAiYWx0
ZXJuYXRlIikpCi0gICAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICByZWxBdHRyaWJ1dGUubV9pc0FsdGVybmF0ZSA9IHRydWU7CiAgICAgICAgICAgICBlbHNl
IGlmIChlcXVhbElnbm9yaW5nQ2FzZSgqaXQsICJpY29uIikpCi0gICAgICAgICAgICAgICAgaWNv
biA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVsQXR0cmlidXRlLm1faXNJY29uID0gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE3OSwxNyArMTc1LDE3IEBAIHZvaWQgSFRNTExpbmtF
bGVtZW50Ojpwcm9jZXNzKCkKIAogICAgIC8vIElFIGV4dGVuc2lvbjogbG9jYXRpb24gb2Ygc21h
bGwgaWNvbiBmb3IgbG9jYXRpb25iYXIgLyBib29rbWFya3MKICAgICAvLyBXZSdsbCByZWNvcmQg
dGhpcyBVUkwgcGVyIGRvY3VtZW50LCBldmVuIGlmIHdlIGxhdGVyIG9ubHkgdXNlIGl0IGluIHRv
cCBsZXZlbCBmcmFtZXMKLSAgICBpZiAobV9pc0ljb24gJiYgbV91cmwuaXNWYWxpZCgpICYmICFt
X3VybC5pc0VtcHR5KCkpCisgICAgaWYgKG1fcmVsQXR0cmlidXRlLm1faXNJY29uICYmIG1fdXJs
LmlzVmFsaWQoKSAmJiAhbV91cmwuaXNFbXB0eSgpKQogICAgICAgICBkb2N1bWVudCgpLT5zZXRJ
Y29uVVJMKG1fdXJsLnN0cmluZygpLCB0eXBlKTsKIAotICAgIGlmIChtX2lzRE5TUHJlZmV0Y2gg
JiYgbV91cmwuaXNWYWxpZCgpICYmICFtX3VybC5pc0VtcHR5KCkpCisgICAgaWYgKG1fcmVsQXR0
cmlidXRlLm1faXNETlNQcmVmZXRjaCAmJiBtX3VybC5pc1ZhbGlkKCkgJiYgIW1fdXJsLmlzRW1w
dHkoKSkKICAgICAgICAgUmVzb3VyY2VIYW5kbGU6OnByZXBhcmVGb3JVUkwobV91cmwpOwogCiAg
ICAgYm9vbCBhY2NlcHRJZlR5cGVDb250YWluc1RleHRDU1MgPSBkb2N1bWVudCgpLT5wYWdlKCkg
JiYgZG9jdW1lbnQoKS0+cGFnZSgpLT5zZXR0aW5ncygpICYmIGRvY3VtZW50KCktPnBhZ2UoKS0+
c2V0dGluZ3MoKS0+dHJlYXRzQW55VGV4dENTU0xpbmtBc1N0eWxlc2hlZXQoKTsKIAogICAgIC8v
IFN0eWxlc2hlZXQKICAgICAvLyBUaGlzIHdhcyBidWdneSBhbmQgd291bGQgaW5jb3JyZWN0bHkg
bWF0Y2ggPGxpbmsgcmVsPSJhbHRlcm5hdGUiPiwgd2hpY2ggaGFzIGEgZGlmZmVyZW50IHNwZWNp
ZmllZCBtZWFuaW5nLiAtZHdoCi0gICAgaWYgKG1fZGlzYWJsZWRTdGF0ZSAhPSAyICYmIChtX2lz
U3R5bGVTaGVldCB8fCAoYWNjZXB0SWZUeXBlQ29udGFpbnNUZXh0Q1NTICYmIHR5cGUuY29udGFp
bnMoInRleHQvY3NzIikpKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpICYmIG1fdXJsLmlzVmFsaWQo
KSkgeworICAgIGlmIChtX2Rpc2FibGVkU3RhdGUgIT0gRGlzYWJsZWQgJiYgKG1fcmVsQXR0cmli
dXRlLm1faXNTdHlsZVNoZWV0IHx8IChhY2NlcHRJZlR5cGVDb250YWluc1RleHRDU1MgJiYgdHlw
ZS5jb250YWlucygidGV4dC9jc3MiKSkpICYmIGRvY3VtZW50KCktPmZyYW1lKCkgJiYgbV91cmwu
aXNWYWxpZCgpKSB7CiAgICAgICAgIC8vIGFsc28sIGRvbid0IGxvYWQgc3R5bGUgc2hlZXRzIGZv
ciBzdGFuZGFsb25lIGRvY3VtZW50cwogICAgICAgICAKICAgICAgICAgU3RyaW5nIGNoYXJzZXQg
PSBnZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpOwpAQCAtNDMyLDEwICs0MjgsMTAgQEAgdm9pZCBI
VE1MTGlua0VsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cgogICAgIEhUTUxFbGVtZW50OjphZGRT
dWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiAKICAgICAvLyBGYXZpY29ucyBhcmUgaGFu
ZGxlZCBieSBhIHNwZWNpYWwgY2FzZSBpbiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoKQotICAg
IGlmIChtX2lzSWNvbikKKyAgICBpZiAobV9yZWxBdHRyaWJ1dGUubV9pc0ljb24pCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghbV9pc1N0eWxlU2hlZXQpCisgICAgaWYgKCFtX3JlbEF0dHJp
YnV0ZS5tX2lzU3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIEFwcGVu
ZCB0aGUgVVJMIG9mIHRoaXMgbGluayBlbGVtZW50LgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxM
aW5rRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQu
aAkocmV2aXNpb24gNTkyMjEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDE1IEBAIGNsYXNzIEtVUkw7CiAKIGNsYXNzIEhUTUxM
aW5rRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIENhY2hlZFJlc291cmNlQ2xp
ZW50IHsKIHB1YmxpYzoKKyAgICBzdHJ1Y3QgUmVsQXR0cmlidXRlIHsKKyAgICAgICAgYm9vbCBt
X2lzU3R5bGVTaGVldDsKKyAgICAgICAgYm9vbCBtX2lzSWNvbjsKKyAgICAgICAgYm9vbCBtX2lz
QWx0ZXJuYXRlOworICAgICAgICBib29sIG1faXNETlNQcmVmZXRjaDsKKworICAgICAgICBSZWxB
dHRyaWJ1dGUoKSA6IG1faXNTdHlsZVNoZWV0KGZhbHNlKSwgbV9pc0ljb24oZmFsc2UpLCBtX2lz
QWx0ZXJuYXRlKGZhbHNlKSwgbV9pc0ROU1ByZWZldGNoKGZhbHNlKSB7IH0KKyAgICB9OworCiAg
ICAgSFRNTExpbmtFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wg
Y3JlYXRlZEJ5UGFyc2VyKTsKICAgICB+SFRNTExpbmtFbGVtZW50KCk7CiAKQEAgLTgzLDM0ICs5
MiwzNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgc2hlZXRMb2FkZWQoKTsKIAotICAgIGJvb2wgaXNBbHRlcm5hdGUoKSBjb25zdCB7IHJl
dHVybiBtX2Rpc2FibGVkU3RhdGUgPT0gMCAmJiBtX2FsdGVybmF0ZTsgfQotICAgIGJvb2wgaXNE
aXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWRTdGF0ZSA9PSAyOyB9Ci0gICAgYm9v
bCBpc0VuYWJsZWRWaWFTY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkU3RhdGUgPT0g
MTsgfQotICAgIGJvb2wgaXNJY29uKCkgY29uc3QgeyByZXR1cm4gbV9pc0ljb247IH0KKyAgICBi
b29sIGlzQWx0ZXJuYXRlKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlID09IFVuc2V0
ICYmIG1fcmVsQXR0cmlidXRlLm1faXNBbHRlcm5hdGU7IH0KKyAgICBib29sIGlzRGlzYWJsZWQo
KSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVkU3RhdGUgPT0gRGlzYWJsZWQ7IH0KKyAgICBib29s
IGlzRW5hYmxlZFZpYVNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZWRTdGF0ZSA9PSBF
bmFibGVkVmlhU2NyaXB0OyB9CisgICAgYm9vbCBpc0ljb24oKSBjb25zdCB7IHJldHVybiBtX3Jl
bEF0dHJpYnV0ZS5tX2lzSWNvbjsgfQogICAgIAotICAgIGludCBkaXNhYmxlZFN0YXRlKCkgeyBy
ZXR1cm4gbV9kaXNhYmxlZFN0YXRlOyB9CiAgICAgdm9pZCBzZXREaXNhYmxlZFN0YXRlKGJvb2wg
X2Rpc2FibGVkKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KSBjb25zdDsKICAgICAKLSAgICBzdGF0aWMgdm9pZCB0b2tlbml6ZVJlbEF0dHJpYnV0ZShjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlLCBib29sJiBzdHlsZXNoZWV0LCBib29sJiBhbHRlcm5hdGUs
IGJvb2wmIGljb24sIGJvb2wmIGRuc1ByZWZldGNoKTsKKyAgICBzdGF0aWMgdm9pZCB0b2tlbml6
ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBSZWxBdHRyaWJ1dGUmKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hT
ZXQ8S1VSTD4mKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRy
ZW4oKTsKIAogcHJvdGVjdGVkOgorICAgIGVudW0gRGlzYWJsZWRTdGF0ZSB7CisgICAgICAgIFVu
c2V0LAorICAgICAgICBFbmFibGVkVmlhU2NyaXB0LAorICAgICAgICBEaXNhYmxlZAorICAgIH07
CisKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRDU1NTdHlsZVNoZWV0PiBtX2NhY2hl
ZFNoZWV0OwogICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3NoZWV0OwogICAgIEtVUkwgbV91
cmw7CiAgICAgU3RyaW5nIG1fdHlwZTsKICAgICBTdHJpbmcgbV9tZWRpYTsKLSAgICBpbnQgbV9k
aXNhYmxlZFN0YXRlOyAvLyAwPXVuc2V0KGRlZmF1bHQpLCAxPWVuYWJsZWQgdmlhIHNjcmlwdCwg
Mj1kaXNhYmxlZAorICAgIERpc2FibGVkU3RhdGUgbV9kaXNhYmxlZFN0YXRlOworICAgIFJlbEF0
dHJpYnV0ZSBtX3JlbEF0dHJpYnV0ZTsKICAgICBib29sIG1fbG9hZGluZzsKLSAgICBib29sIG1f
YWx0ZXJuYXRlOwotICAgIGJvb2wgbV9pc1N0eWxlU2hlZXQ7Ci0gICAgYm9vbCBtX2lzSWNvbjsK
LSAgICBib29sIG1faXNETlNQcmVmZXRjaDsKICAgICBib29sIG1fY3JlYXRlZEJ5UGFyc2VyOwog
fTsKIApJbmRleDogV2ViQ29yZS9odG1sL1ByZWxvYWRTY2FubmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvUHJlbG9hZFNjYW5uZXIuY3BwCShyZXZpc2lvbiA1OTIyMSkKKysrIFdl
YkNvcmUvaHRtbC9QcmVsb2FkU2Nhbm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwMywxMiAr
NzAzLDkgQEAgdm9pZCBQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc0F0dHJpYnV0ZSgpCiAgICAgICAg
IGlmIChhdHRyaWJ1dGUgPT0gaHJlZkF0dHIgJiYgbV91cmxUb0xvYWQuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgbV91cmxUb0xvYWQgPSBkZXByZWNhdGVkUGFyc2VVUkwodmFsdWUpOwogICAgICAg
ICBlbHNlIGlmIChhdHRyaWJ1dGUgPT0gcmVsQXR0cikgewotICAgICAgICAgICAgYm9vbCBzdHls
ZVNoZWV0ID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGFsdGVybmF0ZSA9IGZhbHNlOwotICAg
ICAgICAgICAgYm9vbCBpY29uID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGRuc1ByZWZldGNo
ID0gZmFsc2U7Ci0gICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmli
dXRlKHZhbHVlLCBzdHlsZVNoZWV0LCBhbHRlcm5hdGUsIGljb24sIGRuc1ByZWZldGNoKTsKLSAg
ICAgICAgICAgIG1fbGlua0lzU3R5bGVTaGVldCA9IHN0eWxlU2hlZXQgJiYgIWFsdGVybmF0ZSAm
JiAhaWNvbiAmJiAhZG5zUHJlZmV0Y2g7CisgICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQ6OlJl
bEF0dHJpYnV0ZSByZWw7CisgICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVs
QXR0cmlidXRlKHZhbHVlLCByZWwpOworICAgICAgICAgICAgbV9saW5rSXNTdHlsZVNoZWV0ID0g
cmVsLm1faXNTdHlsZVNoZWV0ICYmICFyZWwubV9pc0FsdGVybmF0ZSAmJiAhcmVsLm1faXNJY29u
ICYmICFyZWwubV9pc0ROU1ByZWZldGNoOwogICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZSA9
PSBjaGFyc2V0QXR0cikKICAgICAgICAgICAgIG1fY2hhcnNldCA9IHZhbHVlOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55855</attachid>
            <date>2010-05-12 09:20:22 -0700</date>
            <delta_ts>2010-05-14 18:58:05 -0700</delta_ts>
            <desc>Don&apos;t cast m_disabledState to int</desc>
            <filename>refactor3.patch</filename>
            <type>text/plain</type>
            <size>12901</size>
            <attacher name="Leon Clarke">leonclarke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTIzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDUtMTIgIExlb24gQ2xhcmtlICA8bGVvbmNsYXJrZUBnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZmFjdG9yIHNpZ25hdHVyZSBvZiB0b2tlbml6ZVJlbEF0dHJpYnV0ZSBhbmQgdGhlIHZhcmlh
YmxlcyBpdCByZWZlcnMgdG8gc28gdGhhdCBuZXcgZmVhdHVyZXMgZG9uJ3Qga2VlcCBjaGFuZ2lu
ZyB0aGUgc2lnbmF0dXJlLCBhbmQgbWFrZSBtX2Rpc2FibGVkU3RhdGUgaW50byBhbiBlbnVtLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg5MDAKKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIFJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBodG1s
L0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6
OkhUTUxMaW5rRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnNl
dERpc2FibGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnRv
a2VuaXplUmVsQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6
cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OmFkZFN1YnJlc291
cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6UmVsQXR0cmlidXRlOjpSZWxBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojppc0FsdGVybmF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OmlzRGlzYWJsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojppc0VuYWJsZWRWaWFTY3JpcHQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojppc0ljb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TExpbmtFbGVtZW50OjopOgorICAgICAgICAqIGh0bWwvUHJlbG9hZFNjYW5uZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NBdHRyaWJ1dGUpOgorCiAyMDEw
LTA1LTEwICBSb2RyaWdvIEJlbGVtICA8cm9kcmlnby5iZWxlbUBvcGVuYm9zc2Eub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggQ2hyaXN0aWFuc2VuICwgU2ltb24gSGF1c21hbm4g
YW5kIEd1c3Rhdm8gTm9yb25oYS4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShyZXZp
c2lvbiA1OTIyMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSwxMiArNDksOCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogSFRN
TExpbmtFbGVtZW50OjpIVE1MTGlua0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUs
IERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQogICAgIDogSFRNTEVsZW1lbnQo
cU5hbWUsIGRvYykKICAgICAsIG1fY2FjaGVkU2hlZXQoMCkKLSAgICAsIG1fZGlzYWJsZWRTdGF0
ZSgwKQorICAgICwgbV9kaXNhYmxlZFN0YXRlKFVuc2V0KQogICAgICwgbV9sb2FkaW5nKGZhbHNl
KQotICAgICwgbV9hbHRlcm5hdGUoZmFsc2UpCi0gICAgLCBtX2lzU3R5bGVTaGVldChmYWxzZSkK
LSAgICAsIG1faXNJY29uKGZhbHNlKQotICAgICwgbV9pc0ROU1ByZWZldGNoKGZhbHNlKQogICAg
ICwgbV9jcmVhdGVkQnlQYXJzZXIoY3JlYXRlZEJ5UGFyc2VyKQogewogICAgIEFTU0VSVChoYXNU
YWdOYW1lKGxpbmtUYWcpKTsKQEAgLTcxLDggKzY3LDggQEAgSFRNTExpbmtFbGVtZW50Ojp+SFRN
TExpbmtFbGVtZW50KCkKIAogdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldERpc2FibGVkU3RhdGUo
Ym9vbCBfZGlzYWJsZWQpCiB7Ci0gICAgaW50IG9sZERpc2FibGVkU3RhdGUgPSBtX2Rpc2FibGVk
U3RhdGU7Ci0gICAgbV9kaXNhYmxlZFN0YXRlID0gX2Rpc2FibGVkID8gMiA6IDE7CisgICAgRGlz
YWJsZWRTdGF0ZSBvbGREaXNhYmxlZFN0YXRlID0gbV9kaXNhYmxlZFN0YXRlOworICAgIG1fZGlz
YWJsZWRTdGF0ZSA9IF9kaXNhYmxlZCA/IERpc2FibGVkIDogRW5hYmxlZFZpYVNjcmlwdDsKICAg
ICBpZiAob2xkRGlzYWJsZWRTdGF0ZSAhPSBtX2Rpc2FibGVkU3RhdGUpIHsKICAgICAgICAgLy8g
SWYgd2UgY2hhbmdlIHRoZSBkaXNhYmxlZCBzdGF0ZSB3aGlsZSB0aGUgc2hlZXQgaXMgc3RpbGwg
bG9hZGluZywgdGhlbiB3ZSBoYXZlIHRvCiAgICAgICAgIC8vIHBlcmZvcm0gdGhyZWUgY2hlY2tz
OgpAQCAtODAsMTEgKzc2LDExIEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXREaXNhYmxlZFN0
YXRlKGIKICAgICAgICAgICAgIC8vIENoZWNrICMxOiBJZiB0aGUgc2hlZXQgYmVjb21lcyBkaXNh
YmxlZCB3aGlsZSBpdCB3YXMgbG9hZGluZywgYW5kIGlmIGl0IHdhcyBlaXRoZXIKICAgICAgICAg
ICAgIC8vIGEgbWFpbiBzaGVldCBvciBhIHNoZWV0IHRoYXQgd2FzIHByZXZpb3VzbHkgZW5hYmxl
ZCB2aWEgc2NyaXB0LCB0aGVuIHdlIG5lZWQKICAgICAgICAgICAgIC8vIHRvIHJlbW92ZSBpdCBm
cm9tIHRoZSBsaXN0IG9mIHBlbmRpbmcgc2hlZXRzLgotICAgICAgICAgICAgaWYgKG1fZGlzYWJs
ZWRTdGF0ZSA9PSAyICYmICghbV9hbHRlcm5hdGUgfHwgb2xkRGlzYWJsZWRTdGF0ZSA9PSAxKSkK
KyAgICAgICAgICAgIGlmIChtX2Rpc2FibGVkU3RhdGUgPT0gRGlzYWJsZWQgJiYgKCFtX3JlbEF0
dHJpYnV0ZS5tX2lzQWx0ZXJuYXRlIHx8IG9sZERpc2FibGVkU3RhdGUgPT0gRW5hYmxlZFZpYVNj
cmlwdCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlUGVuZGluZ1NoZWV0KCk7
CiAKICAgICAgICAgICAgIC8vIENoZWNrICMyOiBBbiBhbHRlcm5hdGUgc2hlZXQgYmVjb21lcyBl
bmFibGVkIHdoaWxlIGl0IGlzIHN0aWxsIGxvYWRpbmcuCi0gICAgICAgICAgICBpZiAobV9hbHRl
cm5hdGUgJiYgbV9kaXNhYmxlZFN0YXRlID09IDEpCisgICAgICAgICAgICBpZiAobV9yZWxBdHRy
aWJ1dGUubV9pc0FsdGVybmF0ZSAmJiBtX2Rpc2FibGVkU3RhdGUgPT0gRW5hYmxlZFZpYVNjcmlw
dCkKICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsKIAogICAg
ICAgICAgICAgLy8gQ2hlY2sgIzM6IEEgbWFpbiBzaGVldCBiZWNvbWVzIGVuYWJsZWQgd2hpbGUg
aXQgd2FzIHN0aWxsIGxvYWRpbmcgYW5kCkBAIC05Miw3ICs4OCw3IEBAIHZvaWQgSFRNTExpbmtF
bGVtZW50OjpzZXREaXNhYmxlZFN0YXRlKGIKICAgICAgICAgICAgIC8vIGhhcHBlbiAoYSBkb3Vi
bGUgdG9nZ2xlIGZvciBubyByZWFzb24gZXNzZW50aWFsbHkpLiAgVGhpcyBoYXBwZW5zIG9uCiAg
ICAgICAgICAgICAvLyB2aXJ0dWFscGxhc3RpYy5uZXQsIHdoaWNoIG1hbmFnZXMgdG8gZG8gYWJv
dXQgMTIgZW5hYmxlL2Rpc2FibGVzIG9uIG9ubHkgMwogICAgICAgICAgICAgLy8gc2hlZXRzLiA6
KQotICAgICAgICAgICAgaWYgKCFtX2FsdGVybmF0ZSAmJiBtX2Rpc2FibGVkU3RhdGUgPT0gMSAm
JiBvbGREaXNhYmxlZFN0YXRlID09IDIpCisgICAgICAgICAgICBpZiAoIW1fcmVsQXR0cmlidXRl
Lm1faXNBbHRlcm5hdGUgJiYgbV9kaXNhYmxlZFN0YXRlID09IEVuYWJsZWRWaWFTY3JpcHQgJiYg
b2xkRGlzYWJsZWRTdGF0ZSA9PSBEaXNhYmxlZCkKICAgICAgICAgICAgICAgICBkb2N1bWVudCgp
LT5hZGRQZW5kaW5nU2hlZXQoKTsKIAogICAgICAgICAgICAgLy8gSWYgdGhlIHNoZWV0IGlzIGFs
cmVhZHkgbG9hZGluZyBqdXN0IGJhaWwuCkBAIC0xMDAsNyArOTYsNyBAQCB2b2lkIEhUTUxMaW5r
RWxlbWVudDo6c2V0RGlzYWJsZWRTdGF0ZShiCiAgICAgICAgIH0KIAogICAgICAgICAvLyBMb2Fk
IHRoZSBzaGVldCwgc2luY2UgaXQncyBuZXZlciBiZWVuIGxvYWRlZCBiZWZvcmUuCi0gICAgICAg
IGlmICghbV9zaGVldCAmJiBtX2Rpc2FibGVkU3RhdGUgPT0gMSkKKyAgICAgICAgaWYgKCFtX3No
ZWV0ICYmIG1fZGlzYWJsZWRTdGF0ZSA9PSBFbmFibGVkVmlhU2NyaXB0KQogICAgICAgICAgICAg
cHJvY2VzcygpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVT
dHlsZVNlbGVjdG9yKCk7IC8vIFVwZGF0ZSB0aGUgc3R5bGUgc2VsZWN0b3IuCkBAIC0xMTUsNyAr
MTExLDcgQEAgU3R5bGVTaGVldCogSFRNTExpbmtFbGVtZW50OjpzaGVldCgpIGNvbgogdm9pZCBI
VE1MTGlua0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0
cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IHJlbEF0dHIpIHsKLSAgICAgICAgdG9rZW5p
emVSZWxBdHRyaWJ1dGUoYXR0ci0+dmFsdWUoKSwgbV9pc1N0eWxlU2hlZXQsIG1fYWx0ZXJuYXRl
LCBtX2lzSWNvbiwgbV9pc0ROU1ByZWZldGNoKTsKKyAgICAgICAgdG9rZW5pemVSZWxBdHRyaWJ1
dGUoYXR0ci0+dmFsdWUoKSwgbV9yZWxBdHRyaWJ1dGUpOwogICAgICAgICBwcm9jZXNzKCk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaHJlZkF0dHIpIHsKICAgICAgICAgbV91cmwg
PSBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChkZXByZWNhdGVkUGFyc2VVUkwoYXR0ci0+dmFsdWUo
KSkpOwpAQCAtMTI2LDkgKzEyMiw5IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnUKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtZWRpYUF0dHIpIHsKICAg
ICAgICAgbV9tZWRpYSA9IGF0dHItPnZhbHVlKCkuc3RyaW5nKCkubG93ZXIoKTsKICAgICAgICAg
cHJvY2VzcygpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGRpc2FibGVkQXR0cikg
eworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGRpc2FibGVkQXR0cikKICAgICAgICAg
c2V0RGlzYWJsZWRTdGF0ZSghYXR0ci0+aXNOdWxsKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IG9uYmVmb3JlbG9hZEF0dHIpCisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9uYmVmb3JlbG9hZEF0dHIpCiAgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLmJlZm9yZWxvYWRFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0
aGlzLCBhdHRyKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdGl0
bGVBdHRyICYmIG1fc2hlZXQpCkBAIC0xMzcsMjEgKzEzMywyMSBAQCB2b2lkIEhUTUxMaW5rRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1CiAgICAgfQogfQogCi12b2lkIEhUTUxMaW5rRWxlbWVu
dDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiByZWwsIGJvb2wmIHN0
eWxlU2hlZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9vbCYgaWNvbiwgYm9vbCYgZG5zUHJlZmV0Y2gp
Cit2b2lkIEhUTUxMaW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWlj
U3RyaW5nJiByZWwsIFJlbEF0dHJpYnV0ZSYgcmVsQXR0cmlidXRlKQogewotICAgIHN0eWxlU2hl
ZXQgPSBmYWxzZTsKLSAgICBpY29uID0gZmFsc2U7IAotICAgIGFsdGVybmF0ZSA9IGZhbHNlOwot
ICAgIGRuc1ByZWZldGNoID0gZmFsc2U7CisgICAgcmVsQXR0cmlidXRlLm1faXNTdHlsZVNoZWV0
ID0gZmFsc2U7CisgICAgcmVsQXR0cmlidXRlLm1faXNJY29uID0gZmFsc2U7CisgICAgcmVsQXR0
cmlidXRlLm1faXNBbHRlcm5hdGUgPSBmYWxzZTsKKyAgICByZWxBdHRyaWJ1dGUubV9pc0ROU1By
ZWZldGNoID0gZmFsc2U7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHJlbCwgInN0eWxlc2hl
ZXQiKSkKLSAgICAgICAgc3R5bGVTaGVldCA9IHRydWU7CisgICAgICAgIHJlbEF0dHJpYnV0ZS5t
X2lzU3R5bGVTaGVldCA9IHRydWU7CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocmVs
LCAiaWNvbiIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHJlbCwgInNob3J0Y3V0IGljb24iKSkKLSAg
ICAgICAgaWNvbiA9IHRydWU7CisgICAgICAgIHJlbEF0dHJpYnV0ZS5tX2lzSWNvbiA9IHRydWU7
CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocmVsLCAiZG5zLXByZWZldGNoIikpCi0g
ICAgICAgIGRuc1ByZWZldGNoID0gdHJ1ZTsKKyAgICAgICAgcmVsQXR0cmlidXRlLm1faXNETlNQ
cmVmZXRjaCA9IHRydWU7CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocmVsLCAiYWx0
ZXJuYXRlIHN0eWxlc2hlZXQiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShyZWwsICJzdHlsZXNoZWV0
IGFsdGVybmF0ZSIpKSB7Ci0gICAgICAgIHN0eWxlU2hlZXQgPSB0cnVlOwotICAgICAgICBhbHRl
cm5hdGUgPSB0cnVlOworICAgICAgICByZWxBdHRyaWJ1dGUubV9pc1N0eWxlU2hlZXQgPSB0cnVl
OworICAgICAgICByZWxBdHRyaWJ1dGUubV9pc0FsdGVybmF0ZSA9IHRydWU7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgLy8gVG9rZW5pemUgdGhlIHJlbCBhdHRyaWJ1dGUgYW5kIHNldCBiaXRzIGJh
c2VkIG9uIHNwZWNpZmljIGtleXdvcmRzIHRoYXQgd2UgZmluZC4KICAgICAgICAgU3RyaW5nIHJl
bFN0cmluZyA9IHJlbC5zdHJpbmcoKTsKQEAgLTE2MSwxMSArMTU3LDExIEBAIHZvaWQgSFRNTExp
bmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJpYnUKICAgICAgICAgVmVjdG9yPFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGxpc3QuZW5kKCk7CiAgICAgICAgIGZvciAoVmVjdG9yPFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGlzdC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSgqaXQsICJzdHlsZXNoZWV0IikpCi0g
ICAgICAgICAgICAgICAgc3R5bGVTaGVldCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVsQXR0
cmlidXRlLm1faXNTdHlsZVNoZWV0ID0gdHJ1ZTsKICAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKCppdCwgImFsdGVybmF0ZSIpKQotICAgICAgICAgICAgICAgIGFsdGVybmF0
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVsQXR0cmlidXRlLm1faXNBbHRlcm5hdGUgPSB0
cnVlOwogICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoKml0LCAiaWNvbiIp
KQotICAgICAgICAgICAgICAgIGljb24gPSB0cnVlOworICAgICAgICAgICAgICAgIHJlbEF0dHJp
YnV0ZS5tX2lzSWNvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNzksMTcgKzE3
NSwxNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cHJvY2VzcygpCiAKICAgICAvLyBJRSBleHRl
bnNpb246IGxvY2F0aW9uIG9mIHNtYWxsIGljb24gZm9yIGxvY2F0aW9uYmFyIC8gYm9va21hcmtz
CiAgICAgLy8gV2UnbGwgcmVjb3JkIHRoaXMgVVJMIHBlciBkb2N1bWVudCwgZXZlbiBpZiB3ZSBs
YXRlciBvbmx5IHVzZSBpdCBpbiB0b3AgbGV2ZWwgZnJhbWVzCi0gICAgaWYgKG1faXNJY29uICYm
IG1fdXJsLmlzVmFsaWQoKSAmJiAhbV91cmwuaXNFbXB0eSgpKQorICAgIGlmIChtX3JlbEF0dHJp
YnV0ZS5tX2lzSWNvbiAmJiBtX3VybC5pc1ZhbGlkKCkgJiYgIW1fdXJsLmlzRW1wdHkoKSkKICAg
ICAgICAgZG9jdW1lbnQoKS0+c2V0SWNvblVSTChtX3VybC5zdHJpbmcoKSwgdHlwZSk7CiAKLSAg
ICBpZiAobV9pc0ROU1ByZWZldGNoICYmIG1fdXJsLmlzVmFsaWQoKSAmJiAhbV91cmwuaXNFbXB0
eSgpKQorICAgIGlmIChtX3JlbEF0dHJpYnV0ZS5tX2lzRE5TUHJlZmV0Y2ggJiYgbV91cmwuaXNW
YWxpZCgpICYmICFtX3VybC5pc0VtcHR5KCkpCiAgICAgICAgIFJlc291cmNlSGFuZGxlOjpwcmVw
YXJlRm9yVVJMKG1fdXJsKTsKIAogICAgIGJvb2wgYWNjZXB0SWZUeXBlQ29udGFpbnNUZXh0Q1NT
ID0gZG9jdW1lbnQoKS0+cGFnZSgpICYmIGRvY3VtZW50KCktPnBhZ2UoKS0+c2V0dGluZ3MoKSAm
JiBkb2N1bWVudCgpLT5wYWdlKCktPnNldHRpbmdzKCktPnRyZWF0c0FueVRleHRDU1NMaW5rQXNT
dHlsZXNoZWV0KCk7CiAKICAgICAvLyBTdHlsZXNoZWV0CiAgICAgLy8gVGhpcyB3YXMgYnVnZ3kg
YW5kIHdvdWxkIGluY29ycmVjdGx5IG1hdGNoIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIj4sIHdoaWNo
IGhhcyBhIGRpZmZlcmVudCBzcGVjaWZpZWQgbWVhbmluZy4gLWR3aAotICAgIGlmIChtX2Rpc2Fi
bGVkU3RhdGUgIT0gMiAmJiAobV9pc1N0eWxlU2hlZXQgfHwgKGFjY2VwdElmVHlwZUNvbnRhaW5z
VGV4dENTUyAmJiB0eXBlLmNvbnRhaW5zKCJ0ZXh0L2NzcyIpKSkgJiYgZG9jdW1lbnQoKS0+ZnJh
bWUoKSAmJiBtX3VybC5pc1ZhbGlkKCkpIHsKKyAgICBpZiAobV9kaXNhYmxlZFN0YXRlICE9IERp
c2FibGVkICYmIChtX3JlbEF0dHJpYnV0ZS5tX2lzU3R5bGVTaGVldCB8fCAoYWNjZXB0SWZUeXBl
Q29udGFpbnNUZXh0Q1NTICYmIHR5cGUuY29udGFpbnMoInRleHQvY3NzIikpKSAmJiBkb2N1bWVu
dCgpLT5mcmFtZSgpICYmIG1fdXJsLmlzVmFsaWQoKSkgewogICAgICAgICAvLyBhbHNvLCBkb24n
dCBsb2FkIHN0eWxlIHNoZWV0cyBmb3Igc3RhbmRhbG9uZSBkb2N1bWVudHMKICAgICAgICAgCiAg
ICAgICAgIFN0cmluZyBjaGFyc2V0ID0gZ2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKTsKQEAgLTQz
MiwxMCArNDI4LDEwIEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHIK
ICAgICBIVE1MRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKHVybHMpOwogCiAg
ICAgLy8gRmF2aWNvbnMgYXJlIGhhbmRsZWQgYnkgYSBzcGVjaWFsIGNhc2UgaW4gTGVnYWN5V2Vi
QXJjaGl2ZTo6Y3JlYXRlKCkKLSAgICBpZiAobV9pc0ljb24pCisgICAgaWYgKG1fcmVsQXR0cmli
dXRlLm1faXNJY29uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1faXNTdHlsZVNoZWV0
KQorICAgIGlmICghbV9yZWxBdHRyaWJ1dGUubV9pc1N0eWxlU2hlZXQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICAvLyBBcHBlbmQgdGhlIFVSTCBvZiB0aGlzIGxpbmsgZWxlbWVudC4KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHJldmlzaW9uIDU5MjIxKQorKysgV2ViQ29yZS9odG1s
L0hUTUxMaW5rRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxNSBAQCBjbGFz
cyBLVVJMOwogCiBjbGFzcyBIVE1MTGlua0VsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQsIHB1
YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiBwdWJsaWM6CisgICAgc3RydWN0IFJlbEF0dHJp
YnV0ZSB7CisgICAgICAgIGJvb2wgbV9pc1N0eWxlU2hlZXQ7CisgICAgICAgIGJvb2wgbV9pc0lj
b247CisgICAgICAgIGJvb2wgbV9pc0FsdGVybmF0ZTsKKyAgICAgICAgYm9vbCBtX2lzRE5TUHJl
ZmV0Y2g7CisKKyAgICAgICAgUmVsQXR0cmlidXRlKCkgOiBtX2lzU3R5bGVTaGVldChmYWxzZSks
IG1faXNJY29uKGZhbHNlKSwgbV9pc0FsdGVybmF0ZShmYWxzZSksIG1faXNETlNQcmVmZXRjaChm
YWxzZSkgeyB9CisgICAgfTsKKwogICAgIEhUTUxMaW5rRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAgICAgfkhUTUxMaW5rRWxl
bWVudCgpOwogCkBAIC04MywzNCArOTIsMzYgQEAgcHVibGljOgogICAgIGJvb2wgaXNMb2FkaW5n
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNoZWV0TG9hZGVkKCk7CiAKLSAgICBib29sIGlz
QWx0ZXJuYXRlKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlID09IDAgJiYgbV9hbHRl
cm5hdGU7IH0KLSAgICBib29sIGlzRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVk
U3RhdGUgPT0gMjsgfQotICAgIGJvb2wgaXNFbmFibGVkVmlhU2NyaXB0KCkgY29uc3QgeyByZXR1
cm4gbV9kaXNhYmxlZFN0YXRlID09IDE7IH0KLSAgICBib29sIGlzSWNvbigpIGNvbnN0IHsgcmV0
dXJuIG1faXNJY29uOyB9CisgICAgYm9vbCBpc0FsdGVybmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlzYWJsZWRTdGF0ZSA9PSBVbnNldCAmJiBtX3JlbEF0dHJpYnV0ZS5tX2lzQWx0ZXJuYXRlOyB9
CisgICAgYm9vbCBpc0Rpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZFN0YXRlID09
IERpc2FibGVkOyB9CisgICAgYm9vbCBpc0VuYWJsZWRWaWFTY3JpcHQoKSBjb25zdCB7IHJldHVy
biBtX2Rpc2FibGVkU3RhdGUgPT0gRW5hYmxlZFZpYVNjcmlwdDsgfQorICAgIGJvb2wgaXNJY29u
KCkgY29uc3QgeyByZXR1cm4gbV9yZWxBdHRyaWJ1dGUubV9pc0ljb247IH0KICAgICAKLSAgICBp
bnQgZGlzYWJsZWRTdGF0ZSgpIHsgcmV0dXJuIG1fZGlzYWJsZWRTdGF0ZTsgfQogICAgIHZvaWQg
c2V0RGlzYWJsZWRTdGF0ZShib29sIF9kaXNhYmxlZCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNV
UkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CiAgICAgCi0gICAgc3RhdGljIHZvaWQgdG9r
ZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgYm9vbCYgc3R5bGVz
aGVldCwgYm9vbCYgYWx0ZXJuYXRlLCBib29sJiBpY29uLCBib29sJiBkbnNQcmVmZXRjaCk7Cisg
ICAgc3RhdGljIHZvaWQgdG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSwgUmVsQXR0cmlidXRlJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VB
dHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CiAKIHByb3RlY3RlZDoKKyAgICBlbnVtIERpc2Fi
bGVkU3RhdGUgeworICAgICAgICBVbnNldCwKKyAgICAgICAgRW5hYmxlZFZpYVNjcmlwdCwKKyAg
ICAgICAgRGlzYWJsZWQKKyAgICB9OworCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
Q1NTU3R5bGVTaGVldD4gbV9jYWNoZWRTaGVldDsKICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
bV9zaGVldDsKICAgICBLVVJMIG1fdXJsOwogICAgIFN0cmluZyBtX3R5cGU7CiAgICAgU3RyaW5n
IG1fbWVkaWE7Ci0gICAgaW50IG1fZGlzYWJsZWRTdGF0ZTsgLy8gMD11bnNldChkZWZhdWx0KSwg
MT1lbmFibGVkIHZpYSBzY3JpcHQsIDI9ZGlzYWJsZWQKKyAgICBEaXNhYmxlZFN0YXRlIG1fZGlz
YWJsZWRTdGF0ZTsKKyAgICBSZWxBdHRyaWJ1dGUgbV9yZWxBdHRyaWJ1dGU7CiAgICAgYm9vbCBt
X2xvYWRpbmc7Ci0gICAgYm9vbCBtX2FsdGVybmF0ZTsKLSAgICBib29sIG1faXNTdHlsZVNoZWV0
OwotICAgIGJvb2wgbV9pc0ljb247Ci0gICAgYm9vbCBtX2lzRE5TUHJlZmV0Y2g7CiAgICAgYm9v
bCBtX2NyZWF0ZWRCeVBhcnNlcjsKIH07CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9QcmVsb2FkU2Nh
bm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL1ByZWxvYWRTY2FubmVyLmNwcAko
cmV2aXNpb24gNTkyMjEpCisrKyBXZWJDb3JlL2h0bWwvUHJlbG9hZFNjYW5uZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MDMsMTIgKzcwMyw5IEBAIHZvaWQgUHJlbG9hZFNjYW5uZXI6OnByb2Nl
c3NBdHRyaWJ1dGUoKQogICAgICAgICBpZiAoYXR0cmlidXRlID09IGhyZWZBdHRyICYmIG1fdXJs
VG9Mb2FkLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fdXJsVG9Mb2FkID0gZGVwcmVjYXRlZFBh
cnNlVVJMKHZhbHVlKTsKICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlID09IHJlbEF0dHIpIHsK
LSAgICAgICAgICAgIGJvb2wgc3R5bGVTaGVldCA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBh
bHRlcm5hdGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgaWNvbiA9IGZhbHNlOwotICAgICAg
ICAgICAgYm9vbCBkbnNQcmVmZXRjaCA9IGZhbHNlOwotICAgICAgICAgICAgSFRNTExpbmtFbGVt
ZW50Ojp0b2tlbml6ZVJlbEF0dHJpYnV0ZSh2YWx1ZSwgc3R5bGVTaGVldCwgYWx0ZXJuYXRlLCBp
Y29uLCBkbnNQcmVmZXRjaCk7Ci0gICAgICAgICAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSBzdHls
ZVNoZWV0ICYmICFhbHRlcm5hdGUgJiYgIWljb24gJiYgIWRuc1ByZWZldGNoOworICAgICAgICAg
ICAgSFRNTExpbmtFbGVtZW50OjpSZWxBdHRyaWJ1dGUgcmVsOworICAgICAgICAgICAgSFRNTExp
bmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJpYnV0ZSh2YWx1ZSwgcmVsKTsKKyAgICAgICAgICAg
IG1fbGlua0lzU3R5bGVTaGVldCA9IHJlbC5tX2lzU3R5bGVTaGVldCAmJiAhcmVsLm1faXNBbHRl
cm5hdGUgJiYgIXJlbC5tX2lzSWNvbiAmJiAhcmVsLm1faXNETlNQcmVmZXRjaDsKICAgICAgICAg
fSBlbHNlIGlmIChhdHRyaWJ1dGUgPT0gY2hhcnNldEF0dHIpCiAgICAgICAgICAgICBtX2NoYXJz
ZXQgPSB2YWx1ZTsKICAgICB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>